## static pod 만들기
보통 마스터노드에서 컨테이너를 만들면 저렇게 api서버를 거쳐서 pod가 생성된다.
하지만 static pod는 워커 노드 자체에서 kubelet이 직접 pod를 만든다는 것이다.
즉 이 pod는 kublet데몬에 의해 관리되는 파드이다.
마스터노드에서 확인가능
# 직접 만들어보자.
일단 워커 노드중 아무거나 하나 가서 해당 파일 내용을 보자.
cat /var/lib/kubelet/config.yaml
요기에 static pod path가 있음
static pod path는 /etc/kubernetes/manifests 라고 한다.
직접 이 경로에 가보자.
cd /etc/kubernetes/manifests
https://kubernetes.io/docs/concepts/workloads/pods/
Pods
Production-Grade Container Orchestration
kubernetes.io
pod 기본 yaml 형식을 가져와서 이 path에 yaml파일을 만들어주면..
짠~ 요렇게 master node에서 watch로 보고 있었는데 자동으로 pod가 생성이 되어버렸다.
참고로 난 master node에서 기본 namespace를 따로 바꿔놨었는데, 이렇게 static pod를 생성해준건
기본 namespace가 적용안되서 default namespace에 생기더라.
그래서 난 yaml파일 자체에 namespace를 설정해주고 만들어줬음.
# static pod 경로를 바꿀 수 없을까?
위에서 기본으로 정해진 static pod 기본경로는
cd /etc/kubernetes/manifests
요렇다. 이걸 바꿔주려면 아까
cat /var/lib/kubelet/config.yaml
요 내용을 vim 에디터로 바꿔주면 된다.
난 home 디렉토리를 static path 로 설정해봤다.
systemctl restart kubelet
스태틱파드 경로 바꾸면 kubelet 데몬 반드시 리스타트 해야한다.
암튼 바꾼 경로에 아까만든 yaml 파일을 넣으면 또 다시 적용된다.
# static pod 삭제하기
마스터 노드에서 일상적으로 pod를 삭제하듯 삭제해봤다.
그러니 아까 만든 pod가 삭제되었다고 메세지가 뜬다.
근데 watch 로 pod를 보고있었는데 pod가 pending이었다가,
또살아난다!!
이걸 삭제하려면 직접 워커노드에 가서 해당 yaml파일을 삭제해주면 된다.
## 리소스
# 개념
cpu와 메모리를 pod별로 할당, 제한하는 기능이다.
예를들어 ddos같이 리소스 잡아먹는 공격이 들어올경우 컨테이너를 노드별로 재배치를 해주고 뭐 이런거임.
cs지식이 좀 있어야 활용가능할것같은데 아직은 잘몰라서 ㅠ
# yaml양식
해당 yaml파일 형식은 이렇게 생겼다.
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
requests는 해당 파드가 할당되는 resource고, 이만큼 리소스 여유가 있는곳에 파드를 배치해달라는 거다. 최소 리소스 양을 요청한다고 보면 될듯.
limits는 최대 리소스 양을 제한하는 한계치다. 리소스 초과하는경우는 pod가 종료되고 다시 스케줄링된다.
# 단위
cpu는 코어수로 표현하고, 1코어 하나만 쓰면 된다.
메모리는 미비바이트? 이런거인데 1Gi는 1000Mi, 1Mi는 1000Ki 이런식으로 생각하면 된다.
# 만약 리소스를 초과하는 request resource를 적용한 pod를 띄우게 된다면?
현재 워커노드들의 리소스다. VM웨어에서 이렇게 만들었었다.
만약 메모리를 2Gi, 혹은 CPU를 2코어 이상으로 request용량을 적용한 pod를 띄우게 된다면?
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: images.my-company.example/app:v4
resources:
requests:
memory: "64Mi"
cpu: 2
limits:
memory: "128Mi"
cpu: 3
뭐 이런식으로 pod yaml에 cpu를 초과하게 설정해놨고
이 pod를 create 해보면
pod가 생성되긴 헀지만 pending상태로 멈춰버렸다.
describe로 event를 체크해보면
kubectl describe pod test-pod
요래 cpu가 충분치않다고 뜨고 영원히 pending상태로 유지되게된다.
만약 이 상태에서 이 리소스 제한을 수용할 수 있는 node가 추가된다면 바로 이 노드에 실행이 되게 된단다.
++ request 만 적으면 request만 적용되서 pod가 띄워진다.
++ limit만 적으면 request도 동일하게 적용된다.
## 환경변수
pod에 환경변수를 집어넣어보자~
# yaml 양식
apiVersion: v1
kind: Pod
metadata:
name: envar-demo
labels:
purpose: demonstrate-envars
spec:
containers:
- name: envar-demo-container
image: gcr.io/google-samples/node-hello:1.0
env:
- name: DEMO_GREETING
value: "Hello from the environment"
- name: DEMO_FAREWELL
value: "Such a sweet sorrow"
역시 공식문서에서 가져온 기본 env양식이다..
name과 value값으로 환경변수를 지정해줄 수 있다.
# 직접 해보자~
난 이렇게 환경변수 dog을 지정해봤다
해당 yaml파일로 pod를 만들어주면,
kubectl create -f test-env.yaml
kubectl exec envar-demo -it -- /bin/bash
환경변수가 잘 적용된걸 볼 수 있다.
++ 추가해서 env치면 환경변수 다나ㅇ
'k8s > concept' 카테고리의 다른 글
controller/ replicaSet & deployment (0) | 2023.11.30 |
---|---|
controller/ 개념 & replication controller (0) | 2023.11.28 |
pod/ liveness-probe(self-healing) (0) | 2023.11.27 |
pod/ flow & init container & infra container (0) | 2023.11.26 |
pod/ 멀티파드, yaml파일 생성 (0) | 2023.11.26 |