Files
netology-devops/src/homework/12-kubernetes/12.2

Выполнение домашнего задания по теме "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