# Pod
## 1. Создаем Pod
Конфиг pod.yaml
```yaml
---
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- image: nginx:1.20
name: nginx
ports:
- containerPort: 80
```
Для этого выполним команду:
```bash
kubectl apply -f pod.yaml
```
Проверим результат, для чего выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно следующим:
```bash
NAME READY STATUS RESTARTS AGE
my-pod 0/1 ContainerCreating 0 2s
```
Через какое-то время Pod должен перейти в состояние `Running`
и вывод команды `kubectl get po` станет таким:
```bash
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 0 59s
```
## 2. Скейлим приложение
Открываем файл pod.yaml редактором:
```bash
vim pod.yaml
```
Входим в режим редактирования нажатием `i` и заменяем там строку:
```diff
- name: my-pod
+ name: my-pod-1
```
Сохраняем и выходим.
> Для vim нужно нажать последовательность кнопок
>
> `<Esc>:wq<Enter>`
> **Esc** - выход из режима редактирования,
> комбинация **:wq** - сохраняет внесенные изменения
Применяем изменения, для этого выполним команду:
```bash
kubectl apply -f pod.yaml
```
Проверяем результат, для этого выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно следующим:
```bash
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 0 10m
my-pod-1 1/1 Running 0 59s
```
## 3. Чистим за собой кластер
Для этого выполним команду:
```bash
kubectl delete pod --all
```
# ReplicaSet
## 1. Создаем Replicaset
Конфиг replicaset.yaml
```yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
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
```
Для этого выполним команду:
```bash
kubectl apply -f replicaset.yaml
```
Проверим результат, для этого выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно следующим:
```bash
NAME READY STATUS RESTARTS AGE
my-replicaset-pbtdm 0/1 ContainerCreating 0 2s
my-replicaset-z7rwm 0/1 ContainerCreating 0 2s
```
## 2. Скейлим Replicaset
Для этого выполним команду:
```bash
kubectl scale replicaset my-replicaset --replicas 3
```
Проверим результат, для этого выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно следующим:
```bash
NAME READY STATUS RESTARTS AGE
my-replicaset-pbtdm 1/1 Running 0 2m
my-replicaset-szqgz 0/1 ContainerCreating 0 1s
my-replicaset-z7rwm 1/1 Running 0 2m
```
## 3. Удаляем один из Pod
Для этого выполним команду подставив имя своего Pod:
> можно воспользоваться автоподстановкой по TAB
```bash
kubectl delete pod my-replicaset-pbtdm
```
Проверим результат, для этого выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно следующим:
```bash
NAME READY STATUS RESTARTS AGE
my-replicaset-55qdj 0/1 ContainerCreating 0 1s
my-replicaset-pbtdm 1/1 Running 0 4m
my-replicaset-szqgz 1/1 Running 0 2m
my-replicaset-z7rwm 0/1 Terminating 0 4m
```
## 4. Добавляем в Replicaset лишний Pod
Открываем файл `pod.yaml`
```bash
vim pod.yaml
```
И в него после metadata: на следующей строке добавляем:
```yaml
labels:
app: my-app
```
В итоге должно получиться:
```yaml
.............
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
spec:
.............
```
Сохраняем и выходим.
Создаем дополнительный Pod, для этого выполним команду:
```bash
kubectl apply -f pod.yaml
```
Проверяем результат, для этого выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно следующим:
```bash
NAME READY STATUS RESTARTS AGE
my-pod 0/1 Terminating 0 1s
my-replicaset-55qdj 1/1 Running 0 3m
my-replicaset-pbtdm 1/1 Running 0 8m
my-replicaset-szqgz 1/1 Running 0 6m
```
## 5. Обновляем версию Image
Для этого выполним команду:
```bash
kubectl set image replicaset my-replicaset nginx=nginx:1.21
```
Проверяем результат, для этого выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно следующим:
```bash
NAME READY STATUS RESTARTS AGE
my-replicaset-55qdj 1/1 Running 0 3m
my-replicaset-pbtdm 1/1 Running 0 8m
my-replicaset-szqgz 1/1 Running 0 6m
```
И проверяем сам Replicaset, для чего выполним команду:
```bash
kubectl describe replicaset my-replicaset
```
В результате находим строку Image и видим:
```bash
Containers:
nginx:
Image: nginx:1.21
```
Проверяем версию image в pod. Для этого выполним команду, подставив имя своего Pod
```bash
kubectl describe pod my-replicaset-55qdj
```
Видим что версия имаджа в поде не изменилась:
```bash
Containers:
nginx:
Image: nginx:1.20
```
Помогаем поду обновиться - для этого выполним команду, подставив имя своего Pod
```bash
kubectl delete po my-replicaset-55qdj
```
Проверяем результат, для этого выполним команду:
```bash
kubectl get pod
```
Результат должен быть примерно следующим:
```bash
NAME READY STATUS RESTARTS AGE
my-replicaset-55qdj 0/1 Terminating 0 11m
my-replicaset-cwjlf 0/1 ContainerCreating 0 1s
my-replicaset-pbtdm 1/1 Running 0 16m
my-replicaset-szqgz 1/1 Running 0 14m
```
Проверяем версию Image в новом Pod. Для этого выполним команду,
подставив имя своего Pod
```bash
kubectl describe pod my-replicaset-cwjlf
```
Результат должен быть примерно следующим:
```bash
Image: nginx:1.21
```
## 6. Чистим за собой кластер
Для этого выполним команду:
```bash
kubectl delete replicaset --all
```