Cách xây dựng trình điều khiển Dell CSI tùy chỉnh

Vì tất cả trình điều khiển và phần phụ thuộc của Dell Container Storage Interface (CSI) đều là mã nguồn mở, nên bất kỳ ai cũng có thể điều chỉnh chúng để phù hợp với trường hợp sử dụng cụ thể.

Blog này hướng dẫn cách tạo phiên bản vá lỗi của Trình điều khiển Dell CSI cho PowerScale.

Tiền đề

Như một ví dụ thực tế, các bước sau đây sẽ chỉ ra cách tạo phiên bản vá lỗi của Trình điều khiển Dell CSI cho PowerScale hỗ trợ đường dẫn gắn kết dài hơn.

Đặc tả CSI định nghĩa rằng trình điều khiển phải chấp nhận đường dẫn tối đa là 128 byte:

// SP NÊN hỗ trợ độ dài đường dẫn tối đa được phép bởi hệ điều hành
// hệ thống/hệ thống tập tin, nhưng tối thiểu, SP PHẢI chấp nhận đường dẫn tối đa
// độ dài ít nhất là 128 byte.

Trình điều khiển Dell sử dụng thư viện gocsi làm mẫu chung cho phát triển CSI. Thư viện đó áp dụng độ dài đường dẫn tối đa 128 byte .

Phần cứng PowerScale hỗ trợ độ dài đường dẫn lên đến 1023 ký tự, như được mô tả trong chương Hướng dẫn hệ thống tệp của thông số kỹ thuật PowerScale . Do đó, chúng tôi sẽ xây dựng trình điều khiển csi-powerscale hỗ trợ giá trị đường dẫn có độ dài tối đa đó.

Các bước để vá trình điều khiển

Phụ thuộc

Trình điều khiển Dell CSI đều được xây dựng bằng golang và rõ ràng là chạy như một container. Do đó, các điều kiện tiên quyết tương đối đơn giản. Bạn cần: 

  • Golang (phiên bản tối thiểu v1.16 tại thời điểm bài đăng đó được xuất bản)
  • Podman hoặc Docker
  • Và tùy chọn thực hiện để chạy Makefile của chúng tôi

Nhân bản, phân nhánh và vá

Điều đầu tiên cần làm là sao chép kho lưu trữ csi-powerscale chính thức vào thư mục nguồn GOPATH của bạn .

cd $GOPATH/src/github.com/
git clone git@github.com:dell/csi-powerscale.git dell/csi-powerscale
đĩa cd dell/csi-powerscale

Sau đó, bạn có thể chọn phiên bản trình điều khiển mà bạn muốn vá; thẻ git sẽ cung cấp danh sách các phiên bản.

Trong ví dụ này, chúng tôi chọn v2.1.0 bằng lệnh git checkout v2.1.0 -b v2.1.0-longer-path .

Bước tiếp theo là lấy thư viện mà chúng ta muốn vá.

gocsi và mọi thành phần nguồn mở khác được duy trì cho Dell CSI đều có sẵn trên https://github.com/dell .

Hình sau đây cho thấy cách fork kho lưu trữ trên github riêng tư của bạn:

Bây giờ chúng ta có thể lấy thư viện bằng:

cd $GOPATH/src/github.com/
git clone git@github.com:coulof/gocsi.git coulof/gocsi
cd coulof/gocsi

Để đơn giản hóa việc bảo trì và hợp nhất các cam kết trong tương lai, bạn nên thêm kho lưu trữ gốc làm nhánh thượng nguồn với:

git remote add upstream git@github.com:dell/gocsi.git

Bước quan trọng tiếp theo là chọn đúng phiên bản thư viện được phiên bản trình điều khiển của chúng ta sử dụng.

Chúng ta có thể kiểm tra tệp phụ thuộc csi-powerscale bằng: grep gocsi $GOPATH/src/github.com/dell/csi-powerscale/go.mod và tạo nhánh của phiên bản đó. Trong trường hợp này, phiên bản là v1.5.0 và chúng ta có thể tạo nhánh bằng: git checkout v1.5.0 -b v1.5.0-longer-path .

Bây giờ là lúc hack bản vá của chúng ta! Đó là… chỉ là một câu nói ngắn gọn:

--- a/middleware/specvalidator/spec_validator.go
 +++ b/middleware/specvalidator/spec_validator.go
@@ -770,7 +770,7 @@ hàm validateVolumeCapabilitiesArg(
 }
 
 hằng số (
- maxFieldString = 128
+ maxFieldString = 1023
        maxFieldMap = 4096
        maxFieldNodeId = 256
 )

Sau đó chúng ta có thể cam kết và đẩy thư viện đã vá của mình bằng một thẻ đẹp mắt:

git commit -a -m 'tăng giới hạn đường dẫn'
git push --set-upstream origin v1.5.0-longer-path
git tag -a v1.5.0-longer-path
git push --thẻ

Xây dựng

Sau khi bản vá được xác nhận và đẩy, đã đến lúc xây dựng tệp nhị phân trình điều khiển CSI và hình ảnh chứa nó.

Hãy quay lại kho lưu trữ chính của csi-powerscale: cd $GOPATH/src/github.com/dell/csi-powerscale

Như đã đề cập trong phần giới thiệu, chúng ta có thể tận dụng chỉ thị replace trong tệp go.mod để trỏ đến thư viện đã vá. Trong trường hợp này, chúng ta thêm nội dung sau:

diff --git a/go.mod b/go.mod
chỉ số 5c274b4..c4c8556 100644
--- a/go.mod
+++ b/go.mod
@@ -26,6 +26,7 @@ yêu cầu (
 )
 
 thay thế (
+ github.com/dell/gocsi => github.com/coulof/gocsi v1.5.0-longer-path
        k8s.io/api => k8s.io/api v0.20.2
        k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.20.2
        k8s.io/apimachinery => k8s.io/apimachinery v0.20.2

Khi hoàn tất, chúng ta sẽ lấy module mới từ repo trực tuyến bằng lệnh: go mod download

Lưu ý : Nếu bạn chỉ muốn kiểm tra các thay đổi cục bộ, chúng ta có thể sử dụng lệnh replace để trỏ đến thư mục cục bộ bằng:

thay thế github.com/dell/gocsi => ../../coulof/gocsi

Sau đó, chúng ta có thể xây dựng trình điều khiển nhị phân mới cục bộ bằng cách sử dụng: make build

Sau khi biên dịch thành công, chúng ta có thể tạo hình ảnh. Đường dẫn ngắn nhất để thực hiện điều đó là thay thế nhị phân csi-isilon từ hình ảnh docker dellemc/csi-isilon bằng:

mèo << EOF > Dockerfile.patch
TỪ dellemc/csi-isilon:v2.1.0
SAO CHÉP "csi-isilon".
Cuối cùng


docker build -t coulof/csi-isilon:v2.1.0-long-path -f Dockerfile.patch .

Ngoài ra, bạn có thể xây dựng lại toàn bộ ảnh docker bằng cách sử dụng Makefile được cung cấp .

Theo mặc định, trình điều khiển sử dụng Red Hat Universal Base Image tối thiểu . Đôi khi, hình ảnh cơ sở đó thiếu các phụ thuộc, do đó bạn có thể sử dụng một hương vị khác, chẳng hạn như:

BASEIMAGE=registry.fedoraproject.org/fedora-minimal:latest REGISTRY=docker.io IMAGENAME=coulof/csi-powerscale IMAGETAG=v2.1.0-long-path make podman-build

Hình ảnh đã sẵn sàng để được đẩy vào bất kỳ sổ đăng ký hình ảnh nào bạn thích. Trong trường hợp này, đây là hub.docker.com: docker push coulof/csi-isilon:v2.1.0-long-path .

Cập nhật triển khai CSI Kubernetes

Bước cuối cùng là thay thế ảnh trình điều khiển được sử dụng trong Kubernetes bằng ảnh tùy chỉnh của bạn.

Một lần nữa, có nhiều giải pháp khả thi và giải pháp được lựa chọn phụ thuộc vào cách bạn triển khai trình điều khiển.

Nếu bạn sử dụng trình cài đặt helm, bạn có thể thêm khối sau vào đầu tệp myvalues.yaml:

hình ảnh:
  trình điều khiển: docker.io/coulof/csi-powerscale:v2.1.0-long-path

Sau đó cập nhật hoặc gỡ cài đặt/cài đặt lại trình điều khiển như mô tả trong tài liệu.

Nếu bạn quyết định sử dụng Dell CSI Operator, bạn chỉ cần trỏ tới hình ảnh mới:

Phiên bản api: storage.dell.com/v1
loại: CSIIsilon
siêu dữ liệu:
  tên: isilon
đặc điểm kỹ thuật:
  tài xế:
    chung:
      hình ảnh: "docker.io/coulof/csi-powerscale:v2.1.0-long-path"
...

Hoặc, nếu bạn muốn thực hiện một thử nghiệm nhanh và đơn giản, bạn có thể tạo một tệp vá (ở đây có tên là path_csi-isilon_controller_image.yaml ) với nội dung sau:

đặc điểm kỹ thuật:
  bản mẫu:
    đặc điểm kỹ thuật:
      container:
      - tên: tài xế 
        hình ảnh: docker.io/coulof/csi-powerscale:v2.1.0-long-path

Sau đó, bạn có thể áp dụng nó vào bản cài đặt hiện tại của mình bằng cách: kubectl patch deployment -n powerscale isilon-controller –patch-file path_csi-isilon_controller_image.yaml

Trong mọi trường hợp, bạn có thể kiểm tra xem mọi thứ có hoạt động không bằng cách trước tiên đảm bảo Pod đã được khởi động:

kubectl lấy pods -n powerscale

và các khúc gỗ phải sạch:

kubectl logs -n powerscale -l ứng dụng=isilon-controller -c trình điều khiển.

Tóm tắt và tuyên bố miễn trừ trách nhiệm

Như đã trình bày, nhờ mã nguồn mở, việc sửa chữa và cải thiện trình điều khiển Dell CSI hoặc Mô-đun lưu trữ Dell Container rất dễ dàng .

Hãy nhớ rằng Dell hỗ trợ chính thức (thông qua phiếu yêu cầu, Yêu cầu dịch vụ, v.v.) hình ảnh và tệp nhị phân, nhưng không hỗ trợ bản dựng tùy chỉnh .

Cảm ơn bạn đã đọc và hãy theo dõi các bài đăng trong tương lai về Dell Storage và Kubernetes!

Tác giả : Florian Coulombel