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

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

๋„๊ตฌ

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

์ ˆ์ฐจ

  1. Kubelet ๊ตฌ์„ฑ ํŒŒ์ผ kubelet-config.yaml์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    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 ๋“ฑ ๋…ธ๋“œ ํ’€ 2๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ 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 ๊ตฌ์„ฑ ํŒŒ์ผ kubelet-config.yaml์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    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 ๊ฐ’์„ ํ•„์ˆ˜ ๋ฒ”์œ„ ๋‚ด๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.