最近自前のk8sの上に載っているNextCloudに頻繁に画像・動画を同期させる機会が増えた。Mac用のNextCloud同期ツールを利用しているが、頻繁にエラーになってしまう。
CPUかメモリの使用率が上がっているのだろうと思ってkubectlで確認しようとしたが、確認すらできない。。kubeletが死んでいる…?
➜ ~ k top node
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
➜ ~ k top pod
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get pods.metrics.k8s.io)
GKEの管理画面からメトリクスを確認しようとしたがこれもエラーで見えなかった…
もともとマシンタイプにしょぼいg1-small
を利用していたのでこの機会にマシンタイプのスペック上げることにしたのでその手順を残しておく
基本的にはこちらの手順に沿っている
GKEから新ノードの作成
マシンタイプをn2d-highcpu-2
(2vCPU/メモリ2GB)にしてノード数を1台、他はいじらずに作成。
GKEで該当のノードプールのstatusがProvisioning
からOK
になるまで待つ
既存ノードプールの処分
本来ならPodDisruptionBudget
という設定を行うことで、最低限保持して欲しいpodの数と最大限退避されるpodの数を調整することができるらしいが僕の環境では1ノードで運用しているのであんまり細かいことは気にせずに進める。
➜ ~ k get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
blog-app-67fd67974-dt4th 1/1 Running 0 27m 10.0.0.2 gke-standard-cluster-1-pool-4-4153a57b-gph3 <none> <none>
nextcloud-stateful-0 1/1 Running 0 27m 10.0.0.5 gke-standard-cluster-1-pool-4-4153a57b-gph3 <none> <none>
static-app-64b55b8c4-w27wn 1/1 Running 0 27m 10.0.0.3 gke-standard-cluster-1-pool-4-4153a57b-gph3 <none> <none>
まずは新規作成されるPodが旧ノードにスケジューリングされないように止める
# 旧ノードにスケジューリングしないように設定
➜ ~ k cordon gke-standard-cluster-1-pool-4-4153a57b-gph3
node/gke-standard-cluster-1-pool-4-4153a57b-gph3 cordoned
# statusに`SchedulingDisabled`が反映されているか確認
➜ ~ k get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
gke-standard-cluster-1-pool-4-4153a57b-gph3 Ready,SchedulingDisabled <none> 25m v1.17.17-gke.2800 10.146.15.196 35.200.103.197 Container-Optimized OS from Google 4.19.150+ docker://19.3.6
gke-standard-cluster-1-pool-5-924298a0-fhvd Ready <none> 79s v1.17.17-gke.2800 10.146.15.197 34.84.30.3 Container-Optimized OS from Google 4.19.150+ docker://19.3.6
旧ノードに存在してるPodを安全に停止させる、1,2分ほどかかった
➜ ~ k drain --ignore-daemonsets gke-standard-cluster-1-pool-4-4153a57b-gph3
node/gke-standard-cluster-1-pool-4-4153a57b-gph3 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/fluentbit-gke-7g6jp, kube-system/gke-metrics-agent-wk2vz, kube-system/prometheus-to-sd-tdspn
evicting pod "kube-dns-autoscaler-5c78d65cd9-qffpg"
evicting pod "nextcloud-stateful-0"
evicting pod "stackdriver-metadata-agent-cluster-level-5599c87f9c-sgffq"
evicting pod "static-app-64b55b8c4-w27wn"
evicting pod "event-exporter-gke-666b7ffbf7-5grds"
evicting pod "blog-app-67fd67974-dt4th"
evicting pod "l7-default-backend-5b76b455d-j9rt9"
evicting pod "metrics-server-v0.3.6-547dc87f5f-2kn5c"
evicting pod "kube-dns-c9488f9fb-7fjtr"
pod/kube-dns-autoscaler-5c78d65cd9-qffpg evicted
pod/blog-app-67fd67974-dt4th evicted
pod/stackdriver-metadata-agent-cluster-level-5599c87f9c-sgffq evicted
pod/static-app-64b55b8c4-w27wn evicted
pod/l7-default-backend-5b76b455d-j9rt9 evicted
pod/nextcloud-stateful-0 evicted
pod/metrics-server-v0.3.6-547dc87f5f-2kn5c evicted
pod/kube-dns-c9488f9fb-7fjtr evicted
pod/event-exporter-gke-666b7ffbf7-5grds evicted
node/gke-standard-cluster-1-pool-4-4153a57b-gph3 evicted
--ignore-daemonsets
をつけないと、daemonsetも退避させようとしてエラーが出てしまう
➜ ~ k drain gke-standard-cluster-1-pool-4-4153a57b-gph3
node/gke-standard-cluster-1-pool-4-4153a57b-gph3 already cordoned
error: unable to drain node "gke-standard-cluster-1-pool-4-4153a57b-gph3", aborting command...
There are pending nodes to be drained:
gke-standard-cluster-1-pool-4-4153a57b-gph3
error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/fluentbit-gke-7g6jp, kube-system/gke-metrics-agent-wk2vz, kube-system/prometheus-to-sd-tdspn
Podが新ノードに配置されているか確認
➜ ~ k get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
blog-app-67fd67974-fn5rj 1/1 Running 0 84s 10.0.1.4 gke-standard-cluster-1-pool-5-924298a0-fhvd <none> <none>
nextcloud-stateful-0 0/1 ContainerCreating 0 76s <none> gke-standard-cluster-1-pool-5-924298a0-fhvd <none> <none>
static-app-64b55b8c4-r774w 1/1 Running 0 84s 10.0.1.6 gke-standard-cluster-1-pool-5-924298a0-fhvd <none> <none>