Study/Kubernetes

kubernetes Control-plane(Master Node)도 일을 시켜보자!!

ABCD 2024. 6. 23.

Taint 설정 해제 하기

처음 Kubernetes를 설치하여 Master Node(Leader Node)휘하에 Worker Node를 붙였다면, 기본적으로 Pod 들은 Worker Node에만 올라가도록 설정되어 있습니다.

 

Master Node(Leader Node)에도 Pod을 올리고 싶다면 Taint설정을 해제해야 하는데요.
우선 Taint설정이 어떻게 되어 있길래 안올라가는지 확인해 봅시다.

kubectl describe nodes ${node_name} |grep Taints

 

저의 경우에는 다음과 같이 입력합니다.

kubectl describe nodes k8s-master.example.com |grep Taints

 

이리하면 결과는 다음과 같이 나오게 됩니다.

Taints: node-role.kubernetes.io/control-plane:NoSchedule

 

보시면 Node자체에 Role이 설정되어 있는걸 볼 수 있습니다.

control-plane이라고 나와있지만, master라고 나와있는 경우도 있을 것입니다.

두 경우 이름에 차이가 있지만 크게 다르지 않습니다.

 

그러면 이제 해당 기능을 죽여볼까요??

kubectl taint nodes ${node_name} node-role.kubernetes.io/${node-role}:NoSchedule-

 

Node의 Role의 경우 kubectl get nodes -A을 통해 ROLES컬럼을 확인해 보시면 됩니다.

자!! 그럼 다시 한번 저의 경우로 예시를 보여드려야 더 이해가 쉬우시겠죠??

 

우선 ROLE을 먼저 찾아봅시다.

 

아래 예시를 보면 ROLES에 control-plane이 보이시죠?? 저게 우리가 ${node-role}에 작성해야 하는 부분입니다.

kubectl get nodes -A

# 결과 값
NAME                     STATUS   ROLES           AGE   VERSION
k8s-master.example.com   Ready    control-plane   23h   v1.30.2
k8s-node1.example.com    Ready    <none>          23h   v1.30.2
k8s-node2.example.com    Ready    <none>          23h   v1.30.2

이제 보든 준비가 끝났습니다. 해당 기능을 죽여보죠.
해당 기능을 제거할때는 마지막에 -붙여 주면 됩니다.

kubectl taint nodes k8s-master.example.com node-role.kubernetes.io/control-plane:NoSchedule-

Master Node(Leader Node)에 Nginx 올려보기

이젠 준비가 끝났습니다.
그럼 한번 Pod을 올려볼까요???
Kubernetes에서는 노드를 지정해서 해당 Pod을 올릴 수 있습니다.
아래 nginx관련 yaml파일을 참고해 보시죠.

# nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80
  nodeSelector:
    kubernetes.io/hostname: k8s-master.example.com

 

해당 파일을 실행하 Pod을 띄워보도록 하겠습니다.

kubectl apply -f nginx.yaml

 

이제 정상적으로 동작하는지 확인해 보면 됩니다.

확인 방법은 두 가지가 있습니다.

 

두 명령어를 입력후에 Node 컬럼에서 우리가 지정한 nodeSelector의 Node가 명시되어 있다면 이제 Master Node(Leader Node)에서도 Pod이 동작한다는 것을 확인 할 수 있습니다.

# 상세하기 모든 정보를 보고 싶은 경우
kubectl describe pod ${pod-name}

# 대략적인 모든 Pod의 정보를 보고 싶은 경우
kubectl get all -o wide
### describe
Name:             nginx-pod
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-master.example.com/192.168.0.230
Start Time:       Thu, 13 Jun 2024 06:29:57 +0000
Labels:           app=nginx

### get all
NAME                                   READY   STATUS    RESTARTS   AGE     IP              NODE                     NOMINATED NODE   READINESS GATES
pod/nginx-pod                          1/1     Running   0          6m59s   192.57.202.14   k8s-master.example.com   <none>           <none>
pod/nginx-pod-k8s-master.example.com   1/1     Running   0          7m7s    192.57.202.13   k8s-master.example.com   <none>           <none>

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   24h   <none>

참고사항

다시 Pod을 못올리도록 설정하고 싶은 경우

kubectl taint nodes ${node-name} node-role.kubernetes.io=${role}:NoSchedule
728x90
반응형

댓글

💲 추천 글