すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:ImageCache CRD のデプロイ

最終更新日:Dec 28, 2024

セルフマネージド Kubernetes クラスターが仮想ノード (VNode) に基づくエラスティックコンテナインスタンスを使用し、大量の同時タスクが実行される場合、Elastic Container Instance が提供する ImageCache 機能を使用してポッドの起動を高速化できます。ImageCache 機能を使用する前に、セルフマネージド Kubernetes クラスターに ImageCache のカスタムリソース定義 (CRD) をデプロイする必要があります。このトピックでは、ImageCache CRD をデプロイする方法について説明します。

前提条件

  • セルフマネージド Kubernetes クラスターに VNode がデプロイされていること。

  • セルフマネージド Kubernetes クラスターがデータセンターにデプロイされている場合、データセンターが Alibaba Cloud に接続されていること。

手順

  1. 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
  2. ImageCache CRD をデプロイします。

    kubectl create -f imagecache-crd.yaml
  3. デプロイ結果を表示します。

    1. ポッドのステータスを表示します。

      kubectl get pod -n kube-system

      次のコマンド出力は以下のように返されるはずです。

      NAME                                                     READY   STATUS    RESTARTS   AGE
      alibabacloud-eci-imagecache-controller-8857984bd-2lnhs   1/1     Running   1          7s
      ......
    2. ImageCache CRD を表示します。

      kubectl get crd imagecaches.eci.alibabacloud.com

      次のコマンド出力は以下のように返されるはずです。

      NAME                               CREATED AT
      imagecaches.eci.alibabacloud.com   2022-09-01T07:12:47Z