Kubernetes - Tập
Trong Kubernetes, một ổ đĩa có thể được coi là một thư mục có thể truy cập vào các vùng chứa trong một nhóm. Chúng tôi có các loại tập khác nhau trong Kubernetes và loại xác định cách tạo và nội dung của tập.
Khái niệm về khối lượng đã xuất hiện với Docker, tuy nhiên vấn đề duy nhất là khối lượng bị giới hạn rất nhiều trong một nhóm cụ thể. Ngay sau khi vòng đời của một pod kết thúc, khối lượng cũng bị mất.
Mặt khác, các tập được tạo thông qua Kubernetes không bị giới hạn ở bất kỳ vùng chứa nào. Nó hỗ trợ bất kỳ hoặc tất cả các vùng chứa được triển khai bên trong nhóm Kubernetes. Một ưu điểm chính của tập Kubernetes là, nó hỗ trợ các loại lưu trữ khác nhau, trong đó nhóm có thể sử dụng nhiều trong số chúng cùng một lúc.
Các loại Khối lượng Kubernetes
Đây là danh sách một số tập Kubernetes phổ biến -
emptyDir- Đây là một loại ổ đĩa được tạo ra khi một Pod được gán cho một Node lần đầu tiên. Nó vẫn hoạt động miễn là Pod đang chạy trên nút đó. Ổ đĩa ban đầu trống và các vùng chứa trong nhóm có thể đọc và ghi các tệp trong ổ đĩa trống. Khi Pod bị xóa khỏi nút, dữ liệu trong vùng trống sẽ bị xóa.
hostPath - Loại ổ này gắn một tệp hoặc thư mục từ hệ thống tệp của nút máy chủ vào nhóm của bạn.
gcePersistentDisk- Loại ổ đĩa này gắn một Đĩa cố định của Google Compute Engine (GCE) vào Pod của bạn. Dữ liệu trong mộtgcePersistentDisk vẫn còn nguyên vẹn khi Pod bị loại bỏ khỏi nút.
awsElasticBlockStore- Loại ổ đĩa này gắn một Cửa hàng khối đàn hồi của Amazon Web Services (AWS) vào Pod của bạn. Giống nhưgcePersistentDisk, dữ liệu trong một awsElasticBlockStore vẫn còn nguyên vẹn khi Pod bị loại bỏ khỏi nút.
nfs - An nfsvolume cho phép một NFS (Hệ thống Tệp Mạng) hiện có được gắn vào nhóm của bạn. Dữ liệu trong mộtnfsvolume không bị xóa khi Pod bị xóa khỏi nút. Âm lượng chỉ được tháo lắp.
iscsi - An iscsi volume cho phép một volume iSCSI (SCSI qua IP) hiện có được gắn vào nhóm của bạn.
flocker- Đây là một trình quản lý khối lượng dữ liệu vùng chứa được phân cụm mã nguồn mở. Nó được sử dụng để quản lý khối lượng dữ liệu. Aflockerkhối lượng cho phép tập dữ liệu Flocker được gắn vào một nhóm. Nếu tập dữ liệu không tồn tại trong Flocker, thì trước tiên bạn cần tạo nó bằng cách sử dụng API Flocker.
glusterfs- Glusterfs là một hệ thống tập tin nối mạng mã nguồn mở. Ổ đĩa glusterfs cho phép gắn ổ đĩa glusterfs vào nhóm của bạn.
rbd- RBD là viết tắt của Rados Block Device. Anrbdkhối lượng cho phép một khối lượng Thiết bị khối Rados được gắn vào nhóm của bạn. Dữ liệu vẫn được bảo toàn sau khi Pod bị xóa khỏi nút.
cephfs - A cephfsvolume cho phép một volume CephFS hiện có được gắn vào nhóm của bạn. Dữ liệu vẫn còn nguyên vẹn sau khi Pod bị xóa khỏi nút.
gitRepo - A gitRepo volume gắn một thư mục trống và sao chép một git kho lưu trữ vào đó để nhóm của bạn sử dụng.
secret - A secret volume được sử dụng để chuyển thông tin nhạy cảm, chẳng hạn như mật khẩu, tới nhóm.
persistentVolumeClaim - A persistentVolumeClaimvolume được sử dụng để gắn một PersentlyVolume vào một nhóm. PersentlyVolumes là một cách để người dùng “yêu cầu” dung lượng lưu trữ lâu bền (chẳng hạn như GCE PersentlyDisk hoặc một ổ iSCSI) mà không cần biết chi tiết về môi trường đám mây cụ thể.
downwardAPI - A downwardAPIvolume được sử dụng để cung cấp dữ liệu API xuống cho các ứng dụng. Nó gắn một thư mục và ghi dữ liệu được yêu cầu vào các tệp văn bản thuần túy.
azureDiskVolume - An AzureDiskVolume được sử dụng để gắn một Đĩa dữ liệu Microsoft Azure vào một Pod.
Yêu cầu về số lượng liên tục và số lượng liên tục
Persistent Volume (PV)- Đó là phần lưu trữ mạng đã được cấp phép bởi quản trị viên. Đó là một tài nguyên trong cụm độc lập với bất kỳ nhóm riêng lẻ nào sử dụng PV.
Persistent Volume Claim (PVC)- Bộ lưu trữ mà Kubernetes yêu cầu cho vỏ của nó được gọi là PVC. Người dùng không cần biết việc cung cấp cơ bản. Các xác nhận quyền sở hữu phải được tạo trong cùng một không gian tên nơi nhóm được tạo.
Tạo khối lượng liên tục
kind: PersistentVolume ---------> 1
apiVersion: v1
metadata:
name: pv0001 ------------------> 2
labels:
type: local
spec:
capacity: -----------------------> 3
storage: 10Gi ----------------------> 4
accessModes:
- ReadWriteOnce -------------------> 5
hostPath:
path: "/tmp/data01" --------------------------> 6
Trong đoạn mã trên, chúng tôi đã xác định -
kind: PersistentVolume → Chúng tôi đã định nghĩa loại là PersentlyVolume cho kubernetes biết rằng tệp yaml đang được sử dụng để tạo Ổ cứng liên tục.
name: pv0001 → Tên của PersentlyVolume mà chúng ta đang tạo.
capacity: → Thông số này sẽ xác định công suất của PV mà chúng tôi đang cố gắng tạo ra.
storage: 10Gi → Điều này cho cơ sở hạ tầng bên dưới biết rằng chúng tôi đang cố gắng xác nhận không gian 10Gi trên đường dẫn đã xác định.
ReadWriteOnce → Điều này cho biết quyền truy cập của ổ đĩa mà chúng tôi đang tạo.
path: "/tmp/data01" → Định nghĩa này cho máy biết rằng chúng tôi đang cố gắng tạo khối lượng theo đường dẫn này trên cơ sở hạ tầng bên dưới.
Tạo PV
$ kubectl create –f local-01.yaml
persistentvolume "pv0001" created
Kiểm tra PV
$ kubectl get pv
NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
pv0001 10Gi RWO Available 14s
Mô tả PV
$ kubectl describe pv pv0001
Tạo xác nhận số lượng liên tục
kind: PersistentVolumeClaim --------------> 1
apiVersion: v1
metadata:
name: myclaim-1 --------------------> 2
spec:
accessModes:
- ReadWriteOnce ------------------------> 3
resources:
requests:
storage: 3Gi ---------------------> 4
Trong đoạn mã trên, chúng tôi đã xác định -
kind: PersistentVolumeClaim → Nó hướng dẫn cơ sở hạ tầng cơ bản mà chúng tôi đang cố gắng yêu cầu một lượng không gian cụ thể.
name: myclaim-1 → Tên của xác nhận quyền sở hữu mà chúng tôi đang cố gắng tạo.
ReadWriteOnce → Điều này chỉ định chế độ xác nhận quyền sở hữu mà chúng tôi đang cố gắng tạo.
storage: 3Gi → Điều này sẽ cho kubernetes biết về dung lượng mà chúng tôi đang cố gắng yêu cầu.
Tạo PVC
$ kubectl create –f myclaim-1
persistentvolumeclaim "myclaim-1" created
Nhận thông tin chi tiết về PVC
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
myclaim-1 Bound pv0001 10Gi RWO 7s
Mô tả PVC
$ kubectl describe pv pv0001
Sử dụng PV và PVC với POD
kind: Pod
apiVersion: v1
metadata:
name: mypod
labels:
name: frontendhttp
spec:
containers:
- name: myfrontend
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts: ----------------------------> 1
- mountPath: "/usr/share/tomcat/html"
name: mypd
volumes: -----------------------> 2
- name: mypd
persistentVolumeClaim: ------------------------->3
claimName: myclaim-1
Trong đoạn mã trên, chúng tôi đã xác định -
volumeMounts: → Đây là đường dẫn trong vùng chứa mà quá trình lắp sẽ diễn ra.
Volume: → Định nghĩa này xác định định nghĩa thể tích mà chúng ta sẽ xác nhận.
persistentVolumeClaim: → Dưới đây, chúng tôi xác định tên ổ đĩa mà chúng tôi sẽ sử dụng trong nhóm đã xác định.