ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„ ๊ด€๋ฆฌ

๊ฐœ์š”

ํ”„๋กœ์„ธ์Šค ID(PID) ํ•œ๋„๋Š” ๋…ธ๋“œ ์•ˆ์ •์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ๊ณผ๋„ํ•œ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋“œ์™€ ํฌ๋“œ์— ์ ์šฉ๋˜๋Š” Kubernetes ๋ฆฌ์†Œ์Šค ์ œ์•ฝ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. Apigee Hybrid๋Š” ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„ ์„ค์ •์„ ์œ„ํ•œ Kubernetes ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” ํŠน์ • ํ”Œ๋žซํผ์˜ Apigee ์„œ๋น„์Šค ๊ฐ’์— ๋Œ€ํ•œ ๊ถŒ์žฅ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ ํ•œ๋„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

Apigee Hybrid ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฒด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ Kubernetes์—์„œ PID ํ•œ๋„๋ฅผ ์„ค์ •ํ•˜๋ฉด ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ, ๋ณด์•ˆ, ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Kubernetes ๊ถŒ์žฅ์‚ฌํ•ญ๊ณผ๋„ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„ ์ •์˜

ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„์—๋Š” ๋…ธ๋“œ PID ํ•œ๋„์™€ ํฌ๋“œ PID ํ•œ๋„๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ PID ํ•œ๋„์—๋Š” kube-reserved PID์™€ system-reserved PID๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํ• ๋‹น ๊ฐ€๋Šฅํ•œ PID์˜ ์ด ์ˆ˜๋Š” ์ปค๋„ ์ตœ๋Œ€๊ฐ’์—์„œ kube-reserved PID, system-reserved PID, ์ œ๊ฑฐ ๊ธฐ์ค€์  PID๋ฅผ ๋บ€ ๊ฐ’์ž…๋‹ˆ๋‹ค.

์ปค๋„ ์ตœ๋Œ€ ID ํ•œ๋„
    - Kube ์˜ˆ์•ฝ๋จ
    - ์‹œ์Šคํ…œ ์˜ˆ์•ฝ๋จ
    - ์ œ๊ฑฐ ๊ธฐ์ค€์ 
= ํ• ๋‹น ๊ฐ€๋Šฅ
  • ์ปค๋„ ์ตœ๋Œ€ ID ํ•œ๋„: ์šด์˜์ฒด์ œ ๋ฐ ์ปค๋„ ์„ค์ •์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. Apigee Hybrid๋Š” Linux ์ปค๋„์—์„œ๋งŒ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Kubernetes ๋…ธ๋“œ์— ์ ์šฉ๋˜๋Š” Linus ๊ธฐ๋ฐ˜ ํ•œ๋„๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. Linux ์ปค๋„์˜ ์ตœ๋Œ€ ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„๋Š” 4194304์ž…๋‹ˆ๋‹ค.
  • kube-reserved ๋ฐ system-reserved: Kubernetes ๋˜๋Š” OS ์‹œ์Šคํ…œ ๋ฐ๋ชฌ์˜ ๋ฆฌ์†Œ์Šค ์˜ˆ์•ฝ์šฉ์ž…๋‹ˆ๋‹ค.
  • ์ œ๊ฑฐ ๊ธฐ์ค€์ : ๋…ธ๋“œ์— ์••๋ ฅ์ด ๊ฐ€ํ•ด์ง€๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•œ๋„์ž…๋‹ˆ๋‹ค. ๊ธฐ์ค€์ ์„ ์ถฉ์กฑํ•˜๋ฉด ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ PID ๊ธฐ๋ฐ˜ ์ œ๊ฑฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  • ํ• ๋‹น ๊ฐ€๋Šฅ: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ PID ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Kubernetes: ๋…ธ๋“œ ํ• ๋‹น ๊ฐ€๋Šฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”. kube-reserved ๋ฐ system-reserved๋Š” ๋…ธ๋“œ PID ํ•œ๋„ ์„ค์ •์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๋“œ PID ํ•œ๋„๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋…ธ๋“œ ๋‚ด์˜ ๋ชจ๋“  ํฌ๋“œ ๊ฐ„์— ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„ ๊ด€๋ฆฌ ์ค€๋น„

์ด ์ ˆ์ฐจ์—์„œ๋Š” ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

export PROJECT_ID=MY_PROJECT_ID
export CLUSTER_NAME=MY_CLUSTER_NAME
export LOCATION=MY_CLUSTER_LOCATION
export APIGEE_NAMESPACE=MY_APIGEE_NAMESPACE # Default: apigee

์•ก์„ธ์Šค ํ™•์ธ

ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์ „์— Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„๋Š” GKE์— ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”Œ๋žซํผ์˜ ๊ฒฝ์šฐ ํ”Œ๋žซํผ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  1. IAM ์ •์ฑ…์— roles/container.clusterAdmin์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    gcloud projects get-iam-policy ${PROJECT_ID}  \
     --flatten="bindings[].members" \
     --format='table(bindings.role)' \
     --filter="bindings.members:your_account_email"
    
  2. ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†๋Š” ๊ฒฝ์šฐ ๊ณ„์ •์— ์—ญํ• ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
     --member user:your_account_email \
     --role roles/container.clusterAdmin

๊ธฐ์กด PID ํ•œ๋„ ํ™•์ธ

์ƒˆ ํ•œ๋„๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์ „์— ๋…ธ๋“œ์— ๊ธฐ์กด PID ์ œํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  1. ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ๊ฐ’์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. apigee-data ๋ฐ apigee-runtime ๋…ธ๋“œ ํ’€์˜ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    kubectl get nodes -n ${APIGEE_NAMESPACE}
    

    ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    NAME                                      STATUS   ROLES    AGE    VERSION
    gke-my-hybrid-apigee-data-0a1b2c3d-efgh      Ready       2d8h   v1.31.5-gke.1169000
    gke-my-hybrid-apigee-runtime-1b2c3d4e-fghi   Ready       2d8h   v1.31.5-gke.1169000
    
  2. ์ด์ „ ๋‹จ๊ณ„์˜ ์ถœ๋ ฅ์—์„œ ๋…ธ๋“œ ์ด๋ฆ„์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋จผ์ € apigee-data ๋…ธ๋“œ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•œ ํ›„, apigee-runtime ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์ฝ”๋“œ

    export NODE_NAME=MY_NODE_NAME
    

    ์˜ˆ

    export NODE_NAME="gke-my-hybrid-apigee-data-0a1b2c3d-efgh"
    
  3. ๋…ธ๋“œ PID ํ•œ๋„๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์•ฝ๋œ ๊ฐ’์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด null์ด๋ฉด ๊ฐ’์ด ๊ตฌ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    kubectl get --raw "/api/v1/nodes/${NODE_NAME}/proxy/configz" | jq '.kubeletconfig.kubeReserved'
    kubectl get --raw "/api/v1/nodes/${NODE_NAME}/proxy/configz" | jq '.kubeletconfig.systemReserved'
    kubectl get --raw "/api/v1/nodes/${NODE_NAME}/proxy/configz" | jq '.kubeletconfig.evictionHard'
    
  4. ํฌ๋“œ PID ํ•œ๋„๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ํฌ๋“œ PID ํ•œ๋„๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜๋œ ๊ฐ’์ด -1์ด๊ฑฐ๋‚˜ ๋น„์–ด ์žˆ์œผ๋ฉด ํ•œ๋„๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    kubectl get --raw "/api/v1/nodes/${NODE_NAME}/proxy/configz" | jq '.kubeletconfig.podPidsLimit'
    

ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„ ๊ด€๋ฆฌ

๋…ธ๋“œ PID ํ•œ๋„ ๊ด€๋ฆฌ

GKE์— ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ Kubernetes ๋…ธ๋“œ์˜ ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์šฉ๋Ÿ‰๊ณผ ํ• ๋‹น ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋Š” Google Kubernetes Engine ๋ฌธ์„œ์˜ ๋…ธ๋“œ ํ• ๋‹น ๊ฐ€๋Šฅ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

GKE ์ด์™ธ์˜ ํ”Œ๋žซํผ์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ํ”Œ๋žซํผ์˜ Kubernetes ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ํด๋Ÿฌ์Šคํ„ฐ/๋…ธ๋“œ๊ฐ€ ์™„์ „ ๊ด€๋ฆฌํ˜•์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌํ˜•์ธ ๊ฒฝ์šฐ kube-reserved PID ํ•œ๋„์™€ system-reserved PID ํ•œ๋„๋ฅผ Kubelet์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ๋ฌธ์„œ์˜ ๋…ธ๋“œ PID ํ•œ๋„๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋„๊ตฌ

์ด ์ ˆ์ฐจ์—์„œ๋Š” Kubelet์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Kubelet์€ ํฌ๋“œ์™€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ์—์ด์ „ํŠธ๋กœ, PodSpec์— ๋”ฐ๋ผ ์‹คํ–‰๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. Kubelet์„ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ Kubernetes ๋ฌธ์„œ(kubeadm, kubelet, kubectl ์„ค์น˜)์˜ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

์ ˆ์ฐจ

  1. kubelet-config.yaml์ด๋ผ๋Š” Kubelet ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    kubeReserved:
     pid: PID_VALUE # Example: 1000
    

    ๊ตฌ์„ฑ์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Kubernetes ๋ฌธ์„œ์˜ Kube Reserved๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  2. Kubelet ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    kubelet --config PATH_TO_KUBELET_CONFIG_YAML
    

ํฌ๋“œ PID ํ•œ๋„ ๊ด€๋ฆฌ

ํ•œ๋„ ์„ ํƒ

PID ํ•œ๋„๊ฐ€ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •๋˜๋ฉด ํฌ๋“œ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋ฆฌ์†Œ์Šค ๋น„์ •์ƒ ๋™์ž‘์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ํ•œ๋„๋ฅผ ์„ ํƒํ•  ๋•Œ๋Š” ๋…ธ๋“œ์˜ ์ด์ „ ๋™์ž‘๊ณผ ์„œ๋น„์Šค๋ณ„ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

GKE์—๋Š” ๊ฐ’์— ํ•„์š”ํ•œ ๋ฒ”์œ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค([1024, 4194304]). GKE ํ”Œ๋žซํผ์—์„œ๋Š” Google Cloud console ์ธก์ •ํ•ญ๋ชฉ ํƒ์ƒ‰๊ธฐ์—์„œ Kubernetes ์„œ๋น„์Šค ๊ณ„์ •์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ๋…ธ๋“œ - PID ์‚ฌ์šฉ๋Ÿ‰ ์ธก์ •ํ•ญ๋ชฉ์„ ์„ ํƒํ•˜๊ณ  ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธก์ •ํ•ญ๋ชฉ์€ ์ตœ๊ทผ ํ”„๋กœ์„ธ์Šค ID ์‚ฌ์šฉ๋Ÿ‰์„ ๋ณด์—ฌ์ฃผ๋ฉฐ PID ํ•œ๋„๋ฅผ ์„ ํƒํ•  ๋•Œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธก์ •ํ•ญ๋ชฉ ํƒ์ƒ‰๊ธฐ

GKE ์ด์™ธ์˜ ํ”Œ๋žซํผ์—์„œ๋Š” ๋‹ค๋ฅธ ๋ชจ๋‹ˆํ„ฐ๋ง ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธก์ •ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜๋ ค๋ฉด ํ•ด๋‹น ํ”Œ๋žซํผ์˜ Kubernetes ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Apigee ํฌ๋“œ์˜ ํ”„๋กœ์„ธ์Šค ID ์š”๊ตฌ์‚ฌํ•ญ

Apigee Hybrid๋Š” apigee-data์™€ apigee-runtime์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ ํ’€์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ Apigee ๊ตฌ์„ฑ์š”์†Œ๋Š” ๋‘ ๋…ธ๋“œ ํ’€ ๋ชจ๋‘์— ๋ฐฐํฌ๋˜๋ฏ€๋กœ ํฌ๋“œ PID ํ•œ๋„๋Š” ๋‘ ๋…ธ๋“œ ํ’€์—์„œ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋“œ PID ํ•œ๋„๋Š” ๋ชจ๋“  Apigee ํฌ๋“œ์— ํ•„์š”ํ•œ ์ตœ๋Œ€ PID ์ˆ˜๋ณด๋‹ค ๋†’์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ Apigee ํฌ๋“œ PID ํ•œ๋„๋Š” 1,000์œผ๋กœ, GKE ํ”Œ๋žซํผ์˜ ์ตœ์†Œ ์š”๊ตฌ ์ˆ˜๋ณด๋‹ค ๋‚ฎ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ํ”Œ๋žซํผ์—์„œ๋Š” ํฌ๋“œ PID ์ˆ˜ ํ•œ๋„์— ์ตœ์†Ÿ๊ฐ’ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ฉฐ, ์ด ๊ฒฝ์šฐ ์ตœ์†Ÿ๊ฐ’ ์š”๊ตฌ์‚ฌํ•ญ์ด ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ์ตœ์†Œ ํฌ๋“œ PID ํ•œ๋„
Google Cloud ๊ธฐ๋ฐ˜ GKE 1024
GKE on AWS 1024
Azure์šฉ GKE 1024
VMware์šฉ Google Distributed Cloud(์†Œํ”„ํŠธ์›จ์–ด ์ „์šฉ) 1024
๋ฒ ์–ด๋ฉ”ํƒˆ์šฉ Google Distributed Cloud(์†Œํ”„ํŠธ์›จ์–ด ์ „์šฉ) 1024
EKS 1000
AKS 1000
OpenShift 1000
Rancher Kubernetes Engine(RKE) 1000

์ ˆ์ฐจ

ํฌ๋“œ PID ํ•œ๋„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ ˆ์ฐจ๋Š” GKE ํ”Œ๋žซํผ๊ณผ GKE ์ด์™ธ์˜ ํ”Œ๋žซํผ์—์„œ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

GKE ํ”Œ๋žซํผ

PID ํ•œ๋„ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” GKE ํ”Œ๋žซํผ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ํฌ๋“œ PID ํ•œ๋„๋Š” ๋…ธ๋“œ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ์— ์˜ํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค. GKE์—๋Š” ๊ฐ’์— ํ•„์š”ํ•œ ๋ฒ”์œ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค([1024, 4194304]). ์ž์„ธํ•œ ๋‚ด์šฉ์€ NodeKubeletConfig๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  1. ๋‹ค์Œ ์ฝ˜ํ…์ธ ๋กœ ์ง€์ •๋œ ํฌ๋“œ PID ํ•œ๋„๋กœ node-config.yaml์ด๋ผ๋Š” ๋…ธ๋“œ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    kubeletConfig:
     podPidsLimit: POD_PID_VALUE # Example: 1024
    
  2. apigee apigee-data ๋ฐ apigee-runtime ๋…ธ๋“œ ํ’€ ๋ชจ๋‘์— ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๋ฉด ๋…ธ๋“œ๊ฐ€ ๋ฌด์ค‘๋‹จ ๋…ธ๋“œ ์—…๊ทธ๋ ˆ์ด๋“œ ์ „๋žต ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ์‹œ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    gcloud container OPTIONAL_HOST_PLATFORM node-pools update NODE_POOL_NAME \
       --cluster CLUSTER_NAME \
       --region CLUSTER_LOCATION \
       --system-config-from-file=node-config.yaml \
       --project PROJECT_ID
    

GKE ์ด์™ธ ํ”Œ๋žซํผ

GKE ์ด์™ธ์˜ ํ”Œ๋žซํผ์˜ ๊ฒฝ์šฐ ํฌ๋“œ PID ํ•œ๋„๋Š” Kubelet์— ์˜ํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค. ํ•œ๋„๋Š” Kubelet ๊ตฌ์„ฑ ํŒŒ์ผ์˜ podPidsLimit ํ•„๋“œ์— ์˜ํ•ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

  1. ๋‹ค์Œ ์ฝ˜ํ…์ธ ๋กœ kubelet-config.yaml์ด๋ผ๋Š” Kubelet ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    podPidsLimit: POD_PID_VALUE # Example: 1024
    
  2. ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. podPidsLimit์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋…ธ๋“œ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ๋‹ค์šดํƒ€์ž„์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    kubelet --config PATH_TO_KUBELET_CONFIG_YAML
    
  3. ๊ตฌ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์•ˆ๋‚ด๋Š” ๊ธฐ์กด PID ํ•œ๋„ ํ™•์ธ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํฌ๋“œ PID ํ•œ๋„ ๊ตฌ์„ฑ ๋ช…๋ น์–ด์™€ ๋„๊ตฌ ๊ถŒ์žฅ์‚ฌํ•ญ์€ ํ”Œ๋žซํผ๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋ช…๋ น์–ด๋Š” ๊ฐ ํ”Œ๋žซํผ์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ฐธ๊ณ ๋กœ GKE๊ฐ€ ์•„๋‹Œ ํ”Œ๋žซํผ์˜ ๋ฌธ์„œ ๋งํฌ๋Š” ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๋‹ค์Œ ์‚ฌํ•ญ์€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ๋ฌธ์„œ
EKS ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๊ด€๋ฆฌ ๋…ธ๋“œ ๋งž์ถค์„ค์ •ํ•˜๊ธฐ
AKS Azure Kubernetes Service(AKS) ๋…ธ๋“œ ํ’€์˜ ๋…ธ๋“œ ๊ตฌ์„ฑ ๋งž์ถค์„ค์ •
OpenShift AWS ํฌ๋“œ์˜ Red Hat OpenShift ์„œ๋น„์Šค์— ๋” ๋†’์€ ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„๋ฅผ ์„ค์ •ํ•˜๋Š” ์œ„ํ—˜
Rancher Kubernetes Engine(RKE) kubectl ๋ฐ kubeconfig๋กœ ํด๋Ÿฌ์Šคํ„ฐ์— ์•ก์„ธ์Šค

ํ”„๋กœ์„ธ์Šค ID ํ•œ๋„ ๋ฌธ์ œ ํ•ด๊ฒฐ

FailedScheduling ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋œ Pending ์ƒํƒœ๋กœ ๋ฉˆ์ถ˜ ํฌ๋“œ

๋…ธ๋“œ ๋˜๋Š” ํฌ๋“œ PID ํ•œ๋„๋กœ ์ธํ•ด ํฌ๋“œ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋˜๋ฉด ํฌ๋“œ๊ฐ€ Pending ์ƒํƒœ๋กœ ๋ฉˆ์ถ”๊ณ  FailedScheduling ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

  1. ๋…ธ๋“œ ์—ด์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    kubectl get pods -n ${APIGEE_NAMESPACE} ${POD_NAME} -o wide
    
  2. PIDPressure ์กฐ๊ฑด์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl describe node -n apigee ${NODE_NAME} | grep PIDPressure
    
  3. ๋˜๋Š” ํ•ด๋‹น ํฌ๋“œ์˜ ApigeeDeployment๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ํฌ๋“œ์™€ ๋™์ผํ•œ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ๊ฐ€์ง„ ๊ฒฐ๊ณผ์—์„œ ApigeeDeployment๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    kubectl get ApigeeDeployment -n ${APIGEE_NAMESPACE}
    
  4. ์ตœ๊ทผ Events์— PID ๊ด€๋ จ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl describe ApigeeDeployment -n ${APIGEE_NAMESPACE} ${APIGEE_DEPLOYMENT_NAME}
    
  5. ์›์ธ์ด PID ํ•œ๋„์ธ ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜๋ฉด ๋…ธ๋“œ PID ํ•œ๋„ ๊ด€๋ฆฌ์˜ ๋‹จ๊ณ„์— ๋”ฐ๋ผ PID ํ•œ๋„๋ฅผ ๋” ๋†’์€ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ podPidsLimit

GKE์˜ ํ•œ๋„๋ฅผ ์„ค์ •ํ•  ๋•Œ podPidsLimit์ด ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ERROR: (gcloud.container.node-pools.update) ResponseError: code=400, message=Invalid podPidsLimit : value must be 1024 <= podPidsLimit <= 4194304.

podPidsLimit ๊ฐ’์„ ํ•„์ˆ˜ ๋ฒ”์œ„ ๋‚ด๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.