セルフマネージド Kubernetes クラスターが仮想ノード (VNode) に基づくエラスティックコンテナインスタンスを使用し、大量の同時タスクが実行される場合、Elastic Container Instance が提供する ImageCache 機能を使用してポッドの起動を高速化できます。ImageCache 機能を使用する前に、セルフマネージド Kubernetes クラスターに ImageCache のカスタムリソース定義 (CRD) をデプロイする必要があります。このトピックでは、ImageCache CRD をデプロイする方法について説明します。
前提条件
セルフマネージド Kubernetes クラスターに VNode がデプロイされていること。
セルフマネージド Kubernetes クラスターがデータセンターにデプロイされている場合、データセンターが Alibaba Cloud に接続されていること。
手順
ImageCache CRD のデプロイに使用する YAML ファイルを準備します。
vim imagecache-crd.yaml
次のコードは、imagecache-crd.yaml の内容を示しています。
TODO
とマークされているパラメーターを実際の値に置き換えます。説明ImageCache 機能を使用するためにパブリックイメージをプルする必要がある場合、構成された vSwitch が存在する VPC にインターネットアクセス機能があり、セキュリティグループでインターネットアクセスが許可されている必要があります。
apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: imagecaches.eci.alibabacloud.com spec: group: eci.alibabacloud.com scope: Cluster names: plural: imagecaches singular: imagecache kind: ImageCache listKind: ImageCacheList shortNames: - imc categories: - all versions: - name: v1 served: true storage: true subresources: status: {} additionalPrinterColumns: - name: Age type: date jsonPath: .metadata.creationTimestamp - name: Id type: string jsonPath: .status.imageCacheId - name: Phase type: string jsonPath: .status.phase - name: Progress type: string jsonPath: .status.progress schema: openAPIV3Schema: type: object required: - spec description: "Imagecache は、alibabacloud が提供するイメージアクセラレーション機能です" properties: status: type: object required: - phase - progress properties: events: type: array nullable: true items: type: object properties: name: type: string message: type: string type: type: string timestamp: type: string nullable: true phase: type: string default: Pending reason: type: string default: "" progress: type: string default: "0%" expireDateTime: type: string nullable: true startTime: type: string nullable: true lastUpdatedTime: type: string nullable: true imageCacheId: type: string default: "" spec: type: object required: - images properties: images: type: array minItems: 1 items: type: string imagePullSecrets: type: array items: type: string default: [] imageCacheSize: type: integer default: 30 retentionDays: type: integer --- apiVersion: v1 kind: ServiceAccount metadata: name: alibabacloud-eci-imagecache-controller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: alibabacloud:eci:imagecache-controller rules: - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - "*" - apiGroups: - "eci.alibabacloud.com" resources: - imagecaches verbs: - "*" - apiGroups: - "eci.alibabacloud.com" resources: - imagecaches/status verbs: - "*" - apiGroups: - "" resources: - events verbs: - create - patch - update - apiGroups: - "" resources: - secrets verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: alibabacloud:eci:imagecache-controller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: alibabacloud:eci:imagecache-controller subjects: - kind: ServiceAccount name: alibabacloud-eci-imagecache-controller namespace: kube-system --- apiVersion: v1 kind: Secret metadata: name: alibabacloud-eci-imagecache-secret namespace: kube-system type: Opaque stringData: ACCESS_KEY: "***" # TODO: Alibaba Cloud AccessKey ID。 SECRET_KEY: "***" # TODO: Alibaba Cloud AccessKey シークレット。 --- apiVersion: apps/v1 kind: Deployment metadata: name: alibabacloud-eci-imagecache-controller namespace: kube-system labels: app: eci-imagecache-controller spec: selector: matchLabels: app: eci-imagecache-controller replicas: 1 template: metadata: labels: app: eci-imagecache-controller spec: dnsPolicy: ClusterFirst restartPolicy: Always serviceAccount: alibabacloud-eci-imagecache-controller containers: - name: imagecache-controller imagePullPolicy: Always image: registry.cn-hangzhou.aliyuncs.com/eci-release/imagecache-controller:1.0.0 command: - /imagecache args: - --provider - eci env: - name: CLUSTER_ID value: "unique-cluster-id" # TODO: クラスターのID。Alibaba Cloud アカウント内で一意である必要があります。このパラメーターは必須です。 - name: REGION_ID value: "cn-beijing" # TODO: Alibaba Cloud リージョンのID。ID は、VNode が存在するリージョンの ID である必要があります。このパラメーターは必須です。 - name: RESOURCE_GROUP_ID value: "" # TODO:value: "" # Alibaba Cloud リソースグループのID。このパラメーターはオプションです。 - name: SECURITY_GROUP_ID value: "sg-***" # TODO: Alibaba Cloud セキュリティグループのID。このパラメーターは必須です。 - name: VSWITCH_IDS value: "vsw-*******" # TODO: Alibaba Cloud vSwitch の ID。複数の ID はカンマ (,) で区切ります。このパラメーターは必須です。 - name: MY_POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name envFrom: - secretRef: name: alibabacloud-eci-imagecache-secret
ImageCache CRD をデプロイします。
kubectl create -f imagecache-crd.yaml
デプロイ結果を表示します。
ポッドのステータスを表示します。
kubectl get pod -n kube-system
次のコマンド出力は以下のように返されるはずです。
NAME READY STATUS RESTARTS AGE alibabacloud-eci-imagecache-controller-8857984bd-2lnhs 1/1 Running 1 7s ......
ImageCache CRD を表示します。
kubectl get crd imagecaches.eci.alibabacloud.com
次のコマンド出力は以下のように返されるはずです。
NAME CREATED AT imagecaches.eci.alibabacloud.com 2022-09-01T07:12:47Z