Установка RKE2 в сетях проекта CLO вручную
RKE2 (Rancher Kubernetes Engine) — это дистрибутив Kubernetes, поставляемый и запускаемый целиком в виде контейнерного приложения (Docker). Использование RKE позволяет избежать сложностей, связанных с установкой и первоначальной настройкой Kubernetes.
После установки RKE2 в соответствии с официальным руководством внутренняя сеть между нодами может не работать при подключении дополнительных нод к кластеру. Чтобы избежать этой проблемы, выполните установку RKE2 вручную с помощью приведённой ниже инструкции.
Примечание. Установка RKE2 через Rancher Manager не приводит к такой ошибке.
Пример установки RKE2 вручную
Конфигурация сервера
В данном примере используется следующая конфигурация:
- Сервер: Ubuntu 22
 - control plane: 2 CPU, 4Gb RAM, 20 Gb диск , 1 внешний IP-адрес
 - worker: 6 CPU, 8Gb RAM, 80 Gb диск, 1 внешний IP-адрес
 
Установка ноды control plane
В первую очередь установите ноду control plane. Для этого выполните следующие действия:
- Подключитесь к ноде через SSH
 - Создайте конфигурационный файл:
 
cat <<EOF >>config.server.yaml
write-kubeconfig-mode: "0644"
node-ip:
  - [внутренний адрес ноды control plane]
node-external-ip:
  - [внешний адрес ноды control plane]
advertise-address:
  - [внутренний адрес ноды control plane>]
cni:
  - calico
disable:
  - rke2-canal
EOF
Примечание. Узнать внутренний и внешний IP-адреса ноды можно через Личный кабинет в списке серверов, или введя в консоли управления сервером команду ip a.
- Выполните команды конфигурирования сервера
 
curl -sfL https://get.rke2.io | sh -
mkdir -p /etc/rancher/rke2/
cp config.server.yaml /etc/rancher/rke2/config.yaml
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
export PATH=$PATH:/var/lib/rancher/rke2/bin
systemctl enable --now rke2-server.service
Примечание. Запуск RKE2 в среднем занимает около 5 минут.
- Проверить статус RKE2 можно с помощью следующих команд:
 
journalctl -u rke2-server -fkubectl cluster-info
- Получите токен авторизации для подключения нод к кластеру
 
cat /var/lib/rancher/rke2/server/node-token
Внимание! Сохраните строку вывода вышеприведённой команды — это токен, который понадобится для подключения каждой ведомой ноды!
Установка ноды worker plane
- На ведомой ноде кластера создайте конфигурационный файл:
 
cat <<EOF >>config.agent.yaml 
server: https://[внутренний ip адрес control-plane]:9345
token: [токен]
node-ip:
  - <внутренний адрес ноды worker>
node-external-ip:
  - <внешний адрес ноды worker>
cni:
  - calico
disable:
  - rke2-canal
EOF
Примечание. Поле «токен» в конфигурационном файле заменяется на токен, полученный выводом последней команды cat при конфигурировании сервера control node (см. выше).
- Установите агент с помощью следующих команд:
 
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -
mkdir -p /etc/rancher/rke2/
cp config.agent.yaml /etc/rancher/rke2/config.yaml
systemctl enable --now rke2-agent.service
- Проверьте статус подключения рабочей ноды на сервере control node с помощью команды
 
kubectl get nodes
Эта команда выведет список нод, подключенных к кластеру.
- Назначьте статус для рабочей ноды
 
kubectl label nodes worker node-role.kubernetes.io/worker=true
Пример: Развёртывание приложений в кластере RKE2 с помощью манифеста
Здесь приведён пример манифеста, разворачивающего в кластере RKE2 приложение из образа Docker. Манифест разворачивает приложение, открывает к нему доступ через Ingress и настраивает масштабирование.
Примечание. В данном примере манифеста используется приложение Simple Web из Docker-образа:
yeasy/simple-web:latest
Вместо указанного приложения может быть использован любой другой образ и приложение, отвечающее на запросы HTTP через порт 80.
Чтобы развернуть приложение в кластере, выполните следующие действия:
- Создайте файл манифеста
 
#cat kubeplay.yaml
- Введите содержание манифеста
 
apiVersion: apps/v1
kind: Deployment
metadata:
 name: kubeplay
 namespace: default
spec:
 selector:
   matchLabels:
     run: kubeplay
 replicas: 1
 template:
   metadata:
     labels:
       run: kubeplay
   spec:
     containers:
     - name: kubeplay
       image: yeasy/simple-web:latest
       ports:
       - containerPort: 80
       resources:
         limits:
           cpu: 500m
         requests:
           cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
 name: kubeplay
 namespace: default
 labels:
   run: kubeplay
spec:
 ports:
 - port: 80
 selector:
   run: kubeplay
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
 name: kubeplay
 namespace: default
spec:
 scaleTargetRef:
   apiVersion: apps/v1
   kind: Deployment
   name: kubeplay
 minReplicas: 1
 maxReplicas: 10
 targetCPUUtilizationPercentage: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: "/"
spec:
  rules:
  - http:
      paths:
      - path: "/"
        pathType: Prefix
        backend:
          service:
            name: kubeplay
            port:
              number: 80
- Посмотрите результат работы манифеста, введя в строку браузера адрес:
 
http://[внешний IP-адрес кластера]:80
Примечание. Статус развёрнутых реплик приложения можно посмотреть с помощью следующей команды:
root@rke01:~# kubectl get pods -o wide