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.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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
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