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

142 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Требования
[Requirements](./kubespray/README.md#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](./kubespray/docs/getting_started/getting-started.md#accessing-kubernetes-dashboard)
[Official docs: Accessing Kubernetes Dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui)
### 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 и проверяем что он стоит на необходимом тэге
```bash
cd env/<ОКРУЖЕНИЕ_XX>
git submodule update --init --recursive
cd kukbespray
git status
cd ../
```
### 3. Переходим в каталог с Kubespray
```bash
cd kubespray
```
### 4. Готовим окружение 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
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. Копируем инвентори
```bash
cp -r <...>/inventory ./inventory/
```
### 6. Запускаем раскатку кластера
```bash
ansible-playbook cluster.yml -i ../inventory/inventory.ini -bkK -v
```
### 7. Копируем конфиг для подключения к кластеру через 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)
### 8. Применяем кастомные патчи для Ingress NGINX
```bash
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/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)