Содержание

Установка K3s на Oracle Linux

Гид по установке K3s на Oracle Linux 9 в двунодовой конфигурации: сервер управления (control plane) и сервер обработки нагрузки (worker).

Построим решение, как на схеме ниже: один сервер управления кластером, один агент. При этом настроим так, чтобы контейнеры запускались только на второй ноде.

K3s architecture

Архитектура K3s

Настройки ниже применяем и к серверу, и к агенту.

Отключаем nm-cloud-setup:

shell-session

systemctl disable nm-cloud-setup.service nm-cloud-setup.timer

Добавляем сервисы в firewalld:

shell-session

firewall-cmd --permanent --new-service=k3s
firewall-cmd --permanent --service=k3s --set-description="K3s supervisor and Kubernetes API Server"
firewall-cmd --permanent --service=k3s --add-port=6443/tcp

firewall-cmd --permanent --new-service=kube-metric
firewall-cmd --permanent --service=kube-metric --set-description="Kubernetes Kubelet metrics"
firewall-cmd --permanent --service=kube-metric --add-port=10250/tcp

firewall-cmd --permanent --new-service=flannel-vxlan
firewall-cmd --permanent --service=flannel-vxlan --set-description="Kubernetes Flannel VXLAN"
firewall-cmd --permanent --service=flannel-vxlan --add-port=8472/udp

Добавляем доверенные подсети:

shell-session

firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
firewall-cmd --permanent --zone=trusted --add-source=10.43.0.0/16

Донастраиваем межсетевой экран:

shell-session

firewall-cmd --permanent --zone=public --add-service=k3s
firewall-cmd --permanent --zone=public --add-service=kube-metric
firewall-cmd --permanent --zone=public --add-service=flannel-vxlan
firewall-cmd --reload

Скачиваем установщик, делаем исполняемым:

shell-session

wget https://get.k3s.io -O k3s.sh
chmod u+x k3s.sh

Создаём конфигурацию — включаем SELinux, запрещаем планировать запуск контейнеров на ноде управления, отключаем ненужные функции:

shell-session

mkdir -p /etc/rancher/k3s

 echo \
'disable-cloud-controller: true
servicelb: false
traefik: false
selinux: true
node-taint: node-role.kubernetes.io/master=true:NoSchedule' \
> /etc/rancher/k3s/config.yaml

Устанавливаем K3s server:

shell-session

INSTALL_K3S_VERSION='v1.26.0+k3s1' ./k3s.sh server

Смотрим токен для агента:

shell-session

cat /var/lib/rancher/k3s/server/node-token

Донастраиваем межсетевой экран:

shell-session

firewall-cmd --permanent --zone=public --add-service=kube-metric
firewall-cmd --permanent --zone=public --add-service=flannel-vxlan
firewall-cmd --reload

Создаём конфигурацию - вписываем адрес сервера и токен:

shell-session

mkdir -p /etc/rancher/k3s

 echo \
'server: https://10.11.12.13:6443
token: K10c...602b::server:1b10...f476
selinux: true' \
> /etc/rancher/k3s/config.yaml

Скачиваем установщик, делаем исполняемым:

shell-session

wget https://get.k3s.io -O k3s.sh
chmod u+x k3s.sh

Устанавливаем K3s agent:

shell-session

INSTALL_K3S_VERSION='v1.26.0+k3s1' ./k3s.sh agent

Добавляем доверенные подсети:

shell-session

firewall-cmd --permanent --zone=trusted --add-source=2001:cafe:42::/96
firewall-cmd --permanent --zone=trusted --add-source=2001:cafe:43::/112

Создаём конфигурацию — включаем SELinux, задаём кластерные подсети и включаем NAT:

shell-session

mkdir -p /etc/rancher/k3s

 echo \
'disable-cloud-controller: true
selinux: true
cluster-cidr:
  - 2001:cafe:42::/96
service-cidr:
  - 2001:cafe:43::/112
kube-controller-manager-arg: node-cidr-mask-size=112
flannel-ipv6-masq: true' \
> /etc/rancher/k3s/config.yaml

Устанавливаем K3s:

shell-session

INSTALL_K3S_VERSION='v1.28.4+k3s2' ./k3s.sh
Замечание

Если сервис не стартует с ошибкой

log

level=fatal msg="starting kubernetes: preparing server: failed to normalize token; must be in format K10<CA-HASH>::<USERNAME>:<PASSWORD> or <PASS>

то удаляем файл /var/lib/rancher/k3s/server/token и перезапускаем сервис.

Добавляем доверенные подсети:

shell-session

firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
firewall-cmd --permanent --zone=trusted --add-source=10.43.0.0/16
firewall-cmd --permanent --zone=trusted --add-source=2001:cafe:42::/96
firewall-cmd --permanent --zone=trusted --add-source=2001:cafe:43::/112

Создаём конфигурацию — включаем SELinux, задаём кластерные подсети и включаем NAT:

shell-session

mkdir -p /etc/rancher/k3s

 echo \
'disable-cloud-controller: true
selinux: true
node-ip: 233.252.0.10,2001:db8::10
cluster-cidr: 10.42.0.0/16,2001:cafe:42::/96
service-cidr: 10.43.0.0/16,2001:cafe:43::/112
kube-controller-manager-arg: node-cidr-mask-size-ipv6=112
kubelet-arg: node-ip=233.252.0.10,2001:db8::10
flannel-ipv6-masq: true
' \
> /etc/rancher/k3s/config.yaml

233.252.0.10 и 2001:db8::10 - IPv4 и IPv6 адреса ноды соответственно.

Устанавливаем K3s:

shell-session

INSTALL_K3S_VERSION='v1.28.4+k3s2' ./k3s.sh
  1. K3s - Quick-Start Guide
  2. K3s Installation
  3. K3s server
  4. K3s agent
  5. K3s Installation
  6. Taints and Tolerations
  7. How to add Service
  8. IPv6 masquerade NAT rules missing in dual-stack installation
  9. IPv4/IPv6 dual-stack
  10. Validate IPv4/IPv6 dual-stack
  11. K3s service failed to start after upgrade