AKSのClusterのアップグレードの人柱になってみた

今回はAKS(Azure Kubernetes Service)のクラスタアップグレードに関してです。
やること自体は多くはないのですが、クラスタアップグレードしたら壊れましたけど何か？的なお話も聞いたので
ちょっと怖いなーと思っている方のために、こんな感じですよという参考になれば。



## 現在のバージョンの確認
まずは現在のクラスタのバージョンを取得します。
今回は例としてリソースグループが`RG-TOMATO-CLUSTER`、クラスタ名が`TOMATO-CL 
USTER`としています。

```
$ az aks show  --resource-group RG-TOMATO-CLUSTER --name TOMATO-CLUSTER --output table

Name             Location    ResourceGroup           KubernetesVersion    ProvisioningState    Fqdn
---------------  ----------  ----------------------  -------------------  -------------------  -------------------------------------------------------------------
TOMATO-CLUSTER   japaneast   RG-TOMATO-CLUSTER       1.15.5               Succeeded            xxxx.hcp.japaneast.azmk8s.io
```

## アップグレード可能バージョンの取得
現在のバージョンからアップグレード可能なバージョンを表示します。

注意点として、マイナーバージョンを飛ばしてアップグレードすることはできません。
例えば`1.15`からアップグレード可能なのは`1.15`もしくは`1.16`のみであり
`1.17`にアップグレードしたい場合は、一度`1.16`を経由する必要があります。

```
$ az aks get-upgrades --resource-group RG-TOMATO-CLUSTER --name TOMATO-CLUSTER --output yaml

controlPlaneProfile:
  kubernetesVersion: 1.15.5
  name: null
  osType: Linux
  upgrades:
  - isPreview: null
    kubernetesVersion: 1.15.11
  - isPreview: null
    kubernetesVersion: 1.16.8
  - isPreview: null
    kubernetesVersion: 1.15.10
  - isPreview: null
    kubernetesVersion: 1.16.9
```

この辺りは割とこまめに変更されるようなので、アップグレード実施前に確認しておきましょう。

## いざアップグレード

いよいよアップグレードです。
たかが1コマンドされど1コマンド。`Enter`を押す指がプルプルします。
プルプルを通り越して揺れてます！とても揺れている！震度6だ！
こういう時に`Enter`を勢いよく押す派、静かに押す派、あなたはどちらの派閥でしょう？
私は超サイレント派です。


```
$az aks upgrade --resource-group RG-TOMATO-CLUSTER --name TOMATO-CLUSTER  --kubernetes-version 1.16.9

The behavior of this command has been altered by the following extension: aks-preview
Kubernetes may be unavailable during cluster upgrades.
Are you sure you want to perform this operation? (y/n): y
Since control-plane-only argument is not specified, this will upgrade the control plane AND all nodepools to version 1.16.9. Continue? (y/N): y
Starting ..
Running ..
```
本当にやります？え、まじでやるんですか？的な感じで2回聞かれます。
大事なことは2回言う文化は各国共通なのでしょうか。

断固とした気持ちで`y`を2回押下すると、`Running ..`と表示されます。
どうやら動き出した模様。
もう後戻りはできません。楽しかった`1.15`との思い出が走馬灯のように浮かびます..


## 30分ほど待つ..
今回は3nodeだったので30分程で完了しました。だいたい1nodeにつき10分くらいのようです。
たまたまカップラーメンを10個作る予定があったので、ちょうど良い時間でした！ではいただきます！

```
Finished ..
DnsPrefix                           EnablePodSecurityPolicy    EnableRbac    Fqdn                                 KubernetesVersion    Location    MaxAgentPools    Name             NodeResourceGroup                                    ProvisioningState    ResourceGroup
----------------------------------  -------------------------  ------------  -----------------------------------  -------------------  ----------  ---------------  ---------------  ---------------------------------------------------  -------------------  ----------------------
TOMATO-CLUS-4b4e88                  False                      True          xxxx.hcp.japaneast.azmk8s.io         1.16.9               japaneast   10               TOMATO-CLUSTER   RG-TOMATO-CLUSTER_japaneast                          Succeeded            RG-TOMATO-CLUSTER
```

実際にやってみるとかなりスムーズに行きました。あっさり塩味ですね。
ちなみにclusterのアップグレード自体もローリングで行なっているようですが
公式には特に記載がないので、ダウンタイムは発生するものと思っておいたほうが良さそうです。

ではまた🙋‍♂️

## さいごに
ZEROBILLBANKでは一緒に働く仲間を募集中です。
なんとかjsとか、ブロックチェーンとか、kubernetesとかでいろんなAPIを作るお仕事。
今のところエンジニアは5人くらい。スタートアップだけど、結構ホワイトで働きやすいです。

[ZEROBILLBANK JAPAN Inc.](https://zerobillbank.com)