LoginSignup
1
1

More than 3 years have passed since last update.

k8s worker nodeのアップデート

Posted at

最近PCを光らせることにハマっている村田でーす。
k8sのワーカーノードのkernelのアップデートをしたいって思うと再起動しないといけないじゃないですかー。たまにしかやらないから忘れるじゃないですかー。
メモがてら残しておきます。

awsのEKSでCloudFormation使っている場合には、ami等がアップデートされている場合があるのでそちらのアップデートも行う必要がありますので注意。
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/update-stack.html

TL;DR

ノードをcordon -> drainしてsshで入ってアップデートして、uncordonする流れです。

現在の状態

1台だけ古いkernelのものがいるのでこいつをアップデートしてみようと思います。
ip-10-21-2-82.ap-northeast-1.compute.internal ですね。

[ec2-user@ip-10-21-12-201 ~]$ kubectl get nodes -o wide
NAME                                              STATUS    ROLES     AGE       VERSION   EXTERNAL-IP     OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-10-21-10-74.ap-northeast-1.compute.internal    Ready     <none>    7h        v1.12.7   x.112.249.81    Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1
ip-10-21-11-182.ap-northeast-1.compute.internal   Ready     <none>    7h        v1.12.7   y.65.123.209   Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1
ip-10-21-2-82.ap-northeast-1.compute.internal     Ready     <none>    1m        v1.12.7   z.112.90.181    Amazon Linux 2   4.14.106-97.85.amzn2.x86_64     docker://18.6.1

やっていく

スケジュールの停止

[ec2-user@ip-10-21-12-201 ~]$ kubectl cordon ip-10-21-2-82.ap-northeast-1.compute.internal
node "ip-10-21-2-82.ap-northeast-1.compute.internal" cordoned

ステータスがSchedulingDisabledになります。

[ec2-user@ip-10-21-12-201 ~]$ kubectl get nodes -o wide
NAME                                              STATUS                     ROLES     AGE       VERSION   EXTERNAL-IP     OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-10-21-10-74.ap-northeast-1.compute.internal    Ready                      <none>    7h        v1.12.7   x.112.249.81    Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1
ip-10-21-11-182.ap-northeast-1.compute.internal   Ready                      <none>    7h        v1.12.7   y.65.123.209   Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1
ip-10-21-2-82.ap-northeast-1.compute.internal     Ready,SchedulingDisabled   <none>    4m        v1.12.7   z.112.90.181    Amazon Linux 2   4.14.106-97.85.amzn2.x86_64     docker://18.6.1

podsを追い出す

動いているpodsがあまりなかったのでいまいちですが、ほかのノードに移してくれます。

[ec2-user@ip-10-21-12-201 ~]$ kubectl drain ip-10-21-2-82.ap-northeast-1.compute.internal --ignore-daemonsets
node "ip-10-21-2-82.ap-northeast-1.compute.internal" already cordoned
WARNING: Ignoring DaemonSet-managed pods: cloudwatch-agent-dzrkq, aws-node-4nqhw, fluentd-47pg8, kube-proxy-k4tdj
pod "tasks-gas-miner-1561545600-4l2xv" evicted
node "ip-10-21-2-82.ap-northeast-1.compute.internal" drained

動いている(止まったらヤバイ)Podがいないかどうか確認します。

[ec2-user@ip-10-21-12-201 ~]$ kubectl get pods --all-namespaces -o wide | grep 'ip-10-21-2-82.ap-northeast-1.compute.internal'
amazon-cloudwatch   cloudwatch-agent-dzrkq                               1/1       Running     0          10m       10.21.2.220    ip-10-21-2-82.ap-northeast-1.compute.internal
kube-system         aws-node-4nqhw                                       1/1       Running     0          11m       10.21.2.82     ip-10-21-2-82.ap-northeast-1.compute.internal
kube-system         fluentd-47pg8                                        1/1       Running     0          10m       10.21.2.195    ip-10-21-2-82.ap-northeast-1.compute.internal
kube-system         kube-proxy-k4tdj                                     1/1       Running     0          11m       10.21.2.82     ip-10-21-2-82.ap-northeast-1.compute.internal

アップデート&再起動

適当にアップデートします。
今回はssh で入って$ sudo yum update -yしました。
SystemManagerでやってもいいし、ansibleでもいいし、chefでも。いつもの方法でやってください。

今回はkernelのアップデートをしたいので$ sudo rebootしました。

再起動後に確認するとkernelが上がっているのが確認できます。

[ec2-user@ip-10-21-12-201 ~]$ kubectl get nodes -o wide
NAME                                              STATUS                     ROLES     AGE       VERSION   EXTERNAL-IP     OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-10-21-10-74.ap-northeast-1.compute.internal    Ready                      <none>    7h        v1.12.7   x.112.249.81    Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1
ip-10-21-11-182.ap-northeast-1.compute.internal   Ready                      <none>    8h        v1.12.7   y.65.123.209   Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1
ip-10-21-2-82.ap-northeast-1.compute.internal     Ready,SchedulingDisabled   <none>    16m       v1.12.7   z.112.90.181    Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1

ノードを戻す

uncordonするとstatusがReadyになります。

[ec2-user@ip-10-21-12-201 ~]$ kubectl uncordon ip-10-21-2-82.ap-northeast-1.compute.internal
node "ip-10-21-2-82.ap-northeast-1.compute.internal" uncordoned
[ec2-user@ip-10-21-12-201 ~]$ kubectl get nodes -o wide
NAME                                              STATUS    ROLES     AGE       VERSION   EXTERNAL-IP     OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-10-21-10-74.ap-northeast-1.compute.internal    Ready     <none>    7h        v1.12.7   x.112.249.81    Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1
ip-10-21-11-182.ap-northeast-1.compute.internal   Ready     <none>    8h        v1.12.7   y.65.123.209   Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1
ip-10-21-2-82.ap-northeast-1.compute.internal     Ready     <none>    17m       v1.12.7   z.112.90.181    Amazon Linux 2   4.14.123-111.109.amzn2.x86_64   docker://18.6.1

確認

ちゃんと動いてます。

[ec2-user@ip-10-21-12-201 ~]$ kubectl get pods --all-namespaces -o wide | grep 'ip-10-21-2-82.ap-northeast-1.compute.internal'
amazon-cloudwatch   cloudwatch-agent-dzrkq                               1/1       Running     1          21m       10.21.2.197    ip-10-21-2-82.ap-northeast-1.compute.internal
default             tasks-hikkosi-gvlrp                       1/1       Running     0          1m        10.21.2.115    ip-10-21-2-82.ap-northeast-1.compute.internal
default             tasks-zyuusyohenkou-rfnvq                     1/1       Running     0          1m        10.21.2.173    ip-10-21-2-82.ap-northeast-1.compute.internal
kube-system         aws-node-4nqhw                                       1/1       Running     1          22m       10.21.2.82     ip-10-21-2-82.ap-northeast-1.compute.internal
kube-system         fluentd-47pg8                                        1/1       Running     1          21m       10.21.2.128    ip-10-21-2-82.ap-northeast-1.compute.internal
kube-system         kube-proxy-k4tdj                                     1/1       Running     1          22m       10.21.2.82     ip-10-21-2-82.ap-northeast-1.compute.internal
[ec2-user@ip-10-21-12-201 ~]$

まとめ

サービスのダウンなくワーカーノードのアップデートができるのはよいですね。
podのシャットダウンから起動まで少し時間がかかると思うので移動の確認をお忘れなく。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1