1. Deployment
- Pod (Kubernetes의 배포 단위) 배포에 관한 객체
- Pod를 배포하고 몇 개의 Pod를 실행할 지 결정할 수 있음
- Docker-Compose : 여러 개의 컨테이너를 묶어서 실행
- Pod : 여러 개의 컨테이너를 묶어서 쿠버네티스에서 배포하는 단위
- Deployment 나 ReplicaSet 을 이용하면 여러 개의 Pod를 생성할 때 직접 명령어를 입력할 필요가 없음
- Pod는 문제가 발생해서 종료될 경우 자동으로 다시 배포가 이루어짐 (바람직한 상태를 유지함)
1) nginx 배포
- 배포를 위한 yaml 파일 작성
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
- 배포 명령
- kubectl apply -f yaml파일경로
- kubectl apply -f C:\DX_DATA\kubernetes\nginx-deploy.yml
- 상태 확인
- kubectl get deployments
- kubectl get pods

- Pod, Replicaset, Deployment
- Deployment (배포) -> Replocaset (파드의 개수 설정 및 관리) -> Pod (컨테이너의 집합)
- 하나의 MicroService 구현 시 Pod 단위로 배포
2) Service
- Pod는 생성되더라도 외부에서 접속 할 수 없기 때문에 외부에서 접속 할 수 있도록 해주는 것이 Kubernetes의 Service
- Service를 외부에 노출 하게되면 외부에서 Pod에 접속 할 수 있다.
- Service는 일종의 Port Forwarding의 역할
3) 앞에서 배포한 Pod를 외부에서 사용할 수 있도록 Service로 생성
- Service를 위한 yaml 파일 생성
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx-service
# nginx라는 레이블이 달린 Pod의 80번 포트를 외부에서 31472번 포트로 접속 하도록 설정
spec:
type: NodePort
ports:
- port: 8080
NodePort: 31472
targetPort: 80
selector:
app: nginx
- 배포 명령
- kubectl apply -f 파일경로
- kubectl apply -f C:\DX_DATA\kubernetes\nginx-service.yml

- 서비스 확인
- kubectl get svc

4) Rollback
- 쿠버네티스는 Rolling Update와 더불어 Rollback 기능을 제공
- Rolling Update
- 업데이트를 할 때 기존 버전을 유지하고 새로운 Pod를 추가한 뒤 새로운 Pod가 정상적으로 동작하면 기존의 Pod를 하나 제거 후 새로운 Pod를 추가하는 방식
- 이 업데이트 방식은 Public Cloud에서는 직접 구현할 필요가 없으며 Kubernetes에서도 직접 구현할 필요 없이 Container Service 에서 선택만 해주면 됨
- Rolling Update
5) Rollback 기능 확인
- 현재 배포된 파드의 이미지를 변경
- kubectl set image deployment.v1.apps/nginx-deploy nginx=nginx:1.16.1

- 배포된 내용을 확인
- kubelctl describe deploy nginx-deploy

-
- kubectl set image deployment.v1.apps/nginx-deploy nginx=nginx:1.200

- 파드 확인
- kubectl get pods
- 기존 2파드 2개는 존재하고 새로운 파드 하나가 추가되어 업데이트를 시도 (무중단서비스)
- kubectl get pods

- 상태 확인
- kubectl rollout status deployment/nginx-deploy
- kubectl get deployment nginx-deploy


- 이전 상태로 롤 백
- kubectl rollout undo deployment/nginx-deploy
- 상태확인
- kubectl get deployment nginx-deploy

- 배포 버전 확인
- kubectl rollout history deployment/nginx-deploy
- 특정 버전으로 롤백
- kubectl rollout history deployment/nginx-deploy --to-revision=버전번호
- docker-compose와 달리 컨테이너를 배포한 내역을 저장하고 있기 때문에 필요한 버전으로의 롤백이 쉽고 업데이트 한 내역을 보유하고 있다.
- 이렇게 변경 내역을 관리하는 것을 형상(Configuration) 관리라고 함
- git을 사용하는 가장 큰 이유는 코드의 형상 관리가 가능하기 때문임 코드의 변경이나 운영 환경의 변경이 생길 때마다 문서화 작업을 했는데 문서화 때문에 오버헤드가 커짐
- kubectl rollout history deployment/nginx-deploy --to-revision=버전번호
'DX Data School' 카테고리의 다른 글
쿠버네티스 (Kubernetes) (0) | 2024.04.08 |
---|---|
Docker 2 (0) | 2024.04.08 |
Docker (0) | 2024.04.05 |
Container 와 Virtualization (0) | 2024.04.05 |
CI/CD (0) | 2024.04.05 |