이 포스팅은 쿠버네티스 문서를 참조하여 작성되었습니다.
로보틱스와 자동화에서 컨트롤 루프는 시스템 상태를 조절하는 종료되지 않는 루프입니다.
사용자는 온도를 설정해서, 사용자가 의도한 상태를 온도 조절기에 알려줍니다. 온도 조절기는 장비를 켜거나 꺼서 현재 상태를 의도한 상태에 가깝게 만듭니다.
쿠버네티스에서 컨트롤러는 클러스터의 상태를 관찰 한 다음, 필요한 경우에 생성 또는 변경을 요청하는 컨트롤 루프입니다. 각 컨트롤러는 현재 클러스터 상태를 의도한 상태에 가깝게 조정됩니다.
디플로이먼트(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
를 실행하면 됩니다.
레플리카셋의 출력에는 다음 필드가 표시됩니다.
레플리카셋의 이름은 항상 [DEPLOYMENT-NAME]-[RANDOM-STRING]
형식으로 된 것을 알 수 있습니다. 무작위 문자열은 무작위로 생성되며, pod-template-hash
를 시드(seed)로 사용합니다.