OKE Virtual Nodesのクラスタバージョンアップ手順を確認する

# はじめに
OKEのWorker NodeとしてサーバレスのVirtual Nodesを使った時のクラスタバージョンアップ手順を確認します。

2つのVirtual Nodeでクラスタを準備しました。

```
$ k get node
NAME         STATUS   ROLES          AGE   VERSION
10.0.1.150   Ready    virtual-node   67m   v1.26.2
10.0.1.191   Ready    virtual-node   67m   v1.26.2
```

Deploymentで各ノードにPodを一つずつデプロイしています。

```
$ k get pod -o wide -w
NAME                     READY   STATUS    RESTARTS   AGE     IP           NODE         NOMINATED NODE   READINESS GATES
nginx-748c667d99-ccx7q   1/1     Running   0          3m11s   10.0.5.198   10.0.1.150   <none>           <none>
nginx-748c667d99-jnr4z   1/1     Running   0          3m11s   10.0.5.2     10.0.1.191   <none>           <none>
```

# バージョンアップ可否の確認
OCIコンソールでバージョンアップ可能であることを確認します。

![スクリーンショット 2023-09-13 12.37.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/01fa5a99-ad7c-3d05-9120-ce86d2ea5c9c.png)

同様にノードプールにも`!`マークが付いています。

![スクリーンショット 2023-09-13 12.39.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/2186a8d4-e942-093a-aa7f-ee759b53c14b.png)

# バージョンアップ

コンソールの`Kubernetesの新バージョンを使用できます`をクリックすると以下の画面になり、バージョンアップするバージョンを選択して、`アップグレード`をクリックします。

![スクリーンショット 2023-09-13 12.40.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/e226ec97-79fb-1348-495c-ace1ea241e12.png)

操作はこれだけです。

コントロールプレーンのバージョンアップを実行すると、`コントロールプレーン → ノードプル → ノード`とバージョンアップしてくれます。

バージョンアップ中はこのような画面になります。

![スクリーンショット 2023-09-13 12.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/541d6999-6180-2252-250d-67ffa689004e.png)

バージョンアップが終わると、アイコンがグリーンに戻ります。

![スクリーンショット 2023-09-13 13.01.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/056f7dd1-b25c-5ce1-3f54-fd8d1840b5cb.png)

ノードプールもバージョンアップしています。

![スクリーンショット 2023-09-13 15.29.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492530/31a903e1-3b52-7b98-1d68-155697971cd3.png)


# バージョンアップ時の動作

バージョンアップ時のクラスタの様子を確認しました。

## ノード

従来のManaged Nodeの場合は、新しいバージョンのノードを追加して古いバージョンのノードを削除する動きでしたが、Virtual Nodeの場合はそのノードのままバージョンアップをしているようです。

```
$ k get node -w
NAME         STATUS   ROLES          AGE   VERSION
10.0.1.150   Ready    virtual-node   72m   v1.26.2
10.0.1.191   Ready    virtual-node   72m   v1.26.2
10.0.1.150   Ready    virtual-node   73m   v1.26.2
10.0.1.191   Ready    virtual-node   73m   v1.27.2
10.0.1.191   Ready    virtual-node   73m   v1.27.2
10.0.1.150   Ready    virtual-node   74m   v1.27.2
10.0.1.150   Ready    virtual-node   74m   v1.27.2
10.0.1.191   Ready    virtual-node   74m   v1.27.2
```

（Virtual）kubeletのバージョンも上がっています。

```
$ k describe node 10.0.1.150 |grep "Kubelet Version"
  Kubelet Version:            v1.27.2
```

なお、STATUSは常に`Ready`となっていますが、何度か試してみたところ、`NotReady`となることもありました。
NotReadyの期間が短いため、コマンドで拾えない場合があるのかも知れないですね。

```
$ k get node -w
NAME         STATUS   ROLES          AGE   VERSION
10.0.1.205   Ready    virtual-node   13m   v1.26.2
10.0.1.220   Ready    virtual-node   14m   v1.26.2
10.0.1.220   Ready    virtual-node   14m   v1.26.2
10.0.1.205   NotReady   virtual-node   14m   v1.26.2
10.0.1.220   Ready      virtual-node   15m   v1.26.7
10.0.1.205   NotReady   virtual-node   14m   v1.26.7
10.0.1.205   Ready      virtual-node   14m   v1.26.7
10.0.1.220   Ready      virtual-node   15m   v1.26.7
10.0.1.205   Ready      virtual-node   17m   v1.26.7
10.0.1.220   Ready      virtual-node   18m   v1.26.7
```

## Pod

わかりづらいのですが、Podが落ちて、同じノードで再作成されています。
2つのPod同時ではありませんが、一つ目のPodの再作成が終わらない状態で2つ目のPodがTerminatingになっているように見えます。
外部から疎通確認まではしていませんが、Virtual Nodeは通常のNodeと比べて、Podが立ち上がるのが遅いので、業務が停止しないようにバージョンアップするには、Node数やReplicasを調整して事前に確認した方が良さそうです。

バージョンアップ時の動きを見ていましたが、クラスタとしてはローリングでバージョンアップしていますが、Podのことまでは考えていないように見えました。

```
$ k get pod -o wide -w
NAME                     READY   STATUS    RESTARTS   AGE     IP           NODE         NOMINATED NODE   READINESS GATES
nginx-748c667d99-427vj   1/1     Running   0          8m39s   10.0.4.48    10.0.1.220   <none>           <none>
nginx-748c667d99-h2nsd   1/1     Running   0          8m39s   10.0.4.159   10.0.1.205   <none>           <none>
nginx-748c667d99-h2nsd   1/1     Running   0          12m     10.0.4.159   10.0.1.205   <none>           <none>
nginx-748c667d99-427vj   1/1     Running   0          12m     10.0.4.48    10.0.1.220   <none>           <none>
nginx-748c667d99-427vj   1/1     Terminating   0          12m     10.0.4.48    10.0.1.220   <none>           <none>
nginx-748c667d99-xns85   0/1     Pending       0          0s      <none>       <none>       <none>           <none>
nginx-748c667d99-xns85   0/1     ContainerCreating   0          0s      <none>       10.0.1.220   <none>           <none>
nginx-748c667d99-h2nsd   1/1     Running             0          12m     10.0.4.159   10.0.1.205   <none>           <none>
nginx-748c667d99-h2nsd   1/1     Terminating         0          12m     10.0.4.159   10.0.1.205   <none>           <none>
nginx-748c667d99-7vq9v   0/1     Pending             0          0s      <none>       <none>       <none>           <none>
nginx-748c667d99-h2nsd   1/1     Terminating         0          12m     10.0.4.159   10.0.1.205   <none>           <none>
nginx-748c667d99-7vq9v   0/1     Pending             0          0s      <none>       10.0.1.205   <none>           <none>
nginx-748c667d99-h2nsd   1/1     Terminating         0          12m     10.0.4.159   10.0.1.205   <none>           <none>
nginx-748c667d99-7vq9v   0/1     ContainerCreating   0          0s      <none>       10.0.1.205   <none>           <none>
nginx-748c667d99-h2nsd   0/1     Terminating         0          12m     10.0.4.159   10.0.1.205   <none>           <none>
nginx-748c667d99-xns85   0/1     ContainerCreating   0          1s      <none>       10.0.1.220   <none>           <none>
nginx-748c667d99-7vq9v   0/1     ContainerCreating   0          2s      <none>       10.0.1.205   <none>           <none>
nginx-748c667d99-xns85   0/1     ContainerCreating   0          2m19s   <none>       10.0.1.220   <none>           <none>
nginx-748c667d99-7vq9v   0/1     ContainerCreating   0          2m22s   <none>       10.0.1.205   <none>           <none>
nginx-748c667d99-xns85   1/1     Pending             0          2m34s   <none>       10.0.1.220   <none>           <none>
nginx-748c667d99-7vq9v   1/1     Pending             0          2m41s   <none>       10.0.1.205   <none>           <none>
nginx-748c667d99-7vq9v   1/1     Running             0          2m41s   10.0.5.168   10.0.1.205   <none>           <none>
nginx-748c667d99-xns85   1/1     Pending             0          2m49s   <none>       10.0.1.220   <none>           <none>
nginx-748c667d99-xns85   1/1     Running             0          2m51s   10.0.5.101   10.0.1.220   <none>           <none>
```