Установка кластера Kubernetes вручную

Данное руководство описывает процесс установки кластера Kubernetes в окружении РЕД ОС и Astra Linux с использованием подключения к Интернету.

Для офлайн-установки в окружении РЕД ОС или Debian обратитесь к разделу Установка кластера Kubernetes с помощью Kubespray.

Для развертывания кластера в окружении Альт Сервер или Альт СП Сервер обратитесь к официальной документации Альт Сервер.

В данном руководстве установка кластера Kubernetes производится с использованием среды выполнения контейнеров containerd и сетевого плагина Calico.

  • Можно использовать любую поддерживаемую среду выполнения из списка, приведенного в разделе технических требований.

  • Использование альтернативных сетевых плагинов, таких как Flannel, не поддерживается.

Нижеприведенные действия выполняются на каждом узле кластера. Все узлы кластера должны быть подключены к Интернету.

Чтобы установить Kubernetes на узле кластера, выполните следующие действия:

  1. Для корректной работы агентов kubelet отключите использование файлов подкачки и исключите их из файла /etc/fstab, чтобы их использование не возобновилось после перезагрузки узла:

    swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  2. Для автозагрузки модулей ядра, необходимых для работы сервиса containerd, в каталоге /etc/modules-load.d создайте файл containerd.conf со следующим содержимым:

    overlay
    br_netfilter
  3. Загрузите модули ядра overlay и br_netfilter:

    modprobe overlay
    modprobe br_netfilter
  4. Убедитесь, что модули загружены и работают, с помощью следующей команды:

    lsmod | egrep "br_netfilter|overlay"
  5. Для обеспечения работы внутренней сети Kubernetes в каталоге /etc/sysctl.d/ создайте файл 99-kubernetes-cri.conf со следующим содержимым:

    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
  6. Чтобы избежать ошибок разрешения имен, отключите использование IPv6. Для этого в каталоге /etc/sysctl.d/ создайте файл 99-disable-ipv6.conf со следующим содержимым:

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 1
  7. Примените изменения параметров sysctl, выполнив следующую команду:

    sysctl --system
  8. Установите пакеты, необходимые для работы Kubernetes. Список пакетов зависит от ОС, в окружении которой будет развернут кластер.

    • Установка пакетов для РЕД ОС:

      dnf install kubernetes kubernetes-kubeadm cri-tools tc ipvsadm ebtables socat conntrack git curl wget runc containerd
    • Установка пакетов для Astra Linux:

      apt-get install kubelet kubeadm kubectl containerd cri-tools socat conntrack
    Если некоторые из требуемых пакетов недоступны в репозитории производителя ОС, вы можете установить их из репозитория Kubernetes. Подробности приведены в официальной документации Kubernetes.
  9. Установите утилиту nerdctl:

    1. Скачайте архив утилиты, выполнив следующую команду:

      curl -O https://github.com/containerd/nerdctl/releases/download/v2.1.6/nerdctl-2.1.6-linux-amd64.tar.gz
    2. Распакуйте архив в каталог /usr/local/bin, выполнив следующую команду:

      tar -xzvf nerdctl-2.1.6-linux-amd64.tar.gz -C /usr/local/bin
  10. Если на узле не установлена утилита iptables, установите ее согласно документации производителя ОС.

  11. Разрешите проброс портов, выполнив следующую команду:

    iptables -P FORWARD ACCEPT
  12. Установите настройки по умолчанию для конфигурации контейнеров, выполнив следующую команду:

    containerd config default | sudo tee /etc/containerd/config.toml
  13. Разрешите использование контрольных групп (cgroup) Kubernetes:

    sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
  14. Чтобы обеспечить работу сокета containerd, в каталоге /etc создайте файл crictl.yaml, если он не существует, и добавьте в него следующие строки:

    runtime-endpoint: unix:///var/run/containerd/containerd.sock
    image-endpoint: unix:///var/run/containerd/containerd.sock
    timeout: 30
    debug: false
  15. Запустите службу containerd и добавьте ее в автозагрузку:

    systemctl enable --now containerd
  16. Добавьте службу kubelet в автозагрузку:

    systemctl enable kubelet.service
  17. На master-узлах кластера выполните следующие действия:

    1. Загрузите образы контейнеров, необходимых инструменту kubeadm для инициализации узла кластера:

      kubeadm config images pull

      Если доступ узла в Интернет осуществляется через прокси-сервер, необходимо скопировать его конфигурацию в файл конфигурации прокси containerd:

      1. В каталоге /etc/systemd/system/containerd.service.d создайте файл http-proxy.conf, если он не существует.

      2. Скопируйте в http-proxy.conf содержимое файла /etc/environment:

        cat /etc/environment > /etc/systemd/system/containerd.service.d/http-proxy.conf

      После копирования добавьте исключения в список NO_PROXY файла /etc/environment.

      Приведенный список исключений указан в качестве примера, для вашей сети он может отличаться. Ознакомьтесь с рекомендациями по настройке списка NO_PROXY.

      10.96.0.0/12,10.233.0.0/18,10.244.0.0/16,.svc,.cluster.local
    2. Запустите инициализацию master-узла в одноранговом кластере.

      kubeadm init --pod-network-cidr=<internal_cluster_net>

      Здесь:

      • <internal_cluster_net> — адрес внутренней подсети для кластера, например, 10.244.0.0/16.

      Пример вывода команды после успешной инициализации master-узла
      Your Kubernetes control-plane has initialized successfully!
      
      To start using your cluster, you need to run the following as a regular user:
      
        mkdir -p $HOME/.kube
        sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
        sudo chown $(id -u):$(id -g) $HOME/.kube/config
      
      Alternatively, if you are the root user, you can run:
      
        export KUBECONFIG=/etc/kubernetes/admin.conf
      
      You should now deploy a pod network to the cluster.
      Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
        https://kubernetes.io/docs/concepts/cluster-administration/addons/
      
      Then you can join any number of worker nodes by running the following on each as root:
      
      kubeadm join 192.168.186.86:6443 --token kb0ejg.qtsdbljcnfcc3acd \
          --discovery-token-ca-cert-hash sha256:92d275184e764076086f4cc86bca47f6ecedd46526568cc494d97dc27958bec7
    3. Настройте параметры управления кластером:

      • Для управления кластером от имени локального пользователя выполните следующие команды:

        mkdir /home/$USER/.kube
        cp -i /etc/kubernetes/admin.conf /home/$USER/.kube/config
        chown $USER. /home/$USER/.kube /home/$USER/.kube/config
      • Для управления кластером от имени суперпользователя (root) выполните следующие команды:

        echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.bashrc
        source .bashrc
        export KUBECONFIG=/etc/kubernetes/admin.conf
    4. Если настройка управления кластером производилась для локального пользователя, выйдите из сеанса пользователя root командой exit и дальнейшие действия по настройке кластера выполняйте от имени локального пользователя.

    5. Установите внутреннюю конфигурацию сети в кластере, выполнив следующую команду:

      kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
    6. Проверьте список и статус подов control plane (плоскости управления) кластера, выполнив следующую команду:

      kubectl get pod -n kube-system
      Пример вывода списка подов control plane кластера
      NAME                                          READY   STATUS    RESTARTS       AGE
      calico-kube-controllers-6c99c8747f-cxxdr      1/1     Running   0              1m
      calico-node-cxtrl                             1/1     Running   0              1m
      coredns-5d78c9869d-phl6k                      1/1     Running   0              1m
      coredns-5d78c9869d-w27xw                      1/1     Running   0              1m
      etcd.test.rvision.local                       1/1     Running   0              1m
      kube-apiserver.test.rvision.local             1/1     Running   0              1m
      kube-controller-manager.test.rvision.local    1/1     Running   0              1m
      kube-proxy-sw9qt                              1/1     Running   0              1m
      kube-scheduler.test.rvision.local             1/1     Running   0              1m
    7. Если установка выполняется на единственный узел, удалите все свойства taint с узла:

      1. Получите список свойств taint узла, выполнив следующую команду:

        kubectl get nodes <node_name> -o jsonpath='{.spec.taints}'

        Здесь:

        • <node_name> — имя узла.

        Пример вывода списка свойств taint для узла
        [{"effect":"NoSchedule","key":"node-role.kubernetes.io/master"},{"effect":"NoSchedule","key":"node-role.kubernetes.io/control-plane"}]
      2. Удалите свойства taint с узла, выполнив для каждого свойства следующую команду:

        kubectl taint node <node_name> <taint_key>-

        Здесь:

        • <node_name> — имя узла.

        • <taint_key> — имя свойства, находящееся в поле key сведений о нем.

    8. Установите дополнительные пакеты для инсталляции системы.

      • Установка пакетов для РЕД ОС:

        dnf install ansible yq jq
      • Установка пакетов для Astra Linux:

        apt-get install helm ansible yq jq
      Если какие-либо из указанных пакетов недоступны в репозитории производителя ОС, установите их согласно официальной документации производителя ОС.
    9. Для успешной установки менеджера логов Loki в составе системы измените имя сервиса kube-dns на coredns:

      1. Создайте копию файла конфигурации сервиса kube-dns:

        kubectl -n kube-system get svc kube-dns -o yaml > core.yaml
      2. Измените имя сервиса kube-dns на coredns:

        sed -i 's/name: kube-dns/name: coredns/g' core.yaml
      3. Удалите существующий сервис kube-dns:

        kubectl -n kube-system delete svc kube-dns
      4. Создайте сервис coredns, применив его конфигурацию:

        kubectl apply -f core.yaml
    10. Выведите команду для присоединения worker-узла, выполнив следующую команду:

      kubeadm token create --print-join-command
      Пример команды для присоединения worker-узла
      kubeadm join 192.168.186.86:6443 --token kb0ejg.qtsdbljcnfcc3acd --discovery-token-ca-cert-hash sha256:92d275184e764076086f4cc86bca47f6ecedd46526568cc494d97dc27958bec7
  18. На каждом из worker-узлов выполните вышеуказанную команду для присоединения worker-узла к кластеру.

Была ли полезна эта страница?

Обратная связь