Deckhouse Kubernetes Platform на РЕД виртуализации
На данном этапе вы создали кластер, который состоит из единственного узла — master-узла. На master-узле по умолчанию работает только ограниченный набор системных компонентов. Для полноценной работы кластера необходимо либо добавить в кластер хотя бы один worker-узел, либо разрешить остальным компонентам Deckhouse работать на master-узле.
Выберите ниже один из двух вариантов, для продолжения установки кластера:
Добавьте узел в кластер (подробнее о добавлении статического узла в кластер читайте в документации):
- Подготовьте чистую виртуальную машину, которая будет узлом кластера.
-
Настройте StorageClass локального хранилища, выполнив на master-узле следующую команду:
1sudo -i d8 k create -f - << EOF 2apiVersion: deckhouse.io/v1alpha1 3kind: LocalPathProvisioner 4metadata: 5 name: localpath 6spec: 7 path: "/opt/local-path-provisioner" 8 reclaimPolicy: Delete 9EOF
-
Укажите, что созданный StorageClass должен использоваться как StorageClass по умолчанию. Для этого выполните на master-узле следующую команду:
1sudo -i d8 k patch mc global --type merge \ 2 -p "{\"spec\": {\"settings\":{\"defaultClusterStorageClass\":\"localpath\"}}}"
-
Создайте NodeGroup
worker
. Для этого выполните на master-узле следующую команду:1sudo -i d8 k create -f - << EOF 2apiVersion: deckhouse.io/v1 3kind: NodeGroup 4metadata: 5 name: worker 6spec: 7 nodeType: Static 8 staticInstances: 9 count: 1 10 labelSelector: 11 matchLabels: 12 role: worker 13EOF
-
Сгенерируйте SSH-ключ с пустой парольной фразой. Для этого выполните на master-узле следующую команду:
1ssh-keygen -t rsa -f /dev/shm/caps-id -C "" -N ""
-
Создайте в кластере ресурс SSHCredentials. Для этого выполните на master-узле следующую команду:
1sudo -i d8 k create -f - <<EOF 2apiVersion: deckhouse.io/v1alpha1 3kind: SSHCredentials 4metadata: 5 name: caps 6spec: 7 user: caps 8 privateSSHKey: "`cat /dev/shm/caps-id | base64 -w0`" 9EOF
-
Выведите публичную часть сгенерированного ранее SSH-ключа (он понадобится на следующем шаге). Для этого выполните на master-узле следующую команду:
1cat /dev/shm/caps-id.pub
-
На подготовленной виртуальной машине создайте пользователя
caps
. Для этого выполните следующую команду, указав публичную часть SSH-ключа, полученную на предыдущем шаге:1# Укажите публичную часть SSH-ключа пользователя. 2export KEY='<SSH-PUBLIC-KEY>' 3useradd -m -s /bin/bash caps 4usermod -aG sudo caps 5echo 'caps ALL=(ALL) NOPASSWD: ALL' | sudo EDITOR='tee -a' visudo 6mkdir /home/caps/.ssh 7echo $KEY >> /home/caps/.ssh/authorized_keys 8chown -R caps:caps /home/caps 9chmod 700 /home/caps/.ssh 10chmod 600 /home/caps/.ssh/authorized_keys
-
В операционных системах семейства Astra Linux, при использовании модуля мандатного контроля целостности Parsec, сконфигурируйте максимальный уровень целостности для пользователя
caps
:1pdpl-user -i 63 caps
-
Создайте StaticInstance для добавляемого узла. Для этого выполните на master-узле следующую команду, указав IP-адрес добавляемого узла:
1# Укажите IP-адрес узла, который необходимо подключить к кластеру. 2export NODE=<NODE-IP-ADDRESS> 3sudo -i d8 k create -f - <<EOF 4apiVersion: deckhouse.io/v1alpha1 5kind: StaticInstance 6metadata: 7 name: d8cluster-worker 8 labels: 9 role: worker 10spec: 11 address: "$NODE" 12 credentialsRef: 13 kind: SSHCredentials 14 name: caps 15EOF
Убедитесь, что все узлы кластера находятся в статусе
Ready
.Выполните на master-узле следующую команду, чтобы получить список узлов кластера:
1sudo -i d8 k get no
Запуск всех компонентов Deckhouse после завершения установки может занять какое-то время.
Убедитесь, что под Kruise controller manager модуля ingress-nginx запустился и находится в статусе
Ready
.Выполните на master-узле следующую команду:
1sudo -i d8 k -n d8-ingress-nginx get po -l app=kruise
Далее нужно создать Ingress-контроллер, создать пользователя для доступа в веб-интерфейсы и настроить DNS.
Установка Ingress-контроллера
Создайте на master-узле файл
ingress-nginx-controller.yml
содержащий конфигурацию Ingress-контроллера:1# Секция, описывающая параметры NGINX Ingress controller. 2# https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/ingress-nginx/cr.html 3apiVersion: deckhouse.io/v1 4kind: IngressNginxController 5metadata: 6 name: nginx 7spec: 8 ingressClass: nginx 9 # Способ поступления трафика из внешнего мира. 10 inlet: HostPort 11 hostPort: 12 httpPort: 80 13 httpsPort: 443 14 # Описывает, на каких узлах будет находиться Ingress-контроллер. 15 # Возможно, захотите изменить. 16 # Больше примеров здесь 17 # https://deckhouse.ru/products/kubernetes-platform/documentation/v1/modules/ingress-nginx/examples.html 18 nodeSelector: 19 node-role.kubernetes.io/control-plane: "" 20 tolerations: 21 - effect: NoSchedule 22 key: node-role.kubernetes.io/control-plane 23 operator: Exists
Примените его, выполнив на master-узле следующую команду:
1sudo -i d8 k create -f ingress-nginx-controller.yml
Запуск Ingress-контроллера после завершения установки Deckhouse может занять какое-то время. Прежде чем продолжить убедитесь что Ingress-контроллер запустился (выполните на
master-узле
):1sudo -i d8 k -n d8-ingress-nginx get po -l app=controller
Дождитесь перехода подов Ingress-контроллера в статус
Ready
.Создание пользователя для доступа в веб-интерфейсы кластера
Создайте на master-узле файл
user.yml
содержащий описание учетной записи пользователя и прав доступа:1apiVersion: deckhouse.io/v1 2kind: ClusterAuthorizationRule 3metadata: 4 name: admin 5spec: 6 # список учётных записей Kubernetes RBAC 7 subjects: 8 - kind: User 9 name: admin@deckhouse.io 10 # предустановленный шаблон уровня доступа 11 accessLevel: SuperAdmin 12 # разрешить пользователю делать kubectl port-forward 13 portForwarding: true 14--- 15# секция, описывающая параметры статического пользователя 16# используемая версия API Deckhouse 17apiVersion: deckhouse.io/v1 18kind: User 19metadata: 20 name: admin 21spec: 22 # e-mail пользователя 23 email: admin@deckhouse.io 24 # это хэш пароля r135hz4nro, сгенерированного сейчас 25 # сгенерируйте свой или используйте этот, но только для тестирования 26 # echo "r135hz4nro" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0 27 # возможно, захотите изменить 28 password: 'JDJhJDEwJDJaRDZNNks4eTlhMGZPMlVWbGRnV2VxNndWM01lMTQ2dWNMOU14NjZ1Y0w1THZIaXczTGhX'
Примените его, выполнив на master-узле следующую команду:
1sudo -i d8 k create -f user.yml
- Создание DNS-записи, для доступа в веб-интерфейсы кластера
- Выясните публичный IP-адрес узла, на котором работает Ingress-контроллер.
- Если у вас есть возможность добавить DNS-запись используя DNS-сервер:
- Если ваш шаблон DNS-имен кластера является wildcard
DNS-шаблоном (например,
%s.kube.my
), то добавьте соответствующую wildcard A-запись со значением публичного IP-адреса, который вы получили выше. -
Если ваш шаблон DNS-имен кластера НЕ является wildcard DNS-шаблоном (например,
%s-kube.company.my
), то добавьте А или CNAME-записи со значением публичного IP-адреса, который вы получили выше, для следующих DNS-имен сервисов Deckhouse в вашем кластере:1api.example.com 2argocd.example.com 3dashboard.example.com 4documentation.example.com 5dex.example.com 6grafana.example.com 7hubble.example.com 8istio.example.com 9istio-api-proxy.example.com 10kubeconfig.example.com 11openvpn-admin.example.com 12prometheus.example.com 13status.example.com 14upmeter.example.com
- Важно: Домен, используемый в шаблоне, не должен совпадать с доменом, указанным в параметре clusterDomain и внутренней сервисной зоне сети. Например, если используется
clusterDomain: cluster.local
(значение по умолчанию), а сервисная зона сети — ru-central1.internal, то publicDomainTemplate не может быть%s.cluster.local
или%s.ru-central1.internal
.
- Если ваш шаблон DNS-имен кластера является wildcard
DNS-шаблоном (например,
Если вы не имеете под управлением DNS-сервер: добавьте статические записи соответствия имен конкретных сервисов публичному IP-адресу узла, на котором работает Ingress-контроллер.
Например, на персональном Linux-компьютере, с которого необходим доступ к сервисам Deckhouse, выполните следующую команду (укажите ваш публичный IP-адрес в переменной
PUBLIC_IP
) для добавления записей в файл/etc/hosts
(для Windows используйте файл%SystemRoot%\system32\drivers\etc\hosts
):1export PUBLIC_IP="<PUBLIC_IP>" 2sudo -E bash -c "cat <<EOF >> /etc/hosts 3$PUBLIC_IP api.example.com 4$PUBLIC_IP argocd.example.com 5$PUBLIC_IP dashboard.example.com 6$PUBLIC_IP documentation.example.com 7$PUBLIC_IP dex.example.com 8$PUBLIC_IP grafana.example.com 9$PUBLIC_IP hubble.example.com 10$PUBLIC_IP istio.example.com 11$PUBLIC_IP istio-api-proxy.example.com 12$PUBLIC_IP kubeconfig.example.com 13$PUBLIC_IP openvpn-admin.example.com 14$PUBLIC_IP prometheus.example.com 15$PUBLIC_IP status.example.com 16$PUBLIC_IP upmeter.example.com 17EOF 18"