1편 : 쿠버네티스 시작하기 1편
1편에서 쿠버네티스 cluster 를 설치하였다.
이제 쿠버네티스에 어플리케이션 을 처음으로 배포해 보는 과정을 진행하려고 한다.
그러기 위해서 Deployment 를 만들어보자.
Deployment : 디플로이먼트는 쿠버네티스가 애플리케이션의 인스턴스를 어떻게 생성하고 업데이트해야 하는지를 지시한다. 쿠버네티스 디플로이먼트 컨트롤러는 지속적으로 이들 인스턴스를 모니터링한다. 인스턴스를 구동 중인 노드가 다운되거나 삭제되면, 디플로이먼트 컨트롤러가 인스턴스를 클러스터 내부의 다른 노드의 인스턴스로 교체시켜준다.이렇게 머신의 장애나 정비에 대응할 수 있는 자동 복구(self-healing) 메커니즘을 제공한다.
디플로이먼트는 헬스 체크를 하는 역할을 한다는 것을 알 수 있다.
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
// 디플로이먼트 확인
kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 0 5s
// pod 확인
kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-ccf4b9788-xsq49 1/1 Running 0 15s
// 명령어 실행 기록 및 내용 확인
kubectl get events
LAST SEEN TYPE REASON OBJECT MESSAGE
36s Normal Scheduled pod/hello-node-ccf4b9788-xsq49 Successfully assigned default/hello-node-ccf4b9788-xsq49 to minikube
36s Normal Pulling pod/hello-node-ccf4b9788-xsq49 Pulling image "registry.k8s.io/e2e-test-images/agnhost:2.39"
24s Normal Pulled pod/hello-node-ccf4b9788-xsq49 Successfully pulled image "registry.k8s.io/e2e-test-images/agnhost:2.39" in 12.391s (12.391s including waiting)
24s Normal Created pod/hello-node-ccf4b9788-xsq49 Created container agnhost
24s Normal Started pod/hello-node-ccf4b9788-xsq49 Started container agnhost
37s Normal SuccessfulCreate replicaset/hello-node-ccf4b9788 Created pod: hello-node-ccf4b9788-xsq49
37s Normal ScalingReplicaSet deployment/hello-node Scaled up replica set hello-node-ccf4b9788 to 1
// nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
요
metadata.name : deployment 의 이름
spec.replicas : deployment 가 생성할 replicas pod 수
spec.selector : replicas set 이 관리할 파드를 찾을 수 있도록 하는 방법. 여기서는 matchLabels 라는 방법을 선택해 app.nginx 라는 label 을 가진 파드를 선택하게 함.
template.metadata.labels : 파드가 사용할 label
template.spec : 파드가 사용할 컨테이너 이미지 및 정보
// yaml 파일을 사용하여 디플로이먼트 생성
kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
// kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 0 7s
이렇게 두가지 방법으로 deployment 를 생성하는 법을 알아보았다.
참고로 아래 명령어를 사용하면 Deployment 와 Pod 등 모든 정보를 확인 할 수 있다.
// kubectl get all
NAME READY STATUS RESTARTS AGE
hello-node-ccf4b9788-xsq49 1/1 Running 0 20m
nginx-deployment-86dcfdf4c6-bwlhs 1/1 Running 0 8m11s
nginx-deployment-86dcfdf4c6-g88sg 1/1 Running 0 8m11s
nginx-deployment-86dcfdf4c6-qzwzr 1/1 Running 0 8m11s
gimseongmin@gimseongmin-ui-MacBookAir kube_study % kubectl get all
NAME READY STATUS RESTARTS AGE
pod/hello-node-ccf4b9788-xsq49 1/1 Running 0 20m
pod/nginx-deployment-86dcfdf4c6-bwlhs 1/1 Running 0 8m17s
pod/nginx-deployment-86dcfdf4c6-g88sg 1/1 Running 0 8m17s
pod/nginx-deployment-86dcfdf4c6-qzwzr 1/1 Running 0 8m17s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d9h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/hello-node 1/1 1 1 20m
deployment.apps/nginx-deployment 3/3 3 3 8m17s
NAME DESIRED CURRENT READY AGE
replicaset.apps/hello-node-ccf4b9788 1 1 1 20m
replicaset.apps/nginx-deployment-86dcfdf4c6 3 3 3 8m17s