Menggunakan driver CSI SMB untuk mengakses volume SMB di node Windows Server


Halaman ini menyediakan contoh cara menggunakan Driver CSI SMB untuk Kubernetes open source untuk mengakses volume SMB Layanan NetApp Cloud Volumes di cluster Google Kubernetes Engine (GKE) dengan node server Windows.

Ringkasan

Protokol Blok Pesan Server (SMB) adalah protokol berbagi file jaringan yang digunakan untuk Microsoft Windows. Untuk menggunakan SMB dengan cluster GKE menggunakan node pool Windows Server, Anda dapat menggunakan Driver CSI SMB untuk Kubernetes open source.

Tugas

Bagian berikut akan memandu Anda mempelajari contoh cara mengakses volume SMB Layanan NetApp Cloud Volumes di cluster GKE menggunakan node Windows Server. Contoh ini menggunakan Driver CSI SMB untuk Kubernetes open source.

Men-deploy Active Directory

Tugas ini membuat {i>Active Directory<i}. Jika sudah memiliki Active Directory untuk digunakan, Anda dapat melewati tugas ini.

Untuk men-deploy Active Directory yang dikelola sendiri, petunjuk berikut menggunakan solusi Google Cloud Marketplace untuk membuat domain Active Directory baru, dengan dua Pengontrol Domain Active Directory.

  1. Di Konsol Google Cloud, buka halaman Cloud Marketplace Microsoft Active Directory.
  2. Klik Luncurkan.
  3. Selesaikan konfigurasi deployment. Pastikan server DNS berada di region yang sama dengan volume SMB Layanan NetApp Cloud Volumes. Lihat ketersediaan region.
  4. Klik Deploy.

Jika Anda ingin menggunakan Layanan Terkelola untuk Microsoft Active Directory (Microsoft AD Terkelola), selesaikan langkah-langkah berikut:

  1. Buat domain Microsoft AD Terkelola.
  2. Konfigurasikan peering domain antara domain dan jaringan NetApp Cloud Volumes Service.
  3. Untuk melakukan tugas terkait Active Directory, hubungkan ke domain.

Membuat zona penerusan DNS pribadi

Buat zona penerusan DNS pribadi yang meneruskan kueri DNS ke pengontrol domain Active Directory.

Memperbarui aturan firewall

Agar kueri dari Cloud DNS dapat menjangkau koneksi AD, dalam aturan firewall AD Anda, tambahkan 35.199.192.0/19 sebagai rentang IP sumber ke Filter Sumber.

Untuk mengetahui informasi selengkapnya, lihat Pertimbangan keamanan untuk akses SMB Layanan Cloud Volumes.

Membuat koneksi Active Directory ke Layanan Cloud Volumes

Untuk mengetahui petunjuknya, lihat Membuat koneksi AD.

Membuat volume SMB di Layanan Cloud Volumes

Untuk mengetahui petunjuknya, lihat Membuat volume SMB.

Gunakan target pemasangan volume SMB baru sebagai nilai source dalam PersistentVolume atau StorageClass, yang ditentukan dalam format berikut.

"//SMB_SERVER_NAME/SHARE_NAME"

Target dan petunjuk pemasangan tersedia di halaman listingan volume Layanan Cloud Volumes dan di setiap halaman detail volume.

Membuat cluster dengan node yang digabungkan ke domain AD

Lakukan petunjuk di bagian Mengonfigurasi node Windows Server untuk otomatis bergabung dengan domain Active Directory.

Menginstal driver CSI SMB

  1. Instal Driver CSI SMB untuk Kubernetes open source.
  2. Untuk mengakses volume SMB dari Pod, buat Secret yang mengenkode nama pengguna dan sandi.

    kubectl create secret generic SECRET_NAME \
        --from-literal username="USERNAME" \
        --from-literal password="PASSWORD"
    

    Ganti kode berikut:

    • SECRET_NAME: nama Secret Anda.
    • USERNAME: nama pengguna. Nama pengguna yang dienkode dalam Secret harus menyertakan nama domain dan memiliki format berikut: domain\$username. Jika berbagi SMB Anda bukan bagian dari domain mana pun, domain dapat berupa string apa pun.
    • PASSWORD: sandi untuk pengguna.

Mengakses volume SMB

Untuk mengakses volume SMB, Anda dapat memilih menggunakan salah satu opsi berikut:

Menggunakan StorageClass untuk mengakses volume SMB

Untuk mengakses volume SMB melalui StorageClass, lakukan tugas berikut:

  1. Buat StorageClass. Berikut adalah contoh file manifes yang bernama sc-smb.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: smb
    provisioner: smb.csi.k8s.io
    parameters:
      source: "//SMB_SERVER_NAME/SHARE_NAME"
      csi.storage.k8s.io/node-stage-secret-name: "SECRET_NAME"
      csi.storage.k8s.io/node-stage-secret-namespace: "default"
      createSubDir: "false"    # optional: create a sub dir for new volume
    reclaimPolicy: Retain      # only Retain is supported
    volumeBindingMode: Immediate
    mountOptions:
      - dir_mode=0777
      - file_mode=0777
      - uid=1001
      - gid=1001
    

    Dalam contoh ini, kami menggunakan kolom mountOptions, yang bersifat opsional untuk Windows Server, tetapi akan membuat StorageClass ini berfungsi untuk Linux dan Windows Server.

    Ganti kode berikut:

    • SMB_SERVER_NAME: nama host server SMB, termasuk domain. Misalnya, nama host untuk jalur pemasangan //adserver-faab.cvssmb.com/eager-hungry-skossi adalah adserver-faab.cvssmb.com.
    • SHARE_NAME: nama berbagi SMB. Misalnya, nama berbagi untuk jalur pemasangan //adserver-faab.cvssmb.com/eager-hungry-skossi adalah eager-hungry-skossi. Hanya gunakan root share untuk berbagi SMB. Untuk mengetahui detailnya, lihat Masalah umum terkait.
    • SECRET_NAME: nama Secret berisi kredensial untuk mengakses volume SMB.
  2. Buat resource StorageClass berdasarkan file manifes:

    kubectl create -f sc-smb.yaml
    
  3. Deploy Pod yang menggunakan StorageClass. Berikut adalah contoh file manifes yang bernama statefulset-smb.yaml. Pod yang di-deploy untuk StatefulSet ini akan membuat file data.txt di drive SMB yang terpasang:

    apiVersion: v1
    kind: Service
    metadata:
      name: busybox
      labels:
        app: busybox
    spec:
      ports:
      - port: 80
        name: web
      clusterIP: None
      selector:
        app: busybox
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-smb
      labels:
        app: busybox
    spec:
      serviceName: statefulset-smb
      replicas: 1
      template:
        metadata:
          labels:
            app: busybox
        spec:
          nodeSelector:
            "kubernetes.io/os": windows
          containers:
            - name: statefulset-smb
              image: e2eteam/busybox:1.29
              command:
                - "powershell.exe"
                - "-Command"
                - "while (1) { Add-Content -Encoding Ascii C:\\sc\\smb\\data.txt $(Get-Date -Format u); sleep 1 }"
              volumeMounts:
                - name: smb
                  mountPath: "/sc/smb"
          tolerations:
            - key: "node.kubernetes.io/os"
              operator: "Exists"
              effect: "NoSchedule"
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: busybox
      volumeClaimTemplates:
        - metadata:
            name: smb
            annotations:
              volume.beta.kubernetes.io/storage-class: smb
          spec:
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 10Gi
    
  4. Buat resource StatefulSet berdasarkan file manifes:

    kubectl create -f statefulset-smb.yaml
    

Menggunakan PersistentVolume dan PersistentVolumeClaim untuk mengakses volume

Untuk mengakses volume SMB melalui PersistentVolume dan PersistentVolumeClaim, lakukan tugas berikut:

  1. Buat PersistentVolume. Berikut adalah contoh file manifes yang bernama pv-smb.yaml:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-smb
    spec:
      capacity:
        storage: 100Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      mountOptions:
        - dir_mode=0777
        - file_mode=0777
        - vers=3.0
      csi:
        driver: smb.csi.k8s.io
        readOnly: false
        volumeHandle: VOLUME_ID
        volumeAttributes:
          source: "//SMB_SERVER_NAME/SHARE_NAME"
        nodeStageSecretRef:
          name: SECRET_NAME
          namespace: default
    

    Dalam contoh ini, kami menggunakan kolom mountOptions, yang bersifat opsional untuk Windows Server, tetapi akan membuat PersistentVolume ini berfungsi untuk Linux dan Windows Server.

    Ganti kode berikut:

    • VOLUME_ID: ID unik untuk volume.
    • SMB_SERVER_NAME: nama host server SMB, termasuk domain.
    • SHARE_NAME: nama berbagi SMB.
    • SECRET_NAME: nama Secret yang berisi kredensial untuk mengakses volume SMB.
  2. Buat resource PersistentVolume berdasarkan file manifes:

    kubectl create -f pv-smb.yaml
    
  3. Buat PersistentVolumeClaim. Berikut adalah contoh file manifes yang bernama pvc-smb.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-smb
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-smb
      storageClassName: ""
    
  4. Buat resource PersistentVolumeClaim berdasarkan file manifes:

    kubectl create -f pvc-smb.yaml
    
  5. Deploy Pod yang menggunakan PersistentVolumeClaim. Berikut ini contoh file manifes yang bernama busybox-smb.yaml untuk deployment Pod yang menggunakan pvc-smb. Deployment ini akan membuat file data.txt di drive SMB yang terpasang:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: busybox-smb
      labels:
        app: busybox
    spec:
      replicas: 1
      template:
        metadata:
          name: busybox
          labels:
            app: busybox
        spec:
          nodeSelector:
            "kubernetes.io/os": windows
          containers:
            - name: busybox
              image: e2eteam/busybox:1.29
              command:
                - "powershell.exe"
                - "-Command"
                - "while (1) { Add-Content -Encoding Ascii C:\\pv\\pv-smb\\data.txt $(Get-Date -Format u); sleep 1 }"
              volumeMounts:
                - name: smb
                  mountPath: "/pv/pv-smb"
          tolerations:
            - key: "node.kubernetes.io/os"
              operator: "Exists"
              effect: "NoSchedule"
          volumes:
            - name: smb
              persistentVolumeClaim:
                claimName: pvc-smb
      selector:
        matchLabels:
          app: busybox
    
  6. Buat Deployment dari file manifes:

    kubectl apply -f  busybox-smb.yaml
    

Menguji akses ke volume SMB

Untuk memverifikasi bahwa Anda dapat mengakses file data.txt pada volume SMB, lakukan salah satu tugas berikut:

  • Mulai sesi powershell di container dan cantumkan file data.txt:

    kubectl exec POD_NAME -- powershell.exe -c "ls PATH_TO_THE_FILE"
    
  • Buka drive SMB di VM lain untuk mengonfirmasi bahwa file data.txt berhasil dibuat di berbagi jarak jauh.

Masalah umum

Error pemasangan di Windows setelah memulai ulang

Masalah: Misalnya, jika \\smb-server\share\test1 sudah terpasang, Anda mungkin akan mendapatkan pesan error saat memasang volume \\smb-server\share\test2 setelah node Windows di-reboot.

Alasan: Kolom source untuk StorageClass dan PersistentVolume hanya boleh menggunakan root share untuk satu server SMB dalam satu cluster. Selain itu, Anda harus menggunakan properti volumeMounts.subPath dalam deployment.

Solusi sementara: Hanya gunakan \\smb-server\share sebagai source.

Untuk masalah umum lainnya, lihat halaman Masalah umum untuk Driver CSI SMB untuk Kubernetes open source.

Langkah selanjutnya