KubernetesクラスターでのPodの作成を高速化したい場合は、ImageCache Custom Resource Definition (CRD) を使用して、Elastic Container Instance が提供する ImageCache 機能を使用できます。イメージキャッシュを作成するときに、ビジネス要件に基づいてアノテーションを追加できます。このトピックでは、イメージキャッシュを作成するときに追加できるアノテーションについて説明します。また、アノテーションの設定方法の例も示します。
イメージキャッシュを作成するときに追加できるアノテーション
次の表は、イメージキャッシュを作成するときに追加できるアノテーションについて説明しています。
アノテーション | 例 | 説明 | 参照 |
k8s.aliyun.com/vswitch-ids | "vsw-bp1dktddjsg5nktv****,vsw-bp1xpiowfm5vo8o3c****" | vSwitch の ID を指定します。複数のゾーンに複数の vSwitch を指定できます。このパラメーターを指定しない場合は、eci-profile で設定された vSwitch の ID が使用されます。 | |
k8s.aliyun.com/imc-cpu-arch | "arm64" | CPUアーキテクチャを指定します。有効な値:
| |
k8s.aliyun.com/imc-os-type | "windows" | オペレーティングシステムを指定します。有効な値:
| |
k8s.aliyun.com/security-group-id | "sg-bp1dktddjsg5nktv****" | セキュリティグループのIDを指定します。このアノテーションを空のままにすると、eci-profileで設定されたセキュリティグループのIDが使用されます。 | |
k8s.aliyun.com/resource-group-id | "rg-aek2z3elfs4****" | リソースグループのIDを指定します。このアノテーションを空のままにすると、eci-profile で設定されているリソースグループのIDが使用されます。 | |
k8s.aliyun.com/acr-instance-ids | "cri-j36zhodptmyq****" | Alibaba Cloud Container Registry Enterprise Edition インスタンスの ID を指定します。これらのインスタンスは、パスワードを使用せずにイメージをプルするために使用されます。 ポッドのリージョンとは異なるリージョンにある Container Registry Enterprise Edition インスタンスを指定できます。これを行うには、Container Registry Enterprise Edition インスタンスの ID に、Container Registry Enterprise Edition インスタンスのリージョン ID をプレフィックスとして付ける必要があります。例: | |
k8s.aliyun.com/acr-service-arns | acs:ram::1609982529******:role/role-assume | Elastic Container Instance リソースが属する Alibaba Cloud アカウントの Resource Access Management (RAM) ロールの Alibaba Cloud Resource Name (ARN) を指定します。 RAM ロールを使用してリソースを作成する場合、このアノテーションが必要です。 | |
k8s.aliyun.com/acr-user-arns | acs:ram::1298452580******:role/role-acr | コンテナーレジストリインスタンスが属するAlibaba CloudアカウントのRAMロールのARNを指定します。 このアノテーションは、Elastic Container InstanceリソースのAlibaba Cloudアカウントとは異なるAlibaba Cloudアカウントに属するコンテナーレジストリインスタンスからイメージをプルする場合に必要です。 | |
k8s.aliyun.com/plain-http-registry | "harbor***.pre.com,192.168.XX.XX:5000,reg***.test.com:80" | セルフマネージドイメージリポジトリのアドレスを指定します。 HTTPプロトコルを使用するセルフマネージドイメージリポジトリ内のイメージを使用してエラスティックコンテナインスタンスを作成する場合、このアノテーションを追加する必要があります。これにより、Elastic Container InstanceはHTTPプロトコルを使用してイメージをプルします。これは、異なるプロトコルが原因でイメージのプルが失敗するのを防ぐことができます。 | |
k8s.aliyun.com/insecure-registry | "harbor***.pre.com,192.168.XX.XX:5000,reg***.test.com:80" | セルフマネージドイメージリポジトリのアドレスを指定します。 自己署名証明書を使用するセルフマネージドイメージリポジトリ内のイメージを使用してエラスティックコンテナインスタンスを作成する場合、証明書の認証をスキップするためにこのアノテーションを追加する必要があります。これにより、証明書の認証エラーが原因でイメージのプルに失敗することを防ぐことができます。 | |
k8s.aliyun.com/imc-enable-reuse | "true" | イメージキャッシュレイヤーの再利用を有効にするかどうかを指定します。この機能を有効にし、作成するイメージキャッシュに既存のイメージキャッシュと同じレイヤーが含まれている場合、システムは既存のイメージキャッシュのイメージレイヤーを再利用して新しいイメージキャッシュを作成します。これにより、イメージキャッシュの作成が高速化されます。 | |
k8s.aliyun.com/imc-enable-flash | "true" | インスタントイメージキャッシュ機能を有効にするかどうかを指定します。この機能を有効にすると、システムは一時的なローカルスナップショットを作成します。これにより、イメージキャッシュの作成に必要な時間が短縮されます。 | |
k8s.aliyun.com/imc-retention-days | "7" | イメージキャッシュの保存期間を指定します。単位:日。期限切れのイメージキャッシュは自動的に削除されます。このアノテーションはデフォルトでは空で、イメージキャッシュが期限切れにならないことを示します。 | |
k8s.aliyun.com/imc-size | "25" | イメージキャッシュのサイズを指定します。単位:GiB。デフォルト値:20。有効な値:20~32768。 | |
k8s.aliyun.com/eip-instance-id | "eip-bp1q5n8cq4p7f6dzu****" | Pod に関連付けられている Elastic IP アドレス (EIP) の ID を指定します。NAT ゲートウェイが構成されていない場合、既存の EIP を Pod に関連付けて、インターネット経由でイメージをプルできます。 | |
k8s.aliyun.com/auto-create-eip | "true" | EIP を自動的に作成し、Elastic Container Instance に関連付けるかどうかを指定します。NAT ゲートウェイが構成されていない場合は、このアノテーションを true に設定できます。これにより、システムは EIP を作成し、ポッドに関連付けてインターネット経由でイメージをプルできます。 | |
k8s.aliyun.com/eip-bandwidth | "5" | システムがEIPを作成するときに、EIPの帯域幅制限を指定します。単位:Mbit/s。 | |
k8s.aliyun.com/eip-internet-charge-type | PayByBandwidth | システムがEIPを作成するときに、EIPのネットワーク使用量に対する課金方法を指定します。有効な値:
| |
k8s.aliyun.com/eip-isp | BGP | システムがEIPを作成するときのEIPの回線タイプを指定します。この注釈は、従量課金制のEIPにのみ適用されます。有効な値:
| |
k8s.aliyun.com/eip-common-bandwidth-package-id | "cbwp-2zeukbj916scmj51m****" | EIP帯域幅プランのIDを指定します。 |
マルチゾーン機能を使用してイメージキャッシュを作成する
イメージキャッシュを作成すると、システムは一時的なエラスティックコンテナインスタンスを作成します。イメージキャッシュが確実に作成されるように、異なるゾーンにある複数のvSwitchを指定できます。
イメージキャッシュを作成すると、デフォルトでKubernetesクラスターまたはVNodeのvSwitchが使用されます。KubernetesクラスターまたはVNodeがマルチゾーンで構成されている場合は、vSwitchを指定しない場合があります。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/vswitch-ids: "vsw-bp1dktddjsg5nktv****,vsw-bp1xpiowfm5vo8o3c****" # 複数のvSwitchを指定します。
spec:
images:
- centos:latest
- busybox:latest
imageCacheSize:
25
retentionDays:
7CPUアーキテクチャを指定する
Armアーキテクチャのイメージをプルしてイメージキャッシュを作成する場合は、CPUアーキテクチャを指定する必要があります。
このアノテーションを指定する場合は、クラスター内にArmアーキテクチャの仮想ノードが存在することを確認してください。詳細については、Armベースの仮想ノードへのPodのスケジュールを参照してください。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/imc-cpu-arch: "arm64" # CPUアーキテクチャをArmとして指定します。
spec:
images:
-arm64v8/centos:7.9.2009 # Armアーキテクチャを使用するコンテナイメージを指定します。
imageCacheSize:
25
retentionDays:
7オペレーティングシステムを指定する
Windows イメージをプルしてイメージキャッシュを作成する場合は、オペレーティングシステムを指定する必要があります。
このアノテーションを指定する場合は、クラスターに Windows 仮想ノードが存在することを確認してください。詳細については、(招待プレビュー) Windows 仮想ノードでポッドを実行するようにスケジュールするを参照してください。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/imc-os-type: "windows" # オペレーティングシステムを Windows として指定します。
spec:
images:
-mcr.microsoft.com/windows/nanoserver:ltsc2022 # オペレーティングシステムを含むコンテナーイメージを指定します。
imageCacheSize:
25
retentionDays:
7セキュリティグループとリソースグループを構成する
デフォルトでは、イメージキャッシュを作成するときに、eci-profile で構成されているセキュリティグループとリソースグループが使用されます。ビジネス要件に基づいて、セキュリティグループとリソースグループを構成できます。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/security-group-id: "sg-bp1dktddjsg5nktv****" # セキュリティグループを指定します。
k8s.aliyun.com/resource-group-id: "rg-aek2z3elfs4****" # リソースグループを指定します。
spec:
images:
- centos:latest
- busybox:latest
imageCacheSize:
25
retentionDays:
7コンテナーレジストリインスタンスからシークレットを使用せずにイメージをプルする
次の表は、Secrets を使用せずにコンテナーレジストリインスタンスからイメージをプルできるシナリオを示しています。
作成するリソース (エラスティックコンテナーインスタンスなど) とコンテナーレジストリインスタンスが同じアカウントにある | コンテナーレジストリインスタンスのエディション | シークレットを使用しないイメージプル |
はい |
| デフォルトでは、シークレットを使用しないイメージプルが有効になっています。RAM ロールを構成して、シークレットを使用しないイメージプルをサポートするコンテナーレジストリインスタンスの範囲を制限できます。 |
はい | エンタープライズ版 (カスタムドメイン名を使用) | シークレットを使用しないイメージプルはデフォルトでは有効にできません。シークレットを使用しないイメージプルをサポートするコンテナーレジストリインスタンスを指定する必要があります。 |
いいえ |
| シークレットを使用しないイメージプルはデフォルトでは有効にできません。RAM ロールを構成して、シークレットを使用しないイメージプルを実装する必要があります。 |
詳細については、シークレットを使用せずにコンテナーレジストリインスタンスからイメージをプルする を参照してください。
セルフマネージドイメージリポジトリの使用
セルフマネージドイメージリポジトリでイメージリポジトリ内のイメージを使用してイメージキャッシュを作成する際に、HTTPプロトコルまたは自己署名証明書を使用する場合、イメージのプル失敗を防ぐためにアノテーションを設定する必要があります。
セルフマネージドイメージリポジトリがHTTPプロトコルを使用している場合。
デフォルトでは、エラスティックコンテナインスタンスはHTTPSプロトコルを介してイメージをプルします。イメージキャッシュを作成する場合は、
k8s.aliyun.com/plain-http-registryアノテーションを追加する必要があります。これにより、エラスティックコンテナインスタンスはHTTPプロトコルを介してイメージリポジトリと対話できます。apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/plain-http-registry: "192.168.XX.XX:5000" # HTTPプロトコルを介してイメージをプルするために使用するセルフマネージドイメージリポジトリのアドレスを指定します。 spec: images: - 192.168.XX.XX:5000/test/nginx:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7セルフマネージドイメージリポジトリが自己署名証明書を使用している場合。
セルフマネージドイメージリポジトリが自己発行証明書を使用している場合、システムがイメージリポジトリからイメージをプルしようとすると、証明書の認証が失敗します。証明書の認証をスキップするには、
k8s.aliyun.com/insecure-registryアノテーションを追加する必要があります。apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/insecure-registry: "harbor***.pre.com" # セルフマネージドイメージリポジトリのアドレスを指定します。システムがポッドを作成するためにイメージリポジトリからイメージをプルしようとすると、証明書の認証がスキップされます。 spec: images: - harbor***.pre.com/test/nginx:latest imagePullSecrets: - default:secret1 - default:secret2 - kube-system:secret3 imageCacheSize: 25 retentionDays: 7
複数のコンテナのイメージを異なるイメージリポジトリからプルする場合は、複数のイメージリポジトリアドレスをカンマ (,) で区切って指定できます。例:
harbor***.pre.com,192.168.XX.XX。イメージリポジトリアドレスにポート番号が含まれている場合は、アドレスとそのポート番号を指定する必要があります。たとえば、イメージリポジトリアドレスが
192.168.XX.XX:5000/nginx:latestの場合、アノテーションを192.168.XX.XX:5000に設定します。
イメージキャッシュレイヤーの再利用を有効にする
イメージキャッシュの作成に必要な時間は、イメージサイズやネットワークの状態など、いくつかの要因によって異なります。イメージキャッシュレイヤーの再利用機能を有効にすることで、イメージキャッシュの作成に必要な時間を短縮できます。
この機能を有効にすると、イメージキャッシュを作成する際に、システムは既存のイメージキャッシュを検査します。既存のイメージキャッシュに使用したいイメージレイヤーが含まれている場合、システムはそのイメージレイヤーを再利用して、イメージキャッシュの作成に必要な時間を短縮します。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/imc-enable-reuse: "true" # イメージキャッシュレイヤーの再利用を有効にします。
spec:
images:
- centos:latest
- busybox:latest
imageCacheSize:
25
retentionDays:
7インスタントイメージキャッシュ機能を有効にする
イメージキャッシュの作成に必要な時間は、イメージサイズやネットワークの状態など、さまざまな要因によって異なります。インスタントイメージキャッシュ機能を有効にすることで、イメージキャッシュの作成に必要な時間を短縮できます。
インスタントイメージキャッシュ機能を有効にすると、イメージキャッシュの作成中に、一時的なエラスティックコンテナインスタンスのディスクの一時的なロカールスナップショットが作成されます。ロカールスナップショットが作成されると、イメージキャッシュを使用できるようになります。
オンプレミススナップショットが作成されると、システムは標準スナップショットの作成を開始します。標準スナップショットの作成中は、オンプレミススナップショットに対応するイメージキャッシュを使用して、エラスティックコンテナインスタンスを作成できます。標準スナップショットが作成されると、システムはオンプレミススナップショットを削除します。その後、標準スナップショットに対応するイメージキャッシュを使用して、エラスティックコンテナインスタンスを作成できます。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/imc-enable-flash: "true" # インスタントイメージキャッシュ機能を有効にします。
spec:
images:
- centos:latest
- busybox:latest
imageCacheSize:
25
retentionDays:
7イメージキャッシュのサイズと保持期間の設定
デフォルトでは、手動で作成されたイメージキャッシュのサイズは 20 GiB で、作成後は永続的に保持されます。イメージキャッシュのサイズと保持期間を指定する場合は、spec セクションで imageCacheSize パラメーターと retentionDays パラメーターを指定するか、アノテーションを追加します。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample
annotations:
k8s.aliyun.com/imc-retention-days: "7" # イメージキャッシュの保持期間を指定します。
k8s.aliyun.com/imc-size: "25" # イメージキャッシュのサイズを指定します。
spec:
images:
- centos:latest
- busybox:latestインターネット経由でイメージをプルするためのEIPの設定
EIPは、独立したリソースとして購入して使用できるパブリックIPアドレスです。EIPをクラウド・リソースに関連付けると、クラウド・リソースはEIPを使用してインターネットに接続できます。詳細については、エラスティックIPアドレスとは を参照してください。
イメージ・キャッシュを作成する場合は、インターネット経由でイメージをプルする前に、インターネットに接続されていることを確認してください。インターネットへの接続は、NATゲートウェイを設定するか、EIPを設定することで行うことができます。仮想プライベートクラウド(VPC)がNATゲートウェイに関連付けられていない場合は、インターネット経由でイメージをプルするためにEIPを設定できます。EIPを設定するには、次のいずれかの方法を使用できます。
イメージ・キャッシュの作成中に、システムは一時的なエラスティック・コンテナ・インスタンスを作成し、EIPを一時的なエラスティック・コンテナ・インスタンスに関連付けます。既存のEIPを使用する場合、EIPはイメージ・キャッシュの作成後も保持されます。システムがEIPを作成し、EIPを一時的なエラスティック・コンテナ・インスタンスに関連付けた場合、EIPと一時的なエラスティック・コンテナ・インスタンスはイメージ・キャッシュの作成後に解放されます。
既存のEIPを一時的なエラスティック・コンテナ・インスタンスに関連付ける
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/eip-instance-id: "eip-bp1q5n8cq4p7f6dzu****" # 既存のEIPを一時的なエラスティックコンテナインスタンスに関連付けます。 spec: images: - centos:latest - busybox:latest imageCacheSize: 25 retentionDays: 7EIPを自動的に作成し、一時的なエラスティック・コンテナ・インスタンスに関連付ける
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample annotations: k8s.aliyun.com/auto-create-eip: "true" # EIPを自動的に作成し、一時的なエラスティックコンテナインスタンスに関連付けます。 k8s.aliyun.com/eip-bandwidth: "10" # EIPの帯域幅制限を指定します。単位:Mbit/s。 k8s.aliyun.com/eip-internet-charge-type: PayByBandwidth # EIPの従量課金方式を指定します。 k8s.aliyun.com/eip-common-bandwidth-package-id: "cbwp-2zeukbj916scmj51m****" # EIP帯域幅プランのIDを指定します。 spec: images: - centos:latest - busybox:latest imageCacheSize: 25 retentionDays: 7