Kubernetes: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Строка 36: Строка 36:
:* Для настройки сети с использованием Flannel:
:* Для настройки сети с использованием Flannel:
:: <code># kubeadm init --pod-network-cidr=10.244.0.0/16</code>.
:: <code># kubeadm init --pod-network-cidr=10.244.0.0/16</code>.
:: Для использования control plane образов на базе ALT вместо образов по умолчанию:
:: <code># kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.22.5 --image-repository=registry.altlinux.org/k8s-p10</code>
:* Для настройки сети с использованием Calico
:* Для настройки сети с использованием Calico
:: <code># kubeadm init --pod-network-cidr=192.168.0.0/16</code>.
:: <code># kubeadm init --pod-network-cidr=192.168.0.0/16</code>.
:: Для использования control plane образов на базе ALT вместо образов по умолчанию:
:: <code># kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.22.5 --image-repository=registry.altlinux.org/k8s-p10</code>
: Пояснение флагов:
: Пояснение флагов:
:: <code>--pod-network-cidr=10.244.0.0/16</code> - внутренняя (разворачиваемая Kubernetes) сеть, данное значение рекомендуется оставить для правильной работы <tt>Flannel</tt>;
:: <code>--pod-network-cidr=10.244.0.0/16</code> - внутренняя (разворачиваемая Kubernetes) сеть, данное значение рекомендуется оставить для правильной работы <tt>Flannel</tt>;
:: <code>--image-repository=registry.altlinux.org/k8s-p10</code> - переопределение реестра, откуда будут скачиваться control plane образы.
:: <code>--kubernetes-version=1.22.5</code> - использовать версию kubernetes 1.22.5 для компонентов control plane.
: В конце вывода будет строка вида:
: В конце вывода будет строка вида:
: <code>kubeadm join <ip адрес>:<порт> --token <токен> --discovery-token-ca-cert-hash sha256:<хэш></code>.
: <code>kubeadm join <ip адрес>:<порт> --token <токен> --discovery-token-ca-cert-hash sha256:<хэш></code>.
Строка 52: Строка 58:
<li>
<li>
Скопировать конфиг:
Скопировать конфиг:
: <code># cp /etc/kubernetes/admin.conf ~<пользователь>/.kube/config</code>;
: <code># cp /etc/kubernetes/admin.conf /home/<пользователь>/.kube/config</code>;
</li>
</li>
<li>
<li>
Строка 75: Строка 81:
</li>
</li>
<li>
<li>
Далее следует развернуть сеть. Для этого можно запустить один из двух наборов команд:
Далее следует развернуть сеть. Для этого можно запустить один из следующих наборов команд:
:* Для Flannel:
:* Для Flannel:
:: <code>$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml</code>.
:: <code>$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml</code>.
:* Для Flannel с использованием образов на базе ALT:
:: Скачиваем манифест flannel.
:: <code>$ wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml</code>.
:: Заменяем образы по умолчанию на образы ALT в манифесте.
::: Вместо <code>image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.2</code> нужно <code>image: registry.altlinux.org/k8s-p10/flannel-cni-plugin:v1.2.0</code>.
::: Вместо <code>image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2</code> нужно <code>image: registry.altlinux.org/k8s-p10/flannel:v0.19.2</code>.
:: С использованием sed можно заменить образы в две команды:
::: <code>$ sed -i 's/^\([ ]*\)image: docker.io\/rancher\/mirrored-flannelcni-flannel-cni-plugin:v1.1.2/\1image: registry\.altlinux\.org\/k8s-p10\/flannel-cni-plugin:v1.2.0/g' kube-flannel.yml</code>.
::: <code>$ sed -i 's/^\([ ]*\)image: docker.io\/rancher\/mirrored-flannelcni-flannel:v0.20.2/\1image: registry\.altlinux\.org\/k8s-p10\/flannel:v0.19.2/g' kube-flannel.yml</code>.
:: Применяем отредактированный манифест.
:: <code>$ kubectl apply -f kube-flannel.yml</code>.
:* Для Calico:
:* Для Calico:
:: <code>$ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml</code>.
:: <code>$ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml</code>.

Версия от 14:38, 27 декабря 2022

Kubernetes

Инструкция по работе с kubernetes.

Подготовка

Нужны несколько машин (nodes), одна из которых будет мастером. Системные требования:

  • 2GB ОЗУ или больше;
  • 2 ядра процессора или больше;
  • Все машины должны быть доступны по сети друг для друга;
  • Все машины должны успешно разрешать имена hostname друг друга (через DNS или hosts);
  • Своп должен быть выключен

Пакеты и сервисы

1. Нужно установить следующие пакеты:

# apt-get install kubernetes-kubeadm kubernetes-kubelet kubernetes-crio cri-tools;

2. Удалить настройку сети в crio по умолчанию:

# rm -f /etc/cni/net.d/100-crio-bridge.conf /etc/cni/net.d/200-loopback.conf;

3. Добавить симлинк на плагин для настройки сети:

# ln -s /opt/cni/bin/flannel /usr/libexec/cni/flannel;

4. И запустить сервисы crio и kubelet:

# systemctl enable --now crio kubelet.

Разворачивание кластера

Предварительно:

  • отключите подкачку:
swapoff -a
  • включите пересылку пакетов:
sysctl net.ipv4.ip_forward=1
  • загружаем модуль сетевого фильтра:
modprobe br_netfilter
  1. На мастере нужно запустить одну из двух следующих команд для запуска кластера:
    • Для настройки сети с использованием Flannel:
    # kubeadm init --pod-network-cidr=10.244.0.0/16.
    Для использования control plane образов на базе ALT вместо образов по умолчанию:
    # kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.22.5 --image-repository=registry.altlinux.org/k8s-p10
    • Для настройки сети с использованием Calico
    # kubeadm init --pod-network-cidr=192.168.0.0/16.
    Для использования control plane образов на базе ALT вместо образов по умолчанию:
    # kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.22.5 --image-repository=registry.altlinux.org/k8s-p10
    Пояснение флагов:
    --pod-network-cidr=10.244.0.0/16 - внутренняя (разворачиваемая Kubernetes) сеть, данное значение рекомендуется оставить для правильной работы Flannel;
    --image-repository=registry.altlinux.org/k8s-p10 - переопределение реестра, откуда будут скачиваться control plane образы.
    --kubernetes-version=1.22.5 - использовать версию kubernetes 1.22.5 для компонентов control plane.
    В конце вывода будет строка вида:
    kubeadm join <ip адрес>:<порт> --token <токен> --discovery-token-ca-cert-hash sha256:<хэш>.
  2. Настройка kubernetes для работы от пользователя
    1. Создать каталог ~/.kube:
      $ mkdir ~/.kube;
    2. Скопировать конфиг:
      # cp /etc/kubernetes/admin.conf /home/<пользователь>/.kube/config;
    3. Изменить владельца конфига:
      # chown <пользователь>: ~<пользователь>/.kube/config.
  3. После этого все остальные ноды нужно подключить к мастеру:
    # kubeadm join <ip адрес>:<порт> --token <токен> --discovery-token-ca-cert-hash sha256:<хэш>.
    Проверить наличие нод можно так:
    $ kubectl get nodes -o wide
    Вывод примерно следующий:
    NAME      STATUS    ROLES     AGE       VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE      KERNEL-VERSION        CONTAINER-RUNTIME
    docker1   Ready     <none>    4h        v1.11.2   10.10.3.23    <none>        ALT Regular   4.17.14-un-def-alt1   docker://Unknown
    docker2   Ready     <none>    4h        v1.11.2   10.10.3.120   <none>        ALT Regular   4.17.14-un-def-alt1   docker://Unknown
    docker3   Ready     <none>    4h        v1.11.2   10.10.3.157   <none>        ALT Regular   4.17.14-un-def-alt1   docker://Unknown
    k8s       Ready     master    4h        v1.11.2   10.10.3.227   <none>        ALT Regular   4.17.14-un-def-alt1   docker://Unknown
    
  4. Далее следует развернуть сеть. Для этого можно запустить один из следующих наборов команд:
    • Для Flannel:
    $ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml.
    • Для Flannel с использованием образов на базе ALT:
    Скачиваем манифест flannel.
    $ wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml.
    Заменяем образы по умолчанию на образы ALT в манифесте.
    Вместо image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.2 нужно image: registry.altlinux.org/k8s-p10/flannel-cni-plugin:v1.2.0.
    Вместо image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2 нужно image: registry.altlinux.org/k8s-p10/flannel:v0.19.2.
    С использованием sed можно заменить образы в две команды:
    $ sed -i 's/^\([ ]*\)image: docker.io\/rancher\/mirrored-flannelcni-flannel-cni-plugin:v1.1.2/\1image: registry\.altlinux\.org\/k8s-p10\/flannel-cni-plugin:v1.2.0/g' kube-flannel.yml.
    $ sed -i 's/^\([ ]*\)image: docker.io\/rancher\/mirrored-flannelcni-flannel:v0.20.2/\1image: registry\.altlinux\.org\/k8s-p10\/flannel:v0.19.2/g' kube-flannel.yml.
    Применяем отредактированный манифест.
    $ kubectl apply -f kube-flannel.yml.
    • Для Calico:
    $ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml.
    $ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml.
    Проверить, что всё работает можно так:
    $ kubectl get pods --namespace kube-system.
    Вывод должен быть примерно таким:
    NAME                          READY     STATUS    RESTARTS   AGE
    coredns-78fcdf6894-6trk7      1/1       Running   0          2h
    coredns-78fcdf6894-nwt5l      1/1       Running   0          2h
    etcd-k8s                      1/1       Running   0          2h
    kube-apiserver-k8s            1/1       Running   0          2h
    kube-controller-manager-k8s   1/1       Running   0          2h
    kube-flannel-ds-894bt         1/1       Running   0          2h
    kube-flannel-ds-kbngw         1/1       Running   0          2h
    kube-flannel-ds-n7h45         1/1       Running   0          2h
    kube-flannel-ds-tz2rc         1/1       Running   0          2h
    kube-proxy-6f4lm              1/1       Running   0          2h
    kube-proxy-f92js              1/1       Running   0          2h
    kube-proxy-qkh54              1/1       Running   0          2h
    kube-proxy-szvlt              1/1       Running   0          2h
    kube-scheduler-k8s            1/1       Running   0          2h
    

Следует обратить внимание, что coredns находятся в состоянии Running. Количество kube-flannel и kube-proxy зависит от общего числа нод (в данном случае их четыре). Если coredns находится в состоянии "crashloopbackoff", то проверьте содержимое файла /etc/resolv.conf. Для каждой ноды в резолвере должны быть указаны реальные адреса (например 192.168.3.30, при развертывании в локальной сети на виртуальных машинах)

Тестовый запуск nginx

  1. Для начала создадим Deployment:
    $ kubectl apply -f https://k8s.io/examples/application/deployment.yaml;
  2. Затем создадим сервис, с помощью которого можно получить доступ к нашему приложению из внешней сети.
    Сохраним в файл nginx-service.yaml следующую кофигурацию:
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
      selector:
        app: nginx
    
  3. Запустим новый сервис:
    $ kubectl apply -f nginx-service.yaml.
  4. Теперь можно узнать его порт:
    $ kubectl get svc nginx
    Возможный вывод:
    NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
    nginx     NodePort   10.108.199.141   <none>        80:32336/TCP   4h
    
  5. Проверим, что всё работает:
    $ curl <ip адрес>:<порт>, где
    ip адрес - это адрес любой из нод (не мастера), а порт - это порт сервиса, полученный с помощью предыдущей команды. Если использовать данные из примеров, то возможная команда: curl 10.10.3.120:32336.