포스팅 목차
# Assign Pods Using Labels
- label에 따라 pod 할당 테스트를 위해 세팅
# ------------------------------------------
# label에 따라 pod 할당 테스트를 위해 세팅
# 1. labeling
# master : status=vip, worker : status=other
# ------------------------------------------
# node list 확인.
# 실습을 위해서 labels 나 taint 추가된게 없이 ready 상태여야 한다.
ps0107@k8smaster1:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8smaster1 Ready master 7d5h v1.15.1
k8sworker1 Ready <none> 7d5h v1.15.1
# 현재 노드에 label, taint 정보를 확인.
ps0107@k8smaster1:~$ kubectl describe nodes | grep -i label
Labels: beta.kubernetes.io/arch=amd64
Labels: beta.kubernetes.io/arch=amd64
ps0107@k8smaster1:~$ kubectl describe nodes | grep -i taint
Taints: <none>
Taints: <none>
# 실습을 위해서 kube-system 외에 현재 running 중인 deployment가 없어야 한다.
# 만약 존재하면 삭제한 후에 각 노드별로 container 갯수를 확인해 본다.
ps0107@k8smaster1:~$ kubectl get deployment --all-namespaces
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system calico-typha 0/0 0 0 7d5h
kube-system coredns 2/2 2 2 7d5h
# container 갯수 확인
ps0107@k8smaster1:~$ sudo docker ps | wc -l
22
ps0107@k8sworker1:~$ sudo docker ps | wc -l
10
# 실습을 위해서 master 노드에 status=vip 로, 다른 노드는 status=other 로 label 추가
ps0107@k8smaster1:~$ kubectl label nodes k8smaster1 status=vip
node/k8smaster1 labeled
ps0107@k8smaster1:~$ kubectl label nodes k8sworker1 status=other
node/k8sworker1 labeled
# label 확인
ps0107@k8smaster1:~$ kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8smaster1 Ready master 7d5h v1.15.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8smaster1,kubernetes.io/os=linux,node-role.kubernetes.io/master=,status=vip
k8sworker1 Ready <none> 7d5h v1.15.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8sworker1,kubernetes.io/os=linux,status=other
- master node쪽으로 nodeSelector 를 설정하여 테스트 해보자.
# ------------------------------------
# master node쪽으로 nodeSelector 를 설정하여 테스트 해보자.
# ------------------------------------
# sleep time을 설정한 4개의 busybox 컨테이너를 만들기 위한 yaml 파일을 작성한다.
# nodeSelect entry 도 포함한다.
ps0107@k8smaster1:~$ vi vip.yaml
apiVersion: v1
kind: Pod
metadata:
name: vip
spec:
containers:
- name: vip1
image: busybox
args:
- sleep
- "1000000"
- name: vip2
image: busybox
args:
- sleep
- "1000000"
- name: vip3
image: busybox
args:
- sleep
- "1000000"
- name: vip4
image: busybox
args:
- sleep
- "1000000"
nodeSelector:
status: vip # <- vip 로 label 되어 있는 node로 할당
# pod 생성 후 각 노드 container 갯수 확인
ps0107@k8smaster1:~$ kubectl create -f vip.yaml
pod/vip created
# nodeSelector 로 vip label이 있는 master에 container 갯수 증가
ps0107@k8smaster1:~$ sudo docker ps | wc -l
27
ps0107@k8sworker1:~$ sudo docker ps | wc -l
10
# 생성한 vip 라벨링 pod들을 삭제한다.
ps0107@k8smaster1:~$ kubectl delete pod vip
pod "vip" deleted
- nodeSelector 설정 없애고 테스트 해보자
# ------------------------------------
# nodeSelector 설정 없애고 테스트
# ------------------------------------
ps0107@k8smaster1:~$ vi vip.yaml
apiVersion: v1
kind: Pod
metadata:
name: vip
spec:
containers:
- name: vip1
image: busybox
args:
- sleep
- "1000000"
- name: vip2
image: busybox
args:
- sleep
- "1000000"
- name: vip3
image: busybox
args:
- sleep
- "1000000"
- name: vip4
image: busybox
args:
- sleep
- "1000000"
# nodeSelector:
# status: vip
# pod 생성 후 container갯수 확인
# 이번에는 두개의 노드에 분산되어 컨테이너가 생성된다.
ps0107@k8smaster1:~$ kubectl create -f vip.yaml
pod/vip created
ps0107@k8smaster1:~$ sudo docker ps | wc -l
22
ps0107@k8sworker1:~$ sudo docker ps | wc -l
15
- worker node쪽으로 nodeSelector 를 설정하여 테스트 해보자.
# ------------------------------------
# worker node쪽으로 nodeSelector 를 설정하여 테스트 해보자.
# ------------------------------------
ps0107@k8smaster1:~$ cp vip.yaml other.yaml
ps0107@k8smaster1:~$ sed -i s/vip/other/g other.yaml
ps0107@k8smaster1:~$ vi other.yaml
ps0107@k8smaster1:~$ cat other.yaml
apiVersion: v1
kind: Pod
metadata:
name: other
spec:
containers:
- name: other1
image: busybox
args:
- sleep
- "1000000"
- name: other2
image: busybox
args:
- sleep
- "1000000"
- name: other3
image: busybox
args:
- sleep
- "1000000"
- name: other4
image: busybox
args:
- sleep
- "1000000"
nodeSelector:
status: other # <- worker node 쪽으로
# pod 생성 후 container갯수 확인
# 이번에는 worker 노드에 컨테이너가 생성된다.
ps0107@k8smaster1:~$ kubectl create -f other.yaml
pod/other created
ps0107@k8smaster1:~$ sudo docker ps | wc -l
22
ps0107@k8sworker1:~$ sudo docker ps | wc -l
19
# 리소스 정리
ps0107@k8smaster1:~$ kubectl delete pods vip other
pod "vip" deleted
pod "other" deleted