728x90
<Kubernetes 쿠버네티스 :: workload resources>
<Kubernetes workload resources>
- Kubernetes의 workload는 포드를 중심으로 구동되는 컨테이너 애플리케이션으로, 원하는 상태의 특성을 정의하는 다양한 구성 요소가 존재
- Kubernetes workload는 포드의 Life Cycle 관리를 지원해 주는 도구
- Kubernetes에는 내장된 다양한 object가 있고 Controller를 통해 관리
- 포드는 애플리케이션 배포의 기본 단위지만, 포드만으로는 Orchestraion의 이점을 모두 얻을 수 없어 workload를 통해 애플리케이션 식별
- Kubernetes workload resources
- 애플리케이션 정의, 배포, 관리의 주요 역할 수행
- 운영을 단순화하고 안정성과 확장성을 높여 리소스 관리를 향상시키는 추상화 수준의 기능 제공
<Deployments>
- Deployments: 쿠버네티스 클러스터에서 컨테이너화된 애플리케이션을 관리하기 위한 기본 빌딩 블록 제공
- 복제 포드 집합을 관리, 확장하는 선언적 방법을 제공하는 API 리소스로 상위 수준의 추상화 오브젝트
- Deployments에서 원하는 상태를 설명하면 Deployments Controlloer가 제어된 속도로 현재 상태를 원하는 상태로 조정
- Deployments 사용 이유
- ReplicaSet rollout을 통해 포드 복제본 및 이미지 버전 관리
- 포드의 지속적 상태 관리
- 워크로드 기준 수동 및 자동 확장, 축소 기능 구현 가능
- Rolling update를 통한 중단 없는 업데이트 지원
- 다양한 배포 전략을 제공하고 이전 포드에서 새로운 포드로 전환하는 속도 제어 가능
- 롤백 기능 지원
- 사용하지 않는 ReplicaSet 정리
- Deployment 배포 전략
- 일반적으로 배포 전략에 따라 애플리케이션이 이전 버전에서 최신 버전으로 업데이트 되는 방식 결정
- 일부 전략에는 다운 타임이 포함되며, 일부는 테스트 개념을 도입하고 사용자 분석 가능
1. Deployment 생성
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl create deployment smoke-deploy --image=pyhton:2.7-slim --port=8000 --dry-run=client -o yaml > smoke-deploy.yaml
<smoke-deploy.yaml>
- Deployment는 두 개의 Pod 생성
- pyhton:2.7-slim 이미지 사용
- 포트 8000 노출
- 웹 서버를 실행하여 "Smoke Test Deployment" 메시지 표시
apiVersion: app/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: smoke-deploy
name: smoke-deploy
spec:
replicas: 2
selector:
matchLbels:
app: smoke-deploy
strategy: {}
template:
metadata:
labels:
app: smoke-deploy
spec:
containers:
- image: pyhton:2.7-slim
name: smoke-container
port:
- containerPort: 8000
command: ["/bin/bash", "-c", "echo \\"<h1>Smoke Test Deployment : $(hostname). </h1>" > index.html; python -m SimpleHTTPServer 8000"]
<적용>
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl apply -f smoke-deploy.yaml
deployment.apps/smoke-deploy created
2. Deployment 서비스 노출
- smoke-svc라는 서비스 정의
- 포트 8000 노출
- 해당 포트로 들어오는 트래픽을 Deployment의 포트 8000으로 전달
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl expose deployment smoke-deploy --name=smoke-svc --port=8000 --target-port=8000
service/smoke-svc exposed
<생성 확인>
A. kubectl get deployment.app,rs,po,svc -o wide
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl get deployment.app,rs,po,svc -o wide | grep smoke
B. curl
ubuntu@k8s-master:~$ curl 10.111.156.96:8000
<h1>Smoke Test Deployment : smoke-deploy-d8bb44576-9rb5z.
ubuntu@k8s-master:~$ curl 10.109.131.36:8000
<h1>Smoke Test Deployment : smoke-deploy-d8bb44576-zllre.
C. crictl: 컨테이너 런타임과 상호 작용하기 위한 CLI(Command Line Interface) 도구
ubuntu@k8s-master:~$ sudo crictl ps
<--watch: 실시간 모니터링>
** 실시간으로 작업 확인 가능
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl get po -o wide --watch
1. Deployment 생성
- msa-web라는 Deployment 생성
- nginx:1.17 이미지를 사용하여 Pod 생성
- 포트 80 노출
- 레플리카 수를 2개로 지정하여 두 개의 Pod 생성
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl create deployment msa-web --image:nginx:1.17 --port=80 --replicas=2
deployment.apps/msa-web created
2. Deployment 이미지 업데이트
- nginx:1.17에서 nginx:1.19로 업데이트
- 캡쳐를 통해 업데이트 반영 확인 가능
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl set image deploy mas-web nginx=nginx:1.19
deployment.apps/msa-web image updated
<결과 확인>
A. kubectl get deploy,rs,po -o wide
B. kubectl rollout history: 롤아웃 이력 조회
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl rollout history deployment msa-web
deployment.apps/mas-web
REVISION CHANGE-CAUSE
1 <none>
2 <none>
- 두 번째 리비전에 대한 롤아웃 이력 조회
- --revision=N 을 통해 롤아웃 단계 별 조회 가능
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl rollout history deployment msa-web --revision=2
3. Deployment 이미지 업데이트 Ver. 2
- nginx:1.19에서 nginx:1.21로 업데이트
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl set image deploy mas-web nginx=nginx:1.21
deployment.apps/msa-web image updated
<수정 적용 확인>
A. kubectl rollout history: 롤아웃 이력을 조회
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl rollout history deployment msa-web
deployment.apps/mas-web
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
- --revision 3 옵션 적용을 통해 단계 별 확인
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl rollout history deployment msa-web --revision 3
<결과 확인>
4. 이전의 수정으로 롤백
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl rollout undo deployment msa-web --to-revision=
deployment.apps/mas-web rolled back
5. Deployment 이미지 업데이트 Ver. 2
- nginx:1.19에서 nginx:1.21로 업데이트
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl set image deploy mas-web nginx=nginx:1.21
deployment.apps/msa-web image updated
<수정 적용 확인>
A. kubectl rollout history: 롤아웃 이력을 조회
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl rollout history deployment msa-web
deployment.apps/mas-web
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
- --revision 2 옵션 적용을 통해 단계 별 확인
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl rollout history deployment msa-web --revision 2
6. 레플리카 수 조정
A. 6개
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl scale deployment msa-web --replicas=6
deployment.apps/mas-web scaled
<결과 확인>
B. 2개
[PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl scale deployment msa-web --replicas=2
deployment.apps/mas-web scaled
'클라우드 + DevOps > Kubernetes (k8s)' 카테고리의 다른 글
Kubernetes 쿠버네티스 실습 :: 생성한 Deployment 수정 (0) | 2024.04.21 |
---|---|
Kubernetes :: 런타임 컨테이너 runtime container 실습 (1) | 2024.04.20 |
Kubernetes 실습 :: 포드(pod) 관리 - imperative syntax 포드 명령형 (0) | 2024.04.19 |
Kubernetes 쿠버네티스 :: 동적 Volume, StorageClass (1) | 2024.04.19 |
Kubernetes 실습 :: 포드(pod) 관리 - declarative syntax 포드 선언형 (0) | 2024.04.18 |