クラスターをアップグレードすると、システムが ECI プラットフォームバージョンと Kubernetes バージョン間の互換性を自動的にチェックします。ECI ベースの Pod の ECI プラットフォームバージョンがターゲットの Kubernetes バージョンと互換性がない場合は、クラスターをアップグレードする前に、手動で Pod を削除して再作成する必要があります。アップグレードの前に、ECI プラットフォームバージョンがターゲットの Kubernetes バージョンと互換性があることを確認してください。
ECI プラットフォームバージョンとは
ECI プラットフォームバージョンは、ECI ベースの Pod のランタイム環境を識別します。新しいバージョンでは、機能の追加、バグ修正、パッチが適用されます。
ACK Serverless クラスター内の Pod には、デフォルトで k8s.aliyun.com/eci-platform-version アノテーションが含まれており、ECI プラットフォームバージョンを示します:
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.aliyun.com/eci-platform-version: 1.0.0
name: demo-76d8d9f9d8-l7pwm
namespace: default
...
新しい ECI Pod はプラットフォームバージョン 1.1.0 を使用します。既存の Pod は 1.0.0 を使用するか、アノテーションがありません (利用不可)。
互換性マトリックス
| ECI プラットフォームバージョン | 互換性のある Kubernetes バージョン |
|---|---|
| 1.1.0 | 1.12 以降 |
| 1.0.0 | 1.12、1.14、1.16、1.18、1.20、1.22、1.24 |
利用不可 (k8s.aliyun.com/eci-platform-version アノテーションが設定されていない) |
1.12、1.14、1.16、1.18、1.20、1.22、1.24 |
Kubernetes 1.26 以降の場合、バージョン 1.0.0 の Pod、またはアノテーションがない Pod には互換性がないため、先にアップグレードする必要があります。
ECI プラットフォームバージョンのアップグレード
前提条件
開始する前に、次のことを確認してください:
-
kubectl がインストールされ、設定済みであること。詳細については、「kubectl を使用したクラスターへの接続」をご参照ください。
アップグレードが必要な Pod の特定
バージョン 1.0.0 またはアノテーションがないすべての ECI ベースの Pod を一覧表示します。出力には、名前空間、Pod 名、ECI プラットフォームバージョン、ECI インスタンス ID がカンマ区切りで表示されます。
kubectl get pods -A -o json | jq -r '.items[] | select(.metadata.annotations["k8s.aliyun.com/eci-platform-version"] == "1.0.0" or .metadata.annotations["k8s.aliyun.com/eci-platform-version"] == null or .metadata.annotations["k8s.aliyun.com/eci-platform-version"] == "") | select(.spec.nodeName | startswith("virtual-kubelet")) | "\(.metadata.namespace),\(.metadata.name),\(.metadata.annotations["k8s.aliyun.com/eci-platform-version"] // ""),\(.metadata.annotations["k8s.aliyun.com/eci-instance-id"] // "")"'
出力例:
default,portal-server-57dfc4fdc8-2gl64,,eci-2zecdr8z5jy******
影響を受ける Pod の削除と再作成
前の手順で特定した各 Pod を削除します。Kubernetes は、最新の ECI プラットフォームバージョン (1.1.0) で Pod を自動的に再作成します。
kubectl delete pod portal-server-57dfc4fdc8-2gl64 -n default
期待される出力:
pod "portal-server-57dfc4fdc8-2gl64" deleted
アップグレードの確認
すべての ECI ベースの Pod がバージョン 1.1.0 であることを確認します:
kubectl get pods -A -o json | jq -r '.items[] | select(.spec.nodeName | startswith("virtual-kubelet")) | "\(.metadata.namespace),\(.metadata.name),\(.metadata.annotations["k8s.aliyun.com/eci-platform-version"] // ""),\(.metadata.annotations["k8s.aliyun.com/eci-instance-id"] // "")"'
すべてのエントリの 3 番目のフィールドに 1.1.0 が表示されるはずです。確認できたら、クラスターのアップグレードに進んでください。