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.
- Di Konsol Google Cloud, buka halaman Cloud Marketplace Microsoft Active Directory.
- Klik Luncurkan.
- Selesaikan konfigurasi deployment. Pastikan server DNS berada di region yang sama dengan volume SMB Layanan NetApp Cloud Volumes. Lihat ketersediaan region.
- Klik Deploy.
Jika Anda ingin menggunakan Layanan Terkelola untuk Microsoft Active Directory (Microsoft AD Terkelola), selesaikan langkah-langkah berikut:
- Buat domain Microsoft AD Terkelola.
- Konfigurasikan peering domain antara domain dan jaringan NetApp Cloud Volumes Service.
- 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
- Instal Driver CSI SMB untuk Kubernetes open source.
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:
Buat
StorageClass
. Berikut adalah contoh file manifes yang bernamasc-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 membuatStorageClass
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
adalahadserver-faab.cvssmb.com
.SHARE_NAME
: nama berbagi SMB. Misalnya, nama berbagi untuk jalur pemasangan//adserver-faab.cvssmb.com/eager-hungry-skossi
adalaheager-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.
Buat resource
StorageClass
berdasarkan file manifes:kubectl create -f sc-smb.yaml
Deploy Pod yang menggunakan
StorageClass
. Berikut adalah contoh file manifes yang bernamastatefulset-smb.yaml
. Pod yang di-deploy untukStatefulSet
ini akan membuat filedata.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
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:
Buat
PersistentVolume
. Berikut adalah contoh file manifes yang bernamapv-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 membuatPersistentVolume
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.
Buat resource
PersistentVolume
berdasarkan file manifes:kubectl create -f pv-smb.yaml
Buat
PersistentVolumeClaim
. Berikut adalah contoh file manifes yang bernamapvc-smb.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-smb spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName: pv-smb storageClassName: ""
Buat resource
PersistentVolumeClaim
berdasarkan file manifes:kubectl create -f pvc-smb.yaml
Deploy Pod yang menggunakan
PersistentVolumeClaim
. Berikut ini contoh file manifes yang bernamabusybox-smb.yaml
untuk deployment Pod yang menggunakanpvc-smb
. Deployment ini akan membuat filedata.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
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
- Pelajari cara men-deploy aplikasi Windows.
- Pelajari Layanan NetApp Cloud Volumes lebih lanjut.