웹 서비스용 pod 1개 생성 및 80 포트 외부 서비스 연동
1. web 서비스를 위한 pod 생성
- nginx 이미지를 사용하여 web 이라는 pod 생성
$ kubectl get pod
No resources found in default namespace.
$ kubectl run web --image=nginx
pod/web created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
web 1/1 Running 0 5s
2. 80 서비스 생성 및 포트 외부 노출
- 외부에서 80포트 접속을 할 수있도록 서비스 생성 (web-svc)
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
$ kubectl expose pod web --name=web-svc --type=NodePort --port=80 --target-port=80
service/web-svc exposed
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
web-svc NodePort 10.110.7.63 <none> 80:30332/TCP 3s
3. 웹 페이지 접속
- 외부에서 접속 시 k8s 클러스터 IP와 80포트에 연결 된 30332 포트를 통해 접속 (http://10.0.0.230:30332)
4. 서비스 삭제
- 테스트에 사용한 pod와 svc 삭제
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
web-svc NodePort 10.110.7.63 <none> 80:30332/TCP 11m
$ kubectl delete svc web-svc
service "web-svc" deleted
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
web 1/1 Running 6 (3m47s ago) 12m
$ kubectl delete pod web
pod "web" deleted
$ kubectl get pod
No resources found in default namespace.
웹 서비스용 pod 다수 생성 및 80 포트 외부 서비스 연동
1. web 서비시용 pod 생성
- Deployment 오브젝트를 사용하여 pod 생성 (pod의 복제본 생성이나 관리가 용이)
$ kubectl get pod
No resources found in default namespace.
$ kubectl create deployment deploy-web --image=nginx
deployment.apps/deploy-web created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
deploy-web-749dd978cd-ldvdt 1/1 Running 0 18s
2. pod 개수 확장
- 서비스용 pod 개수를 2개로 확장 (개수는원하는 만큼)
- replicas=에 표기되는 숫자에 따라 pod 개수를 늘리거나 줄일 수 있음.
$ kubectl scale deployment deploy-web --replicas=2
deployment.apps/deploy-web scaled
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
deploy-web-749dd978cd-8d2d8 1/1 Running 0 102s
deploy-web-749dd978cd-ldvdt 1/1 Running 1 (2m2s ago) 2m20s
3. 80 서비스 생성 및 포트 외부 노출
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
$ kubectl expose deployment deploy-web --type=NodePort --port=80
service/deploy-web exposed
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
deploy-web NodePort 10.109.58.192 <none> 80:30519/TCP 12s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
4. pod별 index 수정
- 생성 한 pod 에 모두 접속이 되는지 확인을 위해 web 페이지 수정
$ kubectl exec -it deploy-web-749dd978cd-8d2d8 -- /bin/bash
root@deploy-web-749dd978cd-8d2d8:/# cat << EOF > /usr/share/nginx/html/index.html
> pod1
> EOF
root@deploy-web-749dd978cd-8d2d8:/# cat /usr/share/nginx/html/index.html
pod1
$ kubectl exec -it deploy-web-749dd978cd-ldvdt -- /bin/bash
root@deploy-web-749dd978cd-ldvdt:/# cat << EOF > /usr/share/nginx/html/index.html
> pod2
> EOF
root@deploy-web-749dd978cd-ldvdt:/# cat /usr/share/nginx/html/index.html
pod2
5. 웹 페이지 접속
- http://10.0.0.230:30519 동일 포트로 접속하여 2개 pod 호출 확인
deployment와 run 비교
- Deployment
- Pod를 생성하고, 관리하는 리소스
- Pod의 생명 주기를 관리하고, 애플리케이션의 상태를 원하는 형태로 유지하는 역할
- 일반적으로 고가용성, 스케일링, 업그레이드 등을 고려한 배포를 할 때 사용
- Pod가 실패 시 자동으로 재생
- Run
- Pod를 즉시 생성하는 데 사용되는 imperative(명령형) 방식의 명령어
- 주로 일시적인 테스트, 단일 Pod 실행 등을 위한 용도로 사용
- deployment와 달리 자동화된 관리 기능(스케일링, 롤백 등)이 제공되지 않으며, 주로 하나의 Pod만 생성
구분 | Deployment | Run |
관리 단위 | Pod 그룹(ReplicaSet 관리) | 단일 Pod |
재생성 | 자동 | 수동 |
롤링 업데이트 | 지원 | 지원하지 않음 |
주요 용도 | 운영 환경, 관리 및 확장 | 테스트 및 간단한 작업 |