4.1 디플로이먼트
관리와 스케줄링
- 쿠버네티스는 각 프로그램을 관리하기 위해 디플로이먼트 오브젝트를 생성한다.
- 컨테이너 이미지명, 레플리카 수 등 컨테이너를 실행하기 위한 정보가 기록된다.
- 쿠버네티스 컨트롤러는 디플로이먼트 리소스를 관리하며, 디플로이먼트 리소스가 특별한 이유 없이
레플리카 수를 채우지 못하고 실행 중이면, 컨트롤러는 새로운 레플리카를 생성한다.
컨테이너 재시작하기
- 컨테이너가 비정상적이나, 정상적으로 kubectl로 컨테이너를 종료하는 경우에도
디플로이먼트는 컨테이너를 재시작을 시킨다.
- 쿠버네티스는 오래 실행되고 신뢰할 수 있도록 설계되어있기 때문에, 재시작을 기본 작동으로 수행한다.
- 디플로이먼트의 역할을 관련된 컨테이너를 감시하고 지정된 수 만큼 항상 실행 중인지를 확인한다.
디플로이먼트 조회하기
현재 namespace에 활성화된 디플로이먼트 확인
kubectl get deployments
>>>
NAME READY UP-TO-DATE AVAILABLE AGE
hello-minikube 1/1 1 1 22s
특정 디플로이먼트의 자세한 내용 확인
kubectl describe deployments/hello-minikube
>>>
Name: hello-minikube
Namespace: default
CreationTimestamp: Fri, 27 Sep 2024 08:53:23 +0900
Labels: app=hello-minikube
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=hello-minikube
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=hello-minikube
Containers:
echo-server:
Image: kicbase/echo-server:1.0
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: hello-minikube-77b6f68484 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 113s deployment-controller Scaled up replica set hello-minikube-77b6f68484 to 1
4.2 파드
- 파드는 하나 이상의 컨테이너 그룹으로 구성된 쿠버네티스 오브젝트이다.
- 컨테이너 집합은 함께 스케줄링, 저장공간 공유 등 같이 움직이기에 파드로 관리한다.
- 디플로이먼트가 파드를 실행된다.
4.3 레프리카셋
- 정확히는 디플로이먼트가 레플리카셋을 관리하며 레플리카셋은 동일한 파드 집합을 관리한다.
4.4 의도한 상태 유지하기
- 파드를 종료해도 '의도한 상태'를 유지하기 위해 컨트롤러는 지속적인 동기화( 조정 루프 )를 진행한다.
- 디플로이먼트를 종료하면 조정 루프를 진행하지 않는다.
4.5 쿠버네티스 스케줄러
- 스케줄러는 대기열에서 스케줄링되지 않은 파드를 찾아 배치하고 실행할 노드는 찾는다.
- 디플로이먼트가 파드를 실행할 때, 요청된 파드를 적정할 노드에 실행하는 역할을 한다.
- 조정루프를 위해 파드가 삭제됬을 때 다시 새로운 파드를 올리는 것은 kubelet이다.
4.6 YAML 형식의 리소스 매니페스트
- 디플로이먼트, 파드와 같은 리소스는 내부 DB에 기록되며, 조정 루프시 해당 DB를 참조한다.
- kubectl run 명령어를 사용하여 새로운 레코드를 DB에 등록할 수 있다.
- 리소스 매니페스트를 직정 생성함을 통해 위와 같은 역할을 동일하게 할 수 있다.
디플로이먼트 YAML 매니페스트
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
labels:
app: demo
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: cloudnatived/demo:hello
ports:
- containerPort: 8888
kubectl apply 사용하여 배포
kubectl apply -f k8s/deployment.yaml
>>>
deployment.apps/demo created
서비스 리소스
- 생성한 demo파드를 웹 브라우저에서 접속 가능하게 하려면 '서비스 리소스'를 사용한다.
- 서비스 리소스란 재시작할 때마다 동적으로 변경되는 파드의 IP에 맵핑할 수 있게 한다.
- 서비스 리소스는 파드에 라우팅되는 영구적 IP주소과 DNS 주소를 제공한다.
- 서비스 YAML 매니페스트 ( 9999포드를 파드의 8888 포트로 포워딩 )
apiVersion: v1
kind: Service
metadata:
name: demo
labels:
app: demo
spec:
ports:
- port: 9999
protocol: TCP
targetPort: 8888
selector:
app: demo
type: ClusterIP
4.7 헬름: 쿠버네티스 패키지 매니저
- helm 명령어를 사용하면 헬름차트 패키지로 애플리케이션을 실행할 수 있다.
- 헬름차트 패키지는 YAML 매니페스트를 룰러싼 래퍼(wrapper)이다.
- 리소스, 의존성, 구성가능변수 등을 지정할 수 있다.
helm version
헬름 설치 및 확인
# 설치
brew install helm
# 버전 확인
helm version
>>>
version.BuildInfo{Version:"v3.13.1", GitCommit:"3bf5edbdf122sefa552a42aa", GitTreeState:"clean", GoVersion:"go1.21.3"}
helm install <name> <path>
헬름 차트 설치하기
helm install demo ./k8s/demo
>>>
NAME: demo
LAST DEPLOYED: Fri Sep 27 14:23:54 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
패키지 참고 코드 : https://github.com/cloudnativedevops/demo/tree/main/hello-helm
helm list
헬름 릴리스 목록 확인하기
helm list
>>>
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
demo default 1 2024-09-27 14:23:54.938714 +0900 KST deployed demo-1.0.1
'Infra > Kubernetes' 카테고리의 다른 글
쿠버네티스를 활용한 네이티브 데브옵스 - 6장 클러스터 운영하기 (0) | 2024.10.06 |
---|---|
쿠버네티스를 활용한 네이티브 데브옵스 - 5장 리소스 관리하기 (0) | 2024.10.05 |
쿠버네티스를 활용한 네이티브 데브옵스 - 3장 쿠버네티스 구축하기 (0) | 2024.09.18 |
Kubernetes - minikube 실행 (0) | 2024.09.18 |
Kubernetes - Service와 이를 통한 Ingress (0) | 2023.06.07 |