Files
k8s-deploy/env/avroid_prod
2024-12-18 19:52:42 +03:00
..

Требования

Requirements

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

Kuberspray v2.25.1
Kubernetes v1.29.10

TODO: ???

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

Модуль Комментарий
Cluster name k8s.avroid.local
Сеть Только IPv4
Сеть 172.24.0.0/18 - подсеть сервисов
Сеть 172.24.64.0/18 - подсеть подов
Сеть 10000-32767 - список портов, разрешённый к форвардингу на нодах
Маска подсети на ноду 25 (Итого - max 126 на ноде и max 128 нод)
CNI calico
DNS zone k8s.<ОКРУЖЕНИЕ_XX>.local
DNS Dual CoreDNS + nodelocaldns
Etcd данные сервиса в /data/etcd на отдельном блочном устройстве с ext4)
Core containerd (/var/lib/containerd на отдельном блочном устройстве с XFS)
Приватные регистри nexus.local.club в настройках
HA API Server
NTP Настроен с российскими серверами и Московской таймзоной
Ingress Nginx ingress controller 80 --> 30100 (Node), 443 --> 30101 (Node)
Дополнительные сервисы Kubernetes dashboard, Helm, Metrics Server, Cert manager, netchecker
netchecker netchecker
Local storage Локальный диск на master-нодах для Prometheus через local_volume_provisioner

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

Kubernetes Dashboard:

Kubespray docs: Accessing Kubernetes Dashboard

Official docs: Accessing Kubernetes Dashboard

Ingress NGINX Controller

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

С кастомными патчами из ./pathes/ingress_nginx

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

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

DNS

https://github.com/kubernetes/dns/blob/master/docs/specification.md

<worker_node>:53/UDP

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

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

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

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

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

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

cd env/<ОКРУЖЕНИЕ_XX>
git submodule update --init --recursive
cd kukbespray
git status
cd ../

3. Переходим в каталог с Kubespray

cd kubespray  

4. Готовим окружение 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
VENVDIR=kubespray-venv
KUBESPRAYDIR=kubespray
virtualenv --python=$(which python3) -m venv $VENVDIR
source $VENVDIR/bin/activate
cd $KUBESPRAYDIR
pip install -U -r requirements.txt

TODO: ???

5. Копируем инвентори

cp -r <...>/inventory ./inventory/

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

ansible-playbook cluster.yml -i ../inventory/inventory.ini -bkK -v

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

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

/etc/kubernetes/admin.conf

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

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

8. Применяем кастомные патчи для Ingress NGINX

kubectl --kubeconfig='config_k8s.<ОКРУЖЕНИЕ_XX>.local' -n ingress-nginx apply -f ./pathes/ingress_nginx/svc-ingress-nginx-controller.yaml
kubectl --kubeconfig='config_k8s.<ОКРУЖЕНИЕ_XX>.local' -n ingress-nginx apply -f ./pathes/ingress_nginx/ic-ingress-nginx.yaml

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

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

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

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