Help us understand the problem. What is going on with this article?

GKEのノードプールを利用したKubernetesのアップグレード

More than 3 years have passed since last update.

Google Cloud Platform(2) Advent Calendar 2016 2日目
CyberAgent Developers Advent Calendar 2016 19日目
を担当するstrskです。

Google Cloud Platform(2) Advent Calendar 2016 1日目は、前職でほぼ仕事的に絡みのなかった、僕の師匠とも言えるkumanoryoさんのゲロ吐くほど丁寧な記事ではじまったアドベントカレンダーですが、2日目はカジュアルにGKEのノードプールを利用したKubernetesのアップグレード手順についてお話します。

gcloudコマンドでのアップグレード

アップグレード方法はいくつかありますが、稼働中でなければ以下のコマンドを打つだけです。

$ gcloud container clusters upgrade CLUSTER_NAME

gcloudコマンドでアップグレードした場合は、ノードのインスタンスが1台ずつ削除されアップグレードされます。ただし一度始めると中断できなかったり終了するPodなどをコントロールできないため、稼働中のクラスターで実行するのは危険です。

ノードプールを利用したアップグレード

そこで、GKEのノードプールを利用してアップグレードを行います。この方法であれば、移行後のPodの動作確認や切り戻しが容易にできるので安全にアップグレードできます。

アップグレード手順

ノードプールの確認

$ gcloud container node-pools list --cluster=hoge --zone=asia-east1-a
NAME          MACHINE_TYPE   DISK_SIZE_GB  NODE_VERSION
default-pool  n1-standard-1  100           1.2.4

ノードプール作成

$ gcloud container node-pools create v145 --cluster=hoge --machine-type=n1-standard-1 --disk-size=100 --num-nodes=1 --zone=asia-east1-a
Creating node pool v145...done.
Created [https://container.googleapis.com/v1/projects/hogehoge/zones/asia-east1-a/clusters/hoge/nodePools/v145].
NAME  MACHINE_TYPE   DISK_SIZE_GB  NODE_VERSION
v145  n1-standard-1  100           1.4.5

これで新しいバージョンのノードプールが作成されました。

$ gcloud container node-pools list --cluster=hoge --zone=asia-east1-a
NAME          MACHINE_TYPE   DISK_SIZE_GB  NODE_VERSION
default-pool  n1-standard-1  100           1.2.4
v145          n1-standard-1  100           1.4.5

$ kubectl get no
NAME                          STATUS    AGE
gke-hoge-65141ecf-node-0ajo   Ready     30d
gke-hoge-v145-632da77c-kkzf   Ready     1m

追記(12/19)

GKEクラスターをHTTP Load Balancerに紐付けている場合は、以下の設定も変えてから作業を行いましょう。

  • GCE Instance groupsのPort name mapping
  • HTTP Load BalancerのBackend serviceで設定しているInstance group

Podのスケジューリング停止

次に、Podを移行する前にdefault-poolへのPodのスケジューリングを停止します。kubectl cordonコマンドでノードを指定するとステータスがSchedulingDisabledになり新規のPodは配置されなくなります。既に起動しているPodには影響ありません。

$ kubectl cordon hoge-65141ecf-node-0ajo
node "gke-hoge-65141ecf-node-0ajo" cordoned

$ kubectl get node
NAME                          STATUS                     AGE
gke-hoge-65141ecf-node-0ajo   Ready,SchedulingDisabled   30d
gke-hoge-v145-632da77c-kkzf   Ready                      1m

Podの再配置

試しにPodを1台だけdeleteしてみます。

$ kubectl delete po fugapod-fclfa
pod "fugapod-fclfa" deleted

$ kubectl get po -o wide |grep fugapod
fugapod-fclfa             1/1       Terminating         0          8h        10.178.15.5     gke-hoge-65141ecf-node-0ajo
fugapod-vpqeh             0/1       ContainerCreating   0          2s        <none>          gke-hoge-v145-632da77c-bro2
fugapod-zwhn7             1/1       Running             0          8h        10.178.20.5     gke-hoge-65141ecf-node-0ajo

新しいノードに再作成されています。

$ kubectl get po -o wide |grep fugapod
fugapod-vpqeh             1/1       Running   0          2s        10.178.63.3     gke-hoge-v145-632da77c-bro2
fugapod-zwhn7             1/1       Running   0          8h        10.178.20.5     gke-hoge-65141ecf-node-0ajo

動作確認

この状態でPodのログなどを確認して問題なければ全台新しいノードに移行させます。
Kubetoolなどで行うと便利です。

最後に

GKEクラスタのマスターは自動的にアップグレードされますが、クラスタノードとマイナーバージョンが3つ以上古くなると正しく動作しなくなる可能性があります。また、Kubernetesは開発が早くリリースが頻繁です。安全にアップグレードし、便利に使っていきましょう!メリークリスマス!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした