어제의 실습에서는 파드를 직접 생성하고 다루는 실습이었다.
실무에선 이러는 경우가 거의 없다고 한다.
Deployment 리소스를 통해 파드를 관리한다.
오늘의 실습은 Deployment를 다뤄보는 실습이다.
또한 지금까지의 실습환경은 VMware의 VM을 만들어 실습하고있다.
워밍업 CKA에서 나오는 문제 유형
kubectl get node -o wide --no-headers | awk '{print $6}'
172.16.0.128
172.16.0.133
172.16.0.136
172.16.0.137
awk 명령어
awk '{print $1}'
입력된 텍스트에서 첫 번째 필드만 출력
기본 구분자는 공백/탭
ps aux | awk '$2 < 10 {print $1, $2, $3, $11}
이건 pid가 10보다 작은 프로세스의 사용자이름 pid cpu 사용량, 실행 명령어 출력
삭제 명령어
[root@master ~]# kubectl delete pod nginx-pod --grace-period 0 --force
Warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod "nginx-pod" force deleted
[root@master ~]# kubectl delete svc --all
service "clusterip" deleted
service "kubernetes" deleted
service "loadbalancer" deleted
service "loadbalancer8080-1" deleted
service "nodeport" deleted
Deployment 리소스 사용
[root@master ~]# kubectl create deployment nginx-app --replicas=3 --image=nginx
deployment.apps/nginx-app created
[root@master ~]# kubectl get all -n default
NAME READY STATUS RESTARTS AGE
pod/nginx-app-7df7b66fb5-8qn6m 1/1 Running 0 16s
pod/nginx-app-7df7b66fb5-q65gl 1/1 Running 0 16s
pod/nginx-app-7df7b66fb5-xx8wv 1/1 Running 0 16s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3m27s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-app 3/3 3 3 16s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-app-7df7b66fb5 3 3 3 16s
궁금증: Deployment 가 있을 때 ReplicaSet, Pod을 지웠을때는?
[root@master ~]# kubectl delete replicasets --all -n default
replicaset.apps "nginx-app-7df7b66fb5" deleted
[root@master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-app-7df7b66fb5 3 3 3 12s
다시 생성된다.
[root@master ~]# kubectl delete pods -n default --all
pod "nginx-app-7df7b66fb5-gdpb4" deleted
pod "nginx-app-7df7b66fb5-n7jqd" deleted
pod "nginx-app-7df7b66fb5-sk6qt" deleted
[root@master ~]# kubectl get Pods -n default
NAME READY STATUS RESTARTS AGE
nginx-app-7df7b66fb5-9dqv9 1/1 Running 0 21s
nginx-app-7df7b66fb5-c5lqt 1/1 Running 0 21s
nginx-app-7df7b66fb5-lhkgl 1/1 Running 0 21s
다시 생성된다.
Deploymen와 Service 연결
Service --type ClusterIP
[root@master ~]# kubectl expose deployment nginx-app --name clusterip-app --type ClusterIP --port 8080 --target-port 80
service/clusterip-app exposed
- nginx-app이라는 deployment에
- clusterip-app이라는 Service를 만드는데
- --type은 ClusterIP이고 → Pod끼리만 접속 가능한 고정된 IP 주소 할당하는 서비스
- 내부용이므로 안전
- 프론트 ↔ 백엔드
- 백엔드 ↔ DB 또는 인증 서버
- 서비스에서 들어올 때의 포트는 8080
- 파드로는 80 포트로 간다.
Pod의 컨테이너에 직접 명령어를 통해 변경하기
[root@master ~]# kubectl exec -it nginx-app-7df7b66fb5-9dqv9 -- sh -c "echo 'worker' > /usr/share/nginx/html/index.html"
[root@master ~]# curl 10.101.49.221:8080
worker
Service --type Loadbalancer
외부 IP를 만들어서 그 곳으로 들어오는 요청을 Deployment의 Pod들에게 분배해주는 역할을 해줌
[root@master ~]# kubectl expose deployment nginx-app --name loadbalancer-app --type LoadBalancer --external-ip 172.16.0.128 --port 80
service/loadbalancer-app exposed
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
clusterip-app ClusterIP 10.101.49.221 <none> 8080/TCP 28m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 59m
loadbalancer-app LoadBalancer 10.104.91.150 172.16.0.128 80:31224/TCP 10s
[root@master ~]# curl 172.16.0.128
worker2
[root@master ~]# curl 172.16.0.128
worker1
[root@master ~]# curl 172.16.0.128
worker1
롤링 업데이트 해보기
kubectl edit deployments nginx-app
-> 이미지 변경
--- 업데이트 진행 ---
[root@master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-app-7df7b66fb5 2 2 2 50m
nginx-app-864794d46b 2 2 1 9s
[root@master ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-app-7df7b66fb5 0 0 0 52m
nginx-app-864794d46b 3 3 3 104s
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app-7df7b66fb5-lhkgl 1/1 Running 0 49m
nginx-app-864794d46b-9t8ng 1/1 Running 0 28s
nginx-app-864794d46b-pxd7v 1/1 Running 0 21s
nginx-app-864794d46b-xbk7c 0/1 ContainerCreating 0 10s
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app-7df7b66fb5-lhkgl 0/1 Completed 0 49m
nginx-app-864794d46b-9t8ng 1/1 Running 0 31s
nginx-app-864794d46b-pxd7v 1/1 Running 0 24s
nginx-app-864794d46b-xbk7c 1/1 Running 0 13s
ReplicaSet 교체
새로 ReplicaSet이 생성되고 교체됨
이전의 것은 그대로 파드가 0개로 유지를 해둠
Pod 교체
파드가 하나씩 새로운 ReplicaSet이 만드는 파드가 대체하고 있음
결국 전부 대체 되었다.
Scale-Out, In 해보기
Scale-Out
[root@master ~]# kubectl scale deployment nginx-app --replicas=6
deployment.apps/nginx-app scaled
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-app-864794d46b-9t8ng 1/1 Running 0 24m
nginx-app-864794d46b-fbgjt 1/1 Running 0 8s
nginx-app-864794d46b-p9j5z 1/1 Running 0 8s
nginx-app-864794d46b-pxd7v 1/1 Running 0 24m
nginx-app-864794d46b-xbk7c 1/1 Running 0 24m
nginx-app-864794d46b-z8qb8 1/1 Running 0 8s
Scale-In
[root@master ~]# kubectl scale deployment nginx-app --replicas=3
deployment.apps/nginx-app scaled
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-app-864794d46b-9t8ng 1/1 Running 0 25m
nginx-app-864794d46b-fbgjt 1/1 Terminating 0 88s
nginx-app-864794d46b-p9j5z 1/1 Terminating 0 88s
nginx-app-864794d46b-pxd7v 1/1 Running 0 25m
nginx-app-864794d46b-xbk7c 1/1 Running 0 25m
nginx-app-864794d46b-z8qb8 1/1 Terminating 0 88s
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-app-864794d46b-9t8ng 1/1 Running 0 26m
nginx-app-864794d46b-pxd7v 1/1 Running 0 26m
nginx-app-864794d46b-xbk7c 1/1 Running 0 25m
Deployment 삭제
[root@master ~]# kubectl delete deploy nginx-app
deployment.apps "nginx-app" deleted
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-app-864794d46b-9t8ng 1/1 Terminating 0 27m
nginx-app-864794d46b-pxd7v 1/1 Terminating 0 27m
nginx-app-864794d46b-xbk7c 1/1 Terminating 0 27m
[root@master ~]# kubectl get rs
No resources found in default namespace.
[root@master ~]# kubectl get pod
No resources found in default namespace.
Service 삭제
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
clusterip-app ClusterIP 10.101.49.221 <none> 8080/TCP 66m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 97m
loadbalancer-app LoadBalancer 10.104.91.150 172.16.0.128 80:31224/TCP 37m
[root@master ~]# kubectl delete svc --all
service "clusterip-app" deleted
service "kubernetes" deleted
service "loadbalancer-app" deleted
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2s
kubernetes는 기본 서비스이므로 삭제되어도 자동으로 다시 만들어짐
'공부일지 > 클라우드 SA 교육' 카테고리의 다른 글
Kubernetes 설치 및 실습 on VMware (1) | 2025.07.07 |
---|---|
Docker Swarm 실습해보기 (3) | 2025.07.05 |
도커파일, 도커 컴포즈 실습 + cAdvisor 활용 (1) | 2025.07.04 |
Ansible 실습2 (1) | 2025.06.26 |
Ansible 실습 (1) | 2025.06.25 |