活动介绍
file-type

Kubernetes PV-PVC详解:数据卷持久化

TXT文件

下载需积分: 13 | 2KB | 更新于2024-09-08 | 101 浏览量 | 0 下载量 举报 收藏
download 立即下载
“kubenetes-pv-pvc” 在Kubernetes(K8s)中,持久化卷(Persistent Volumes, PV)和持久化卷声明(Persistent Volume Claims, PVC)是用于管理数据存储的关键组件。它们提供了一种抽象,允许应用在Pod中持久化数据,而无需直接关心底层存储系统的具体细节。下面我们将详细讨论这两个概念及其工作原理。 持久化卷(Persistent Volumes, PV) PV是集群中的一个资源对象,由管理员预配并定义,它代表了集群中的实际存储。PV包含如访问模式、存储容量和存储类型等配置信息。在给定的例子中,我们看到一个名为`local-test2`的PV,其存储容量为10Gi,并且只支持`ReadWriteOnce`的访问模式,这意味着该卷只能被单个节点挂载读写。 PV的定义中包含了各种不同类型的存储后端,例如`hostPath`、`awsElasticBlockStore`、`gcePersistentDisk`等。在例子中,`hostPath`被使用,表示这个PV是在宿主机的一个路径上,具体为`/acloud/docker/volumes/local-test2`。这通常是测试或开发环境中的简单解决方案,但在生产环境中可能不推荐,因为如果节点故障,数据可能无法恢复。 持久化卷声明(Persistent Volume Claims, PVC) PVC是用户或应用请求存储的方式,它定义了所需的存储资源规格,如大小和访问模式。应用通过创建PVC来请求PV,而无需知道PV的具体实现。当PVC的规格与现有的PV匹配时,Kubernetes会自动将两者绑定。在这个过程中,PVC充当了动态预配的消费者角色。 在例子中,虽然没有提供PVC的详细信息,但我们可以假设存在一个PVC,其请求的存储大小和访问模式与`local-test2` PV相匹配。一旦PVC被创建并且未被其他PVC占用,Kubernetes就会自动将它们绑定在一起,允许应用使用该存储。 PV和PVC的工作流程 1. 创建PVC:应用创建一个PVC,声明所需存储的大小和访问模式。 2. 动态预配:如果集群支持动态预配,Kubernetes会根据PVC的规格自动创建一个匹配的PV(如果没有可用的匹配PV)。 3. PV绑定:如果已有匹配的PV,Kubernetes会将PVC与PV进行绑定。否则,PVC将处于等待状态,直到有合适的PV可用。 4. 挂载使用:应用的Pod可以挂载已绑定的PV,开始读写数据。 5. 释放和回收:当不再需要PVC时,可以将其删除。根据PV的`persistentVolumeReclaimPolicy`(在示例中未指定),Kubernetes会决定是保留、回收还是删除存储资源。 理解PV和PVC的概念对于Kubernetes中的数据管理至关重要,因为它们确保了应用数据在Pod生命周期之外的持久性。这对于需要在Pod重启、扩展或迁移时保持数据不变的应用尤其重要。在实际部署中,还需要考虑存储类(StorageClass),它定义了动态预配的默认设置,如存储类型和策略,允许更灵活的存储管理。

相关推荐

filetype

kubernetes GitLab + Ingressroot@k8s-m001:~/devops/test-devops/gitlab# ll total 44 drwxr-xr-x 3 root root 4096 Jun 15 18:25 ./ drwxr-xr-x 7 root root 4096 Jun 15 18:21 ../ -rw-r--r-- 1 root root 1337 Jun 15 18:21 gitlab-deployment.yaml -rw-r--r-- 1 root root 520 Jun 15 18:22 gitlab-ingress.yaml -rw-r--r-- 1 root root 723 Jun 15 17:51 gitlab-nfs-pvc-pro.yaml -rw-r--r-- 1 root root 58 Jun 14 21:55 gitlab-ns.yaml -rw-r--r-- 1 root root 293 Jun 15 18:25 gitlab-services.yaml drwxrwxrwx 2 root root 4096 Jun 15 16:31 gitlab.wh02.com_nginx/ -rw-r--r-- 1 root root 9078 Jun 15 16:28 gitlab.wh02.com_nginx.zip root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: gitlab namespace: gitlab spec: selector: matchLabels: app: gitlab replicas: 1 template: metadata: labels: app: gitlab spec: securityContext: fsGroup: 1000 containers: - name: gitlab image: harbor.wh02.com/cicd/gitlab/gitlab-ce:17.11.0-ce.0 imagePullPolicy: Always ports: - containerPort: 80 - containerPort: 22 env: - name: GITLAB_OMNIBUS_CONFIG value: | external_url 'https://gitlab.wh02.com' gitlab_rails['initial_root_password'] = "Aa123123" gitlab_rails['gitlab_default_locale'] = 'zh_CN' gitlab_rails['gitlab_default_locale_in_system'] = true volumeMounts: - name: gitlab-storage mountPath: /var/opt/gitlab subPath: data - name: gitlab-storage mountPath: /var/log/gitlab subPath: logs - name: gitlab-storage mountPath: /etc/gitlab subPath: config resources: requests: cpu: "2" memory: "5Gi" limits: cpu: "2" memory: "6Gi" volumes: - name: gitlab-storage persistentVolumeClaim: claimName: gitlab-pvc root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: gitlab-ingress namespace: gitlab annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" spec: ingressClassName: nginx tls: - hosts: - gitlab.wh02.com secretName: gitlab-tls rules: - host: gitlab.wh02.com http: paths: - path: / pathType: Prefix backend: service: name: gitlab-service port: number: 80 root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-nfs-pvc-pro.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-gitlab-static provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain --- apiVersion: v1 kind: PersistentVolume metadata: name: gitlab-pv spec: capacity: storage: 50Gi accessModes: - ReadWriteMany nfs: server: 192.168.3.101 path: /data/k8sdata/gitlab_data storageClassName: nfs-gitlab-static persistentVolumeReclaimPolicy: Retain --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gitlab-pvc namespace: gitlab spec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi storageClassName: nfs-gitlab-static volumeName: gitlab-pv root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-ns.yaml apiVersion: v1 kind: Namespace metadata: name: gitlab root@k8s-m001:~/devops/test-devops/gitlab# cat gitlab-services.yaml apiVersion: v1 kind: Service metadata: name: gitlab-service namespace: gitlab spec: selector: app: gitlab type: NodePort ports: - name: http port: 80 targetPort: 80 # nodePort: 30030 - name: ssh port: 22 targetPort: 22 # nodePort: 30022 root@k8s-m001:~/devops/test-devops/gitlab# kubectl get secrets -n gitlab No resources found in gitlab namespace. root@k8s-m001:~/devops/test-devops/gitlab# kubectl get secrets -A NAMESPACE NAME TYPE DATA AGE ingress-nginx ingress-nginx-admission Opaque 3 97m jenkins harbor-pull-secret kubernetes.io/dockerconfigjson 1 7h41m kube-system calico-etcd-secrets Opaque 3 40h kubernetes-dashboard dashboard-admin-user kubernetes.io/service-account-token 3 65d kubernetes-dashboard kubernetes-dashboard-certs Opaque 0 65d kubernetes-dashboard kubernetes-dashboard-csrf Opaque 1 65d kubernetes-dashboard kubernetes-dashboard-key-holder Opaque 2 65d kuboard kuboard-admin-token kubernetes.io/service-account-token 3 40h kuboard kuboard-viewer-token kubernetes.io/service-account-token 3 40h root@k8s-m001:~/devops/test-devops/gitlab# kubectl get pv,pvc -n gitlab NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE persistentvolume/gitlab-pv 50Gi RWX Retain Bound gitlab/gitlab-pvc nfs-gitlab-static <unset> 44m persistentvolume/jenkins-pv 10Gi RWX Retain Released jenkins/jenkins-pvc <unset> 26h persistentvolume/pvc-1464be8d-5bc8-4ba1-8d91-c282167ea4cf 50Gi RWX Delete Bound jenkins/jenkins-pvc nfs-dynamic <unset> 7h41m persistentvolume/pvc-49a9790f-7ebf-43a6-8454-b90cf50d2f3d 50Gi RWX Retain Released jenkins/jenkins-pvc nfs-dynamic <unset> 7h54m persistentvolume/pvc-4ddd9d5b-a734-4889-af64-0c96f340ce11 50Gi RWX Retain Released jenkins/jenkins-pvc nfs-dynamic <unset> 8h NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE persistentvolumeclaim/gitlab-pvc Bound gitlab-pv 50Gi RWX nfs-gitlab-static <unset> 44m

思念灬终结
  • 粉丝: 0
上传资源 快速赚钱