Выполнение домашнего задания по теме "12.4. Развертывание кластера на собственных серверах, лекция 2"
Q/A
Новые проекты пошли стабильным потоком. Каждый проект требует себе несколько кластеров: под тесты и продуктив. Делать все руками — не вариант, поэтому стоит автоматизировать подготовку новых кластеров.
Задание 1
Подготовить инвентарь kubespray
Новые тестовые кластеры требуют типичных простых настроек. Нужно подготовить инвентарь и проверить его работу. Требования к инвентарю:
- подготовка работы кластера из 5 нод: 1 мастер и 4 рабочие ноды;
- в качестве CRI — containerd;
- запуск etcd производить на мастере.
Пример inventory-файла для запуска kubespray: inventory.example.ini.
В данной конфигурации необходимо только изменить ip-адреса виртуальных машин.
Задание 2
Подготовить и проверить инвентарь для кластера в yandex.cloud
Часть новых проектов хотят запускать на мощностях yandex.cloud. Требования похожи:
- разворачивать 5 нод: 1 мастер и 4 рабочие ноды;
- работать должны на минимально допустимых виртуальных машинах
Для деплоя виртуальных машин в yandex.cloud написана конфигурация terraform. Для запуска процесса необходимо:
-
скопировать variables.tf.example в variables.tf и проставить необходимые значения (для создания нового токена можно использовать команду
yc iam create-token) -
просмотреть шаги, которые будут сделаны
terraform plan -
применить конфигурацию
terraform apply
Note: более подробно про terraform описано в домашних заданиях 5.4 и 7.x.
После выполнения в блоке outputs будут выведены ip-адреса созданных машин:
Outputs:
control_ips = {
"external" = "62.84.124.154"
"internal" = "192.168.10.12"
}
node_ips = {
"external" = [
"62.84.124.232",
"51.250.81.132",
"84.201.130.174",
"62.84.127.45",
]
"internal" = [
"192.168.10.3",
"192.168.10.10",
"192.168.10.18",
"192.168.10.15",
]
}
В конфигурацию kubespray нужно поставить значения:
- в
control ansible_hostзначениеcontrol_ips.external - в значения нод
ansibe_hostзначения изnode_ips.external
Следующим шагом будет непосредственный запуск kubespray (из корневой директории репозитория):
ansible-playbook -u ubuntu -i inventory/mycluster/inventory.ini cluster.yml -b -v
После успешной установки необходимо подключиться по ssh к ноде control и настроить kubectl:
ssh ubuntu@62.84.124.154
mkdir ~/.kube
sudo cp /etc/kubernetes/admin.conf ~/.kube/config
sudo chown ubuntu:ubuntu ~/.kube/config
После данных действий через kubectl возможно выполнять команды в созданном кластере.
kubectl get namespaces
NAME STATUS AGE
default Active 10m
kube-node-lease Active 10m
kube-public Active 10m
kube-system Active 10m
kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
calico-node-9g626 1/1 Running 0 10m
calico-node-9v8h5 1/1 Running 0 10m
calico-node-fnlxc 1/1 Running 0 10m
calico-node-pwxmx 1/1 Running 0 10m
calico-node-vfzpk 1/1 Running 0 10m
<...>
А так же можно развернуть новый деплоймент (например, hello_node_deployment.yml из домашнего задания 12.2)
kubectl apply hello_node_deployment.yml
kubectl get deployments
kubectl get pods
deployment.apps/hello-node-deployment created
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node-deployment 4/4 4 4 14s
NAME READY STATUS RESTARTS AGE
hello-node-deployment-7484fdb5bb-8fpf7 1/1 Running 0 16s
hello-node-deployment-7484fdb5bb-mmzr5 1/1 Running 0 16s
hello-node-deployment-7484fdb5bb-tvd4v 1/1 Running 0 16s
hello-node-deployment-7484fdb5bb-wbf5z 1/1 Running 0 16s