Files
k8s-deploy/env/avroid_prod/k8s-avroid-office.prod.local

Требования

Requirements

Версия Kuberspray и Kubernetes у текущих инвентору

Kuberspray v2.26.0
Kubernetes v1.30.4

Особенности развертывания кластера

Модуль Комментарий
Cluster name k8s-avroid-office.prod.local
Сеть Только IPv4
Сеть 172.24.0.0/18 - подсеть сервисов
Сеть 172.24.64.0/18 - подсеть подов
Сеть 30000-32767 - список портов, разрешённый к форвардингу на нодах
Маска подсети на ноду 24 (Итого - max 254 подов на ноде и max 64 ноды)
CNI calico
NTP-клиенты Настроены на локальные приватные NTP-сервера и московскую таймзону
DNS zone k8s-avroid-office.prod.local
DNS Dual CoreDNS + nodelocaldns
Etcd данные сервиса в /data/etcd на отдельном блочном устройстве с ext4)
Container runtime containerd (/var/lib/containerd на отдельном блочном устройстве с XFS)
Приватный реестр образов Используются приватные кеширующие зеркала с harbor.avroid.tech в настройках containerd
Диски Все ноды: /var/lib/containerd вынесен на отдельные блочное устройства с XFS
Диски k8s-control-0X: /data вынесен на отдельные блочное устройства с ext4
Диски k8s-worker/build-0X: /var/lib/kubelet/pods вынесен на отдельные блочное устройства с XFS
HA API Server
HA kube-vip c VIP 10.2.20.30 (k8s-avroid-office-prod.avroid.tech)
Ingress Nginx ingress controller 80 --> 30080 (k8s-worker-0X), 443 --> 30081 (k8s-worker-0X)
Ingress Работает только на нодах с кастомной меткой node-role.kubernetes.io/ingress-nginx:true
Дополнительные сервисы Helm, Metrics Server, Cert manager, netchecker

Доступ до развёрнутых сервисов

Ingress NGINX Controller

https://github.com/kubernetes/ingress-nginx/blob/main/README.md#readme

<worker_node>:30080/TCP --> nginx:80/TCP

<worker_node>:30081/TCP --> nginx:443/TCP

netchecker

https://github.com/Mirantis/k8s-netchecker-server

http://<IP_АДРЕС_НОДЫ>:31081/api/v1/agents/

http://<IP_АДРЕС_НОДЫ>:31081/api/v1/connectivity_check

http://<IP_АДРЕС_НОДЫ>:31081/metrics

kube-vip

Поднят VIP 10.2.20.30 между управляющими нодами, для того чтобы обеспечить отказоустойчивый доступ до API кластера

Подготовка окружения для развёртывания и развёртывание

1. Предварительная подготовка ВМ

Предварительно готовим ВМ основным набором спритов Ansible со следующими особенностями:

  • настраиваем дополнительные диски и точки монтирования
  • настраиваем авторизацию доменную
  • отключаем настройку NTP
  • отключаем настройку node_exporter

2. Обновляем подмодуль с Kubespray и проверяем что он стоит на необходимом тэге

cd env/<ОКРУЖЕНИЕ_XX>/<КЛАСТЕР_XX>
git submodule update --init --recursive
cd kubespray
git status
cd ../../..

3. Готовим окружение Ansible

Kubespray docs: Ansible Python Compatibility

Ansible Version Python Version
2.11 2.7,3.5-3.9
2.12 3.8-3.10
>=2.16.4 3.10-3.12
cd env/<ОКРУЖЕНИЕ_XX>/<КЛАСТЕР_XX>
export VENVDIR=kubespray-venv
export KUBESPRAYDIR=kubespray
python3 -m venv ./$VENVDIR
source $VENVDIR/bin/activate
pip3 install -U -r $KUBESPRAYDIR/requirements.txt

4. Запускаем раскатку кластера

cd env/<ОКРУЖЕНИЕ_XX>/<КЛАСТЕР_XX>
export VENVDIR=kubespray-venv
export KUBESPRAYDIR=kubespray
source $VENVDIR/bin/activate
cd $KUBESPRAYDIR
ansible-playbook cluster.yml -i ../inventory/inventory.ini -e "@../inventory/hardening.yaml" -bK -v

5. Копируем конфиг для подключения к кластеру через kubectl

Копируем с любой из master-нод конфиг:

/etc/kubernetes/admin.conf

К себе на машину и правим, в опции server указываем вместо 127.0.0.1 внешний адрес мастер-ноды.

Затем настраиваем любым удобным способом работу с кластером через него: Kubespray docs: Access the kubernetes cluster

Дополнительные действия с кластером через Kubespray

Дополнительные теги: Kubespray docs: Ansible tags

Добавление/удаление нод: Kubespray docs: Adding/replacing a node

Обновление кластера: Kubespray docs: Upgrading Kubernetes in Kubespray