浅析kubernetes创建Pv、Pvc、Deployment

  1. 基本环境

    #系统环境
    cat /etc/redhat-release
    CentOS Linux release 7.4.1708 (Core)
    #k8s client 和 server 的版本信息
    kubectl version
    Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:55:54Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.1", GitCommit:"d4ab47518836c750f9949b9e0d387f20fb92260b", GitTreeState:"clean", BuildDate:"2018-04-12T14:14:26Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
  2. 创建有状态服务的操作顺序
    #值得注意的是创建顺序非常关键
    (1)Volume
    (2)Persistent Volume
    (3)Persistent Volume Claim
    (4)Service
    (5)StatefulSet
  3. 创建PV
    我这里使用的是NFS服务,点击NFS部署及优化,搭建自己的NFS服务。
    #注意两点:
    (1)请先部署好自己的NFS服务;
    (2)在使用共享之前,必须运行自己的NFS服务器并运行共享。
    ##持久性存储卷
    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: data-nfs      ##名字任意取
    labels:
      type: nfs
    spec:
    capacity:
      storage: 8Gi
    volumeMode: Filesystem
    accessModes:
      - ReadWriteOnce
    persistentVolumeReclaimPolicy: Recycle
    mountOptions:
      - hard
      - nfsvers=4.1
    nfs:
      path: /data  ##NFS服务器上的共享目录
      server: 192.168.246.168   ##NFS服务器的ip地址
  4. 创建PVC
    ##pvc的yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: datadir-nginx-0
    spec:
    accessModes:
      - ReadWriteOnce
    resources:
      requests:
        storage: 1Gi
    selector:
      matchLabels:
        type: nfs 
    #说明:
    创建PVC的名称和Deployment中的名称要对应上,要不然Deployment中的Pod就肯定
    创建不成功!简单说一下PVC和Deployment中的命名的规律:
    如上面创建PVC的yaml文件,我们在这里创建了一个叫做datadir-nginx-0的PVC,
    粗略一看这个名字有点奇怪,因为这个yaml文件中并没有提到PV的名字,所以PV和PVC
    是怎么bound起来的呢?是通过labels标签下的type: nfs键值对来进行匹配的,我们
    在创建PV时指定了label的键值对,在PVC里通过selector可以指定label。
    关于这个PVC的名称定义:datadir-nginx-0,我们需要看一下下面
    创建Deployment中的yaml:
  5. 创建Deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx-deployment
    labels:
      app: nginx
    spec:
    replicas: 1
    selector:
      matchLabels:
        app: nginx
    template:
      metadata:
        labels:
          app: nginx
      spec:
        containers:
        - name: nginx
          image: nginx:1.7.9
          volumeMounts:
            - mountPath: "/wtf"
              name: datadir
        volumes:
        - name: datadir
          persistentVolumeClaim:
            claimName: datadir-nginx-0
      volumeClaimTemplates:
      - metadata:
        name: datadir
        labels:
          type: nfs
        annotations:
          volume.alpha.kubernetes.io/storage-class: anything
        spec:
          accessModes: [ "ReadWriteOnce" ]
          resources:
            requests:
              storage: 1Gi
    #说明:
    接着说PVC的名称定义,首先我们看到Deployment的name叫nginx-deployment,设置
    的replicas为1个,volumeMounts和volumeClaimTemplates的name必须相同,为datadir,
    所以Deployment创建的第一个Pod的name应该为nginx-0,第二个为nginx-1,依此类推,
    这里只定义了一个replicas,所以pod的名字是nginx-0。
    这里Deployment中的Pod与PVC之间的绑定关系是通过名称来匹配的,即:
    PVC_name === volumeClaimTemplates_name + "-" + pod_name

原文地址:http://blog.51cto.com/wutengfei/2149308

时间: 2024-08-02 10:11:14

浅析kubernetes创建Pv、Pvc、Deployment的相关文章

kubernetes 的pv/pvc存储

kubernetes 的pv/pvc存储 标签(空格分隔): kubernetes系列 一: kubernetes的PV/PVC存储 一: kubernetes的PV/PVC存储 1.1 pv PersistentVolume (PV) 是由管理员设置的存储,它是群集的一部分.就像节点是集群中的资源一样,PV 也是集群中的资源. PV 是 Volume 之类的卷插件,但具有独立于使用 PV 的 Pod 的生命周期.此 API 对象包含存储实现的细节,即 NFS. iSCSI 或特定于云供应商的存

Kubernetes Pv & Pvc

Kubernetes PV & pvc 介绍 PersistentVolume(pv)和PersistentVolumeClaim(pvc)是k8s提供的两种API资源,用于抽象存储细节.管理员关注于如何通过pv提供存储功能而无需 关注用户如何使用,同样的用户只需要挂载pvc到容器中而不需要关注存储卷采用何种技术实现. pvc和pv的关系与pod和node关系类似,前者消耗后者的资源.pvc可以向pv申请指定大小的存储资源并设置访问模式,这就可以通过Provision -> Claim 的方

Kubernetes数据持久化之Storage Class(存储类)及自动创建PV

通过博文Kubernetes的存储之Volume可以了解到Kubernets实现数据持久化的流程为:搭建NFS底层存储-->创建PV-->创建PVC-->创建pod最终将pod中的container实现数据的持久化! 从上述流程中,看似没有什么问题,但是仔细研究就会发现:PVC在向PV申请存储空间时,是根据指定PV的名称.访问模式.容量大小来决定具体向哪个PV申请空间的. 打比方说:如果PV的容量是20G,定义的访问模式是WRO(只允许以读写的方式挂载到单个节点),而PVC申请的存储空间

k8s数据持久化之statefulset的数据持久化,并自动创建PV与PVC

一:Statefulset StatefulSet是为了解决有状态服务的问题,对应的Deployment和ReplicaSet是为了无状态服务而设计,其应用场景包括:1.稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现2.稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现3.有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依

Kubernetes 存储卷管理 PV&PVC(十)

为了持久化保存容器的数据,可以使用 Kubernetes Volume. Volume 的生命周期独立于容器,Pod 中的容器可能被销毁和重建,但 Volume 会被保留. 本质上,Kubernetes Volume 是一个目录,这一点与 Docker Volume 类似.当 Volume 被 mount 到 Pod,Pod 中的所有容器都可以访问这个 Volume.Kubernetes Volume 也支持多种 backend 类型,包括 emptyDir.hostPath.GCE Persi

kubernetes pv pvc configmap secret 使用

pv pvc使用 1.概述,我们可以这样来组织我们的存储,在pod中我们只需要定义一个存储卷并且定义的时候我只需要说明我需要多大的存储卷就行了,这个存储卷叫pvc类型的存储卷,而pvc类型的存储卷必须与当前名称空间中的pvc建立直接绑定关系,而pvc必须与pv建立绑定关系,而pv应该是真正某个存储设备上的存储空间,所以pv和pvc是k8s系统之上的抽象的但也算是标准的资源,pvc是一种资源,pv也是一种资源,他的创建方式和我们此前创建其它资源方式是一样的,但是用户需要怎么做呢?存储工程师把每个存

Serverless Kubernetes全面升级2.0架构:支持多命名空间、RBAC、CRD、PV/PVC等功能

Serverless Kubernetes概述: 阿里云Serverless Kubernetes容器服务最新开放香港.新加坡.悉尼区域,同时全面开放2.0架构,帮助用户更加便捷.轻松地步入“以应用为中心”的全新架构.通过Serverless Kubernetes,用户50秒内可从零启动500应用容器,而无需关心底层服务器资源. Serverless Kubernetes 2.0新架构 Serverless Kubernetes 2.0对后台架构进行了彻底升级,从之前的基于Namespace的多

快速批量创建k8s pv&pvc

快速批量创建nfs pv for i in {3..6}; do cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: pv00${i} spec: capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Recycle nfs: path: /volume1/har

K8s数据持久化之自动创建PV

在前两篇实现k8s的数据持久化的流程为:搭建nfs底层存储===>创建PV====>创建PVC===>创建pod.最终pod中的container实现数据的持久化. 上述流程中,看似没什么问题,但细想一下,PVC在向PV申请存储空间的时候,是根据指定的pv名称.访问模式.容量大小来决定具体向哪个PV来申请空间的,如果PV的容量为20G,定义的访问模式是WRO(只允许以读写的方式挂载到单个节点),而PVC申请的存储空间为10G,那么一旦这个PVC是向上面的PV申请的空间,也就是说,那个PV