controller란
pod의 개수를 보장
순서)
1.쿠버야 나 nignx 웹서버를 3개 실행해줘
2.kubectl create deployment webui --image=nginx --replicas=3
3.API가 ETCD 로 정보를 받아온다.
4.API가 scheduler 에 물오보고 어디로 생성할지 확인하다
5.API가 Controller에게 너가 컨테이너 3개를 잘 관리 해라
6.혹시라도 하나가 문제가 발생되면 api에게 전달하여 하나더 생성해라 라고 말하고 다시 3개가 되면 관리 한다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
- Replication Controller (RC):
- 기능: 지정된 파드의 복제본 수를 유지하고, 파드의 장애 시 다른 노드에 파드를 재시작합니다. 오래된 버전으로, 대부분의 경우 ReplicaSet 또는 Deployment를 사용하는 것이 좋습니다.
- ReplicaSet:
- 기능: Replication Controller와 유사하지만 더 유연한 셀렉터와 매칭하여 파드를 관리할 수 있으며, 롤링 업데이트 및 롤백을 지원합니다.
- Deployment:
- 기능: 파드 배포를 관리하며, 업데이트와 롤백을 관리하기 위한 높은 수준의 추상화를 제공합니다. 사용자에게 롤링 업데이트 및 롤백을 쉽게 수행할 수 있는 기능을 제공합니다.
- StatefulSet:
- 기능: 스테이트풀 애플리케이션을 위해 설계되었으며, 각 파드에 고유한 식별자와 영구 스토리지를 할당하여 안정적인 순서를 유지합니다.
- DaemonSet:
- 기능: 모든 노드 또는 특정 노드 세트에 파드를 배포하기 위해 사용되며, 모든 노드에서 특정 작업을 실행해야 할 때 유용합니다.
- Job:
- 기능: 일회성 또는 일련의 작업을 수행하는 파드를 관리합니다. 성공 및 실패를 기록하며, 작업이 완료될 때까지 대기하거나 실행할 수 있습니다.
- CronJob:
- 기능: 스케줄에 따라 반복적인 작업을 실행하는 Job을 관리합니다. 주기적인 작업을 예약하고 실행할 수 있습니다.
- Horizontal Pod Autoscaler (HPA):
- 기능: 파드 리소스 사용량에 따라 자동으로 파드 수를 조절하여 스케일 인/아웃을 수행합니다.
- Namespace:
- 기능: 클러스터 내의 리소스를 분리하기 위해 네임스페이스를 사용하며, 리소스를 그룹화하고 격리된 환경을 제공합니다.
- Service Account:
- 기능: 파드에서 클러스터 리소스에 접근할 수 있는 인증 정보를 제공하며, 리소스에 대한 권한을 관리합니다.
- Network Policies:
- 기능: 파드 간 통신을 제어하기 위한 정책을 정의하며, 보안 및 네트워크 분리를 구현하는 데 사용됩니다.
- Custom Controller:
- 기능: 사용자 정의 컨트롤러를 작성하여 특수한 요구 사항에 따라 리소스를 관리할 수 있습니다.
*참조 chat-gtp
--------------------------------------------------------------------------------------------------------------------------------------------------------------
1.Replication controller
ex)kubectl create rc-exam --image=nginx --replicas=3 --selector=app=webui
- 요구하는 pod의 개수를 보장하여 파드 집합의 실행을 항상 안정적으로 유지하는 것을 목표
-요구하는 pod 개수가 부족하면 template 를 이용해 pod 를 추가
-요구하는 pod 수 보다 많으면 최근에 생성된 pod를 삭제
- 기본구성
-selector
-replicas
-template
# vi rc-nginx.yaml |
apiVersion: v1 kind: ReplicationController metadata: name: rc-nginx spec: replicas: 3 selector: app: webui template: metadata: name: nginx-pod labels: app: webui spec: containers: - name: nginx-container image: nginx:1.14 |
# kubectl create -f rc-nginx.yaml replicationcontroller/rc-nginx created |
Every 2.0s: kubectl get pods -o wide master: Thu Sep 7 13:59:27 2023 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES rc-nginx-kncv5 1/1 Running 0 1m 10.101.1.137 worker2 rc-nginx-qztmx 1/1 Running 0 1m 10.101.1.81 worker1 rc-nginx-wg994 1/1 Running 0 1m 10.101.1.138 worker2 |
# kubectl get replicationcontrollers NAME DESIRED CURRENT READY AGE rc-nginx 3 3 3 129m |
# kubectl describe rc rc-nginx Name: rc-nginx Namespace: vittorio Selector: app=webui Labels: app=webui Annotations: Replicas: 3 current / 3 desired Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: app=webui Containers: nginx-container: Image: nginx:1.14 Port: Host Port: Environment: Mounts: Volumes: Events: |
# kubectl run redis --image=redis --labels=app=webui --dry-run -o yaml > redis.yaml |
apiVersion: v1 kind: Pod metadata: labels: app: webui name: redis spec: containers: - image: redis name: redis |
# kubectl create -f redis.yaml |
Every 2.0s: kubectl get pods -o wide master: Thu Sep 7 14:06:55 2023 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES rc-nginx-kncv5 1/1 Running 0 135m 10.101.1.137 worker2 rc-nginx-qztmx 1/1 Running 0 135m 10.101.1.81 worker1 rc-nginx-wg994 1/1 Running 0 135m 10.101.1.138 worker2 redis 0/1 Terminating 0 2s worker1 실패 |
* app: webui 같기 때문
# kubectl edit rc rc-nginx |
apiVersion: v1 kind: ReplicationController metadata: name: rc-nginx spec: replicas: 3 >>>> 4 로 변경 |
Every 2.0s: kubectl get pods -o wide master: Thu Sep 7 14:13:15 2023 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES rc-nginx-kncv5 1/1 Running 0 142m 10.101.1.137 worker2 rc-nginx-nqprr 1/1 Running 0 2s 10.101.1.82 worker1 rc-nginx-qztmx 1/1 Running 0 142m 10.101.1.81 worker1 rc-nginx-wg994 1/1 Running 0 142m 10.101.1.138 worker2 |
# kubectl scale rc rc-nginx --replicas=2 |
scale 명령어는 축소 명령어
가장 최근에 생긴 파드들 부터 사라짐
# kubectl scale rc rc-nginx --replicas=2 replicationcontroller/rc-nginx scaled |
Every 2.0s: kubectl get pods -o wide master: Thu Sep 7 14:14:18 2023 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES rc-nginx-qztmx 1/1 Running 0 143m 10.101.1.81 worker1 rc-nginx-wg994 1/1 Running 0 143m 10.101.1.138 worker2 |
# kubectl edit rc rc-nginx spec: replicas: 2 selector: app: webui template: metadata: creationTimestamp: null labels: app: webui name: nginx-pod spec: containers: - image: nginx:1.14 >>>> 1.15 로 변경 |
kubectl describe pod 해당 pod 조회 시 변경은 안됩니다.
하지만 해당 파드를 삭제하고 controller 를 통해 자동생성이 된다면 변경될 수있습니다.
# kubectl delete pod rc-nginx-qztmx pod "rc-nginx-qztmx" deleted #kubectl delete pod rc-nginx-wg994 pod "rc-nginx-wg994" deleted |
pod 삭제시 controller로 인해 자동생성 된다
다시 생성된 파드를 보면 1.15로 변경 되어 있다.
# kubectl describe pod rc-nginx-8694b << 새로생긴 pod Containers: nginx-container: Container ID: cri-o://cf5ad01fe8bf62faa1a26be098a7515a087858a5e982dceaef69b11bd482c1c2 Image: nginx:1.15 |
완전히 삭제
# kubectl delete rc rc-nginx
'Linux&Ubuntu > Docker&kuber' 카테고리의 다른 글
Deloyment 사용하기 (0) | 2023.09.08 |
---|---|
ReplicaSet 사용하기 (0) | 2023.09.08 |
pod 환경변수, 패턴의 종류 3가지 (0) | 2023.09.07 |
pod에 Resource 할당하기 CPU/Memory requests Limit (0) | 2023.09.06 |
static pod 만들기 (0) | 2023.09.06 |