ImageCache は、仮想ノード (VNode) を介して Elastic Container Instance (ECI) 上でワークロードを実行する自己管理型 Kubernetes クラスターにおいて、Pod の起動を高速化する機能です。複数の Pod が同時に起動する場合、各 Pod が独自にイメージをプルするため、大規模環境では処理が遅くなる可能性があります。ImageCache は、事前にプル済みのイメージをディスク上にスナップショットとして保存し、新しい Pod がレジストリからレイヤーをダウンロードする代わりに、このスナップショットを直接マウントできるようにします。
ImageCache を使用する前に、クラスター内にそのカスタムリソース定義 (CRD) およびコントローラーをデプロイしてください。本ページでは、このセットアップ手順について説明します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
自己管理型 Kubernetes クラスター内に VNode がデプロイ済みであること
(クラスターがデータセンター内にある場合)データセンターと Alibaba Cloud 間の接続が確立されていること
Alibaba Cloud の AccessKey ID および AccessKey Secret を所持していること
ImageCache CRD のデプロイ
ステップ 1: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 is an image acceleration capability provided by 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 # 最低でも 1 つのイメージが必要
items:
type: string
imagePullSecrets:
type: array
items:
type: string
default: [] # 非公開レジストリ認証用のシークレット
imageCacheSize:
type: integer
default: 30 # ディスクサイズ(GiB 単位)。デフォルトは 30
retentionDays:
type: integer # キャッシュの有効期限(日単位)。省略または 0 を指定すると有効期限なし
---
# ── ServiceAccount ─────────────────────────────────────────────────────────────
apiVersion: v1
kind: ServiceAccount
metadata:
name: alibabacloud-eci-imagecache-controller
namespace: kube-system
---
# ── ClusterRole ────────────────────────────────────────────────────────────────
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
---
# ── ClusterRoleBinding ─────────────────────────────────────────────────────────
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
---
# ── シークレット:Alibaba Cloud 認証情報 ─────────────────────────────────────────
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 Secret
---
# ── デプロイメント:ImageCache コントローラー ─────────────────────────────────────────
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: ご利用の Alibaba Cloud アカウント内でこのクラスターを一意に識別する ID。必須。
- name: REGION_ID
value: "cn-beijing" # TODO: VNode が実行されるリージョン(例:cn-hangzhou)。必須。
- name: RESOURCE_GROUP_ID
value: "" # リソースグループ ID。任意。
- name: SECURITY_GROUP_ID
value: "sg-***" # TODO: ECI Pod 用のセキュリティグループ ID。必須。
- name: VSWITCH_IDS
value: "vsw-*******" # TODO: 1 個以上の vSwitch 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以下の表に、設定が必須となる環境変数を示します。
| 変数 | 説明 | 必須 |
|---|---|---|
CLUSTER_ID | Alibaba Cloud アカウント内でクラスターを一意に識別する ID | はい |
REGION_ID | VNode が実行されるリージョン ID(例:cn-beijing | はい |
SECURITY_GROUP_ID | ECI Pod 用のセキュリティグループ ID | はい |
VSWITCH_IDS | 1 個以上の vSwitch ID(カンマ区切り) | はい |
RESOURCE_GROUP_ID | リソースグループ ID | いいえ |
ステップ 2:マニフェストの適用
kubectl create -f imagecache-crd.yamlステップ 3:デプロイの確認
コントローラー Pod が実行中であることを確認します。
kubectl get pod -n kube-system期待される出力:
NAME READY STATUS RESTARTS AGE
alibabacloud-eci-imagecache-controller-8857984bd-2lnhs 1/1 Running 1 7s
......CRD が登録されていることを確認します。
kubectl get crd imagecaches.eci.alibabacloud.com期待される出力:
NAME CREATED AT
imagecaches.eci.alibabacloud.com 2022-09-01T07:12:47Z