Trong Kubernetes, một tập có thể được coi như 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 –
- voidDir – Đây là một loại ổ đĩa được tạo 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 voidDir 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.
- gcePersualityDisk – 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 gcePersistingDisk vẫn nguyên vẹn khi Pod bị xóa khỏi nút.
- awsElasticBlockStore – Loại ổ đĩa này gắn một Kho lưu trữ khối đàn hồi Amazon Web Services (AWS) vào Pod của bạn. Cũng giống như gcePersentlyDisk , dữ liệu trong awsElasticBlockStore vẫn nguyên vẹn khi Pod bị xóa khỏi nút.
- nfs – Ổ đĩa nfs 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 tập nfs không bị xóa khi Pod bị xóa khỏi nút. Âm lượng chỉ được tháo lắp.
- iscsi – Ổ đĩa iscsi cho phép ổ đĩa iSCSI (SCSI qua IP) hiện có được gắn vào nhóm của bạn.
- florit – Nó 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. Một khối lượng bộ sưu tập 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 nối mạng mã nguồn mở. Một volume glusterfs cho phép gắn volume glusterfs vào nhóm của bạn.
- rbd – RBD là viết tắt của Rados Block Device. Ổ đĩa rbd cho phép gắn ổ đĩa Thiết bị chặn Rados 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 cephfs cho phép ổ đĩa 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 gắn một thư mục trống và sao chép kho lưu trữ git vào đó để pod của bạn sử dụng.
- bí mật – Một ổ đĩa bí mật được sử dụng để chuyển thông tin nhạy cảm, chẳng hạn như mật khẩu, đến nhóm.
- Kiên trì _ _ 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 – Khối lượngAPI hướng xuống được sử dụng để cung cấp dữ liệu API hướng 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 – AzureDiskVolume được sử dụng để gắn Đĩ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
Ổ đĩa liên tục (PV) – Đó là một 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.
Khiếu nại về khối lượng liên tục (PVC) – Bộ lưu trữ mà Kubernetes yêu cầu cho các 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 –
- loại: PersentlyVolume → 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 PersualityVolume mà chúng ta đang tạo.
- công suất: → 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.
- lưu trữ: 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 –
- loại: PersentlyVolumeClaim → 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 ra.
- 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.
- dung lượng lưu trữ: 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 gắn sẽ diễn ra.
- Khối lượng: → Định nghĩa này xác định định nghĩa khối lượng mà chúng ta sẽ xác nhận.
- dai dẳngVolumeClaim: → 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.
Kubernetes – Bí mật
Bí mật có thể được định nghĩa là các đối tượng Kubernetes được sử dụng để lưu trữ dữ liệu nhạy cảm như tên người dùng và mật khẩu có mã hóa.
Có nhiều cách để tạo ra bí mật trong Kubernetes.
- Tạo từ tệp txt.
- Tạo từ tệp yaml.
Tạo từ tệp văn bản
Để tạo bí mật từ tệp văn bản như tên người dùng và mật khẩu, trước tiên chúng ta cần lưu trữ chúng trong tệp txt và sử dụng lệnh sau.
$ kubectl create secret generic tomcat-passwd –-from-file = ./username.txt –fromfile = ./.
password.txt
Tạo từ tệp Yaml
apiVersion: v1
kind: Secret
metadata:
name: tomcat-pass
type: Opaque
data:
password: <User Password>
username: <User Name>
Tạo bí mật
$ kubectl create –f Secret.yaml
secrets/tomcat-pass
Sử dụng bí mật
Khi chúng tôi đã tạo ra các bí mật, nó có thể được sử dụng trong một nhóm hoặc bộ điều khiển sao chép dưới dạng:
- Biến môi trường
- Âm lượng
Như môi trường biến
Để sử dụng bí mật làm biến môi trường, chúng ta sẽ sử dụng env trong phần spec của tệp pod yaml.
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: tomcat-pass
Như âm lượng
spec:
volumes:
- name: "secretstest"
secret:
secretName: tomcat-pass
containers:
- image: tomcat:7.0
name: awebserver
volumeMounts:
- mountPath: "/tmp/mysec"
name: "secretstest"
Cấu hình bí mật làm biến môi trường
apiVersion: v1
kind: ReplicationController
metadata:
name: appname
spec:
replicas: replica_count
template:
metadata:
name: appname
spec:
nodeSelector:
resource-group:
containers:
- name: appname
image:
imagePullPolicy: Always
ports:
- containerPort: 3000
env: -----------------------------> 1
- name: ENV
valueFrom:
configMapKeyRef:
name: appname
key: tomcat-secrets
Trong đoạn mã trên, theo định nghĩa env , chúng ta đang sử dụng các bí mật làm biến môi trường trong bộ điều khiển sao chép.
Secrets As Volume Mount
apiVersion: v1
kind: pod
metadata:
name: appname
spec:
metadata:
name: appname
spec:
volumes:
- name: "secretstest"
secret:
secretName: tomcat-pass
containers:
- image: tomcat: 8.0
name: awebserver
volumeMounts:
- mountPath: "/tmp/mysec"
name: "secretstest"