Kubernetes Flannel k8s_install-cni_kube-flannel-ds завершен на рабочем узле - PullRequest
0 голосов
/ 16 июня 2020

Я настраиваю свой самый первый кластер Kubernetes. Мы ожидаем, что будет смесь узлов Windows и Linux, поэтому я выбрал фланель в качестве своей cni. Я использую RHEL 7.7 в качестве главного узла, и у меня есть две другие машины RHEL 7.7 в качестве рабочего узла, а остальные - Windows Server 2019. По большей части я следовал документации, представленной на сайте Microsoft: https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/getting-started-kubernetes-windows, а также на сайте Kubernetes: https://kubernetes.cn/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/. Я знаю, что статье на сайте Microsoft более двух лет, но это только руководство, которое я нашел для операций в смешанном режиме.

До сих пор я сделал следующее на главных и рабочих узлах RHEL:

  1. остановлен и отключен firewalld
  2. отключен se linux
  3. update && upgrade
  4. отключен раздел подкачки
  5. Добавлена ​​запись в / etc / hosts для всех узлы, участвующие в моем кластере Kubernetes
  6. Установлено Docker CE 19.03.11
  7. Установите kubectl, kubeadm и kubelet 1.18.3 (Дата сборки 2020-05-20)
  8. Подготовьте плоскость управления Kubernetes для Flannel: sudo sysctl net.bridge.bridge-nf-call-iptables=1

Я выполнил следующие действия на главном узле RHEL

Инициализировать кластер

kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

kubectl как не- root пользователь

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Исправьте набор демона для селектора узлов

wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/l2bridge/manifests/node-selector-patch.yml
kubectl patch ds/kube-proxy --patch "$(cat node-selector-patch.yml)" -n=kube-system

После исправления , kube-proxy выглядит так:

kube-system ds

Добавить фланель

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

M Укажите раздел net -conf. json фланелевого манифеста, чтобы установить VNI на 4096 и порт на 4789. Он должен выглядеть следующим образом:

net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan",
        "VNI" : 4096,
        "Port": 4789
      }
    }

Apply Modified kube-flannel

kubectl apply -f kube-flannel.yml

После добавления сети, вот что я получаю для подов в kube-system enter image description here

Добавить Windows Flannel и kube-proxy DaemonSets

curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.18.0/g' | kubectl apply -f -
kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml

Присоединиться к рабочему узлу Теперь я пытаюсь присоединиться к рабочему узлу RHEL 7.7, выполнив команду kubeadm join, сгенерированную при инициализации IU мой кластер. Рабочий узел инициализируется нормально, как показано ниже: worker node initialized

когда я go перехожу на рабочий узел RHEL, я вижу, что k8s_install-cni_kube-flannel-ds-amd64- Контейнер f4mtp_kube-system закрывается, как показано ниже: cni not workinge

  1. Не могли бы вы сообщить мне, правильно ли я следую? Я считаю, что Flannel CNI необходим для связи с модулями в кластере kubernetes
  2. Если Flannel сложно настроить для смешанного режима, можем ли мы использовать другую сеть, которая может работать?
  3. Если мы решим go Только и только узлы RHEL, какой самый лучший и самый простой сетевой плагин я могу установить, не сталкиваясь с множеством проблем?

Спасибо, я ценю это.

1 Ответ

0 голосов
/ 18 июня 2020

На официальном сайте много материалов о Kubernetes, и я рекомендую вам ознакомиться с ним:

Я разделил этот ответ на части:

  • CNI
  • Устранение неполадок

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, который должен указывать на правильную подготовку.

Вы можете проверить журналы фланелевых модулей, вызвав команда ниже:

  • kubectl logs POD_NAME

Вы также можете обратиться к официальной документации 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...