다음은 쿠버네티스 스터디 자료를 참고해 정리한 내용입니다.
리소스에 태그 붙이는게 라벨이다.
셀렉터는 해당 라벨을 조회한다.
쿠버네티스의 라벨과 셀렉터를 알아보자.
1
ec2에 로그인
쿠버네티스 master API 서버 로그인
ssh -i ~/.ssh/id_rsa ubuntu@api.k8s.serverchk.com
기존 파드 삭제 와 확인
kubectl delete pod --all
kubectl delete pod myweb2
kubectl get pods
2
labels.yaml 만들어 보자.
lable은 키와 value 값으로 되어 있다!!
cat << EOF > labels.yaml
apiVersion: v1
kind: Pod
metadata:
name: myweb1
labels:
environment: production
app: nginx
spec:
containers:
- image: nginx
name: myweb1
ports:
- containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Pod
metadata:
name: myweb2
labels:
environment: dev
app: nginx
spec:
containers:
- image: nginx
name: myweb2
ports:
- containerPort: 80
protocol: TCP
EOF
3
파드 생성?
kubectl apply -f labels.yaml
pod/myweb1 created
pod/myweb2 created
kubectl get pod
NAME READY STATUS RESTARTS AGE
myweb1 1/1 Running 0 49s
myweb2 1/1 Running 0 49s
4
파드 라벨 정보 확인
kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myweb1 1/1 Running 0 5s app=nginx,environment=production
myweb2 1/1 Running 0 5s app=nginx,environment=dev
5
파드 라벨이 nginx 인것만 조회 하기
kubectl get pod -l app=nginx
NAME READY STATUS RESTARTS AGE
myweb1 1/1 Running 0 2m35s
myweb2 1/1 Running 0 2m35s
6
셀렉터를 통한 확인
kubectl get pod -l environment=production
NAME READY STATUS RESTARTS AGE
myweb1 1/1 Running 0 2m14s
7
셀렉터를 활용하여 production 으로 지정된 특정 파드만 삭제 가능하다.
kubectl delete pod -l environment=production
pod "myweb1" deleted
8
kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myweb2 1/1 Running 0 3m8s app=nginx,environment=de
9
라벨 제거 = 라벨의 키 뒤에 -
kubectl label pod myweb2 app-
pod/myweb2 labeled
// app 라벨을 삭제 했다.
10
kubectl get pod --show-labels
myweb2 1/1 Running 0 4m21s environment=dev
// app 라벨을 삭제되어 environment 라벨만 남았다.
11
파드 삭제
kubectl delete pod --all
kubectl get pod
Pod 가 특정 노드에만 할당되도록 스케줄링 할수 있다.
워커노드 1대에 라벨 지정 , Pod 가 해당 워커노드에 배포되는지 확인
1
노드 기본 라벨 정보 확인 ?
nodde에도 기본적으로 라벨이 설정 되어 있다
kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
ip-172-20-38-114.ap-northeast-1.compute.internal Ready node beta.kubernetes.io/arch
2
wokrer node1에 라벨 추가 설정 해보자
kubectl label node
kubectl label node ip-172-20-38-114.ap-northeast-1.compute.internal gpu=ndivia
kubectl get node --show-labels
3
work node1에 라벨 지정 , Pod 가 해당 워커노드에 배포되는지 확인
cat << EOF > labels-node.yaml
apiVersion: v1
kind: Pod
metadata:
name: myweb
spec:
containers:
- image: nginx
name: myweb
ports:
- containerPort: 80
protocol: TCP
nodeSelector:
gpu: ndivia
EOF
// gpu: ndivia가 있는 node에 배포하라고 설정하는 것이다.
4
kubectl apply -f labels-node.yaml
pod/myweb created
5
pod 배포 node 위치 확인
kubectl get pod -o wide
ubuntu@ip-172-20-41-255:~$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb 1/1 Running 0 19s 100.99.166.34 ip-172-20-38-114.ap-northeast-1.compute.internal <none> <none>
5
Pod 이름만 변경해서 몇개더 생성해 확인 해보자 !!
pod 3개 더 생성
cat labels-node.yaml | sed "s/name: myweb/name: myweb2/g" | kubectl apply -f -
cat labels-node.yaml | sed "s/name: myweb/name: myweb3/g" | kubectl apply -f -
cat labels-node.yaml | sed "s/name: myweb/name: myweb4/g" | kubectl apply -f -
6
pod 배포 node 확인
kubectl get pod -o wide
7
파드 삭제
kubectl delete pod --all
1
Pod에 라벨 설정 가능
해당 라벨 지정된 Pod 만 선택해 삭제가 가능하다.
2
wokrer node1에 라벨 추가 설정함. gpu: ndivia
Pod생성시 nodeSelector 로 라벨을 지정하여 해당 node1에 Pod가 생성 되도록 지정 가능하다!
nodeSelector:
gpu: ndivia
https://brunch.co.kr/@topasvga/1671
감사합니다.