DO-1431 Co-authored-by: denis.patrakeev <denis.patrakeev@avroid.tech> Reviewed-on: https://git.avroid.tech/K8s/k8s-deploy/pulls/3
120 lines
6.7 KiB
Markdown
120 lines
6.7 KiB
Markdown
## Требования
|
||
|
||
[Requirements](./kubespray/README.md#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 |
|
||
| 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
|
||
|
||
|
||
## Подготовка окружения для развёртывания и развёртывание
|
||
|
||
### 1. Предварительная подготовка ВМ
|
||
|
||
Предварительно готовим ВМ основным набором спритов Ansible со следующими особенностями:
|
||
- настраиваем дополнительные диски и точки монтирования
|
||
- настраиваем авторизацию доменную
|
||
- отключаем настройку NTP
|
||
- отключаем настройку node_exporter
|
||
|
||
### 2. Обновляем подмодуль с Kubespray и проверяем что он стоит на необходимом тэге
|
||
```bash
|
||
cd env/<ОКРУЖЕНИЕ_XX>/<КЛАСТЕР_XX>
|
||
git submodule update --init --recursive
|
||
cd kubespray
|
||
git status
|
||
cd ../../..
|
||
```
|
||
|
||
### 3. Готовим окружение Ansible
|
||
[Kubespray docs: Ansible Python Compatibility](./kubespray/docs/ansible/ansible.md#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 |
|
||
|
||
```bash
|
||
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. Запускаем раскатку кластера
|
||
```bash
|
||
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 -bkK -v
|
||
```
|
||
|
||
### 5. Копируем конфиг для подключения к кластеру через kubectl
|
||
Копируем с любой из master-нод конфиг:
|
||
```text
|
||
/etc/kubernetes/admin.conf
|
||
```
|
||
К себе на машину и правим, в опции `server` указываем вместо `127.0.0.1` внешний адрес мастер-ноды.
|
||
|
||
Затем настраиваем любым удобным способом работу с кластером через него:
|
||
[Kubespray docs: Access the kubernetes cluster](./kubespray/docs/getting_started/setting-up-your-first-cluster.md#access-the-kubernetes-cluster)
|
||
|
||
|
||
## Дополнительные действия с кластером через Kubespray
|
||
Дополнительные теги:
|
||
[Kubespray docs: Ansible tags](./kubespray/docs/ansible/ansible.md#ansible-tags)
|
||
|
||
Добавление/удаление нод:
|
||
[Kubespray docs: Adding/replacing a node](./kubespray/docs/operations/nodes.md)
|
||
|
||
Обновление кластера:
|
||
[Kubespray docs: Upgrading Kubernetes in Kubespray](./kubespray/docs/operations/upgrades.md)
|