Kubernetes 에는 Pod를 관리함에 있어서 다양한 기능들을 제공해주는 Resource가 있는데 그 중 Controller 에 대해서 알아보았다.
Controller 는 크게 4가지 기능을 제공해준다.
Controller 와 Pod는 label과 selector로 연결되게 된다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
# modify replicas according to your case
replicas: 3
selector:
matchLabels:
tier: frontend
matchExpressions:
- {key: tier, operator: Exists}
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
Controller는 Pod가 죽었을 때 재생성을 해주게 되는데 이 때 Pod의 정보는 template 에 있는 정보를 기반으로해서 만들어지게 된다.
Controller 의 selector를 통해 Pod label 을 refering 하게 된다. 또한 template 에 refering할 pod의 label을 넣어줘야 새로 생성되는 파드에 대해서도 관리가 이루어진다.
spec.replicas 는 몇 개의 Pod를 운용할 것이냐는 정보를 담고 있다. 해당 값의 설정에 따라서 Pod의 갯수가 정해지게된다.
정확하게 key 와 value값이 일치하는 label을 가지는 pod에 대해서 관리가 이루어지게 된다.
operator를 통해서 다양한 조건식을 사용할 수 있다.
운영되고 있는 Service에 대한 재배포기능을 제공해주는 resource라고 볼 수 있다.
배포 방식으로는 4가지가 존재한다.
추가적으로 Deployment에서 replicaset 이 2개가 만들어지게 되면 2개의 replicaset에서 만들어진 pod들의 label이 같아서 문제가 생길 수 있기 때문에 자체적으로 구분이 가능한 labeling을 해주게 된다.