2021. 4. 4. 13:15ใ๐ฏ OpenSource/K8S
โป ๋ณธ ๊ฒ์๊ธ์ ๋์ <์ฟ ๋ฒ๋คํฐ์ค ์ธ ์ก์ >์ ํ ๋๋ก ์ ๋ฆฌ/ํ์ตํ ๋ด์ฉ์ ๋๋ค.
Pod์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ labeling์ ํตํด ์ฐ๊ด์ฑ์ด ์๋ ๊ฒ๋ผ๋ฆฌ ๋ถ๋ฅํ์ฌ ์ด์ํ ์ ์๋ค.
pod๋ฅผ ๊ทธ๋ฃนํํ๋ฉด ๊ทธ๋ฃน๋ณ pod๋ค์ ์ํ๋ ์์ ์ ์ผ๊ด์ ์ผ๋ก ์ ์ฉ์ํฌ ์ ์๋ค.
3.3.1 Label?
Label์ pod, deployment ๋ฑ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ฅผ ์กฐ์งํ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
- ๋ฆฌ์์ค์ ์ค์ ํ๋ Key:value ์
- Label Selector๋ฅผ ์ด์ฉํด ์ํ๋ label์ ๊ฐ์ง ๋ฆฌ์์ค๋ฅผ ์ ํํ๋ค.
- ๋ฆฌ์์ค ์์ฑ ํ์๋ label ์ถ๊ฐ/์์ ๊ฐ๋ฅ
3.3.2 Pod ์์ฑํ ๋ label ์ง์ ํ๊ธฐ
๋ ๊ฐ์ label์ pod์ yaml ํ์ผ์ ์ง์ ํ๊ณ ๋์ ๋ฐฉ์์ ์์ ๋ณด๋๋ก ํ๋ค.
apiVersion: v1
kind: Pod
metadata:
name: kubia-manual-v2
labels:
creation_method: manual
env: prod
spec:
containers:
- image: luksa/kubia
name: kubia
ports:
- containerPort: 8080
protocol: TCP
pod๋ฅผ ์กฐํํ ๋ --show-labels ์ต์ ์ ์ฌ์ฉํ์ฌ label ์ ๋ณด๋ฅผ ํ์ธํ๋ค.
root@master001:~/k8s_in_action/03_pod# kubectl get po --show-labels
NAME READY STATUS RESTARTS AGE LABELS
kubia-manual 1/1 Running 0 46m <none>
kubia-manual-v2 1/1 Running 0 9m44s creation_method=manual,env=prod
ํ์ธ ํ๊ณ ์ถ์ label์ ๊ฐ๋ณ์ ํ๋๋ก ์ง์ ํ์ฌ ํ์ธ ํ ์๋ ์๋ค.
root@master001:~/k8s_in_action/03_pod# kubectl get po -L creation_method,env
NAME READY STATUS RESTARTS AGE CREATION_METHOD ENV
kubia-manual 1/1 Running 0 48m
kubia-manual-v2 1/1 Running 0 11m manual prod
์ด๋ฏธ ์์ฑ๋ pod์ label์ ์ถ๊ฐํ๋ค.
root@master001:~/k8s_in_action/03_pod# kubectl label po kubia-manual creation_method=manual
pod/kubia-manual labeled
root@master001:~/k8s_in_action/03_pod# kubectl get po -L creation_method,env
NAME READY STATUS RESTARTS AGE CREATION_METHOD ENV
kubia-manual 1/1 Running 0 50m manual
kubia-manual-v2 1/1 Running 0 12m manual prod
์ด๋ฏธ ์๋ ๋ผ๋ฒจ ์์ ํ ๋๋ --overwrite ์ต์ ์ ์ฌ์ฉํ๋ค.
root@master001:~/k8s_in_action/03_pod# kubectl label po kubia-manual-v2 env=debug --overwrite
pod/kubia-manual-v2 labeled
root@master001:~/k8s_in_action/03_pod# kubectl get po -L creation_method,env
NAME READY STATUS RESTARTS AGE CREATION_METHOD ENV
kubia-manual 1/1 Running 0 51m manual
kubia-manual-v2 1/1 Running 0 14m manual debug
3.4.1 Label Selector
- Label Selector๋ก ํน์ ๋ ์ด๋ธ์ ์ง์ ํ์ฌ ์ํ๋ pod์ ์์ ์ ์ํํ ์ ์๋ค.
- Label Selector๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฆฌ์์ค๋ฅผ ํํฐ๋งํ๋ค.
- ํน์ key ํฌํจ / ํฌํจํ์ง ์๋ label
root@master001:~/k8s_in_action/03_pod# kubectl get po -l env NAME READY STATUS RESTARTS AGE kubia-manual-v2 1/1 Running 0 26m root@master001:~/k8s_in_action/03_pod# kubectl get po -l '!env' NAME READY STATUS RESTARTS AGE kubia-manual 1/1 Running 0 62m nginx-deployment-7d95987b64-4pk8v 1/1 Running 0 4d5h nginx-deployment-7d95987b64-kxr44 1/1 Running 0 4d5h nginx-deployment-7d95987b64-thfs6 1/1 Running 0 4d5h
- ํน์ key์ value ๊ฐ์ง label
root@master001:~/k8s_in_action/03_pod# kubectl get po -l creation_method=manual NAME READY STATUS RESTARTS AGE kubia-manual 1/1 Running 0 61m kubia-manual-v2 1/1 Running 0 23m root@master001:~/k8s_in_action/03_pod# kubectl get po -l env!=debug NAME READY STATUS RESTARTS AGE kubia 1/1 Running 0 17h kubia-manual 1/1 Running 0 123m nginx-deployment-7d95987b64-4pk8v 1/1 Running 0 11d nginx-deployment-7d95987b64-kxr44 1/1 Running 0 11d nginx-deployment-7d95987b64-thfs6 1/1 Running 0 11d podtest 2/2 Running 56 39h
- ํน์ ํ key ๊ฐ์ง์ง๋ง ๋ค๋ฅธ ๊ฐ ๊ฐ์ง label
root@master001:~/k8s_in_action/03_pod# kubectl get po -l 'env in (prod,debug)' NAME READY STATUS RESTARTS AGE kubia-manual-v2 1/1 Running 0 7d11h root@master001:~/k8s_in_action/03_pod# kubectl get po -l 'env notin (prod,debug)' NAME READY STATUS RESTARTS AGE kubia 1/1 Running 0 17h kubia-manual 1/1 Running 0 128m nginx-deployment-7d95987b64-4pk8v 1/1 Running 0 11d nginx-deployment-7d95987b64-kxr44 1/1 Running 0 11d nginx-deployment-7d95987b64-thfs6 1/1 Running 0 11d podtest 2/2 Running 56 39h
- ํน์ key ํฌํจ / ํฌํจํ์ง ์๋ label
3.4.2 Label Selector์์ ์ฌ๋ฌ ์กฐ๊ฑด ์ฌ์ฉํ๊ธฐ
Label Selector๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์กฐ๊ฑด์ ๋์์ ๋ง์กฑํ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๊ฒ ํ ์๋ ์๋ค.
root@master001:~/k8s_in_action/03_pod# kubectl get po --show-labels -l app=my-nginx,pod-template-hash
NAME READY STATUS RESTARTS AGE LABELS
nginx-deployment-7d95987b64-4pk8v 1/1 Running 0 11d app=my-nginx,pod-template-hash=7d95987b64
nginx-deployment-7d95987b64-kxr44 1/1 Running 0 11d app=my-nginx,pod-template-hash=7d95987b64
nginx-deployment-7d95987b64-thfs6 1/1 Running 0 11d app=my-nginx,pod-template-hash=7d95987b64
3.5 Label, Selector ์ฌ์ฉํ์ฌ Pod ์ค์ผ์ค๋ง ์ ํํ๊ธฐ
pod๋ฅผ ์ค์ผ์ค๋งํ ๋ ํน์ ์กฐ๊ฑด์ ๊ฐ์ถ node ์์ ๋ฐฐํฌํ๋๋ก ์ ํํ๊ณ ์ถ์ ์ ์๋ค.
kubernetes์ ํน์ฑ์ ๋ฐฐํฌํ node๋ฅผ ์ง์ ์ ์ผ๋ก ์ง์ ํ๊ธฐ ๋ณด๋ค๋, label๋ก ์ง์ ํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ node์ ์ค์ผ์ค๋ง ํ๋๋ก ํ๋ค. ์ด๋ node selector์ label selector๋ฅผ ์ด์ฉํ์ฌ ํ ์ ์๋ค.
3.5.1 label์ ์ฌ์ฉํ์ฌ worker node ๋ถ๋ฅ
label์ pod ๋ฟ๋ง ์๋๋ผ node, deployment, service ๋ฑ ๋ชจ๋ kubernetes ์ค๋ธ์ ํธ์ ์ ์ฉํ ์ ์๋ค.
cluster์ค node์ ๋ฆฌ์์ค ์คํ์ด ๋ค๋ฅผ๋, ํน์ pod๋ฅผ gpu node์ ์ฌ๋ฆด ์ ์๋๋ก ์ค์ ํ๋ ์ค์ต์ ํด ๋ณด๋๋ก ํ๋ค.
worker1์ด gpu ์๋ฒ๋ผ๊ณ ๊ฐ์ ํ๊ณ , labeling์ ํ๋ค.
root@master001:~/k8s_in_action/03_pod# kubectl label node worker001 gpu=true
node/worker001 labeled
root@master001:~/k8s_in_action/03_pod# kubectl get no -L gpu
NAME STATUS ROLES AGE VERSION GPU
master001 Ready control-plane,master 26d v1.20.4
worker001 Ready <none> 26d v1.20.4 true
worker002 Ready <none> 26d v1.20.4
3.5.2 ํน์ node์ pod ์ค์ผ์ค๋ง
gpu ๋ผ๋ฒจ์ ๊ฐ์ง ํน์ node์ ์ค์ผ์ค๋ง ๋๋๋ก yaml ํ์ผ์ ์์ฑํ๋ค.
nodeSelector๋ gpu=true ๋ ์ด๋ธ์ ๊ฐ์ง node์ ํด๋น pod๋ฅผ ๋ฐฐํฌํ๋๋ก ํ๋ค.
apiVersion: v1
kind: Pod
metadata:
name: kubia-gpu
spec:
nodeSelector:
gpu: "true"
containers:
- image: luksa/kubia
name: kubia
root@master001:~/k8s_in_action/03_pod# kubectl get pod kubia-gpu -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kubia-gpu 1/1 Running 0 21s 172.30.65.92 worker001 <none> <none>
3.5.3 ํ๋์ ํน์ node์ ์ค์ผ์ค๋ง
k8s cluster์ ๋ชจ๋ ๋
ธ๋์๋ hostname์ ๋ํ label์ด ์๋ค. ๋ฐ๋ผ์ nodeSelector ํญ๋ชฉ์ ํน์ hostname์ ์ง์ ํ ์๋ ์์ผ๋,
ํด๋น node๊ฐ ์คํ๋ผ์ธ ์ํ์ด๋ฉด ์ค์ผ์ค๋ง์ด ์์ ๋์ง ์๋๋ค. ํน์ hostname์ผ๋ก ์ ํํ๋๊ฑด ์ง์ํ๋๋ก ํ๋ค.
kubectl describe ๋ช ๋ น์ด๋ก ๋ค์ ๋ด์ฉ์ ํ์ธํ ์ ์๋ค.
Name: worker001
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
gpu=true
kubernetes.io/arch=amd64
kubernetes.io/hostname=worker001
kubernetes.io/os=linux
3.6 Pod์ Annotaion ๋ฌ๊ธฐ
Annotaion?
- key-value ์
- label๊ณผ ๋ฌ๋ฆฌ annotaion์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ๊ทธ๋ฃนํ ํ ์ ์๋ค.
- object์ ๋ฒ์ ์ ๋ณด, ๋ด๋น๊ฐ๋ฐ์ ์ ๋ณด ๋ฑ์ ์ค๋ช ์ ์ถ๊ฐํจ์ผ๋ก์จ ํ์ ์ ์ํํ๊ฒ ํ๋๋ก ํ๋ค
- label ๋ณด๋ค ๋ค์ํ ์ ๋ณด๋ฅผ ์ ์ ์ ์๋ค
3.6.1 ์ค๋ธ์ ํธ์ annotation ์กฐํ
kubectl describe๋ฅผ ํตํด object์ annotaion์ด ์ด๋ค์์ผ๋ก ๋ค์ด๊ฐ๋์ง ํ์ธ ํ ์ ์๋ค.
root@master001:~/k8s_in_action/03_pod# kubectl describe node worker001
...
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
projectcalico.org/IPv4Address: 172.16.110.20/24
projectcalico.org/IPv4VXLANTunnelAddr: 172.30.65.64
volumes.kubernetes.io/controller-managed-attach-detach: true
์ค๋ธ์ ํธ์ yaml ๋ช ์ธ๋ฅผ ํ์ธํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/podIP: 172.30.254.27/32
cni.projectcalico.org/podIPs: 172.30.254.27/32
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"kubia-manual","namespace":"default"},"spec":{"containers":[{"image":"luksa/kubia","name":"kubia","ports":[{"containerPort":8080,"protocol":"TCP"}]}]}}
3.6.2 Annotation ์ถ๊ฐ ๋ฐ ์์
pod๋ฅผ ์์ฑํ ๋ ์ ์ฉ ํ ์ ์์ง๋ง, ์์ฑ ํ์๋ ์ถ๊ฐ ํ ์ ์๋ค.
root@master001:~/k8s_in_action/03_pod# kubectl annotate pod kubia-manual wglee/annotation="WonGyeong Lee"
pod/kubia-manual annotated
์ถ๊ฐํ annotation์ ํ์ธํ๋ค.
root@master001:~/k8s_in_action/03_pod# kubectl describe pod kubia-manual | vi -
Annotations: cni.projectcalico.org/podIP: 172.30.254.27/32
cni.projectcalico.org/podIPs: 172.30.254.27/32
wglee/annotation: WonGyeong Lee
'๐ฏ OpenSource > K8S' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
06. liveness probe (0) | 2021.04.05 |
---|---|
05. Pod ์ค์ง, ์ ๊ฑฐ (0) | 2021.04.04 |
04. Namespace๋ฅผ ์ด์ฉํ ๋ฆฌ์์ค ๊ทธ๋ฃนํ (0) | 2021.04.04 |
02. YAML ๋๋ JSON ๋์คํฌ๋ฆฝํฐ๋ก Pod ์์ฑํ๊ธฐ (0) | 2021.04.03 |
01. Pod_์ฟ ๋ฒ๋คํฐ์ค์์ ์ปจํ ์ด๋ ์คํํ๊ธฐ (0) | 2021.03.27 |