Я предполагаю, что вы уже установили kubemqctl команду, следующую за этой инструкцией, но вы, вероятно, еще не настроили ее.
После запуска команды kubemqctl help
, он покажет вам все доступные опции, включая:
Usage:
kubemqctl [command]
Available Commands:
cluster Executes KubeMQ cluster management commands
commands Execute KubeMQ 'commands' RPC commands
config Run Kubemqctl configuration wizard command
Сначала вам нужно запустить kubemqctl config
, который запустит мастер настройки , шаг за шагом проведя вас по основам c configuration:
На втором шаге вы должны выбрать (используя клавиши со стрелками) свой Local docker container
:
? Set Default KubeMQ Token (press Enter for default):
? Select KubeMQ install location: [Use arrows to move, type to filter, ? for more help]
Kubernetes cluster
MicroK8s
K3s
Minikube
Other Kubernetes distribution
> Local docker container
Другие опции, которые вы, вероятно, можете оставить по умолчанию.
Я предполагаю, что вы уже проверили, что ваш KubeMQ запущен и работает, и его API доступен с:
curl --location --request GET "http://localhost:8080/health" \
--header "Content-Type: application/json"
Если это так, вы должны иметь возможность взаимодействовать с ним, используя kubemqctl
Инструмент командной строки.
Пожалуйста, дайте мне знать, если это поможет.
Обновление:
kubemqctl config
- это просто wizard
инструмент, который создает ваш .kubemqctl.yaml
файл, на основе которого вы можете запустить kubemqctl commands
против вашего kubemq
экземпляра. Мой .kubemqctl.yaml
выглядит точно так же, как ваш (только с другим токеном).
Как я уже упоминал в своем комментарии, один docker контейнер вообще не считается кластером, С точки зрения kubernetes это просто среда выполнения контейнера, и вполне нормально, что kubemqctl
, аналогично kubectl
, не будет отображать его как cluster
и не сможет выполнять на нем ни один кластер. связанные операции, такие как kubemqctl cluster get
. Вы можете легко проверить это, изменив свое имя .kube / config:
mv .kube/config .kube/config_temporarily_disabled
Если я сейчас запускаю kubemqctl cluster get
, он показывает мне следующий вывод:
Getting KubeMQ Cluster List...
Error: Kubernetes Config File: Stat <path_to_the_kube_config_file>: No Such File Or Directory
, что означает, что kubemqctl
аналогично kubectl
всегда ищет файл kubeconfig
при выполнении любой операции cluster-related
. Эта группа команд kubemqctl
просто предназначена только для этой цели и не предназначена для использования с вашим экземпляром kubemq
, развернутым в виде отдельного контейнера docker в соответствии с этой инструкцией.
Важно: один docker контейнер НЕ кластер
Это не кластер и в обычном смысле этого слова и не считается таковым kubemqctl
Утилита.
Обратите внимание, что вы даже не создали его с помощью:
kubemqctl cluster create -t <YOUR_KUBEMQ_TOKEN>
, который используется для создания cluster
во всех описанных решениях на основе kubernetes в документации : Kubernetes, MicroK8s и K3s , но вы не найдете ее в разделе Docker. По сути, если вы не создали свой экземпляр kubemq
с помощью команды kubemqctl cluster create
, вы также не сможете отобразить его с помощью kubemqctl cluster get
, поскольку это не cluster
.
Однако вы можете все еще успешно выполняются другие команды kubemqctl
и их подкоманды для отдельного экземпляра kubemq
, работающего в одном контейнере docker
. На самом деле вы можете запустить большинство команд, перечисленных ниже (за исключением cluster
):
$ kubemqctl
Usage:
kubemqctl [command]
Available Commands:
cluster Executes KubeMQ cluster management commands
commands Execute KubeMQ 'commands' RPC commands
config Run Kubemqctl configuration wizard command
events Execute KubeMQ 'events' Pub/Sub commands
events_store Execute KubeMQ 'events_store' Pub/Sub commands
help Help about any command
queries Execute KubeMQ 'queries' RPC based commands
queues Execute KubeMQ 'queues' commands
Flags:
-h, --help help for kubemqctl
--version version for kubemqctl
Use "kubemqctl [command] --help" for more information about a command.
Как я уже упоминал, ваш .kubemqctl.yaml
выглядит совершенно нормально. Он правильно настроен для запуска команд на kubemq
, запущенном в docker
. Когда я запускаю docker ps
на моей машине, я вижу правильно развернутый контейнер kubemq
:
c9adac88484f kubemq/kubemq "./kubemq-run" 3 hours ago Up 3 hours 0.0.0.0:8080->8080/tcp, 0.0.0.0:9090->9090/tcp, 0.0.0.0:50000->50000/tcp sleepy_ganguly
Как вы можете видеть в выводе выше (или в выводе, добавленном к вашему вопросу, так как он почти то же самое), он правильно отображает необходимые порты, выставленные container
, на локальный адрес машины. Вы также можете проверить это командой netstat
:
$ sudo netstat -ntlp | egrep "8080|9090|50000"
tcp6 0 0 :::8080 :::* LISTEN 21431/docker-proxy
tcp6 0 0 :::50000 :::* LISTEN 21394/docker-proxy
tcp6 0 0 :::9090 :::* LISTEN 21419/docker-proxy
В принципе достаточно использовать такой экземпляр kubemq
. Давайте запустим несколько примеров команд.
Выполнение просто:
kubemqctl queues
покажет нам страницу help
, которая определяет, как ее следует использовать, и даст несколько полезных примеров. Давайте выберем kubemqctl queues list
как первый:
$ kubemqctl queues list
CHANNELS:
NAME CLIENTS MESSAGES BYTES FIRST_SEQUENCE LAST_SEQUENCE
q1 1 12 2621 1 12
TOTAL CHANNELS: 1
CLIENTS:
CLIENT_ID CHANNEL ACTIVE LAST_SENT PENDING STALLED
##################################### q1 false 2 1 true
TOTAL CLIENTS: 1
Давайте выберем еще один:
kubemqctl queues send
Опять же, при запуске без обязательных флагов и параметров, он показывает нам несколько полезных примеров использования:
Error: Missing Arguments, Must Be 2 Arguments, Channel And A Message
Try:
# Send message to a queue channel channel
kubemqctl queue send q1 some-message
# Send message to a queue channel with metadata
kubemqctl queue send q1 some-message --metadata some-metadata
# Send 5 messages to a queues channel with metadata
kubemqctl queue send q1 some-message --metadata some-metadata -m 5
# Send message to a queue channel with a message expiration of 5 seconds
kubemqctl queue send q1 some-message -e 5
# Send message to a queue channel with a message delay of 5 seconds
kubemqctl queue send q1 some-message -d 5
# Send message to a queue channel with a message policy of max receive 5 times and dead-letter queue 'dead-letter'
kubemqctl queue send q1 some-message -r 5 -q dead-letter
Давайте запустим один из них (слегка измененный):
kubemqctl queue send queue2 some-message --metadata some-metadata
Вы должны увидеть похожий вывод:
[Channel: queue2] [client id: ##############################] -> {id: ############################, metadata: some-metadata, body: some-message - (0), sent at: #### }
Теперь, если вы перечислите наши доступные очереди с помощью команды kubemqctl queues list
, вы увидите среди других (q1 был ранее создан мной) нашу недавно созданную очередь с именем queue2
:
CHANNELS:
NAME CLIENTS MESSAGES BYTES FIRST_SEQUENCE LAST_SEQUENCE
q1 1 12 2621 1 12
queue2 0 1 232 1 1
TOTAL CHANNELS: 2
...
Это было просто пример, чтобы показать вам, что он может быть запущен для экземпляра kubemq
, работающего на одном docker контейнере , но вы можете выполнить тот же способ, что и другие команды kubemqctl
, такие как commands
, events
или queries
. kubemqctl
имеет действительно хороший context help
со множеством примеров использования, так что вы легко найдете то, что вам нужно.
Надеюсь, мне удалось устранить все неясности.