mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 15:22:37 +03:00
homework 12.2: complete task 1, partially complete task 2
This commit is contained in:
@@ -57,4 +57,5 @@
|
|||||||
* [11.2. Микросервисы: принципы](/src/homework/11-microservices/11.2)
|
* [11.2. Микросервисы: принципы](/src/homework/11-microservices/11.2)
|
||||||
* [11.3. Микросервисы: подходы](/src/homework/11-microservices/11.3)
|
* [11.3. Микросервисы: подходы](/src/homework/11-microservices/11.3)
|
||||||
* [11.4. Микросервисы: масштабирование](/src/homework/11-microservices/11.4)
|
* [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)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
Выполнение [домашнего задания](https://github.com/netology-code/devkub-homeworks/blob/main/12-kubernetes-01-intro.md)
|
Выполнение [домашнего задания](https://github.com/netology-code/devkub-homeworks/blob/main/12-kubernetes-01-intro.md)
|
||||||
по теме "12.1 Компоненты Kubernetes"
|
по теме "12.1. Компоненты Kubernetes"
|
||||||
|
|
||||||
## Q/A
|
## Q/A
|
||||||
|
|
||||||
|
|||||||
20
src/homework/12-kubernetes/12.2/hello_node_deployment.yml
Normal file
20
src/homework/12-kubernetes/12.2/hello_node_deployment.yml
Normal file
@@ -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
|
||||||
145
src/homework/12-kubernetes/12.2/readme.md
Normal file
145
src/homework/12-kubernetes/12.2/readme.md
Normal file
@@ -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 <pod_id>, kubectl describe pod <pod_id>)
|
||||||
|
|
||||||
|
Для достижения поставленной задачи необходимо:
|
||||||
|
* создать сервисный аккаунт
|
||||||
|
```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
|
||||||
9
src/homework/12-kubernetes/12.2/serviceacc.yml
Normal file
9
src/homework/12-kubernetes/12.2/serviceacc.yml
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user