scheduler 유무 체크
kubectl get pods --namespace kube-system
// 스케쥴러 상세 정보
kubectl describe pod kube-scheduler-controlplane --namespace=kube-system
nodeName 수동 할당
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
nodeName: node01
containers:
- image: nginx
name: nginx
Label 생성
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: App1
function: Front-end
spec:
containers:
- image: nginx
name: nginx
Selector 조회
kubectl get pods --selector app=App1
kubectl get pods --selector app=App1 --no-headers | wc -l // 갯수확인 가능
kubectl get all --selector app=App1 // 모든 환경의 리소스 조회
kubectl get all --selector env=prod,bu=finance,tier=frontend // multi label 조회
kubectl get pods --show-labels // pod의 label까지 출력
ReplicaSet / service 생성 시 Label 적용
ReplicaSet.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx
labels:
app: App1
function: Front-end
spec:
replicas: 3
selector:
matchLabels: // *Label 적용
app: App1
template:
metadata: // *Label 적용
labels:
app: App1
function: Front-end
annotations: // 어노테이션 적용하여 record 생성 가능
buildversion: 1.34
containers:
- image: nginx
name: nginx
Service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: App1 // *Label 적용
ports:
- protocol: TCP
port: 80
targetPort: 9376
kubectl taint nodes Node명 key=value:taint-effect
ex) kubectl taint nodes node1 app=blue:NoSchedule
// node에 taints 있는지 체크
kubectl describe node node명 | grep -i taints
// taints 제거
kubectl taint nodes NODE명 node-role.kubernetes.io/master:NoSchedule-
taint-effect
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
nodeName: node01
containers:
- image: nginx
name: nginx
tolerations:
- key: "app"
operator: "Equal"
value: "blue"
effect: "NoSchedule"
kubectl label nodes Node명 key=value
ex) kubectl label nodes node1 size=Large
// 라벨 확인
kubectl describe node node명
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
nodeSelector:
size: Large
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: color
operator: In
values:
- blue
// Exists 옵션 해당 NODE에 POD 할당
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
// 생성한 deployment의 yaml 파일 생성
kubectl get deployments.apps deployment명 -o yaml > blue.yaml
// deplyment yaml 파일 생성
kubectl create deployment deployment명 --image=nginx --dry-run -o yaml > red.yaml
Node Affinity Types
(1) requiredDuringSchedulingIgnoredDuringExecution
결론 : Taints & Tolerations 와 Node affinity의 결합을 통해 특정 Node에 특정 POD만 할당되도록 할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 8080
resources:
requests:
memory: "1GI"
cpu: 1
limits:
memory: "2Gi"
cpu: 2
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: monitoring-daemon
spec:
template: // POD 정보 기입
metadata:
labels:
app: monitoring-daemon
spec:
containers:
- name: monitoring-daemon
image: monitoring-daemon
ex)
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: elasticsearch
name: elasticsearch
namespace: kube-system
spec:
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- image: k8s.gcr.io/fluentd-elasticsearch:1.20
name: fluentd-elasticsearch
// 조회
kubectl get daemonsets
// 모든 namespaces 내 조회
kubectl get daemonsets --all-namespaces
// namesapces내 상세 조회
kubectl describe daemonset daemonse명 --namespace=네임스페이스명
// deploy yaml 파일 만든 후 Daemonset으로 변경
kubectl create deployment elasticsearch --image=이미지명 -n 네임스페이스명 --dry-run=client -o yaml > fluentd.yaml
// static pod 조회 시 -controlplane 붙은 pod으로 확인
kubectl get pods --all-namespaces
// static pod path 조회
ps -ef | grep /usr/bin/kubelet
grep -i staticpod /var/lib/kubelet/config.yaml
// 해당 디렉토리에서 사용한 defenition file의 image 조회
grep -i image kube-apiserver.yaml
// 해당 static POD이 다른 Node에 할당된 경우 ssh 접속하여 위 command 적용
// 지정된 folder에 yaml 파일 생성 시, apply command 쓰지 않아도 static-pod 생성
kubectl run --restart=Never --image=이미지명 POD명 --dry-run=client -o yaml --command -- sleep 1000 > /etc/kubernetes/manifests/static-busybox.yaml