Установка#
Примечание
В текущем разделе приведена установка DropApp без опциональных компонентов.
Опциональные компоненты DropApp устанавливаются и настраиваются администратором. Порядок установки каждого опционального компонента приведен в соответствующем разделе документа «Руководство по системному администрированию».
Установка опциональных компонентов DropApp
Примечание
В DropApp поставляется две версии опционального компонента Grafana - 10.4.9 и 11.4.0.
Выбор способа установки#
Установка DropApp возможна только с помощью утилиты командной строки kubeadm.
Предварительные условия#
Предварительные условия для установки DropApp:
rpm-репозиторий получен пользователем;
выбранные пользователем rpm-пакеты из полученного репозитория загружены в репозиторий пользователя.
Примечание
rpm-репозиторий поставляется в виде zip-архива, состоящего из двух частей: repo и docker images.
Подготовка окружения#
Используйте репозиторий DropApp, полученный от производителя продукта. В репозитории должны присутствовать все rpm-пакеты, перечисленные в разделе «Подготовка к установке».
Примечание
Для установки выбранных rpm-пакетов, выполните команду yum install, которая выполнит их подключения. Специальной предварительной настройки не требуется. td yum самостоятельно определяет все пользовательские права (выдает sudo-права), в том числе права на репозиторий клиента, если он подключен в систему. Поэтому пользователь получает привилегированные права в рамках установки.
DropApp настраивается администратором на виртуальной машине с предустановленной ОС (см. официальную документацию к продуктам, указанным в разделе «Системные требования» текущего документа).
Сценарий перетегирования docker-образов из дистрибутива DropApp#
Для корректной загрузки образов docker из дистрибутива DropApp необходимо использовать скрипт для изменения имен образов - retag.sh. Он находится в дистрибутиве, в архиве: K8S-retag-2.1.0-9-distrib.zip
Скрипт перебирает *.tar архивы с образами из каталога DropApp. При совпадении образа в архиве и образа из файла с путями для загрузки образов в локальный реестр, образ из архива будет загружен в локальный реестр.
Для работы скрипта требуется установленный podman, jq и доступ к локальному реестру с правом на запись.
Для запуска скрипта используйте команду:
./retag.sh --dir <path_to_folder_with_>*.tar --map <path_to_map_file>
Где :
<path_to_folder_with_>*.tar - путь к каталогу с
*.tarфайлами образов;<path_to_map_file> - путь к файлу, который содержит пути для загрузки образов в локальный реестр.
Пример файла со списком образов
<registry-name>/<path-to-image>/dropapp_1_3/docker.io/curlimages/curl:7.86.0
<registry-name>/<path-to-image>/dropapp_1_3/docker.io/envoyproxy/envoy:distroless-v1.25.11
<registry-name>/<path-to-image>/dropapp_1_3/docker.io/grafana/grafana:10.1.2
Где :
<registry-name>- название реестра;<path-to-image>- путь к образу.
В результате скрипт выведет список образов из архивов, для которых не удалось найти сопоставление в файле с путями в консоль, а так же сохранит информацию в лог-файл, формата retag_log_220524091100.txt.
Настройка DropApp в ОС#
Чтобы настроить DropApp в ОС:
Установите ОС, следуя шагам документации к продукту.
Создайте каталог, в который будет смонтирован установочный диск с ОС, например
/mnt/iso:# mkdir -p /mnt/isoСмонтируйте ISO-образ установочного диска с ОС в созданный ранее каталог:
# mount -o loop /tmp/distr/dvd.iso /mnt/iso mount: /dev/loop0 is write-protected, mounting read-onlyВ случае, если вместо файла ISO-образа используется DVD-привод с установленным в него установочным диском с ОС, смонтируйте его командой типа:
# mount /dev/sr0 /mnt/isoСкопируйте файл media.repo из смонтированного каталога с установочными файлами SLO в системный каталог /etc/yum.repos.d/ и установите в файл разрешения (файл с правами доступа):
# cp /mnt/iso/media.repo /etc/yum.repos.d/dvd.repo # chmod 644 /etc/yum.repos.d/dvd.repoВнесите корректировки в файл dvd.repo, заменив параметр gpgcheck=0 на 1 и добавьте в конец файла еще 3 строки:
# vi /etc/yum.repos.d/dvd.repo ... enabled=1 baseurl=file:///mnt/iso/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OS-releaseУстановите ebtables, ethtool или аналогичный исполняемый файл на узле. Их можно установить при помощи следующей команды:
yum install ebtables # или ethtool на выбор пользователя
Установка DropApp#
Все шаги, приведенные в этой инструкции, описывают последовательность действий для установки DropApp.
Подготовка к установке#
Перед началом установки убедитесь, что выполнена подготовка окружения:
установите ОС;
получите zip-архив от разработчика DropApp.
Примечание
Перед установкой DropApp загрузите полученный zip-архив с rpm-файлом и docker-образами (в виде tar-архива). Распакуйте архив в частный rpm-репозиторий с указанием пути к папке. rpm-репозиторий должен быть прописан в конфигурационном файле /etc/yum.repos.d/dapp.repo в параметре которого указана ссылка на репозиторий baseurl= [путь к папке с расположенными в ней файлами rpm]. Выгрузите образ DropApp в пользовательский репозиторий – docker registry (этот репозиторий должен быть доступен для пользовательской виртуальной машины при запуске DropApp).
Установка для ОС Platform V Sberlinux OS Server, ОС Platform V Sberlinux OS Core#
Предварительные условия#
Предварительные условия перед установкой DropApp:
Используйте полученный от разработчика DropApp zip-архив из 2 частей, включающий:
rpm-пакеты;
docker images.
Список обязательных (главных) rpm-пакетов находится в составе дистрибутива по пути
K8S-1.5.0-owned-distrib.zip->K8S-rpms-1.5.0\x86_64\pkglist. Список зависимостей находится вK8S-1.5.0-owned-distrib.zip->K8S-rpms-1.5.0\src\pkglist.Когда пакет создается с помощью rpm, если какой-либо файл в списке rpm-пакета является общей библиотекой, soname-библиотеки автоматически добавляется в список возможностей, предоставляемых пакетом. Soname - это имя, используемое для определения совместимости между различными версиями библиотеки.
Добавьте rpm-пакеты в существующий rpm-репозиторий, а docker images из архива добавьте в существующий docker-registry.
Разверните количество виртуальных машин (виртуальные машины с предустановленной ОС) равное количеству узлов в кластере. Количество узлов в кластере приведено в разделе «Системные требования», где даны рекомендации с аппаратными характеристиками для главного узла и рабочих узлов.
Отключите использование swap на каждой виртуальной машине, для этого введите команду:
sudo swapoff -aНастройте переадресацию IPv4 и разрешение на просмотр трафика:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # параметры sysctl, требуемые при установке (сохраняются при перезагрузке) cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # Применить параметры sysctl без перезагрузки sudo sysctl --systemУбедитесь, что модули
br_netfilterиoverlayзагружены, выполнив следующие команды:lsmod | grep br_netfilter lsmod | grep overlayУбедитесь, что для системных переменных
net.bridge.bridge-nf-call-iptables,net.bridge.bridge-nf-call-ip6tables,net.ipv4.ip_forwardв конфигурации установлено значение1 sysctl, выполнив следующую команду:sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forwardНастройте драйверы групп. Базовая среда выполнения контейнера должна взаимодействовать с группами управления, чтобы обеспечить управление ресурсами для pods и контейнеров и установить ресурсы, такие как запросы и ограничения процессора, памяти. Для взаимодействия с контрольными группами kubelet и среда выполнения контейнера должны использовать драйвер cgroup. Крайне важно, чтобы kubelet и среда выполнения контейнера использовали один и тот же драйвер cgroup и были настроены одинаково.
Доступны два драйвера cgroup:
cgroupfs;
systemd.
Драйвер cgroupfs
Драйвер cgroupfs является драйвером cgroup по умолчанию в kubelet. При cgroupfs использовании драйвера kubelet и среда выполнения контейнера напрямую взаимодействуют с файловой системой cgroup для настройки cgroups.
Драйвер systemd cgroup
Когда systemd выбирается в качестве системы инициализации для дистрибутива SLO, процесс инициализации генерирует и использует корневую контрольную группу (cgroup) и действует как менеджер cgroup.
Systemd имеет тесную интеграцию с cgroups и выделяет cgroup для каждой единицы systemd. В результате systemd используется в качестве системы инициализации драйвера cgroupfs, система получает два разных менеджера cgroup.
Два менеджера cgroup дают два представления доступных и используемых ресурсов в системе. В некоторых случаях узлы, которые настроены на использование cgroupfs для среды выполнения kubelet и контейнера, но при этом используется systemd для остальных процессов, становятся нестабильными из-за нехватки ресурсов.
Подход к нивелированию нестабильности заключается в использовании systemd в качестве драйвера cgroup для kubelet и среды выполнения контейнера, когда systemd является выбранной системой инициализации.
Чтобы установить systemd в качестве драйвера cgroup, отредактируйте KubeletConfiguration параметр cgroupDriver и установите для него значение
systemdпри помощи команды:apiVersion: kubelet.config.k8s kind: KubeletConfiguration ... cgroupDriver: systemdЕсли драйвер systemd cgroup настроен для kubelet, настройте его для среды выполнения контейнера CRI-O. CRI-O по умолчанию использует драйвер systemd cgroup.
Чтобы переключить драйвер cgroup на cgroupfs, отредактируйте
/etc/crio/crio.confили поместите драйвер в/etc/crio/crio.conf.d/02-cgroup-manager.conf, например:[crio.runtime] conmon_cgroup = "pod" cgroup_manager = "cgroupfs"Обратите внимание на измененное значение
conmon_cgroup, которое должно быть установлено в значениеpodпри использовании CRI-O с cgroupfs. Как правило, необходимо синхронизировать конфигурацию драйвера cgroup для kubelet и CRI-O.Для CRI-O по умолчанию используется сокет CRI
/var/run/crio/crio.sock.
Установка и развертывание кластера DropApp#
Предварительные условия развертывания#
Предварительные условия установки и развертывания кластера DropApp:
пользователь имеет роль администратора в ОС;
пользователем получен zip-архив с дистрибутивом DropApp.
Установка и развертывание#
Установка и развертывание кластера DropApp:
Установите инструменты DropApp и обновите данные при помощи команды:
sudo yum install kubelet kubeadm cri-o kubectlРезультат команды будет содержать в конце следующее сообщение:
complete!Активируйте и запустите службы 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.Подготовьте конфигурацию с указанием репозитория DropApp для создания кластера, при помощи команды:
nano clusterconfig.ymlДобавьте в 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: "<IP-address>/16" # Подсеть для services адресов внутри кластера. Адрес должен быть изменен в соответствии с сетевыми настройками podSubnet: "<IP-address>/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"Примечание
Конфигурация является тестовой и приведена в качестве примера проверки работоспособности.
Нажмите сочетание клавиш Ctrl + X для сохранения.
На вопрос:
Save modified buffer?введите Y для подтверждения действия и нажмите Enter для выхода.Запустите создание кластера:
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 [<IP-address1>, <IP-address2>] [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 [<IP-address2> <IP-address3> ::1] [certs] Generating "etcd/peer" certificate and key [certs] etcd/peer serving cert is signed for DNS names [control-plane localhost] and IPs [<IP-address2> <IP-address3> ::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: 0m00w0.jgdd0w000py0ljwp [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 <IP-address2>:6443 --token 0m00w0.jgdd0w0py0ljwp \ --discovery-token-ca-cert-hash sha256:0cc0eb00000c00edac00b0a0000c0c00ef0f0e00ce000c0f0b000f000bc00000:890128 # приведенное в примере значение токена и SHA256 являются вымышленным, при каждой установке DropApp должны использоваться уникальные значения токенов.Примечание
Адрес
в блоке вывода будет действительным IP узлов кластера. Убедитесь, что вывод предыдущей команды содержит сообщение: Your Kubernetes control-plane has initialized successfully!
Для взаимодействия с кластером, выполните команды на главном узле и создайте файловую структуру:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configСгенерируйте ключ сертификата (token) на главном узле при помощи команды:
kubeadm token create --print-join-commandРезультат команды будет следующим:
kubeadm join <IP-address4>:6443 --token 2xqf30.qe81qi7vhi32pnxk --discovery-token-ca-cert-hash sha256:000fg00i0000000000000000erw0000Примечание
IP токен и порт приведены для примера.
Скопируйте token и хеш SHA256, необходимые для безопасной связи с главным узлом.
Примечание
Сохраните результат (например, в специальную папку или репозиторий) выполненной команды для дальнейшего использования на всех подключенных рабочих узлах.
Переключитесь на рабочий узел (worker) и выполните команду:
sudo hostnamectl set-hostname #[имя-машины, например worker1]Примечание
Эту команду требуется выполнить на каждом рабочем узле.
Установите инструменты 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.Присоедините рабочий узел к кластеру DropApp (совокупности рабочих и главных узлов, объединенных в одну сеть) при помощи команды:
sudo [результат шага №12]Пример выполняемой команды представлен ниже:
sudo kubeadm join <IP-address4>:6443 --token 2xqf30.qe81qi7vhi32pnxk --discovery-token-ca-cert-hash sha256:fee0d000d0000cd0f00ace0be00d000dda00edc0bf00b000000ad0a0c0aee0caПримечание
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.Проверьте, что рабочие узлы присоединились к главному узлу. По умолчанию их количество будет равным двум (см. в разделе Системные требования). Переключитесь на главный узел по ssh и выполните команду:
kubectl get nodesРезультат команды будет следующим:
NAME STATUS ROLES AGE VERSION control-plane Ready control-plane 5m14s worker1 Ready <none> 58s worker2 Ready <none> 65s