Dữ liệu không thể được lưu trữ trong pod, khi pod bị xóa hoặc bị chấm dứt, dữ liệu bên trong nó không còn trên hệ thống. Để cung cấp lưu trữ tạm thời và dài hạn cho các Pod trong cụm, Kubernetes cung cấp các loại cơ chế lưu trữ khác nhau.
Trong bài viết này, chúng ta sẽ xem các ví dụ về chỉ 2 loại cơ chế lưu trữ.
Lấy danh sách các pod và tạo một pod sẽ mount "/opt/mounted-here" trong pod trên "/dir" từ máy chủ.
Bây giờ nếu bạn mô tả thepod, bạn sẽ thấy rằng việc tạo thepod đã thất bại. Mount không thành công vì thư mục "/dir" không tồn tại trên máy chủ. Để gắn một ổ đĩa vào pod với "type: Directory", thư mục máy chủ phải tồn tại.
Bây giờ chúng ta hãy tạo một thư mục "/dir" trên máy chủ tức là trên nút worker.
Sau khi đã tạo một thư mục trên các nút worker, chúng ta có thể xóa pod đã tạo trước đó và thử tạo lại một pod mới.
Lần này bạn có thể thấy pod đã được tạo thành công và bên dưới các ổ đĩa, đường dẫn đã gắn kết "/dir" có thể được nhìn thấy.
Bây giờ chúng ta hãy đăng nhập vào pod và tạo một file
Bây giờ, bạn có thể xem tệp chúng ta đã tạo trong pod từ nút worker trong thư mục mounted "/dir"
Lần này, hãy xóa pod chúng ta đã tạo và xem tệp đó có còn tồn tại trên thư mục host "/dir" hay không.
Liệt kê các tệp trong "/dir" trên nút worker.
Chúng ta có thể thấy rằng ngay cả sau khi xóa pod, tệp vẫn tồn tại trong "/dir" trên nút worker. Điều này có nghĩa là dữ liệu vẫn tồn tại ngay cả sau khi pod bị xóa hoặc chấm dứt.
Trong ví dụ này, chúng ta quan sát thấy rằng thư mục máy chủ cần được gắn kết trong cổng phải tồn tại.
Tạo một tệp mới với loại "type: DirectoryOrCreate".
Lấy danh sách các pod hiện có và tạo một pod mới với tệp được tạo ở trạng thái trên.
Khi chúng ta mô tả pod, có thể thấy rằng pod đã được tạo thành công. Và thư mục "/mount-this" không tồn tại trên nút host/worker đã được tạo trên máy chủ trong khi gắn kết nó vào ổ đĩa.
Đi đến các nút worker và kiểm tra xem thư mục đã được tạo hay chưa
Bây giờ hãy tạo một tệp mới trên các nút worker trong thư mục "/mount-this" được gắn kết trong pod.
Hãy đăng nhập vào pod và kiểm tra thư mục "/opt/mounted-here/" để xem tệp "/mount-this/created-on-host" mà chúng ta đã tạo trên nút work có tồn tại trong pod không.
Bây giờ hãy xóa pod và xem tệp có còn tồn tại trên nút worker tại "/mount-this/" không
Thực hiện lệnh sau để liệt kê tệp trên nút worker tại "/mount-this/"
Trong ví dụ này, chúng ta thấy rằng ngay cả khi thư mục host không tồn tại, nó vẫn được tạo trên máy host trước khi được mount vào pod.
Lấy danh sách các pod và tạo một pod mới để gắn một volume có kiểu "emptyDir"
Trong ảnh chụp màn hình ở trên, có thể thấy pod đã được tạo và volume đã khả dụng.
Bây giờ hãy đăng nhập vào pod và tạo một thư mục theo đường dẫn gắn kết "/opt/this". Lần này, chúng ta không có bất kỳ volume nào từ máy chủ.
Bây giờ chúng ta có thể xóa pod nếu không còn cần thiết nữa.
irectoryOrCreate" trong loại ổ đĩa hostPath có thể giúp chúng ta gắn kết một thư mục không tồn tại trên nút/máy chủ của worker.
Trong bài viết này, chúng ta sẽ xem các ví dụ về chỉ 2 loại cơ chế lưu trữ.
- hostPath:
AhostPathvolume gắn một tệp hoặc thư mục từ hệ thống tệp của nút lưu trữ vào Pod của bạn. Loại ổ đĩa này có thể được sử dụng để cho phép Pod chỉ định liệu một hostPath nhất định có nên tồn tại trước khi Pod chạy hay liệu nó có nên được tạo hay không. Kiểu volume này không phải là thứ mà hầu hết các Pod cần. Kiểu DirectoryOrCreate sẽ tạo một thư mục rỗng nếu nó không tồn tại với quyền được đặt thành 0755 và kiểu Directory giúp đảm bảo rằng một thư mục tồn tại ở đường dẫn đã cho trước khi pod đó được tạo. - emptyDir:
Một emptyDirvolume được tạo lần đầu tiên khi một Pod được gán cho một Node và tồn tại miễn là Pod đó đang chạy trên node đó. Theo mặc định, emptyDirvolume được lưu trữ trên loại lưu trữ mà môi trường của chúng ta có. Chúng ta cũng có thể đặt trường emptyDir.medium thành Memory để yêu cầu Kubernetes gắn hệ thống tệp được RAM hỗ trợ
Điều kiện tiên quyết
- Cụm Kubernetes có ít nhất 1 nút worker.
Nếu bạn muốn tìm hiểu cách tạo Cụm Kubernetes, hãy nhấp vào đây. Hướng dẫn này sẽ giúp bạn tạo cụm Kubernetes với 1 Master và 2 Node trên AWS Ubuntu 18.04 EC2 Instances.
Chúng ta sẽ làm gì?
- Tạo một pod với một volume có nhiều loại khác nhau được gắn kết trong đó
Tạo apod với một volume có nhiều loại khác nhau được gắn kết trong đó
Host path volume withtype: Directory
Tạo tệp định nghĩa đối tượng để gắn kết thư mục hiện có trong pod.
Mã:
vim volume-hostpath-1.yml
Mã:
apiVersion: v1kind: Podmetadata: name: volume-hostpath-example-1spec: containers: - image: nginx name: my-container volumeMounts: - mountPath: /opt/mounted-here name: my-volume-1 volumes: - name: my-volume-1 hostPath: path: /dir type: Directory
Lấy danh sách các pod và tạo một pod sẽ mount "/opt/mounted-here" trong pod trên "/dir" từ máy chủ.
Mã:
kubectl get pods
Mã:
kubectl create -f volume-hostpath-1.yml
Mã:
kubectl get pods
Mã:
kubectl describe pod volume-hostpath-example-1
Bây giờ nếu bạn mô tả thepod, bạn sẽ thấy rằng việc tạo thepod đã thất bại. Mount không thành công vì thư mục "/dir" không tồn tại trên máy chủ. Để gắn một ổ đĩa vào pod với "type: Directory", thư mục máy chủ phải tồn tại.
Bây giờ chúng ta hãy tạo một thư mục "/dir" trên máy chủ tức là trên nút worker.
Mã:
sudo mkdir /dir
Mã:
kubectl delete -f volume-hostpath-1.yml
Mã:
kubectl create -f volume-hostpath-1.yml
Mã:
kubectl get pods
Mã:
kubectl describe pod volume-hostpath-example-1
Lần này bạn có thể thấy pod đã được tạo thành công và bên dưới các ổ đĩa, đường dẫn đã gắn kết "/dir" có thể được nhìn thấy.
Bây giờ chúng ta hãy đăng nhập vào pod và tạo một file
Mã:
kubectl get pods
Mã:
kubectl exec -it volume-hostpath-example-1 /bin/bash
Mã:
touch /opt/mounted-here/new-file
Mã:
ll /dir/ #Thực thi lệnh này trên nút worker
Lần này, hãy xóa pod chúng ta đã tạo và xem tệp đó có còn tồn tại trên thư mục host "/dir" hay không.
Mã:
exit
Mã:
kubectl get pods
Mã:
kubectl delete pod volume-hostpath-example-1
Mã:
ll /dir/#Thực hiện lệnh này trên nút worker
Chúng ta có thể thấy rằng ngay cả sau khi xóa pod, tệp vẫn tồn tại trong "/dir" trên nút worker. Điều này có nghĩa là dữ liệu vẫn tồn tại ngay cả sau khi pod bị xóa hoặc chấm dứt.
Trong ví dụ này, chúng ta quan sát thấy rằng thư mục máy chủ cần được gắn kết trong cổng phải tồn tại.
Host path volume withtype: DirectoryOrCreate
Để đảm bảo rằng thư mục máy chủ khả dụng trước khi gắn kết, chúng ta có thể sử dụng "type: DirectoryOrCreate" thay vì "type: Directory" trong ổ đĩa hostpath.Tạo một tệp mới với loại "type: DirectoryOrCreate".
Mã:
vim volume-hostpath-2.yml
Mã:
apiVersion: v1kind: Podmetadata: name: volume-hostpath-example-2spec: containers: - image: nginx name: my-container volumeMounts: - mountPath: /opt/mounted-here name: my-volume-2 volumes: - name: my-volume-2 hostPath: # vị trí thư mục trên đường dẫn máy chủ: /mount-this type: DirectoryOrCreate
Lấy danh sách các pod hiện có và tạo một pod mới với tệp được tạo ở trạng thái trên.
Mã:
kubectl get pods
Mã:
kubectl create -f volume-hostpath-2.yml
Mã:
kubectl get pods
Mã:
kubectl describe pod volume-hostpath-example-2
Khi chúng ta mô tả pod, có thể thấy rằng pod đã được tạo thành công. Và thư mục "/mount-this" không tồn tại trên nút host/worker đã được tạo trên máy chủ trong khi gắn kết nó vào ổ đĩa.
Đi đến các nút worker và kiểm tra xem thư mục đã được tạo hay chưa
Mã:
ll /mount-this/#Thực hiện lệnh này trên nút worker
Mã:
sudo touch /mount-this/created-on-host#Thực hiện lệnh này trên nút worker
Mã:
kubectl get pods
Mã:
kubectl exec -it volume-hostpath-example-2 /bin/bash
Mã:
ls -l /opt/mounted-here/
Bây giờ hãy xóa pod và xem tệp có còn tồn tại trên nút worker tại "/mount-this/" không
Mã:
exit
Mã:
kubectl get pods
Mã:
kubectl delete pod volume-hostpath-example-2
Mã:
sudo ls -lt /mount-this/#Thực hiện lệnh này trên nút worker
Mã:
emptyDir volume
Tạo một tệp định nghĩa đối tượng bằng cách sử dụng lệnh sau.
Mã:
vim volume-emptydir.yml
Mã:
apiVersion: v1kind: Podmetadata: name: volume-emptydir-examplespec: containers: - image: nginx name: my-container volumeMounts: - mountPath: /opt/this name: my-volume-3 volumes: - name: my-volume-3 emptyDir: {}
Lấy danh sách các pod và tạo một pod mới để gắn một volume có kiểu "emptyDir"
Mã:
kubectl get pods
Mã:
kubectl create -f volume-emptydir.yml #Tạo một đối tượng bằng cách sử dụng tệp
Mã:
kubectl get pods
Mã:
kubectl describe pod volume-emptydir-example #Lấy thông tin chi tiết về pod đã chỉ định
Trong ảnh chụp màn hình ở trên, có thể thấy pod đã được tạo và volume đã khả dụng.
Bây giờ hãy đăng nhập vào pod và tạo một thư mục theo đường dẫn gắn kết "/opt/this". Lần này, chúng ta không có bất kỳ volume nào từ máy chủ.
Mã:
kubectl exec -it volume-emptydir-example /bin/bash #Đăng nhập vào Pod
Bây giờ chúng ta có thể xóa pod nếu không còn cần thiết nữa.
Mã:
kubectl get pods #Lấy danh sách các Pod
Mã:
kubectl delete pod volume-emptydir-example #Xóa pod đã chỉ định