На официальном сайте много материалов о Kubernetes, и я рекомендую вам ознакомиться с ним:
Я разделил этот ответ на части:
CNI
Что такое CNI?
CNI (Container Network Interface), проект Cloud Native Computing Foundation, состоит из спецификации и библиотек для написания плагинов для настройки сетевых интерфейсов в контейнерах Linux, а также ряда поддерживаемых плагинов. CNI занимается только подключением контейнеров к сети и удалением выделенных ресурсов при удалении контейнера. В связи с этим у CNI есть широкий спектр поддержки, а спецификация проста в реализации.
- Github.com: Сеть контейнеров: CNI
Ваш подключаемый модуль CNI , говоря простым языком, отвечает за организацию сети модуля внутри вашего кластера.
Существует несколько подключаемых модулей CNI, например:
- Flannel
- Calico
- Multus
- Weav enet
Что я имею в виду, вам не нужно использовать Flannel
. Вы можете использовать другой плагин, например Calico
. Главное соображение состоит в том, что они отличаются друг от друга, и вам следует выбрать вариант, наиболее подходящий для вашего варианта использования (например, поддержка некоторых функций).
Есть много материалов / ресурсов на этом топи c. Пожалуйста, взгляните на некоторые из них:
Что касается:
Если Flannel сложно настроить для смешанного режима, можем ли мы использовать другую сеть, которая может работать?
Если вы имеете в виду смешанный режим, используя узлы, которые являются машинами Windows и Linux, я бы придерживался руководств, которые уже написаны, как вы упомянули: Kubernetes.io: Добавление Windows узлов
Что касается:
Если мы решим использовать только go и только узлы RHEL, какой лучший и самый простой сетевой плагин я могу установить, не сталкиваясь с множеством проблем?
Лучший способ выбрать подключаемый модуль CNI - это поиск решения, наиболее отвечающего вашим потребностям. Вы можете перейти по этой ссылке для обзора:
Также вы можете посмотреть здесь (Имейте в виду, что эта статья написана в 2018 году и может быть устаревшей):
Устранение неполадок
когда я go перехожу на рабочий узел RHEL, я вижу, что контейнер k8s_install-cni_kube-flannel-ds-amd64-f4mtp_kube-system завершен, как показано ниже:
Контейнер k8s_install-cni_kube-flannel-ds-amd64-f4mtp_kube-system
завершен со статусом 0
, который должен указывать на правильную подготовку.
Вы можете проверить журналы фланелевых модулей, вызвав команда ниже:
Вы также можете обратиться к официальной документации Flannel: Github.com: Flannel: Устранение неполадок
Как я сказал в комментарии:
Чтобы проверить, если y наш CNI работает, вы можете создать 2 модуля на 2 разных узлах и попытаться установить соединение между ними (например, пинговать их).
Шаги:
- Создание модулей
- Проверить их IP-адреса
- Exe c в подах
- Ping
Создать поды
Ниже пример определение развертывания, которое порождает поды ubuntu. Они будут использоваться для проверки наличия связи между модулями модулей:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ubuntu
spec:
selector:
matchLabels:
app: ubuntu
replicas: 5
template:
metadata:
labels:
app: ubuntu
spec:
containers:
- name: ubuntu
image: ubuntu:latest
command:
- sleep
- infinity
Имейте в виду, что этот пример предназначен только для целей тестирования. Примените указанное выше определение с помощью:
kubectl apply -f FILE_NAME.yaml
Проверьте их IP-адреса
После создания подов вы сможете запустить команду:
$ kubectl get pods -o wide
и посмотрите результат, подобный этому:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ubuntu-557dc88445-lngt7 1/1 Running 0 8s 10.20.0.4 NODE-1 <none> <none>
ubuntu-557dc88445-nhvbw 1/1 Running 0 8s 10.20.0.5 NODE-1 <none> <none>
ubuntu-557dc88445-p8v86 1/1 Running 0 8s 10.20.2.4 NODE-2 <none> <none>
ubuntu-557dc88445-vm2kg 1/1 Running 0 8s 10.20.1.9 NODE-3 <none> <none>
ubuntu-557dc88445-xwt86 1/1 Running 0 8s 10.20.0.3 NODE-1 <none> <none>
Вы можете увидеть результат выше:
- какой IP-адрес имеет каждый модуль
- какой узел назначен каждому модулю.
В приведенном выше примере мы попытаемся установить соединение между:
ubuntu-557dc88445-lngt7
(первый) с IP-адресом 10.20.0.4
на NODE -1 ubuntu-557dc88445-p8v86
(третий) с IP-адресом 10.20.2.4
на NODE-2
Exe c в pods
Вы можете exec
в модуле для запуска команд:
$ kubectl exec -it ubuntu-557dc88445-lngt7 -- /bin/bash
Пожалуйста, ознакомьтесь с официальной документацией здесь: Kubernetes.io: Получить запущенный контейнер оболочки
Ping
Ping не был встроен в образ ubuntu, но вы можете установить его с помощью:
-
$ apt update && apt install iputils-ping
После этого вы можете пропинговать второй модуль и проверить, можете ли вы подключиться к другому модулю:
root@ubuntu-557dc88445-lngt7:/# ping 10.20.2.4 -c 4
PING 10.20.2.4 (10.20.2.4) 56(84) bytes of data.
64 bytes from 10.20.2.4: icmp_seq=1 ttl=62 time=0.168 ms
64 bytes from 10.20.2.4: icmp_seq=2 ttl=62 time=0.169 ms
64 bytes from 10.20.2.4: icmp_seq=3 ttl=62 time=0.174 ms
64 bytes from 10.20.2.4: icmp_seq=4 ttl=62 time=0.206 ms
--- 10.20.2.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3104ms
rtt min/avg/max/mdev = 0.168/0.179/0.206/0.015 ms