2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[IBMCloud] IKS(kubernetes)バージョンアップ時の挙動確認

Last updated at Posted at 2024-06-30

テスト環境

東京リージョンの各ZoneにVSI for VPCのLinuxサーバを配置

  • VSI for VPC(CentOS) TOK01 x 1台
  • VSI for VPC(CentOS) TOK02 x 1台
  • VSI for VPC(CentOS) TOK03 x 1台

サーバ側はIKS(Kubernetes)にてNginxのPodを各ゾーンに配置し、前段にIngressALBを配置

  • Application load balancer for VPC x 1(TOK02/TOK03)
  • IBM Cloud Kubernetes Service x 1Cluster(TOK02/TOK03)
    • Nginx Pod(TOK02) x 1台
    • Nginx Pod(TOK03) x 1台
      image.png

テスト内容

バージョンアップ時に簡単なHTTP通信を発生させ、通信への影響がどの程度あるか確認する
通信経路としては4パターンとする
①VSI for VPC(TOK1) -> IngressALB(TOK02/TOK03) -> POD(TOK02/TOK03)
②VSI for VPC(TOK2) -> IngressALB(TOK02/TOK03) -> POD(TOK02/TOK03)
③VSI for VPC(TOK3) -> IngressALB(TOK02/TOK03) -> POD(TOK02/TOK03)
④Internet Client PC -> IngressALB(TOK02/TOK03) -> POD(TOK02/TOK03)

構成図
image.png

事前動作確認

VSIとPCからALB(3cd5e244-jp-tok.lb.appdomain.cloud)の8080ポートにアクセスする
Nginxのホスト名が記載されたhtmlが表示されることで異なるPodのNginxにアクセスできていることを確認

Nginx-POD1:iks-nginx-cd7748fdf-8mkx7
Nginx-POD2:iks-nginx-cd7748fdf-4nt2x

パターン①

VSI for VPC(TOK1) -> IngressALB(TOK02/TOK03) -> POD(TOK02/TOK03)

[root@tok01-sv ~]# while true; do curl --max-time 1 -s http://3cd5e244-jp-tok.lb.appdomain.cloud:8080 || echo "Request timed out or failed."; sleep 1; done
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:01:20
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:01:21
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:01:22
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:01:23
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:01:24

パターン②

VSI for VPC(TOK2) -> IngressALB(TOK02/TOK03) -> POD(TOK02/TOK03)

[root@tok02-sv ~]# while true; do curl --max-time 1 -s http://3cd5e244-jp-tok.lb.appdomain.cloud:8080 || echo "Request timed out or failed."; sleep 1; done
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:02:06
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:02:07
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:02:08
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:02:09
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:02:10

パターン③

VSI for VPC(TOK3) -> IngressALB(TOK02/TOK03) -> POD(TOK02/TOK03)

[root@tok03-sv ~]# while true; do curl --max-time 1 -s http://3cd5e244-jp-tok.lb.appdomain.cloud:8080 || echo "Request timed out or failed."; sleep 1; done
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:02:52
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:02:53
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:02:54
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:02:55
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:02:56

パターン④

④Internet Client PC -> IngressALB(TOK02/TOK03) -> POD(TOK02/TOK03)

% while true; do curl --max-time 1 -s http://3cd5e244-jp-tok.lb.appdomain.cloud:8080 || echo "Request timed out or failed."; sleep 1; done
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:03:10
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:03:11
Hostname: iks-nginx-7fbc7dfc94-pcmnh Current Time: 2024-06-26 07:03:12
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:03:13
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:03:15

IKSのバージョンアップの準備

IKSのバージョンアップ方法については、下記ドキュメント通りに実施する
クラスター・マスターを更新するための手順

現在のクラスター・マスター・バージョンの確認

ドキュメント:CLI でのクラスター・マスター・バージョンの確認

現在は「1.28.11_1564」のバージョンであることがわかる

kh@khs-MacBook-Pro nginx-time % ibmcloud ks cluster ls
OK
名前                          ID                     状態     作成日         ワーカー   ロケーション   バージョン               リソース・グループ名   プロバイダー
acs-paascluster-jp-tok        co9j451t0t7uths6kb10   normal   2 months ago   2          Tokyo          1.28.11_1564             acs-paas               vpc-gen2

現在のワーカー・ノードのバージョンの確認

ドキュメント:CLI でのワーカー・ノードのバージョンの確認

現在は「1.28.11_1565」のバージョンであることがわかる

% ibmcloud ks worker ls -c co9j451t0t7xxx
OK
ID                                                       プライマリー IP   フレーバー   状態     状況    ゾーン     バージョン
kube-co9j451t0t7uths6kb10-acspaasclus-lowspec-000006c4   10.244.128.21     cx2.2x4      normal   Ready   jp-tok-3   1.28.11_1565
kube-co9j451t0t7uths6kb10-acspaasclus-lowspec-0000074c   10.244.64.28      cx2.2x4      normal   Ready   jp-tok-2   1.28.11_1565

アドオンの確認

クラスター内のアドオンを確認

% ibmcloud ks cluster addon ls --cluster co9j451t0t7xxx
OK
名前                   バージョン   正常性の状態   正常性の状況
debug-tool             2.0.0        normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)
vpc-block-csi-driver   5.1          normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)

インストールされている各アドオンでサポートされている Kubernetes のバージョンを確認

kh@khs-MacBook-Pro ~ % ibmcloud ks addon-versions
OK
名前                        バージョン         サポートされる Kubernetes 範囲   サポートされる OpenShift 範囲   Kubernetes デフォルト   OpenShift デフォルト
alb-oauth-proxy             2.0.0 (default)    >=1.19.0 <1.31.0                 サポート対象外                  -                       -
cluster-autoscaler          1.2.0              >=1.24.0 <1.29.0                 >=4.10.0 <4.16.0                >=1.27.0 <1.29.0        >=4.12.0 <4.16.0
cluster-autoscaler          1.2.1              >=1.26.0 <1.30.0                 >=4.10.0 <4.16.0                >=1.29.0 <1.30.0        -
cluster-autoscaler          1.2.2              >=1.26.0 <1.31.0                 >=4.10.0 <4.16.0                >=1.30.0 <1.31.0        -
cluster-autoscaler          1.1.0              >=1.20.0 <1.24.0                 >=4.6.0 <4.13.0                 -                       -
csutil                      1.0.0 (default)    >=1.20.0 <1.31.0                 >=4.6.0 <4.16.0                 -                       -
csutil-experimental         1.0.0 (default)    >=1.20.0 <1.31.0                 >=4.6.0 <4.16.0                 -                       -
debug-tool                  2.0.0 (default)    >=1.23.0 <1.31.0                 >=4.11.0 <4.16.0                -                       -
image-key-synchronizer      1.0.0 (default)    サポート対象外                   >=4.4.0 <4.16.0                 -                       -
istio                       1.20               >=1.25.0 <1.30.0                 サポート対象外                  -                       -
istio                       1.22               >=1.27.0 <1.31.0                 サポート対象外                  -                       -
istio                       1.21 (default)     >=1.27.0 <1.30.0                 サポート対象外                  -                       -
openshift-data-foundation   4.12.0             サポート対象外                   >=4.12.0 <4.14.0                -                       -
openshift-data-foundation   4.13.0             サポート対象外                   >=4.13.0 <4.15.0                -                       -
openshift-data-foundation   4.14.0 (default)   サポート対象外                   >=4.14.0 <4.16.0                -                       -
openshift-data-foundation   4.15.0             サポート対象外                   >=4.15.0 <4.16.0                -                       -
static-route                1.0.0 (default)    >=1.23.0 <1.31.0                 >=4.11.0 <4.16.0                -                       -
vpc-block-csi-driver        5.1 (default)      >=1.22.0 <1.31.0                 >=4.9.0 <4.16.0                 -                       -
vpc-block-csi-driver        5.2                >=1.25.0 <1.31.0                 >=4.10.0 <4.16.0                -                       -
vpc-file-csi-driver         1.2 (default)      >=1.24.0 <1.31.0                 >=4.10.0 <4.16.0                -                       -

今使っているのは、「debug-tool」と「vpc-block-csi-driver」なので、下記の通りなので
1.28以降にバージョンアップしても問題ないことがわかる

名前                        バージョン         サポートされる Kubernetes 範囲   サポートされる OpenShift 範囲   Kubernetes デフォルト   OpenShift デフォルト
debug-tool                  2.0.0 (default)    >=1.23.0 <1.31.0                 >=4.11.0 <4.16.0                -                       -
vpc-block-csi-driver        5.2                >=1.25.0 <1.31.0                 >=4.10.0 <4.16.0                -                       -

IKSバージョンアップの実施

サポートされるバージョンの確認

% ibmcloud ks versions                                            
OK
Kubernetes バージョン
1.27.15 (推奨されておらず、84 日後にはサポート対象外)
1.28.11
1.29.6
1.30.2 (default)

API サーバーと、関連するマスター・コンポーネントを更新

ibmcloud ks cluster master updateコマンドを実行
ibmcloud ks cluster master update --cluster --version

% ibmcloud ks cluster master update --cluster co9j451t0t7xxx --version 1.29.6
更新中、クラスターにアクセスすることも変更することもできません。 ユーザーがデプロイしたワーカー・ノード、アプリ、リソースは変更されず、引き続き実行されます。
今後のデプロイメント用に、YAML ファイルを変更する必要がある場合があります。 詳しくは、次の資料を確認してください: 'https://ibm.biz/iks-versions'。
Kubernetes API サーバー co9j451t0t7xxx を 1.29.6 に更新しますか? [y/N]> y
クラスター co9j451t0t7uths6kb10 を更新中...
OK 

CLIで状況を確認

kh@khs-MacBook-Pro testenv % ibmcloud ks cluster ls 
OK
名前                          ID                     状態     作成日         ワーカー   ロケーション   バージョン                               リソース・グループ名   プロバイダー
acs-paascluster-jp-tok        co9j451t0t7xxx   normal   2 months ago   2          Tokyo          1.28.11_1564 --> 1.29.6_1545 (pending)   acs-paas               vpc-gen2

WebConsoleで状況を確認

貼り付けた画像_2024_06_26_16_26.png

アップデート完了

しばらくアップデートが完了するまで待つ
おおよそ25分でバージョンアップが完了した。
その間にパターン①〜④でHTTPアクセスの停止は見られなかった

Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:21:25
.
.
.
Hostname: iks-nginx-7fbc7dfc94-kf7dl Current Time: 2024-06-26 07:42:59

CLIでの完了確認

% ibmcloud ks cluster ls
OK
名前                          ID                     状態     作成日         ワーカー   ロケーション   バージョン               リソース・グループ名   プロバイダー
acs-paascluster-jp-tok        co9j451t0t7uths6kb10   normal   2 months ago   2          Tokyo          1.29.6_1545              acs-paas               vpc-gen2

WebConsoleでの完了確認

貼り付けた画像_2024_06_26_16_51.png

バージョンアップ時の通信状況結果

通信断は確認できなかった

ibmcloud ks cluster master update --cluster --version 実施時

パターン①

ダウンなし

パターン②

ダウンなし

パターン③

ダウンなし

パターン④

ダウンなし

その他、検証環境について

Nginx-Pod

index.html

% cat index.html
Hostname: ${HOSTNAME} Current Time: ${CURRENT_TIME}

hostnameとcurrenttimeの表示スクリプト

% cat docker-entrypoint.sh
#!/bin/sh

while true; do
    # 環境変数を設定
    export HOSTNAME=$(hostname)
    export CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")

    # テンプレートファイルを実際のファイルに置き換え
    envsubst '${HOSTNAME} ${CURRENT_TIME}' < /usr/share/nginx/html/index.html > /usr/share/nginx/html/index.html

    # 一秒待機
    sleep 1
done &

# nginxを起動
nginx -g 'daemon off;'

Dockerfile

% cat Dockerfile
FROM nginx:alpine

# 必要なツールをインストール
RUN apk add --no-cache gettext

# ファイルをコピー
COPY index.template.html /usr/share/nginx/html/index.template.html
COPY docker-entrypoint.sh /docker-entrypoint.sh

# エントリーポイントスクリプトを設定
ENTRYPOINT ["/docker-entrypoint.sh"]

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: iks-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: iks-nginx-container
        image: jp.icr.io/xxx-cr/nginx-hosttime:latest
        ports:
        - containerPort: 80

Service(ALB)

apiVersion: v1
kind: Service
metadata:
  name: vpcalb-nginx
  annotations:
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-subnets: "02f7-cfe80769-8c09-4099-a446-485e99baced4,02g7-c931fc19-1177-458d-9dda-0b8b46634222"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-protocol: "http"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-port: "30080"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-path: "/"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-delay: "5"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-timeout: "2"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-health-check-retries: "2"
    service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-idle-connection-timeout: "50"
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 8080
    nodePort: 30080
    targetPort: 80
  externalTrafficPolicy: Cluster

WorkerNodeのバージョンアップ

こちらは別記事にて記載する

2
0
4

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?