[kubernetes] Controller - Deployment - 1

박원균·2021년 11월 5일
0

Kubernetes

목록 보기
9/24
post-thumbnail

이 포스팅은 쿠버네티스 문서를 참조하여 작성되었습니다.

컨트롤러

로보틱스와 자동화에서 컨트롤 루프는 시스템 상태를 조절하는 종료되지 않는 루프입니다.

사용자는 온도를 설정해서, 사용자가 의도한 상태를 온도 조절기에 알려줍니다. 온도 조절기는 장비를 켜거나 꺼서 현재 상태를 의도한 상태에 가깝게 만듭니다.

쿠버네티스에서 컨트롤러는 클러스터의 상태를 관찰 한 다음, 필요한 경우에 생성 또는 변경을 요청하는 컨트롤 루프입니다. 각 컨트롤러는 현재 클러스터 상태를 의도한 상태에 가깝게 조정됩니다.

1. 디플로이먼트

디플로이먼트(Deplyment)는 파드와 레플리카셋에 대한 선언적 업데이트를 제공합니다.

디플로이먼트에서 의도한 상태를 설명하고, 디플로이먼트 컨트롤러는 현재 상태에서 의도하는 상태로 비율을 조정하며 변경합니다.
새 레플리카셋을 생성하는 디플로이먼트를 정의하거나 기존 디플로이먼트를 제거하고, 모든 리소스를 새 디플로이먼트에 적용할 수 있씁니다.

디플로이먼트 생성

# deplyment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment # 필드에 따라 nginx-deployment 이름으로 디플로이 먼트가 생성됩니다.
  labels:
    app: nginx
spec:
  replicas: 3 	# 필드에 따라 디플로이먼트는 3개의 레플리카 파드를 생성합니다.
  selector:	# 필드는 디플로이먼트가 괸리할 파드를 찾는 방법을 정의합니다.
    matchLabels:
      app: nginx # Target labels --> HERE!! 을 가르키고있습니다.
  template:
    metadata:
      labels:
        app: nginx # HERE!!
    spec:	# 파드가 도커 허브의 nginx 1.14.2 버전 이미지를 실행하는 nginx 컨테이너 1개를 실행하는것을 나타냅니다.
      containers:
      - name: nginx	# 필드를 사용해서 nginx 이름을 붙입니다.
        image: nginx:1.14.2
        ports:
        - containerPort: 80
$ kubectl apply -f deployment.yaml

실행 결과

현재 상태에서 의도하는 상태로 비율을 조정하며 변경

디플로이먼트의 롤 아웃 상태를 보려면 kubectl rollout status deployment.v1.apps/nginx-deployment를 실행하면됩니다.

디플로이먼트에서 3개의 레플리카가 생성되었고, 모든 레플리카는 최산 상태이며 사용 가능한것을 보여줍니다.

디플로이먼트에서 생성된 레플리카셋rs을 보려면, kubectl get rs를 실행하면 됩니다.

레플리카셋의 출력에는 다음 필드가 표시됩니다.

  • NAME 은 네임스페이스에 있는 레플리카셋 이름의 목록입니다.
  • DESIRED 는 디플로이먼트의 생성 시 정의된 의도한 애플리케이션 레플리카 의 수를 표시합니다. 이것이 의도한 상태를 말합니다.
  • CURRENT 는 현재 실행 중인 레플리카의 수를 표시합니다.
  • READY 는 사용자가 사용할 수 있는 애플리케이션의 레플리카의 수를 표시합니다.
  • AGE 는 애플리케이션의 실행된 시간을 표시합니다.

레플리카셋의 이름은 항상 [DEPLOYMENT-NAME]-[RANDOM-STRING] 형식으로 된 것을 알 수 있습니다. 무작위 문자열은 무작위로 생성되며, pod-template-hash 를 시드(seed)로 사용합니다.

profile
함바라기

0개의 댓글