kubernetes controller - Replication Controller
Replication Controller
요구하는 Pod의 개수를 보장하며 파드 집합의 실행을 항상 안정적으로유지 하는 것을 목표
- 요구하는 Pod의 개수보다 부족하면 template를 이용해 Pod를 추가
- 요구하는 Pod의 개수보다 많으면 최근에 생성된 Pod를 삭제
Replication Definition
apiVersion: v1
kind: ReplicationController
metadata:
name: <ReplicationController_Name>
spec:
replicas: <배포 개수>
selector:
key: value
template:
<Container template>
selector : Key : Value로 구성해 selector에 포함되는 파드를 관리
replicas : 배포 개수
template : 컨테이너를 정의하는 template
webui 라벨을 갖는 nginx 웹서버를 3개 실행해줘!
kubectl create rc-exam --image=nginx --replicas=3 --selector=app=webui
nginx-rc.yaml
apiVersion:
kind: ReplicationController
metadata:
name: nginx-rc
spec:
replicas: 3
selector:
app: webui
template:
metadata:
name: nginx-pod
labels:
app: webui
spec:
containers:
- name: nginx-container
image: nginx:1.14
ReplicationController의 selector label의 template의 lable에 포함되어 있어야 합니다.
작성한 manifest 파일 배포
kubectl apply -f nginx-rc
3개의 Pod가 실행중인 것을 확인할 수 있습니다.
kubectl describe rc nginx-rc
redis 이미지의 파드 실행 ( app = webui 라벨을 가진 )
kubectl run redis --image=redis --dry-run --labels=app=webui -o yaml > redis.yaml
kubectl apply -f redis.yaml
실행되지 않고 바로 삭제됩니다. 해당 라벨을 갖는 Pod를 3개만 실행해주기 때문에 그 이상의 Pod는 바로 죽여버립니다.
ReplicationController 편집하기
kubectl edit rc nginx-rc
replicas를 4로 바꾸고 저장해줍니다. Pod의 개수를 맞추기 위해 한개의 Pod를 추가 실행합니다.
명령어로 스케일 조절하기
kubectl scale rc nginx-rc --replicas=2
가장 최근 실행된 두개의 Pod를 삭제합니다.
Pod의 이미지 버전 수정하기
kubectl edit rc nginx-rc
selector:
app: webui
template:
metadata:
creationTimestamp: null
labels:
app: webui
name: nginx-pod
spec:
containers:
- image: nginx:1.15 ### 1.14 ~> 1.15
imagePullPolicy: IfNotPresent
name: nginx-container
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
버전이 바뀐다고해서 Pods의 이미지가 변경되진 않습니다. 그러나 이후 생성되는 Pods는 1.15 버전으로 생성됩니다.
EXAMPLE
다음 조건으로 ReplicationController를 사용하는 rc-lab.yaml 파일을 생성하고 동작시킵니다.
- lables(name: apache, app:main, rel:stable)를 가지는 httpd:2.2 버전의 Pod를 2개 운영합니다
rc name : rc-mainui
container: httpd:2.2
rc-lab.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-mainui
spec:
replicas: 2
selector:
app: main
template:
metadata:
name: apache-pod
labels:
app: main
rel: stable
name: apache
spec:
containers:
- name: apache
image: httpd:2.2
동작되는 httpd:2.2 버전의 컨테이너를 3개로 확장하는 명령을 적고 실행하세요
kubectl scale rc rc-mainui --replicas=3