# Deployment
Конфиг deployment.yaml
```yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- image: nginx:1.20
name: nginx
ports:
- containerPort: 80
```
## 1. Создаем deployment
Для этого выполним команду:
```bash
kubectl apply -f deployment.yaml
```
Проверяем список pods, для этого выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно таким:
```bash
NAME READY STATUS RESTARTS AGE
my-deployment-7c768c95c4-47jxz 0/1 ContainerCreating 0 2s
my-deployment-7c768c95c4-lx9bm 0/1 ContainerCreating 0 2s
```
Проверяем список replicaset, для этого выполним команду:
```bash
kubectl get replicaset
```
Результат должен быть примерно таким:
```bash
NAME DESIRED CURRENT READY AGE
my-deployment-7c768c95c4 2 2 2 1m
```
## 2. Обновляем версию image
Обновляем версию image для container в deployment my-deployment.
Для этого выполним команду:
```bash
kubectl set image deployment my-deployment nginx=nginx:1.21
```
Проверяем результат, для этого выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно таким:
```bash
NAME READY STATUS RESTARTS AGE
my-deployment-685879478f-7t6ws 0/1 ContainerCreating 0 1s
my-deployment-685879478f-gw7sq 0/1 ContainerCreating 0 1s
my-deployment-7c768c95c4-47jxz 0/1 Terminating 0 5m
my-deployment-7c768c95c4-lx9bm 1/1 Running 0 5m
```
И через какое-то время вывод этой команды станет:
```bash
NAME READY STATUS RESTARTS AGE
my-deployment-685879478f-7t6ws 1/1 Running 0 33s
my-deployment-685879478f-gw7sq 1/1 Running 0 33s
```
Проверяем что в новых pod новый image. Для этого выполним команду,
заменив имя pod на имя вашего pod:
```bash
kubectl describe pod my-deployment-685879478f-7t6ws
```
Результат должен быть примерно таким:
```bash
Image: nginx:1.21
```
Проверяем что стало с replicaset, для этого выполним команду:
```bash
kubectl get replicaset
```
Результат должен быть примерно таким:
```bash
NAME DESIRED CURRENT READY AGE
my-deployment-685879478f 2 2 2 2m
my-deployment-7c768c95c4 0 0 0 7m
```
## 3. Чистим за собой кластер
```bash
kubectl delete deployment --all
```
# Resources
Конфиг deployment-with-resources.yaml
```yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- image: nginx:1.20
name: nginx
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 100m
memory: 100Mi
```
## 1. Создаем deployment с ресурсами
```bash
kubectl apply -f deployment-with-resources.yaml
```
Смотрим что получилось
```bash
kubectl get pod
```
Должны увидеть что-то типа такого
```bash
NAME READY STATUS RESTARTS AGE
my-deployment-57fff9c845-2qv5l 0/1 ContainerCreating 0 1s
my-deployment-57fff9c845-h8bbw 0/1 ContainerCreating 0 1s
```
## 2. Увеличиваем количество ресурсов для нашего деплоймента
```bash
kubectl patch deployment my-deployment --patch '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","resources":{"requests":{"cpu":"10"},"limits":{"cpu":"10"}}}]}}}}'
```
Смотрим что получилось
```bash
kubectl get pod
```
Должны увидеть что-то типа такого
```bash
NAME READY STATUS RESTARTS AGE
my-deployment-68684546b9-gm894 0/1 Pending 0 37s
my-deployment-9ddd794f9-jvff6 1/1 Running 0 51s
my-deployment-9ddd794f9-ztvq9 1/1 Running 0 51s
```
Смотрим, почему поды не могут создаться
```bash
kubectl describe po my-deployment-845d88fdcf-9bd29
```
Видим в эвентах что-то типа
```bash
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 87s default-scheduler 0/8 nodes are available: 8 Insufficient cpu.
```
## 3. Чистим за собой кластер
```bash
kubectl delete deployment --all
```