Inline Volumes phù hợp của CSI

cloudFun

kubernetes.jpg


Thông thường, các volume được cung cấp bởi trình điều khiển lưu trữ bên ngoài trong Kubernetes vẫn tồn tại, với vòng đời hoàn toàn độc lập với các pod hoặc (như một trường hợp đặc biệt) được ghép lỏng lẻo với pod đầu tiên sử dụng volume (chế độ liên kết muộn). Cơ chế để yêu cầu và xác định các volume như vậy trong Kubernetes là Persistent Volume Claim (PVC) và Persistent Volume (PV). Ban đầu, các volume được hỗ trợ bởi trình điều khiển Giao diện lưu trữ container - Container Storage Interface (CSI) chỉ có thể được sử dụng thông qua cơ chế PVC / PV này.

Nhưng cũng có trường hợp sử dụng cho volume dữ liệu có nội dung và vòng đời được gắn với một pod. Ví dụ: trình điều khiển có thể tạo ra một volume với các secret được tạo động dành riêng cho ứng dụng đang chạy trong pod. Các volume như vậy cần phải được tạo cùng với một pod và có thể bị xóa như là một phần khi của chấm dứt pod bị dừng (ephemeral - phù du). Chúng được định nghĩa là một phần của thông số pod (inline - nội tuyến).

Kể từ Kubernetes 1.15, trình điều khiển CSI cũng có thể được sử dụng cho các ephemeral inline volume như vậy. Cổng tính năng CSIInlineVolume phải được đặt để bậtkích hoạt trong 1.15 vì hỗ trợ vẫn ở trạng thái alpha. Trong 1.16, tính năng đạt trạng thái beta, điều này thường có nghĩa là nó được kích hoạtbật theo clusterụm theo mặc định.

Các trình điều khiển CSI phải được điều chỉnh để hỗ trợ điều này bởi vì mặc dù hai lệnh gọi gRPC CSI hiện có được sử dụng (NodePublishVolumeNodeUnpublishVolume), cách chúng được sử dụng là khác nhau và được bao phủ bởi thông số CSI: đối với ephemeral khối lượngvolume phù du, chỉ NodePublishVolume được gọi bởi kubelet khi yêu cầu trình điều khiển CSI cung cấpcho một ổ đĩa volume. Tất cả các cuộc gọi khác (như CreateVolume, NodeStageVolume, v.v.) đều bị bỏ qua. Các tham số khối lượngvolume được cung cấp trong thông số pod và từ đó được sao chép vào trường NodePublishVolumeRequest.volume_context . Hiện tại không có thông số tiêu chuẩn hóa; ngay cả những cái phổ biến như kích thước phải được cung cấp theo định dạng được xác định bởi trình điều khiển CSI. Tương tự, chỉ NodeUnpublishVolume được gọi sau khi pod dừng hoạt động và volume cần phải được loại bỏ.

Ban đầu, giả định là các trình điều khiển CSI sẽ được viết riêng để cung cấp persistent hoặc ephemeral volumes. Nhưng cũng có những trình điều khiển cung cấp lưu trữ hữu ích ở cả hai chế độ: ví dụ: PMEM-CSI quản lý bộ nhớ liên tục (PMEM), một loại lưu trữ cục bộ mới được cung cấp bởi Intel® Optane™ DC Persistent MemoryBộ nhớ liên tục DC của Intel® Optane ™. Bộ nhớ này hữu ích cho cả khi lưu trữ dữ liệu liên tục (nhanh hơn SSD thông thường) và dung lượng ephemeral scratch nhanh chóng (dung lượng cao hơn DRAM).

Do đó, hỗ trợ trong Kubernetes 1.16 đã được mở rộng: * Kubernetes và người dùng có thể xác định loại volume mà trình điều khiển hỗ trợ thông qua trường volumeLifecycleModes trong đối tượng CSIDriver. * Trình điều khiển có thể nhận thông tin về chế độ volume bằng cách bật tính năng “pod info on mount”, sau đó sẽ thêm mục nhập csi.storage.k8s.io/ephemeral mới vào NodePublishRequest.volume_context.

Để biết thêm thông tin về việc triển khai hỗ trợ ephemeral inline volumes trong trình điều khiển CSI, hãy xem tài liệu Kubernetes-CSI và tài liệu thiết kế ban đầu.

Nội dung tiếp theo trong bài đăng trên blog này là các ví dụ sử dụng dựa trên trình điều khiển thực và tóm tắt ở cuối.

Ví dụ
PMEM-CSI
Hỗ trợ cho ephemeral inline volumes đã được thêm vào trong phiên bản v0.6.0. Trình điều khiển có thể được sử dụng trên các máy chủ có Intel® Optane™ DC Persistent Memory Bộ nhớ liên tục Intel® Optane ™ DC thực, trên các máy đặc biệt trong GCE hoặc với phần cứng được mô phỏng bởi QEMU. Cái sau được tích hợp hoàn toàn vào makefile và chỉ cần Go, Docker và KVM, vì vậy phương pháp này đã được sử dụng cho ví dụ này:
Mã:
git clone --branch release-0.6 https://github.com/intel/pmem-csi
cd pmem-csi
TEST_DISTRO=clear TEST_DISTRO_VERSION=32080 TEST_PMEM_REGISTRY=intel make start
Triển khai cluste bốn node có thể mất thời gian nhưng cuối cùng sẽ kết thúc bằng:

Mã:
The test cluster is ready. Log in with /work/pmem-csi/_work/pmem-govm/ssh-pmem-govm, run kubectl once logged in.
Alternatively, KUBECONFIG=/work/pmem-csi/_work/pmem-govm/kube.config can also be used directly.

To try out the pmem-csi driver persistent volumes:
...

To try out the pmem-csi driver ephemeral volumes:
   cat deploy/kubernetes-1.17/pmem-app-ephemeral.yaml | /work/pmem-csi/_work/pmem-govm/ssh-pmem-govm kubectl create -f -
deploy/kubernetes-1.17/pmem-app-ephemeral.yaml chỉ định một volume:
Mã:
kind: Pod
apiVersion: v1
metadata:
  name: my-csi-app-inline-volume
spec:
  containers:
    - name: my-frontend
      image: busybox
      command: [ "sleep", "100000" ]
      volumeMounts:
      - mountPath: "/data"
        name: my-csi-volume
  volumes:
  - name: my-csi-volume
    csi:
      driver: pmem-csi.intel.com
      fsType: "xfs"
      volumeAttributes:
        size: "2Gi"
        nsmode: "fsdax"
Sau khi tạo pod đó thì có thể kiểm tra kết quả:
Mã:
kubectl describe pods/my-csi-app-inline-volume
Mã:
Name:         my-csi-app-inline-volume
...
Volumes:
  my-csi-volume:
    Type:              CSI (a Container Storage Interface (CSI) volume source)
    Driver:            pmem-csi.intel.com
    FSType:            xfs
    ReadOnly:          false
    VolumeAttributes:      nsmode=fsdax
                           size=2Gi
Mã:
kubectl exec my-csi-app-inline-volume -- df -h /data
Mã:
Filesystem                Size      Used Available Use% Mounted on
/dev/ndbus0region0fsdax/d7eb073f2ab1937b88531fce28e19aa385e93696
                          1.9G     34.2M      1.8G   2% /data
Trình giả lập image

Trình giả lập hình ảnhimage tự động giải nén một container image hình ảnh chứa và làm cho nội dung của nó có sẵn dưới dạng một ephemeral khối lượngvolume phù du. Nó vẫn đang được phát triển, nhưng hình ảnh đãimage có sẵn và có thể được cài đặt với:
Mã:
kubectl create -f https://github.com/kubernetes-csi/csi-driver-image-populator/raw/master/deploy/kubernetes-1.16/csi-image-csidriverinfo.yaml
kubectl create -f https://github.com/kubernetes-csi/csi-driver-image-populator/raw/master/deploy/kubernetes-1.16/csi-image-daemonset.yaml
Pod vVí dụ pod này sẽ chạy nginx và có nóđể phục vụ dữ liệu đến từ image kfox1111/misc:test :
Mã:
kubectl create -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.13-alpine
    ports:
    - containerPort: 80
    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html
  volumes:
  - name: data
    csi:
      driver: image.csi.k8s.io
      volumeAttributes:
          image: kfox1111/misc:test
EOF
Mã:
kubectl exec nginx -- cat /usr/share/nginx/html/test
Tệp test đó chỉ chứa một từ duy nhất:
Mã:
testing
Các data containers như trên có thể được xây dựng với Dockerfiles như:
Mã:
FROM scratch
COPY index.html /index.html
cert-manager-csi

cert-manager-csi làm việchoạt động cùng với cert-manager. Mục tiêu của trình điều khiển này là để tạo điều kiện cho việc yêu cầu và gắn các cặp certificate key khóa chứng chỉ vào các pod một cách liền mạch. Điều này rất hữu ích để tạo điều kiệnkhi hỗ trợ cho mTLS hoặc bảo đảm các kết nối của các pod với các chứng chỉcertificate hiện tại được đảm bảo trong khi có tất cả các tính năng mà trình quản lý chứng chỉcertificate cung cấp. Dự án này là thử nghiệm.

Bước tiếp theo
Một trong những vấn đề với khối lượng nội tuyến phù du ephemeral inline volumes là các podnhóm được Kubernetes lên lịch lên các node mà không biết gì về lưu trữ hiện có trên node đó. Khi pod đã được lên lịch, trình điều khiển CSI phải cung cấp khối lượngvolume có sẵn cho node đó. Nếu điều đó hiện không thểvolume không có sẵn, pod không thể bắt đầu. Điều Hành động này sẽ được lặpthử lại cho đến khi cuối cùng khối lượngvolume đã sẵn sàng. KEP theo dõi dung lượng lưu trữ là một nỗ lựcgiải pháp để giải quyết vấn đề này.

Một KEP liên quan giới thiệu một tham số kích thước tiêu chuẩn.

Hiện tại, ephemeral inline khối lượngvolume nội tuyến phù hợp của CSI vẫn ở giai đoạn thử nghiệm trong khi các vấn đề như thế nàyliệt kê ở trên đang được thảo luận. Phản hồi của mỗi người là rất cần thiết để quyết định cách tiến hành với tính năng này.

Nguồn: https://kubernetes.io/
 
Top