2021. 4. 5. 12:55ใ๐ฏ OpenSource/K8S
Replication Controller์ ReplicaSet ๋ชจ๋ ์คํ ์ค์ธ pod ๋ชฉ๋ก์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ์ฌ ๊ด๋ฆฌํ๋ pod ๋ค์ ์ค์ ์๊ฐ ์๋ํ๋ ์์ ๋์ผํ๋๋ก ๋ณด์ฅํ๋ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฆฌ์์ค์ด๋ค.
ํ์ง๋ง Replication Controller๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ถ์ธ์ด๋ฉฐ, ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ์ข๋ ๋์ ReplicaSet์ ๊ฑฐ์ ์ฌ์ฉํ๋ค.
4.3.1 Replication Controller์ ReplicaSet ๋น๊ต
๋ ๋ฆฌ์์ค๋ ๋์ผํ๊ฒ ๋์ํ์ง๋ง ReplicaSet์ ์ด์ํ๋ฉด ์ข ๋ ์ ๊ตํ pod selector๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Replication Controller : ํน์ ๋ ์ด๋ธ์ด ์๋ pod๋ง ํํฐ๋ง
ReplicaSet : ํน์ ๋ ์ด๋ธ์ด ์๊ฑฐ๋ ๋ ์ด๋ธ์ ๊ฐ๊ณผ ์๊ด์์ด ํน์ ๋ ์ด๋ธ์ key๋ฅผ ๊ฐ๋ pod ํํฐ๋ง ๊ฐ๋ฅ
ReplicationController๋ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ReplicaSet์ ์ข ๋ ์ง์คํด์ ์์๋ณด๊ธฐ๋ก ํ๋ค.
4.3.2 ReplicaSet ๋์ ์๋ฆฌ
- ๊ธฐ์กด pod๊ฐ ์ฌ๋ผ์ง๋ฉด ์ pod๋ฅผ ์์ํด ์๋ํ๋ ์์ pod๋ฅผ ์ ์งํ๋ค.
- ํด๋ฌ์คํฐ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ReplicaSet์ผ๋ก ๊ด๋ฆฌํ๋ pod๋ค์ ๋ํ ๋ณต์ ๋ณธ ์์ฑ
- ์๋, ์๋์ผ๋ก pod ์ํ ํ์ฅ์ด ๊ฐํธํด์ง
4.3.2 ReplicaSet ์์ฑํ๊ธฐ
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: kubia
spec:
replicas: 3
selector:
matchLabels:
app: kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
- match Selector : replicaset์ผ๋ก ๊ด๋ฆฌํ pod๋ฅผ ์ง์ ํ๋ค. ์ฌ๊ธฐ์ ๋ช ์๋ label ์ ๊ฐ์ง pod๋ฅผ ๋์์ผ๋ก ์ฌ๊ธฐ๊ฒ ๋๋ค.
- replicas : ์คํํ ํ๋์ ์๋ํ๋(desired) ์๋ฅผ ์ง์ ํ๋ค.
- pod template : ์๋ก์ด pod replica๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ค. ๋์์ด ๋๋ pod์ ๋ํ ๋ช ์ธ์ด๋ค
๐น MatchExpressions ์ฌ์ฉํ์ฌ ์ ๋ ํฐ์ ํํ์ ์ฌ์ฉํ๊ธฐ
apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
name: kubia
spec:
replicas: 3
selector:
matchExpressions:
- key: app
operator: In
values:
- kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia
- In : ๋ ์ด๋ธ ๊ฐ์ด ์ง์ ๋ ๊ฐ ์ค ํ๋์ ์ผ์น
- NotIn : ๋ ์ด๋ธ ๊ฐ์ด ์ง์ ๋ ๊ฐ๊ณผ ์ผ์นํ์ง ์์
- Exists : ์ง์ ๋ key๋ฅผ ๊ฐ์ง label์ ํฌํจํ๋ pod
- DoesNotExist: Pod์ ์ง์ ๋ key๋ฅผ ๊ฐ์ง label์ด ํฌํจ๋์ง ์์์ผ ํจ
4.3.3 ReplicaSet ์์ฑ ๋ฐ ํ์ธ
root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04# kubectl get rs
NAME DESIRED CURRENT READY AGE
kubia 3 3 3 9s
root@master001:~/k8s_in_action/kubernetes-in-action/Chapter04# kubectl get pods
NAME READY STATUS RESTARTS AGE
kubia-8qdbg 1/1 Running 0 77s
kubia-qd5nf 1/1 Running 0 77s
kubia-sqlbh 1/1 Running 0 77s
replica 3์ผ๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์ kubia๋ผ๋ pod์ ๋ํด ๋ณต์ ๋ณธ 3๊ฐ๊ฐ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด์ ๊ณ ์๋ก ํ๋์ pod๋ฅผ ์ญ์ ํ๋ค.
์ญ์ ๋ pod๊ฐ terminating ์ํ์ ๋์ ๋จ๊ณผ ๋์์ ์๋ก์ด pod๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธํ๋ค.
root@master001:~# kubectl delete pod kubia-8qdbg
pod "kubia-8qdbg" deleted
root@master001:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
kubia-8qdbg 1/1 Terminating 0 41m
kubia-qd5nf 1/1 Running 0 41m
kubia-sqlbh 1/1 Running 0 41m
kubia-tlxg6 1/1 Running 0 20s
root@master001:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
kubia-qd5nf 1/1 Running 0 43m
kubia-sqlbh 1/1 Running 0 43m
kubia-tlxg6 1/1 Running 0 2m1s
4.3.4 ReplicaSet์ ์ธ๋ถ ์ ๋ณด ํ์ธํ๊ธฐ
root@master001:~# kubectl describe rs kubia
Name: kubia
Namespace: default
Selector: app=kubia
Labels: <none>
Annotations: <none>
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=kubia
Containers:
kubia:
Image: luksa/kubia
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 46m replicaset-controller Created pod: kubia-qd5nf
Normal SuccessfulCreate 46m replicaset-controller Created pod: kubia-8qdbg
Normal SuccessfulCreate 46m replicaset-controller Created pod: kubia-sqlbh
Normal SuccessfulCreate 4m50s replicaset-controller Created pod: kubia-tlxg6
- Replicas/current : ํ์ฌ ๋์ํ๋ pod ์
- Replicas/desired : ์ ์งํ๊ณ ์ ํ๋ pod ์
- Pods Status : Pod์ ์ํ๋ณ ์ธ์คํด์ค ์
- Events : ReplicaSet๊ณผ ๊ด๋ จ๋ ์ด๋ฒคํธ
4.3.5 ์ํ pod ์ค์ผ์ผ๋ง
kubectl ๋ช ๋ น์ด๋ก scale up/down
root@master001:~# kubectl scale rs kubia --replicas=10
replicaset.apps/kubia scaled
kubectl edit์ผ๋ก ์ค๋ธ์ ํธ ์ ์ ์์
root@master001:~# kubectl get rs
NAME DESIRED CURRENT READY AGE
kubia 10 10 10 98m
root@master001:~# kubectl edit rs kubia
spec:
replicas: 2
selector:
matchLabels:
app: kubia
..
replicaset.apps/kubia edited
root@master001:~# kubectl get rs
NAME DESIRED CURRENT READY AGE
kubia 2 2 2 99m
4.3.6 pod ์ ์งํ๋ฉฐ replicaset ์ญ์ ํ๊ธฐ
kubectl delete ๋ช ๋ น์ ์ต์ ์์ด ์ฌ์ฉํ๋ฉด ReplicaSet๊ณผ ์ฐ๊ด ๋์ด ๊ด๋ฆฌ๋๋ pod ๊น์ง ๋ชจ๋ ์ญ์ ๋๋ค.
์ด๋ cacscade ์ต์ ์ผ๋ก pod ๋ ์ ์งํ ์ ์๋ค.
root@master001:~# kubectl delete rs kubia --cascade=false
warning: --cascade=false is deprecated (boolean value) and can be replaced with --cascade=orphan.
replicaset.apps "kubia" deleted
root@master001:~# kubectl get rs
No resources found in default namespace.
root@master001:~# kubectl get po
NAME READY STATUS RESTARTS AGE
kubia-qd5nf 1/1 Running 0 108m
kubia-sqlbh 1/1 Running 0 108m
'๐ฏ OpenSource > K8S' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
09. Job์ผ๋ก ์๋ฃ ๊ฐ๋ฅํ ๋จ์ผ task ๊ตฌํํ๊ธฐ (0) | 2021.04.05 |
---|---|
08. DaemonSet (0) | 2021.04.05 |
06. liveness probe (0) | 2021.04.05 |
05. Pod ์ค์ง, ์ ๊ฑฐ (0) | 2021.04.04 |
04. Namespace๋ฅผ ์ด์ฉํ ๋ฆฌ์์ค ๊ทธ๋ฃนํ (0) | 2021.04.04 |