Azure Kubernetes Serviceをバージョンアップする


AKS v1.13のサポートが切れるというメールを受け取ったので、v1.14にバージョンアップしました。

バージョンアップ手順は 公式ページ に通りで問題なくできますが、考慮点など補足を書き残したいと思います。

AKSのバージョンサポートポリシー

AKSでは3つのマイナーバージョンがサポートされています。
詳しくは Azure Kubernetes Service (AKS) でサポートされている Kubernetes のバージョンを参照ください。

バージョンアップ前の確認

  • 現在のAKSバージョンを確認しておきます。
# az aks show -g [Resource Group Name] -n [AKS Cluster Name] -o table
Name            Location    ResourceGroup        KubernetesVersion    ProvisioningState    Fqdn
------------    ----------  ---------------      -------------------  -------------------  ---------------------------------------------
[Cluster Name]  japaneast   [Resource Group Name]             1.13.5               Succeeded            xxx.hcp.japaneast.azmk8s.io
  • 現在の各種ステータスを確認しておきます。
# kubectl get node -o wide
# kubectl get ns
# kubectl get po -o wide -n [NameSpace]
  • 利用可能なバージョンを確認します。このときv1.13→v1.15のように2段階のバージョンアップはできません。
# az aks get-upgrades -g [Resource Group Name] -n [AKS Cluster Name] -o table
Name     ResourceGroup    MasterVersion    NodePoolVersion    Upgrades
-------  ---------------  ---------------  -----------------  --------------------------------
default  [Resource Group Name]    1.13.5           1.13.5             1.13.11, 1.13.12, 1.14.7, 1.14.8

AKSバージョンアップ

  • バージョンアップを実行します。所要時間はノード数によると思いますが、2ノードで40分程掛かりました。
# az aks upgrade -g [Resource Group Name] -n [AKS Cluster Name] -k 1.14.8
  • バージョンアップは、k8sノードをDrainにしてローリングアップデートします。
    Podの状態が気になって確認コマンドを随時実行するかと思いますが、k8sノードのバージョンアップの前にk8sAPIのバージョンアップが入るため、タイミングによってはkubectlコマンドが失敗します。が、APIバージョンアップ中なので問題ないです。
Unable to connect to the server: read tcp xxx.xxx.xxx.xxx:54029->xxx.xxx.xxx.xxx:8080: wsarecv: An existing connection was forcibly closed by the remote host.
  • しばらく経つとバージョンアップが完了します。

バージョンアップ後確認

  • k8sノードのバージョンが変わっていることを確認します。
# kubectl get node -o wide

以上