Установка 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 -f
kubectl 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