Выполнение домашнего задания по теме "12.2. Команды для работы с Kubernetes"
Q/A
Кластер — это сложная система, с которой крайне редко работает один человек. Квалифицированный devops умеет наладить работу всей команды, занимающейся каким-либо сервисом. После знакомства с кластером вас попросили выдать доступ нескольким разработчикам. Помимо этого требуется служебный аккаунт для просмотра логов.
Задание 1
Запуск пода из образа в деплойменте
Для начала следует разобраться с прямым запуском приложений из консоли. Такой подход поможет быстро развернуть инструменты отладки в кластере. Требуется запустить деплоймент на основе образа из hello world уже через deployment. Сразу стоит запустить 2 копии приложения (replicas=2).
Требования:
- пример из hello world запущен в качестве deployment
- количество реплик в deployment установлено в 2
- наличие deployment можно проверить командой kubectl get deployment
- наличие подов можно проверить командой kubectl get pods
Для начала необходимо описать спецификацию деплоймента: hello_node_deployment.yml.
Затем при помощи утилиты kubectl применить данную конфигурацию к кластеру:
kubectl apply -f hello_node_deployment.yml
После этого можно просмотреть информацию о деплойменте и подах:
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node-deployment 2/2 2 2 108s
kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-deployment-58c649b5df-4kgcv 1/1 Running 0 113s
hello-node-deployment-58c649b5df-mhsbm 1/1 Running 0 113s
Задание 2
Просмотр логов для разработки
Разработчикам крайне важно получать обратную связь от штатно работающего приложения и, еще важнее, об ошибках в его работе. Требуется создать пользователя и выдать ему доступ на чтение конфигурации и логов подов в app-namespace.
Требования:
- создан новый токен доступа для пользователя
- пользователь прописан в локальный конфиг (~/.kube/config, блок users)
- пользователь может просматривать логи подов и их конфигурацию (kubectl logs pod <pod_id>, kubectl describe pod <pod_id>)
Для достижения поставленной задачи необходимо:
- создать сервисный аккаунт, используя спецификацию service_account.yml
kubectl apply -f service_account.yml - создать новую роль с доступами только на чтение данных подов, используя спецификацию role.yml:
kubectl apply -f role.yml - создать объект
rolebinding, используя спецификацию rolebinding.yml:kubectl apply -f rolebinding.yml - создать новый токен, используя спецификацию service_acc_secret.yml
kubectl apply -f service_acc_secret.yml - получить токен, который был создан на предыдущем шаге:
TOKEN_NAME=$(kubectl describe serviceaccount readonlyuser | grep -i Tokens | awk '{print $2}') TOKEN_BASE64=$(kubectl get secret $TOKEN_NAME -o jsonpath='{.data.token}') TOKEN=$(echo $TOKEN_BASE64 | base64 --decode) - добавить нового пользователя в конфигурацию
kubectlвместе с токеном:kubectl config set-credentials developer --token=$TOKEN - создать новый контекст для пользователя:
kubectl config set-context podreader --cluster=minikube --user=developer
После этого можно переключиться на новый контекст и просмотреть все доступные команды:
kubectl config use-context podreader
kubectl auth can-i create pods
no
kubectl auth can-i delete pods
no
kubectl describe pod hello-node-deployment-58c649b5df-4kgcv
Name: hello-node-deployment-58c649b5df-4kgcv
Namespace: default
<...>
kubectl logs hello-node-deployment-58c649b5df-4kgcv
127.0.0.1 - - [09/Nov/2022:03:15:15 +0000] "GET / HTTP/1.1" 200 384 "-" "curl/7.47.0"
note чтобы у пода появились логи, необходимо сделать хотя бы один http-запрос к нему.
Это можно сделать, например, curl-запросом изнутри контейнера (необходимо перед этим вернуться в контекст админа minikube).
kubectl config use-context minikube
kubectl exec --tty --stdin hello-node-deployment-58c649b5df-4kgcv -- /bin/sh
curl http://localhost:8080
Задание 3
Изменение количества реплик
Поработав с приложением, вы получили запрос на увеличение количества реплик приложения для нагрузки. Необходимо изменить запущенный deployment, увеличив количество реплик до 5. Посмотрите статус запущенных подов после увеличения реплик.
Требования:
- в deployment из задания 1 изменено количество реплик на 5
- проверить что все поды перешли в статус running (kubectl get pods)
В спецификации hello_node_deployment.yml нужно изменить spec.replicas на 5
и заново применить конфигурацию:
kubectl apply -f hello_node_deployment.yml
deployment.apps/hello-node-deployment configured
Затем проверить состояние деплоймента:
kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node-deployment 5/5 5 5 26m