Skip to main content

Deployment Kubernetes Cluster

На этом этапе мы развернём Kubernetes кластер на локальном сервере, который будет использоваться для запуска всех сервисов.

Requirements к локальному серверу​

Минимальные требования для Kubernetes кластера:

  • Master node:

    • CPU: 2 ядра
    • RAM: 2 GB
    • Диск: 20 GB
    • ОС: Ubuntu 20.04/22.04 или аналогичная
  • Worker node (каждый):

    • CPU: 4 ядра
    • RAM: 4 GB
    • Диск: 50 GB
    • ОС: Ubuntu 20.04/22.04 или аналогичная

Рекомендуемые требования для production:

  • Master node:

    • CPU: 4 ядра
    • RAM: 4 GB
    • Диск: 50 GB
  • Worker node (каждый):

    • CPU: 8 ядер
    • RAM: 16 GB
    • Диск: 100 GB SSD

Для полнофункционального кластера рекомендуется минимум 3 worker узла.

Configuration inventory для Kubernetes​

Перед развёрткой необходимо настроить inventory файл с информацией о узлах кластера.

Откройте файл ansible/pangolin/inventory/hosts.yml и добавьте информацию о ваших Kubernetes узлах:

all:
children:
k8s_masters:
hosts:
k8s-master-1:
ansible_host: 192.168.1.10
ansible_user: ubuntu
ip: 192.168.1.10
# Добавьте дополнительные master узлы для HA
# k8s-master-2:
# ansible_host: 192.168.1.11
# ansible_user: ubuntu
# ip: 192.168.1.11

k8s_workers:
hosts:
k8s-worker-1:
ansible_host: 192.168.1.20
ansible_user: ubuntu
ip: 192.168.1.20
k8s-worker-2:
ansible_host: 192.168.1.21
ansible_user: ubuntu
ip: 192.168.1.21
# Добавьте дополнительные worker узлы
# k8s-worker-3:
# ansible_host: 192.168.1.22
# ansible_user: ubuntu
# ip: 192.168.1.22

Configuration переменных Kubespray​

Также можно настроить параметры Kubespray в секции vars:

  vars:
# Kubespray settings
k8s_cluster_name: "local-cluster"
kubespray_install_dir: "/opt/kubespray"
kubespray_version: "release-2.23"

Deployment Kubernetes через Kubespray​

Развёртка выполняется через Ansible playbook, который использует Kubespray для автоматической установки Kubernetes.

Выполнение развёртки​

Navigate to директорию с Ansible playbooks:

cd ansible/pangolin

Run playbook для развёртки Kubernetes:

ansible-playbook -i inventory/hosts.yml playbooks/deploy_local_k8s.yml

Playbook выполнит следующие действия:

  1. Роль kubespray:
    • Клонирование репозитория Kubespray
    • Подготовка inventory для Kubespray
    • Установка зависимостей (Python, Ansible)
    • Настройка сетевых параметров
    • Запуск Kubespray playbook для установки Kubernetes
    • Проверка работоспособности кластера
    • Настройка kubeconfig для доступа

Процесс развёртки​

Развёртка может занять 15-30 минут в зависимости от количества узлов и скорости сети.

Основные этапы:

  1. Подготовка узлов (установка пакетов, настройка системы)
  2. Установка container runtime (containerd)
  3. Установка kubeadm, kubelet, kubectl
  4. Инициализация control plane на master узлах
  5. Присоединение worker узлов к кластеру
  6. Установка сетевого плагина (Calico/Flannel)
  7. Установка CoreDNS
  8. Проверка работоспособности

Что делает Kubespray​

Kubespray автоматически:

  • Настраивает все необходимые компоненты Kubernetes
  • Настраивает сетевой плагин для pod-to-pod коммуникации
  • Настраивает DNS через CoreDNS
  • Настраивает сертификаты для безопасной коммуникации
  • Настраивает высокую доступность (если несколько master узлов)

Verification кластера​

После завершения развёртки, проверьте статус кластера.

Получение kubeconfig​

Kubeconfig файл будет создан на одной из master машин. Скопируйте его на локальную машину:

scp ubuntu@k8s-master-1:/home/ubuntu/.kube/config ~/.kube/config

Или, если playbook настроил доступ автоматически, проверьте файл:

cat ~/.kube/config

Verification узлов​

Check статус всех узлов:

kubectl get nodes

Все узлы должны быть в статусе Ready:

NAME            STATUS   ROLES           AGE   VERSION
k8s-master-1 Ready control-plane 5m v1.28.0
k8s-worker-1 Ready <none> 4m v1.28.0
k8s-worker-2 Ready <none> 4m v1.28.0

Verification системных подов​

Check, что все системные поды запущены:

kubectl get pods --all-namespaces

Все поды в namespace kube-system должны быть в статусе Running:

NAMESPACE     NAME                                      READY   STATUS    RESTARTS   AGE
kube-system calico-kube-controllers-xxx 1/1 Running 0 5m
kube-system calico-node-xxx 1/1 Running 0 5m
kube-system coredns-xxx 1/1 Running 0 5m
...

Инициализация Helmfile​

После успешной развёртки Kubernetes кластера, необходимо инициализировать Helmfile для управления Helm charts.

Navigate to директорию с Kubernetes конфигурацией:

cd kubernetes

Инициализируйте Helmfile:

helmfile init --force

Эта команда создаст директорию .helmfile с необходимыми конфигурационными файлами:

  • .helmfile/repositories.yaml - список Helm репозиториев
  • .helmfile/environments.yaml.gotmpl - настройки окружений
  • .helmfile/releases.yaml.gotmpl - автоматически генерируемый список релизов

Configuration Gateway API​

Некоторые сервисы требуют Gateway API для работы. Установите Gateway API CRDs:

kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.1/standard-install.yaml

Check установку:

kubectl get crd | grep gateway

Должны быть созданы CRDs для Gateway API.

Troubleshooting​

Issue: Узлы не в статусе Ready​

Check статус узла:

kubectl describe node k8s-worker-1

Check логи kubelet на узле:

ssh ubuntu@k8s-worker-1 "sudo journalctl -u kubelet -n 50"

Issue: Поды не запускаются​

Check статус подов:

kubectl get pods --all-namespaces
kubectl describe pod <pod-name> -n <namespace>

Check события:

kubectl get events --sort-by='.lastTimestamp'

Issue: Нет доступа к кластеру​

Check kubeconfig:

kubectl config view
kubectl cluster-info

Make sure, что вы можете подключиться к API серверу:

kubectl get nodes

Issue: Сетевая связность между подами​

Check статус сетевого плагина:

kubectl get pods -n kube-system | grep calico  # или flannel, в зависимости от плагина

Check сетевые политики:

kubectl get networkpolicies --all-namespaces

Next Steps​

После успешной развёртки Kubernetes кластера:

  1. Настройка секретов - настройка GPG ключей и SOPS для управления секретами