---
# System prepended metadata

title: Deployment

---

# 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
```
