개발강의정리/DevOps

[데브옵스를 위한 쿠버네티스 마스터] 애플리케이션 스케줄링과 라이프사이클 관리 - 스태틱 포드

nineDeveloper 2021. 1. 19.
728x90

스태틱 포드


스태틱 포드의 필요성

  • 스태틱 포드: kubelet이 직접 실행하는 포드
  • 각각의 노드에서 kubelet에 의해 실행
  • 포드들을 삭제할때 apiserver를 통해서 실행되지 않은 스태택 포드(static pod)는 삭제 불가
  • 즉, 노드의 필요에 의해 사용하고자 하는 포드는 스태틱 포드로 세팅
  • 다음 명령어 들을 사용하여 실행하고자 하는 static pod의 위치를 설정 가능
$ sudo systemctl status kubelet
kubelet.service - kubelet: The Kubernetes Node Agent
  Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
 Drop-In: /etc/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
  Active: active (running) since Sun 2019-07-07 12:00:33 KST; 13min ago
    Docs: https://kubernetes.io/docs/home/
Main PID: 27987 (kubelet)
   Tasks: 18 (limit: 4680)
  CGroup: /system.slice/kubelet.service
           └─27987 /usr/bin/kubelet --bootstrap-kube config=/etc/kubernetes/bootstrap-
kubelet.conf --k

ExecStart= 부분에 --pod-manifest-path=/etc/kubelet.d/ 추가

vim /lib/systemd/system/kubelet.service

systemctl daemon-reload

systemctl restart kubelet


스태틱 포드의 기본 경로

  • 기본 경로는 /etc/kubernetes/manifests
  • 이미 쿠버네티스 시스템에서는 필요한 기능을 위해 다음과 같은 스태틱 포드를 사용
  • 각각의 컴포넌트의 세부 사항을 설정할 때는 여기 있는 파일들을 수정하면 자동으로 업데이트돼 포드를 재구성
  • 포드의 작성 요령은 기존의 포드와 동일
$ ls /etc/kubernetes/manifests/
etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml

간단한 스태틱 포드의 작성

  • 일반적인 포드와 동일하게 작성
  • 작성된 파일은 반드시 해당 경로에 위치
  • 실행을 위해 별도의 명령은 필요하지 않음
  • 작성 후 바로 get pod를 사용하여 확인
apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    role: myrole
spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP
$ k get pod
NAME                READY   STATUS    RESTARTS   AGE
static-web-master   1/1     Running   1          14s

실습

https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/#pods-created-via-http

http-go.yaml

apiVersion: v1
kind: Pod
metadata:
  name: http-go
spec:
  containers:
  - name: http-go
    image: gasbugs/http-go

/etc/kubernetes/manifests 에 http-go.yaml 파일을 생성하면 자동으로 master 가 pod를 생성함

$ sudo -i
$ cd /etc/kubernetes/manifests
$ vi http-go.yaml

kube-system 에 올라가 있지 않으므로 보이지 않음

$ kubectl get pod -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-74ff55c5b-bsm6g          1/1     Running   17         20d
coredns-74ff55c5b-btpq5          1/1     Running   17         20d
etcd-master                      1/1     Running   20         20d
kube-apiserver-master            1/1     Running   7          3d3h
kube-controller-manager-master   1/1     Running   19         20d
kube-proxy-4frsb                 1/1     Running   19         20d
kube-proxy-6ld5t                 1/1     Running   18         20d
kube-proxy-fq6m7                 1/1     Running   18         20d
kube-scheduler-master            1/1     Running   19         20d
weave-net-mxqkk                  2/2     Running   50         20d
weave-net-qpmvn                  2/2     Running   50         20d
weave-net-qq5bk                  2/2     Running   56         20d

확인해보면 http-go-master 라고 되어있는 것을 확인
static pod 는 node의 명칭이 뒤에 붙음
삭제를 해도 내려가지 않음

$ kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
http-go-master   1/1     Running   0          77s

static token 이나 LimitRanges 등 manifests 옵션을 추가해야되는 일들이 종종 있음

728x90

댓글

💲 추천 글