From b1b854606622f26cafb99d049a31d5c132a61157 Mon Sep 17 00:00:00 2001 From: dannc Date: Tue, 8 Nov 2022 10:47:30 +0700 Subject: [PATCH] homework 12.2: complete task 1, partially complete task 2 --- readme.md | 3 +- src/homework/12-kubernetes/12.1/readme.md | 2 +- .../12.2/hello_node_deployment.yml | 20 +++ src/homework/12-kubernetes/12.2/readme.md | 145 ++++++++++++++++++ .../12-kubernetes/12.2/serviceacc.yml | 9 ++ 5 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 src/homework/12-kubernetes/12.2/hello_node_deployment.yml create mode 100644 src/homework/12-kubernetes/12.2/readme.md create mode 100644 src/homework/12-kubernetes/12.2/serviceacc.yml diff --git a/readme.md b/readme.md index 415018b..02b9dea 100644 --- a/readme.md +++ b/readme.md @@ -57,4 +57,5 @@ * [11.2. Микросервисы: принципы](/src/homework/11-microservices/11.2) * [11.3. Микросервисы: подходы](/src/homework/11-microservices/11.3) * [11.4. Микросервисы: масштабирование](/src/homework/11-microservices/11.4) -* [12.1 Компоненты Kubernetes](/src/homework/12-kubernetes/12.1) +* [12.1. Компоненты Kubernetes](/src/homework/12-kubernetes/12.1) +* [12.2. Команды для работы с Kubernetes](/src/homework/12-kubernetes/12.2) diff --git a/src/homework/12-kubernetes/12.1/readme.md b/src/homework/12-kubernetes/12.1/readme.md index 34deed4..e864013 100644 --- a/src/homework/12-kubernetes/12.1/readme.md +++ b/src/homework/12-kubernetes/12.1/readme.md @@ -1,5 +1,5 @@ Выполнение [домашнего задания](https://github.com/netology-code/devkub-homeworks/blob/main/12-kubernetes-01-intro.md) -по теме "12.1 Компоненты Kubernetes" +по теме "12.1. Компоненты Kubernetes" ## Q/A diff --git a/src/homework/12-kubernetes/12.2/hello_node_deployment.yml b/src/homework/12-kubernetes/12.2/hello_node_deployment.yml new file mode 100644 index 0000000..66fd214 --- /dev/null +++ b/src/homework/12-kubernetes/12.2/hello_node_deployment.yml @@ -0,0 +1,20 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hello-node-deployment + labels: + app: hello-node +spec: + replicas: 2 + selector: + matchLabels: + app: hello-node + template: + metadata: + labels: + app: hello-node + spec: + containers: + - name: hello-node + image: k8s.gcr.io/echoserver:1.4 diff --git a/src/homework/12-kubernetes/12.2/readme.md b/src/homework/12-kubernetes/12.2/readme.md new file mode 100644 index 0000000..4556668 --- /dev/null +++ b/src/homework/12-kubernetes/12.2/readme.md @@ -0,0 +1,145 @@ +Выполнение [домашнего задания](https://github.com/netology-code/devkub-homeworks/blob/main/12-kubernetes-02-commands.md) +по теме "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](./hello_node_deployment.yml). +Затем при помощи утилиты `kubectl` применить данную конфигурацию к кластеру: + +```shell +kubectl apply -f hello_node_deployment.yml +``` + +После этого можно просмотреть информацию о деплойменте и подах: + +```shell +kubectl get deployment +``` + +```text +NAME READY UP-TO-DATE AVAILABLE AGE +hello-node-deployment 2/2 2 2 108s +``` + +```shell +kubectl get pods +``` + +```text +NAME READY STATUS RESTARTS AGE +hello-node-deployment-58c649b5df-dwvb2 1/1 Running 0 113s +hello-node-deployment-58c649b5df-mhsbm 1/1 Running 0 113s +``` + +### Задание 2 + +> Просмотр логов для разработки +> +> Разработчикам крайне важно получать обратную связь от штатно работающего приложения и, еще важнее, об ошибках в его работе. +> Требуется создать пользователя и выдать ему доступ на чтение конфигурации и логов подов в app-namespace. +> +> Требования: +> * создан новый токен доступа для пользователя +> * пользователь прописан в локальный конфиг (~/.kube/config, блок users) +> * пользователь может просматривать логи подов и их конфигурацию (kubectl logs pod , kubectl describe pod ) + +Для достижения поставленной задачи необходимо: +* создать сервисный аккаунт + ```shell + kubectl create serviceaccount readonlyuser + ``` +* создать новую роль с доступами только на чтение данных подов: + ```shell + kubectl create clusterrole readonlyrole --verb=get --verb=list --verb=watch --resource=pods + ``` +* создать объект `rolebinding`: + ```shell + kubectl create clusterrolebinding readonlybinding --serviceaccount=default:readonlyuser --clusterrole=readonlyrole + ``` +* создать новый токен, используя спецификацию [serviceacc.yml](./serviceacc.yml) + ```shell + kubectl apply -f serviceacc.yml + ``` +* получить токен, который был создан на предыдущем шаге: + ```shell + 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` вместе с токеном: + ```shell + kubectl config set-credentials developer --token=$TOKEN + ``` +* создать новый контекст для пользователя: + ```shell + kubectl config set-context podreader --cluster=minikube --user=developer + ``` + +После этого можно переключиться на новый контекст и просмотреть все доступные команды: + +```shell +kubectl config use-context podreader +``` + +```shell +kubectl auth can-i create pods +``` + +```text +no +``` + +```shell +kubectl auth can-i delete pods +``` + +```text +no +``` + +```shell +kubectl describe pod hello-node-deployment-58c649b5df-dwvb2 +``` + +```text +Name: hello-node-deployment-58c649b5df-dwvb2 +Namespace: default +<...> +``` + +```shell +kubectl logs hello-node-deployment-58c649b5df-dwvb2 +``` + +// todo: forbidden + + + +### Задание 3 + +> Изменение количества реплик +> +> Поработав с приложением, вы получили запрос на увеличение количества реплик приложения для нагрузки. +> Необходимо изменить запущенный deployment, увеличив количество реплик до 5. Посмотрите статус запущенных подов после увеличения реплик. +> +> Требования: +> * в deployment из задания 1 изменено количество реплик на 5 +> * проверить что все поды перешли в статус running (kubectl get pods) + +// todo diff --git a/src/homework/12-kubernetes/12.2/serviceacc.yml b/src/homework/12-kubernetes/12.2/serviceacc.yml new file mode 100644 index 0000000..4b96948 --- /dev/null +++ b/src/homework/12-kubernetes/12.2/serviceacc.yml @@ -0,0 +1,9 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: oke-kubeconfig-sa-token + namespace: default + annotations: + kubernetes.io/service-account.name: readonlyuser +type: kubernetes.io/service-account-token