Alibaba Cloud Container Service for Kubernetes (ACK) は、高性能な一時ストレージ用のメモリボリュームを提供します。
背景情報
メモリボリュームは一時的な記憶媒体です。 メモリボリュームがマウントされているポッドが再起動すると、メモリボリュームのデータが失われます。
メモリボリュームは、高速キャッシュが必要なシナリオに適用できます。
メモリボリューム用のCSIプラグインのデプロイ
メモリボリューム用のCSIプラグインは、PluginとProvisionerで構成されています。 プラグインは、メモリボリュームをマウントするために使用されます。 Provisionerは、メモリボリュームの作成に使用されます。
説明
Kubernetes 1.18を実行するACKクラスターのみがこの機能をサポートしています。
メモリボリュームのCSIプラグインのデプロイ
apiVersion: storage.k8s.io/v1beta1
kind: CSIDriver
metadata:
name: memplugin.csi.alibabacloud.com
spec:
attachRequired: false
podInfoOnMount: true
---
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: csi-mem-plugin
namespace: kube-system
spec:
selector:
matchLabels:
app: csi-mem-plugin
template:
metadata:
labels:
app: csi-mem-plugin
spec:
tolerations:
- operator: Exists
serviceAccount: admin
priorityClassName: system-node-critical
hostNetwork: true
hostPID: true
containers:
- name: driver-registrar
image: registry.cn-hangzhou.aliyuncs.com/acs/csi-node-driver-registrar:v1.1.0
imagePullPolicy: Always
args:
- "--v=5"
- "--csi-address=/csi/csi.sock"
- "--kubelet-registration-path=/var/lib/kubelet/plugins/memplugin.csi.alibabacloud.com/csi.sock"
env:
- name: KUBE_NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
volumeMounts:
- name: plugin-dir
mountPath: /csi
- name: registration-dir
mountPath: /registration
- name: csi-memplugin
securityContext:
privileged: true
capabilities:
add: ["SYS_ADMIN"]
allowPrivilegeEscalation: true
image: registry.cn-hangzhou.aliyuncs.com/acs/csi-plugin:v1.14.8.41-9efe2ede-aliyun
imagePullPolicy: "Always"
args :
- "--endpoint=$(CSI_ENDPOINT)"
- "--v=5"
- "--nodeid=$(KUBE_NODE_NAME)"
- "--driver=memplugin.csi.alibabacloud.com"
env:
- name: KUBE_NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: CSI_ENDPOINT
value: unix://var/lib/kubelet/plugins/memplugin.csi.alibabacloud.com/csi.sock
volumeMounts:
- name: pods-mount-dir
mountPath: /var/lib/kubelet
mountPropagation: "Bidirectional"
- mountPath: /dev
mountPropagation: "HostToContainer"
name: host-dev
- mountPath: /var/log/
name: host-log
volumes:
- name: plugin-dir
hostPath:
path: /var/lib/kubelet/plugins/memplugin.csi.alibabacloud.com
type: DirectoryOrCreate
- name: registration-dir
hostPath:
path: /var/lib/kubelet/plugins_registry
type: DirectoryOrCreate
- name: pods-mount-dir
hostPath:
path: /var/lib/kubelet
type: Directory
- name: host-dev
hostPath:
path: /dev
- name: host-log
hostPath:
path: /var/log/
updateStrategy:
rollingUpdate:
maxUnavailable: 10%
type: RollingUpdate
メモリボリュームのCSI-Provisionerのデプロイ
kind: 配置
apiVersion: apps/v1
メタデータ:
名前: csi-memprovisioner
名前空間: kube-system
spec:
セレクタ:
matchLabels:
アプリ: csi-memprovisioner
レプリカ:2
template:
metadata:
labels:
アプリ: csi-memprovisioner
仕様:
tolerations:
- operator: "Exists"
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
priorityClassName: system-node-critical
serviceAccount: admin
hostNetwork: true
コンテナ:
-name: csi-provisioner
画像: registry.cn-hangzhou.aliyuncs.com/acs/csi-provisioner:v1.4.0-aliyun
args:
-"-- provisione r=memplugin.csi.alibabacloud.com"
-"-- csi-address=$(ADDRESS)"
-"-- feature-gates=トポロジ=True"
-"-- volume-name-prefix=mem"
-"-- strict-topology=true"
-"-- timeout=150s"
-"-- enable-leader-election=true"
-"-- leader-election-type=leases"
-"-- retry-interval-start=500ms"
-"-- v=5"
env:
-名前: アドレス
値: /var/lib/kubelet/plugin s/memplugin.csi.alibabacloud.com/csi.sock
imagePullPolicy: 「常に」
volumeMounts:
-name: socket-dir
mountPath: /var/lib/kubelet/plugin s/memplugin.csi.alibabacloud.com
volumes:
-name: socket-dir
hostPath:
パス: /var/lib/kubelet/plugin s/memplugin.csi.alibabacloud.com
タイプ: DirectoryOrCreate
メモリボリュームの使用
次のテンプレートを使用してStorageClassを作成します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-mem provisioner: memplugin.csi.alibabacloud.com reclaimPolicy: Delete
次のテンプレートを使用して、永続ボリュームクレーム (PVC) とアプリケーションを作成します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mem-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: csi-mem --- apiVersion: apps/v1 kind: Deployment metadata: name: deployment-mem labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 command: ["sh", "-c"] args: ["sleep 10000"] volumeMounts: - name: mem-pvc mountPath: "/data" volumes: - name: mem-pvc persistentVolumeClaim: claimName: mem-pvc