쿠버네티스 시작하기 2편

김성민·2024년 3월 17일
0

kubernetes

목록 보기
2/3

1편 : 쿠버네티스 시작하기 1편

1편에서 쿠버네티스 cluster 를 설치하였다.
이제 쿠버네티스에 어플리케이션 을 처음으로 배포해 보는 과정을 진행하려고 한다.
그러기 위해서 Deployment 를 만들어보자.

Deployment : 디플로이먼트는 쿠버네티스가 애플리케이션의 인스턴스를 어떻게 생성하고 업데이트해야 하는지를 지시한다. 쿠버네티스 디플로이먼트 컨트롤러는 지속적으로 이들 인스턴스를 모니터링한다. 인스턴스를 구동 중인 노드가 다운되거나 삭제되면, 디플로이먼트 컨트롤러가 인스턴스를 클러스터 내부의 다른 노드의 인스턴스로 교체시켜준다.이렇게 머신의 장애나 정비에 대응할 수 있는 자동 복구(self-healing) 메커니즘을 제공한다.

디플로이먼트는 헬스 체크를 하는 역할을 한다는 것을 알 수 있다.

1. 명령어로 만들기

kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
  • kubectl create deployment - deployment 를 만드는 명령어.
  • hello-node - deployment 이름
  • --image=registry~ - 이미지
// 디플로이먼트 확인
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

2. yaml 파일로 만들기

// 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

0개의 댓글