Кросс-пост от k8s обсудить .
Информация о кластере:
Версия Kubernetes: v1.17.1 Используемое облако: голое железо Метод установки: kubeadm Host OS : Ubuntu 18.04 LTS Server CNI и версия: weave / flannel / kube-router / calico (последние выпуски каждого) CRI и версия: docker / containerd (19.03.5 / 1.2.10)
Проблема:
Я пытаюсь запустить установку ROS 2 в Kubernetes, в идеале, используя несколько контейнеров в одном модуле. Под капотом ROS 2 полагается на DDS для связи, которая основана на многоадресной передаче UDP.
Когда я поднимаю простое развертывание модуля с двумя контейнерами в конфигурации производитель-потребитель, потребитель редко (если вообще когда-либо) получает сообщение от производителя. Когда я поднимаю два модуля, каждый с одним контейнером одинаковой конфигурации «производитель-потребитель», потребитель всегда получает сообщения.
Сюрпризы
Время от времени потребитель запускается и получать сообщения, как и ожидалось.
Кроме того, если войти в систему потребителю с помощью kubectl exec -it ros2-1 -c consumer /bin/bash
, а затем выполнить /ros_entrypoint.sh ros2 run demo_nodes_cpp listener
, сообщения иногда принимаются от производителя в сценарии с одним модулем.
Ожидается Поведение
Успешные сообщения появляются в журналах потребительского контейнера как:
[INFO] [1579805884.017171859] [listener]: I heard: [Hello World: 1]
[INFO] [1579805885.017168023] [listener]: I heard: [Hello World: 2]
[INFO] [1579805886.017025092] [listener]: I heard: [Hello World: 3]
Фактическое поведение
Никаких таких сообщений журнала не наблюдается от потребителя.
Действия по воспроизведению:
Ошибка в одном модуле
- Создайте кластер kubernetes
Примените следующее определение модуля: ros2-1.yaml
apiVersion: v1
kind: Pod
metadata:
name: ros2-1
spec:
containers:
- name: producer
image: osrf/ros2:nightly
args: ["ros2", "run", "demo_nodes_cpp", "talker"]
- name: consumer
image: osrf/ros2:nightly
args: ["ros2", "run", "demo_nodes_cpp", "listener"]
restartPolicy: Never
- Следите за сообщениями от потребителей с
kubectl logs --follow ros2-1 consumer
.
Успех в разных пакетах
- Создайте кластер kubernetes
- * 105 5 * Примените следующее определение модуля: ros2-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: ros2-2-producer
spec:
containers:
- name: producer
image: osrf/ros2:nightly
args: ["ros2", "run", "demo_nodes_cpp", "talker"]
restartPolicy: Never
---
apiVersion: v1
kind: Pod
metadata:
name: ros2-2-consumer
spec:
containers:
- name: consumer
image: osrf/ros2:nightly
args: ["ros2", "run", "demo_nodes_cpp", "listener"]
restartPolicy: Never
- Следите за сообщениями от потребителей с
kubectl logs --follow ros2-2-consumer
.
Вопросы:
- Что приводит к сбою развертывания одного модуля, но успешному развертыванию нескольких модулей?
- Я не знаком с проблемами отладки сети в среде Kubernetes, хотя и довольно опытен на голом железе. Как мне go исследовать эту проблему под фланелью, переплетением или kube-router?