Проверка работоспособности установки#

Установка и развертывание кластера DropApp#

Предварительные условия#

Предварительные условия установки и развертывания кластера DropApp:

  • пользователь имеет роль администратора в ОС;

  • пользователем получен zip-архив с дистрибутивом DropApp.

Установка и развертывание#

Установка и развертывание кластера DropApp:

  1. Установите инструменты DropApp и обновите данные при помощи команды:

    sudo yum install kubelet kubeadm cri-o kubectl
    

    Результат команды будет содержать в конце следующее сообщение:

    complete!
    
  2. Активируйте и запустите службы CRI-O и kubelet:

    sudo systemctl enable --now crio kubelet
    

    Результат команды будет следующим:

    Created symlink /etc/systemd/system/cri-o.service  /usr/lib/systemd/system/crio.service.
    Created symlink /etc/systemd/system/multi-user.target.wants/crio.service  /usr/lib/systemd/system/crio.service.
    Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service  /usr/lib/systemd/system/kubelet.service.
    
  3. Подготовьте конфигурацию с указанием репозитория DropApp для создания кластера, при помощи команды:

    nano clusterconfig.yml
    
  4. Добавьте в YAML-файл параметры конфигурации.

    Для Platform V Sberlinux OS Server и Platform V Sberlinux OS Core:

    apiVersion: kubeadm.k8s.io/v1beta3
    kind: ClusterConfiguration
    kubernetesVersion: v1.25.11
    imageRepository: example.ru/1.5.0/dapp-kubernetes-2 # <--- репозиторий в registry, где лежат образы kube-apiserver, kube-proxy, kube-controller-manager, kube-scheduler
    dns:
       imageRepository: example.ru/1.5.0/dapp-coredns-2 # <--- репозиторий в registry, где лежит образ coredns. imageRepository является изменяемым параметром и может быть изменен в соответствии с docker repository
       imageTag: v1.9.3
    etcd:
       local:
       imageRepository: example.ru/1.5.0/dapp-etcd-2 # <--- репозиторий в registry, где лежит образ etcd
         imageTag: 3.5.6
    networking:
       serviceSubnet: "00.00.00.0/16" # Подсеть для services адресов внутри кластера. Адрес должен быть изменен в соответствии с сетевыми настройками
       podSubnet: "00.0.00.00/16" # подсеть для pods адресов внутри кластера. Адрес должен быть изменен в соответствии с сетевыми настройками
    ---
    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    cgroupDriver: systemd
    ---
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    metricsBindAddress: "0.0.0.0"
    mode: "ipvs"
    

    Примечание

    Конфигурация является тестовой и приведена в качестве примера проверки работоспособности.

  5. Нажмите сочетание клавиш Ctrl + X для сохранения.

  6. На вопрос: Save modified buffer? введите Y для подтверждения действия и нажмите Enter для выхода.

  7. Запустите создание кластера:

    sudo kubeadm init --config clusterconfig.yml
    

    Результат команды будет следующим:

       [init] Using Kubernetes version:
       [preflight] Running pre-flight checks
       [WARNING SystemVerification]: missing optional cgroups: blkio
       [preflight] Pulling images required for setting up a Kubernetes cluster
       [preflight] This might take a minute or two, depending on the speed of your internet connection
       [preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
       [certs] Using certificateDir folder "/etc/kubernetes/pki"
       [certs] Generating "ca" certificate and key
       [certs] Generating "apiserver" certificate and key
       [certs] apiserver serving cert is signed for DNS names [control-plane kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [000.000.000.001, 000.000.000.0000]
       [certs] Generating "apiserver-kubelet-client" certificate and key
       [certs] Generating "front-proxy-ca" certificate and key
       [certs] Generating "front-proxy-client" certificate and key
       [certs] Generating "etcd/ca" certificate and key
       [certs] Generating "etcd/server" certificate and key
       [certs] etcd/server serving cert is signed for DNS names [control-plane localhost] and IPs [000.000.000.000 000.0.0.0 ::1]
       [certs] Generating "etcd/peer" certificate and key
       [certs] etcd/peer serving cert is signed for DNS names [control-plane localhost] and IPs [000.000.000.000 000.0.0.0 ::1]
       [certs] Generating "etcd/healthcheck-client" certificate and key
       [certs] Generating "apiserver-etcd-client" certificate and key
       [certs] Generating "sa" key and public key
       [kubeconfig] Using kubeconfig folder "/etc/kubernetes"
       [kubeconfig] Writing "admin.conf" kubeconfig file
       [kubeconfig] Writing "kubelet.conf" kubeconfig file
       [kubeconfig] Writing "controller-manager.conf" kubeconfig file
       [kubeconfig] Writing "scheduler.conf" kubeconfig file
       [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
       [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
       [kubelet-start] Starting the kubelet
       [control-plane] Using manifest folder "/etc/kubernetes/manifests"
       [control-plane] Creating static Pod manifest for "kube-apiserver"
       ...
       [bootstrap-token] Using token: 6m07w8.jgdd2w752py6ljwp
       [bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
       [bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to get nodes
       [bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
       [bootstrap-token] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
       [bootstrap-token] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
       [bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
       [kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
       [addons] Applied essential addon: CoreDNS
    
       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 000.000.000.000:6443 --token 6m07w8.jgdd2w752py6ljwp \
       --discovery-token-ca-cert-hash sha256:4cc8eb60476c33edac52b5a7548c2c50ef0f9e31ce656c6f4b213f901bc87421:890128 # приведенное в примере значение токена и SHA256 являются вымышленным, при каждой установке DropApp должны использоваться уникальные значения токенов.
    

    Примечание

    Адреса 000.000.000.000 и 000.0.0.0 в блоке вывода будут действительными IP узлов кластера.

    Убедитесь, что вывод предыдущей команды содержит сообщение: Your Kubernetes control-plane has initialized successfully!

  8. Для взаимодействия с кластером, выполните команды на главном узле и создайте файловую структуру:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  9. Сгенерируйте ключ сертификата (token) на главном узле при помощи команды:

    kubeadm token create --print-join-command
    

    Результат команды будет следующим:

    kubeadm join 000.000.122.76:6443 --token 2xqf30.qe81qi7vhi32pnxk --discovery-token-ca-cert-hash sha256:000fg67i8669860687589907erw9000
    

    Примечание

    IP токен и порт приведены для примера.

  10. Скопируйте token и хеш SHA256, необходимые для безопасной связи с главным узлом.

    Примечание

    Сохраните результат (например, в специальную папку или репозиторий) выполненной команды для дальнейшего использования на всех подключенных рабочих узлах.

  11. Переключитесь на рабочий узел (worker) и выполните команду:

    sudo hostnamectl set-hostname
    
    #[имя-машины, например worker1]
    

    Примечание

    Эту команду требуется выполнить на каждом рабочем узле.

  12. Установите инструменты DropApp и обновите данные при помощи команды:

    sudo yum install kubelet kubeadm cri-o kubectl
    

    Результат команды будет содержать в конце следующий вывод:

    Complete!
    

    Примечание

    Все экземпляры пакета, установленные на виртуальные машины, должны быть одной и той же версии и соответствовать ранее установленной версии на главном узле управляющего слоя (control-plane node).

    sudo systemctl enable --now crio kubelet
    

    Результат команды будет следующим:

    Created symlink /etc/systemd/system/cri-o.service  /usr/lib/systemd/system/crio.service.
    Created symlink /etc/systemd/system/multi-user.target.wants/crio.service  /usr/lib/systemd/system/crio.service.
    Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service  /usr/lib/systemd/system/kubelet.service.
    
  13. Присоедините рабочий узел к кластеру DropApp (совокупности рабочих и главных узлов, объединенных в одну сеть) при помощи команды:

    sudo [результат шага №12]
    

    Пример выполняемой команды представлен ниже:

    sudo kubeadm join 000.000.122.76:6443 --token 2xqf30.qe81qi7vhi32pnxk --discovery-token-ca-cert-hash sha256:fee9d001d8897cd5f59ace0be36d344dda65edc4bf38b993267ad6a3c2aee3ca
    

    Примечание

    IP токен и порт приведены для примера.

    Результат команды будет следующим:

    ...
    [kubelet-start] Starting the kubelet
    [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
    
    This node has joined the cluster:
    * Certificate signing request was sent to apiserver and a response was received.
    * The Kubelet was informed of the new secure connection details.
    
    Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
    
  14. Проверьте, что рабочие узлы присоединились к главному узлу. По умолчанию их количество будет равным двум (см. в разделе Системные требования). Переключитесь на главный узел по ssh и выполните команду:

    kubectl get nodes
    

    Результат команды будет следующим:

    NAME       STATUS   ROLES       AGE    VERSION
    control-plane   Ready   control-plane   5m14s
    worker1      Ready   <none>      58s
    worker2      Ready   <none>      65s