前回の記事では、ほぼ和訳と実践してみたものの上手く動かないまま終わってしまった。
今回はちゃんと動いた結果を書いていく
環境
GKE
version : 1.13.11-gke.23
マシンタイプ : n1-standard-1
node数 : 3
リソースが欲しいので、stackdriver loggingを無効にしてfluentdがいない構成にしている
まずLowNodeUtilizationからやってみる
実行前Podの一覧である。
見てお分かりの通り、node3台にもかかわらず、2台のnodeで全てのPodが配置されている。
kubectl get pods -n wakashiyo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wakashiyo-deployment-75b89bd54b-69bkl 1/1 Running 0 29m 10.48.1.16 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-hpdr7 1/1 Running 0 29m 10.48.1.19 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-khgvv 1/1 Running 0 29m 10.48.1.18 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-khvgc 1/1 Running 0 29m 10.48.1.17 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-vkn9h 1/1 Running 0 29m 10.48.0.15 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
wakashiyo-deployment-75b89bd54b-z2xfj 1/1 Running 0 29m 10.48.0.16 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
実行前にnodeの情報を見てみた。
LowNodeUtilizationはnodeのcpu、memory、podのリソースを設定して実行するものなので、事前に確認しておく。
本来の運用であれば、ある程度基準値を設けておいて設定しておくはずだが、今回はとりあえず動いているところを見たい+流れがわかりやすくなると思うので、事前に確認して設定することにする。
gke-wakashiyo-default-pool-8b0ec5ba-x29p
ProviderID: gce://wakashiyo-playground/asia-northeast1-a/gke-wakashiyo-default-pool-8b0ec5ba-x29p
Non-terminated Pods: (8 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system heapster-86f6474897-stbl9 63m (6%) 63m (6%) 215840Ki (7%) 215840Ki (7%) 140m
kube-system kube-proxy-gke-wakashiyo-default-pool-8b0ec5ba-x29p 100m (10%) 0 (0%) 0 (0%) 0 (0%) 140m
kube-system metrics-server-v0.3.1-57c75779f-xg59s 48m (5%) 143m (15%) 105Mi (3%) 355Mi (13%) 140m
kube-system prometheus-to-sd-wmcsp 1m (0%) 3m (0%) 20Mi (0%) 20Mi (0%) 140m
wakashiyo wakashiyo-deployment-75b89bd54b-69bkl 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 31m
wakashiyo wakashiyo-deployment-75b89bd54b-hpdr7 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 31m
wakashiyo wakashiyo-deployment-75b89bd54b-khgvv 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 31m
wakashiyo wakashiyo-deployment-75b89bd54b-khvgc 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 31m
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 612m (65%) 609m (64%)
memory 651040Ki (24%) 1009440Ki (37%)
ephemeral-storage 0 (0%) 0 (0%)
attachable-volumes-gce-pd 0 0
gke-wakashiyo-default-pool-8b0ec5ba-2w40
ProviderID: gce://wakashiyo-playground/asia-northeast1-a/gke-wakashiyo-default-pool-8b0ec5ba-2w40
Non-terminated Pods: (6 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system kube-dns-79868f54c5-7cc5w 260m (27%) 0 (0%) 110Mi (4%) 170Mi (6%) 141m
kube-system kube-dns-autoscaler-bb58c6784-8ms5s 20m (2%) 0 (0%) 10Mi (0%) 0 (0%) 141m
kube-system kube-proxy-gke-wakashiyo-default-pool-8b0ec5ba-2w40 100m (10%) 0 (0%) 0 (0%) 0 (0%) 141m
kube-system prometheus-to-sd-qxg9g 1m (0%) 3m (0%) 20Mi (0%) 20Mi (0%) 141m
wakashiyo wakashiyo-deployment-75b89bd54b-vkn9h 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 32m
wakashiyo wakashiyo-deployment-75b89bd54b-z2xfj 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 32m
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 581m (61%) 203m (21%)
memory 290Mi (10%) 390Mi (14%)
ephemeral-storage 0 (0%) 0 (0%)
attachable-volumes-gce-pd 0 0
gke-wakashiyo-default-pool-8b0ec5ba-654k
ProviderID: gce://wakashiyo-playground/asia-northeast1-a/gke-wakashiyo-default-pool-8b0ec5ba-654k
Non-terminated Pods: (4 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system kube-dns-79868f54c5-jvwg8 260m (27%) 0 (0%) 110Mi (4%) 170Mi (6%) 142m
kube-system kube-proxy-gke-wakashiyo-default-pool-8b0ec5ba-654k 100m (10%) 0 (0%) 0 (0%) 0 (0%) 142m
kube-system l7-default-backend-fd59995cd-jfvwb 10m (1%) 10m (1%) 20Mi (0%) 20Mi (0%) 142m
kube-system prometheus-to-sd-d6vmv 1m (0%) 3m (0%) 20Mi (0%) 20Mi (0%) 142m
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 371m (39%) 13m (1%)
memory 150Mi (5%) 210Mi (7%)
ephemeral-storage 0 (0%) 0 (0%)
attachable-volumes-gce-pd 0 0
describe した結果を一覧表にまとめた。
node |
cpu |
memory |
pod数 |
gke-wakashiyo-default-pool-8b0ec5ba-x29p |
612m (65%) |
651040Ki (24%) |
8 kube-system: 4 wakashiyo: 4 |
gke-wakashiyo-default-pool-8b0ec5ba-2w40 |
581m (61%) |
290Mi (10%) |
6 kube-system: 4 wakashiyo: 2 |
gke-wakashiyo-default-pool-8b0ec5ba-654k |
371m (39%) |
150Mi (5%) |
4 kube-system: 4 wakashiyo: 0 |
今回はgke-wakashiyo-default-pool-8b0ec5ba-x29pにPodが偏っているので、このnodeを削除対象のnodeとしてスケジュールしたい。
そして、Podが全然配置されていないgke-wakashiyo-default-pool-8b0ec5ba-654kを再スケジュール対象のnodeとしてスケジュールしたい。
上記を考慮して以下のようなconfigMapの設定にした
apiVersion: v1
kind: ConfigMap
metadata:
name: descheduler-policy-configmap
namespace: kube-system
data:
policy.yaml: |
apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
"RemoveDuplicates":
enabled: true
"RemovePodsViolatingInterPodAntiAffinity":
enabled: true
"LowNodeUtilization":
enabled: true
params:
nodeResourceUtilizationThresholds:
thresholds:
"cpu" : 50
"memory": 50
"pods": 5
targetThresholds:
"cpu" : 60
"memory": 30
"pods": 7
注意しなければならないのは、kube-systemも含めた全リソースのcpu使用率、memory使用率、Pod数を考慮して設定しなければならないことだ。
そして、再スケジュール対象のnodeを決めるpolicy(thresholds)は全ての条件を満たさなければならないのに対し、
削除対象のnodeを決めるpolicy(targetThresholds)は3つの要素のいずれかを満たせばいい。
ということを考慮して上記のconfigMapのように設定した。
このconfigMapを適用して、deschedulerのジョブを実行させた。以下が実行後のPodの一覧である。
kubectl get pods -n wakashiyo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wakashiyo-deployment-75b89bd54b-69bkl 1/1 Running 0 41m 10.48.1.16 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-dts4h 1/1 Running 0 30s 10.48.2.18 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-75b89bd54b-f72ch 1/1 Running 0 30s 10.48.2.19 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-75b89bd54b-jg9vv 1/1 Running 0 30s 10.48.1.20 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-vkn9h 1/1 Running 0 41m 10.48.0.15 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
wakashiyo-deployment-75b89bd54b-xzffg 1/1 Running 0 30s 10.48.0.17 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
うまくいったようだ。2台ずつに配置されたので、いい感じになった。
RemovePodsViolatingNodeAffinity をやってみる
policyの説明は省略する。
nodeのラベルの一覧を確認する。
kubectl get nodes -o json | jq ".items[] | .metadata.labels"
{
"beta.kubernetes.io/arch": "amd64",
"beta.kubernetes.io/fluentd-ds-ready": "true",
"beta.kubernetes.io/instance-type": "n1-standard-1",
"beta.kubernetes.io/os": "linux",
"cloud.google.com/gke-nodepool": "default-pool",
"cloud.google.com/gke-os-distribution": "cos",
"failure-domain.beta.kubernetes.io/region": "asia-northeast1",
"failure-domain.beta.kubernetes.io/zone": "asia-northeast1-a",
"kubernetes.io/hostname": "gke-wakashiyo-default-pool-8b0ec5ba-2w40"
}
{
"beta.kubernetes.io/arch": "amd64",
"beta.kubernetes.io/fluentd-ds-ready": "true",
"beta.kubernetes.io/instance-type": "n1-standard-1",
"beta.kubernetes.io/os": "linux",
"cloud.google.com/gke-nodepool": "default-pool",
"cloud.google.com/gke-os-distribution": "cos",
"failure-domain.beta.kubernetes.io/region": "asia-northeast1",
"failure-domain.beta.kubernetes.io/zone": "asia-northeast1-a",
"kubernetes.io/hostname": "gke-wakashiyo-default-pool-8b0ec5ba-654k",
"sample": "bias"
}
{
"beta.kubernetes.io/arch": "amd64",
"beta.kubernetes.io/fluentd-ds-ready": "true",
"beta.kubernetes.io/instance-type": "n1-standard-1",
"beta.kubernetes.io/os": "linux",
"cloud.google.com/gke-nodepool": "default-pool",
"cloud.google.com/gke-os-distribution": "cos",
"failure-domain.beta.kubernetes.io/region": "asia-northeast1",
"failure-domain.beta.kubernetes.io/zone": "asia-northeast1-a",
"kubernetes.io/hostname": "gke-wakashiyo-default-pool-8b0ec5ba-x29p"
}
あらかじめ、gke-wakashiyo-default-pool-8b0ec5ba-654kに対して、 sample=bias
というラベルを付与した。
そして、そのラベルが付いているnodeにPodをスケジューリングするようにした。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
namespace: wakashiyo
name: wakashiyo-deployment
spec:
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.12
ports:
- containerPort: 80
resources:
requests:
memory: 75Mi
cpu: 100m
limits:
memory: 100Mi
cpu: 100m
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: sample
operator: In
values:
- bias
kubectl get pods -n wakashiyo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wakashiyo-deployment-54664b6fc8-44qf2 1/1 Running 0 20s 10.48.2.20 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-54664b6fc8-5wlzm 1/1 Running 0 16s 10.48.2.24 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-54664b6fc8-nm5rh 1/1 Running 0 20s 10.48.2.22 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-54664b6fc8-qnc2l 1/1 Running 0 20s 10.48.2.21 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-54664b6fc8-wljgc 1/1 Running 0 16s 10.48.2.23 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
(base) takahiroyoshikawa@TakahironoMacBook-Pro descheduler %
全てのPodがgke-wakashiyo-default-pool-8b0ec5ba-654kに配置されている。
ここで、 sample=bias
というラベルを他のnode に付与する。
(base) takahiroyoshikawa@TakahironoMacBook-Pro descheduler % kubectl label nodes gke-wakashiyo-default-pool-8b0ec5ba-654k sample-
node/gke-wakashiyo-default-pool-8b0ec5ba-654k labeled
(base) takahiroyoshikawa@TakahironoMacBook-Pro descheduler % kubectl label nodes gke-wakashiyo-default-pool-8b0ec5ba-x29p sample=bias
node/gke-wakashiyo-default-pool-8b0ec5ba-x29p labeled
kubectl get nodes -o json | jq ".items[] | .metadata.labels"
{
"beta.kubernetes.io/arch": "amd64",
"beta.kubernetes.io/fluentd-ds-ready": "true",
"beta.kubernetes.io/instance-type": "n1-standard-1",
"beta.kubernetes.io/os": "linux",
"cloud.google.com/gke-nodepool": "default-pool",
"cloud.google.com/gke-os-distribution": "cos",
"failure-domain.beta.kubernetes.io/region": "asia-northeast1",
"failure-domain.beta.kubernetes.io/zone": "asia-northeast1-a",
"kubernetes.io/hostname": "gke-wakashiyo-default-pool-8b0ec5ba-2w40"
}
{
"beta.kubernetes.io/arch": "amd64",
"beta.kubernetes.io/fluentd-ds-ready": "true",
"beta.kubernetes.io/instance-type": "n1-standard-1",
"beta.kubernetes.io/os": "linux",
"cloud.google.com/gke-nodepool": "default-pool",
"cloud.google.com/gke-os-distribution": "cos",
"failure-domain.beta.kubernetes.io/region": "asia-northeast1",
"failure-domain.beta.kubernetes.io/zone": "asia-northeast1-a",
"kubernetes.io/hostname": "gke-wakashiyo-default-pool-8b0ec5ba-654k"
}
{
"beta.kubernetes.io/arch": "amd64",
"beta.kubernetes.io/fluentd-ds-ready": "true",
"beta.kubernetes.io/instance-type": "n1-standard-1",
"beta.kubernetes.io/os": "linux",
"cloud.google.com/gke-nodepool": "default-pool",
"cloud.google.com/gke-os-distribution": "cos",
"failure-domain.beta.kubernetes.io/region": "asia-northeast1",
"failure-domain.beta.kubernetes.io/zone": "asia-northeast1-a",
"kubernetes.io/hostname": "gke-wakashiyo-default-pool-8b0ec5ba-x29p",
"sample": "bias"
}
kube-schedulerはPodの作成時にはルールに基づいたスケジューリングを行うが、それ以外の場合は再スケジュールなどはしない。
そのためラベルを付け変えたが、特に変化はない
kubectl get pods -n wakashiyo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wakashiyo-deployment-54664b6fc8-44qf2 1/1 Running 0 3m40s 10.48.2.20 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-54664b6fc8-5wlzm 1/1 Running 0 3m36s 10.48.2.24 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-54664b6fc8-nm5rh 1/1 Running 0 3m40s 10.48.2.22 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-54664b6fc8-qnc2l 1/1 Running 0 3m40s 10.48.2.21 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-54664b6fc8-wljgc 1/1 Running 0 3m36s 10.48.2.23 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
再スケジュールするためにconfigMapを適用し、jobを実行した。
configMap
apiVersion: v1
kind: ConfigMap
metadata:
name: descheduler-policy-configmap
namespace: kube-system
data:
policy.yaml: |
apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
"RemoveDuplicates":
enabled: true
"RemovePodsViolatingInterPodAntiAffinity":
enabled: true
"RemovePodsViolatingNodeAffinity":
enabled: true
params:
nodeAffinityType:
- "requiredDuringSchedulingIgnoredDuringExecution"
結果
kubectl get pods -n wakashiyo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wakashiyo-deployment-54664b6fc8-5hn99 1/1 Running 0 23s 10.48.1.22 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-54664b6fc8-6xp6k 1/1 Running 0 23s 10.48.1.25 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-54664b6fc8-7gvqt 1/1 Running 0 23s 10.48.1.26 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-54664b6fc8-jtqcd 1/1 Running 0 23s 10.48.1.23 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-54664b6fc8-x8tkg 1/1 Running 0 23s 10.48.1.24 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
新たにラベルを付け替えたnodeにPodが再配置された。
RemoveDeplicates をやってみる
このポリシーを使用して、各nodeに1台ずつPodが配置されるようにしていく。
実行前のPodの一覧
kubectl get pods -n wakashiyo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wakashiyo-deployment-75b89bd54b-77cvb 1/1 Running 0 32s 10.48.2.27 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-75b89bd54b-7sdxt 1/1 Running 0 33s 10.48.0.19 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
wakashiyo-deployment-75b89bd54b-8dspm 1/1 Running 0 35s 10.48.0.18 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
wakashiyo-deployment-75b89bd54b-qk5hp 1/1 Running 0 35s 10.48.2.26 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-75b89bd54b-rxqm8 1/1 Running 0 32s 10.48.0.20 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
wakashiyo-deployment-75b89bd54b-vgw69 1/1 Running 0 35s 10.48.2.25 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
gke-wakashiyo-default-pool-8b0ec5ba-x29pには1台も配置されていない。。。
以下のようにconfigMapを設定し、適用した
configMap
apiVersion: v1
kind: ConfigMap
metadata:
name: descheduler-policy-configmap
namespace: kube-system
data:
policy.yaml: |
apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
"RemoveDuplicates":
enabled: true
そして、jobを実行した結果、Podがどのnodeにも1台は配置されるようになった。
kubectl get pods -n wakashiyo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wakashiyo-deployment-75b89bd54b-6bs4z 1/1 Running 0 36s 10.48.1.31 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-77cvb 1/1 Running 0 3m15s 10.48.2.27 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-75b89bd54b-7bth7 1/1 Running 0 36s 10.48.1.30 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-7sdxt 1/1 Running 0 3m16s 10.48.0.19 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
wakashiyo-deployment-75b89bd54b-ddt28 1/1 Running 0 36s 10.48.1.28 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-jnpgz 1/1 Running 0 36s 10.48.1.29 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
ドキュメントを読んだ感じではDeploymentなどに紐づくPodが各nodeに1台だけであるみたいに読み取ったから、Replica数が多い場合はどうなるのかと思ったが、今回動かした感じでは最低1台は配置するみたいな解釈でも良さそうな気がしている。。。
追記
最初にLowNodeUtilizationを確認した際のconfigMapは、RemoveDeplicatesとLowNodeUtilizationがpolicyに含まれていたため、正直どっちが動いていい感じにスケジューリングされたのかわからなかったと後から気づいた。
そのため、先ほどのRemoveDeplicates実行後の環境を使用してLowNodeUtilizationが動いていることをもう一度確認してみたい。
再度実行前のnodeの状況を確認してみた。
gke-wakashiyo-default-pool-8b0ec5ba-654k
ProviderID: gce://wakashiyo-playground/asia-northeast1-a/gke-wakashiyo-default-pool-8b0ec5ba-654k
Non-terminated Pods: (5 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system kube-dns-79868f54c5-jvwg8 260m (27%) 0 (0%) 110Mi (4%) 170Mi (6%) 169m
kube-system kube-proxy-gke-wakashiyo-default-pool-8b0ec5ba-654k 100m (10%) 0 (0%) 0 (0%) 0 (0%) 169m
kube-system l7-default-backend-fd59995cd-jfvwb 10m (1%) 10m (1%) 20Mi (0%) 20Mi (0%) 169m
kube-system prometheus-to-sd-d6vmv 1m (0%) 3m (0%) 20Mi (0%) 20Mi (0%) 169m
wakashiyo wakashiyo-deployment-75b89bd54b-77cvb 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 5m52s
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 471m (50%) 113m (12%)
memory 225Mi (8%) 310Mi (11%)
ephemeral-storage 0 (0%) 0 (0%)
attachable-volumes-gce-pd 0 0
gke-wakashiyo-default-pool-8b0ec5ba-2w40
ProviderID: gce://wakashiyo-playground/asia-northeast1-a/gke-wakashiyo-default-pool-8b0ec5ba-2w40
Non-terminated Pods: (5 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system kube-dns-79868f54c5-7cc5w 260m (27%) 0 (0%) 110Mi (4%) 170Mi (6%) 170m
kube-system kube-dns-autoscaler-bb58c6784-8ms5s 20m (2%) 0 (0%) 10Mi (0%) 0 (0%) 170m
kube-system kube-proxy-gke-wakashiyo-default-pool-8b0ec5ba-2w40 100m (10%) 0 (0%) 0 (0%) 0 (0%) 170m
kube-system prometheus-to-sd-qxg9g 1m (0%) 3m (0%) 20Mi (0%) 20Mi (0%) 170m
wakashiyo wakashiyo-deployment-75b89bd54b-7sdxt 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 7m11s
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 481m (51%) 103m (10%)
memory 215Mi (8%) 290Mi (10%)
ephemeral-storage 0 (0%) 0 (0%)
attachable-volumes-gce-pd 0 0
gke-wakashiyo-default-pool-8b0ec5ba-x29p
ProviderID: gce://wakashiyo-playground/asia-northeast1-a/gke-wakashiyo-default-pool-8b0ec5ba-x29p
Non-terminated Pods: (8 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system heapster-86f6474897-stbl9 63m (6%) 63m (6%) 215840Ki (7%) 215840Ki (7%) 171m
kube-system kube-proxy-gke-wakashiyo-default-pool-8b0ec5ba-x29p 100m (10%) 0 (0%) 0 (0%) 0 (0%) 171m
kube-system metrics-server-v0.3.1-57c75779f-xg59s 48m (5%) 143m (15%) 105Mi (3%) 355Mi (13%) 171m
kube-system prometheus-to-sd-wmcsp 1m (0%) 3m (0%) 20Mi (0%) 20Mi (0%) 171m
wakashiyo wakashiyo-deployment-75b89bd54b-6bs4z 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 5m36s
wakashiyo wakashiyo-deployment-75b89bd54b-7bth7 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 5m36s
wakashiyo wakashiyo-deployment-75b89bd54b-ddt28 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 5m36s
wakashiyo wakashiyo-deployment-75b89bd54b-jnpgz 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 5m36s
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 612m (65%) 609m (64%)
memory 651040Ki (24%) 1009440Ki (37%)
ephemeral-storage 0 (0%) 0 (0%)
attachable-volumes-gce-pd 0 0
node |
cpu |
memory |
pod数 |
gke-wakashiyo-default-pool-8b0ec5ba-x29p |
612m (65%) |
651040Ki (24%) |
8 kube-system: 4 wakashiyo: 4 |
gke-wakashiyo-default-pool-8b0ec5ba-2w40 |
481m (51%) |
215Mi (8%) |
5 kube-system: 4 wakashiyo: 1 |
gke-wakashiyo-default-pool-8b0ec5ba-654k |
471m (50%) |
225Mi (8%) |
5 kube-system: 4 wakashiyo: 1 |
gke-wakashiyo-default-pool-8b0ec5ba-x29pに偏っているPodをgke-wakashiyo-default-pool-8b0ec5ba-2w40とgke-wakashiyo-default-pool-8b0ec5ba-654kにスケジューリングしたいので、以下のようなconfigMapを適用した
configMap
apiVersion: v1
kind: ConfigMap
metadata:
name: descheduler-policy-configmap
namespace: kube-system
data:
policy.yaml: |
apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
"LowNodeUtilization":
enabled: true
params:
nodeResourceUtilizationThresholds:
thresholds:
"cpu" : 60
"memory": 20
"pods": 6
targetThresholds:
"cpu" : 60
"memory": 30
"pods": 7
jobを実行した結果以下のようになった。
kubectl get pods -n wakashiyo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wakashiyo-deployment-75b89bd54b-77cvb 1/1 Running 0 14m 10.48.2.27 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-75b89bd54b-7bth7 1/1 Running 0 11m 10.48.1.30 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-7sdxt 1/1 Running 0 14m 10.48.0.19 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
wakashiyo-deployment-75b89bd54b-ddt28 1/1 Running 0 11m 10.48.1.28 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-jnpgz 1/1 Running 0 11m 10.48.1.29 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-zhxj9 1/1 Running 0 30s 10.48.2.28 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
理想的には2台ずつ配置されて欲しかったが、うまくいかなかった。
なぜ上手くいかなかったのか、gke-wakashiyo-default-pool-8b0ec5ba-x29pの情報を確認してみた。
gke-wakashiyo-default-pool-8b0ec5ba-x29p
ProviderID: gce://wakashiyo-playground/asia-northeast1-a/gke-wakashiyo-default-pool-8b0ec5ba-x29p
Non-terminated Pods: (7 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system heapster-86f6474897-stbl9 63m (6%) 63m (6%) 215840Ki (7%) 215840Ki (7%) 179m
kube-system kube-proxy-gke-wakashiyo-default-pool-8b0ec5ba-x29p 100m (10%) 0 (0%) 0 (0%) 0 (0%) 3h
kube-system metrics-server-v0.3.1-57c75779f-xg59s 48m (5%) 143m (15%) 105Mi (3%) 355Mi (13%) 179m
kube-system prometheus-to-sd-wmcsp 1m (0%) 3m (0%) 20Mi (0%) 20Mi (0%) 3h
wakashiyo wakashiyo-deployment-75b89bd54b-7bth7 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 14m
wakashiyo wakashiyo-deployment-75b89bd54b-ddt28 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 14m
wakashiyo wakashiyo-deployment-75b89bd54b-jnpgz 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 14m
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 512m (54%) 509m (54%)
memory 574240Ki (21%) 907040Ki (33%)
ephemeral-storage 0 (0%) 0 (0%)
attachable-volumes-gce-pd 0 0
gke-wakashiyo-default-pool-8b0ec5ba-654k
ProviderID: gce://wakashiyo-playground/asia-northeast1-a/gke-wakashiyo-default-pool-8b0ec5ba-654k
Non-terminated Pods: (6 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system kube-dns-79868f54c5-jvwg8 260m (27%) 0 (0%) 110Mi (4%) 170Mi (6%) 3h2m
kube-system kube-proxy-gke-wakashiyo-default-pool-8b0ec5ba-654k 100m (10%) 0 (0%) 0 (0%) 0 (0%) 3h2m
kube-system l7-default-backend-fd59995cd-jfvwb 10m (1%) 10m (1%) 20Mi (0%) 20Mi (0%) 3h2m
kube-system prometheus-to-sd-d6vmv 1m (0%) 3m (0%) 20Mi (0%) 20Mi (0%) 3h2m
wakashiyo wakashiyo-deployment-75b89bd54b-77cvb 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 19m
wakashiyo wakashiyo-deployment-75b89bd54b-zhxj9 100m (10%) 100m (10%) 75Mi (2%) 100Mi (3%) 5m10s
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 571m (60%) 213m (22%)
memory 300Mi (11%) 410Mi (15%)
ephemeral-storage 0 (0%) 0 (0%)
attachable-volumes-gce-pd 0 0
1台Podが削除された時点で、thresholdsとtargetThresholdsのそれぞれに対象となるnodeがなくなってしまったのかもしれない。。。
(gke-wakashiyo-default-pool-8b0ec5ba-2w40の情報を貼り忘れてしまったので、なんとも言えない感じになってしまいました。ご了承ください。。)
改めてconfigMapを設定した。
configMap
apiVersion: v1
kind: ConfigMap
metadata:
name: descheduler-policy-configmap
namespace: kube-system
data:
policy.yaml: |
apiVersion: "descheduler/v1alpha1"
kind: "DeschedulerPolicy"
strategies:
"LowNodeUtilization":
enabled: true
params:
nodeResourceUtilizationThresholds:
thresholds:
"cpu" : 60
"memory": 20
"pods": 5
targetThresholds:
"cpu" : 70
"memory": 20
"pods": 7
jobを回した結果、均等に配置することができた。
kubectl get pods -n wakashiyo -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wakashiyo-deployment-75b89bd54b-5cph9 1/1 Running 0 29s 10.48.0.26 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
wakashiyo-deployment-75b89bd54b-7sdxt 1/1 Running 0 27m 10.48.0.19 gke-wakashiyo-default-pool-8b0ec5ba-2w40 <none> <none>
wakashiyo-deployment-75b89bd54b-gjmn9 1/1 Running 0 8m 10.48.2.29 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>
wakashiyo-deployment-75b89bd54b-jnpgz 1/1 Running 0 25m 10.48.1.29 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-sb5dn 1/1 Running 0 8m 10.48.1.32 gke-wakashiyo-default-pool-8b0ec5ba-x29p <none> <none>
wakashiyo-deployment-75b89bd54b-zhxj9 1/1 Running 0 13m 10.48.2.28 gke-wakashiyo-default-pool-8b0ec5ba-654k <none> <none>