Published on

Microsoft Hyper-V Server - Cài đặt NFS server

Ở các bài viết trước mình đã trình bày việc xây dựng 1 Kubernetes cluster trên Hyper-V server, đồng thời giới thiệu vài ví dụ đơn giản về deploy một ứng dụng cơ bản lên cluster đó.

Như chúng ta đã biết, khi bạn 1 pod bị xóa hoặc tạo lại thì dữ liệu trên đó sẽ bị mất. Như vậy cần thiết phải lưu trữ dữ liệu bên ngoài cluster, vừa dễ quản lý lẫn backup. Kubernetes hỗ trợ nhiều phương thức lưu trữ khác nhau như:

Volume PluginInternal ProvisionerConfig Example
AWSElasticBlockStoreAWS EBS
AzureFileAzure File
AzureDiskAzure Disk
CephFS
CinderOpenStack Cinder
FC
FlexVolume
Flocker
GCEPersistentDiskGCE PD
GlusterfsGlusterfs
iSCSI
QuobyteQuobyte
NFSNFS
RBDCeph RBD
VsphereVolumevSphere
PortworxVolumePortworx Volume
ScaleIOScaleIO
StorageOSStorageOS
LocalLocal

Với điều kiện hiện thiết bị hiện có, mình chọn phương thức lưu trữ NFS, và tiến hành thiết lập Virtual NFS server trên Hyper-V server.

Mình cho tạo 1 Powershell script giúp tự động hóa việc cài đặt NFS server này trên Hyper-V server. Các bạn có thể download tại đây.

Windows client

Mình tạo 1 file $HOME\Documents\ssh-key.pub trong đó sẽ chứa public ssh key của Hyper-V server và các ssh của thiết bị muốn kết nối ssh đến NFS server.

ssh-rsa AAAAB3NzaC1yc2EAA.............. administrator@hyper-v
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ............. user@Windowns10
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ............. user2@Windowns11

Tiếp theo mở PowerShell với quyền Admin, di chuyển tới thư mục chưa Powershell scripts đã download.

.\hyperv-nfs.ps1 Get-Image
.\hyperv-nfs.ps1 Save-ISONFS1

Nếu muốn tạo thêm NFS server thì chỉ cần chạy thêm lệnh .\hyperv-nfs.ps1 Save-ISONFS2

Hyper-V server

Sau khi chạy thành công các lệnh trên thì upload file iso được tạo ra ở folder C:\Users\your-user\Documents\nfs1 vào thư mục C:\Users\Administrator\Documents\isos. Upload ssh-key.pubhyperv-nfs.ps1 vào thư mục Documents của server. Chúng ta dùng Windows Admin Center để upload file lên server. Tiếp tục mở PowerShell trên WAC, và chạy các lệnh

.\hyperv-nfs.ps1 Get-Image
.\hyperv-nfs.ps1 Deploy-HostsFile
.\hyperv-nfs.ps1 Deploy-ISONFS1

Để biết IP của NFS server thì vui lòng kiểm tra trong PowerShell script.

Vì NFS nằm trong lớp mạng của Kubernetes cluster nên bên ngoài không thể truy cập và quản lý đc. Đó là lý do mà chúng ta thêm các ssh key vào file ssh-key.pub ở bước đầu tiên.

Do mình đã thêm ssh key của laptop mình đang sử dụng vào trusted ssh key của NFS server nên bây giờ mình chỉ cần tạo 1 static mapping đên port 22 của NFS là có thể truy cập được.

Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/24" -ExternalPort 2222 -Protocol TCP -InternalIPAddress "10.10.0.101" -InternalPort 22 -NatName KubeNatNet

Chi tiết có thể xem video mà mình thực hiện. (Mình để nội dụng tiếng anh trong video vì hy vọng có thể hữu ích thêm cho người khác)