テスト環境
東京リージョンの各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)
テスト内容
バージョンアップ時に簡単な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)
事前動作確認
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で状況を確認
アップデート完了
しばらくアップデートが完了するまで待つ
おおよそ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での完了確認
バージョンアップ時の通信状況結果
通信断は確認できなかった
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のバージョンアップ
こちらは別記事にて記載する