南山网站建设找哪家公司好,如何建立微信小程序卖自己的产品,博物馆展柜,做简单网站后端需要学什么静态pv和pvc 运维负责pv#xff1a;创建号持久化存储卷#xff0c;申明好读写和挂载类型#xff0c;以及可以提供的存储空间 Pvc开发做#xff0c;要和开发沟通好#xff0c;你期望的读写和挂载类型#xff0c;以及存储空间 当我发布vc之后可以生成pv#xff0c;还可以在… 静态pv和pvc 运维负责pv创建号持久化存储卷申明好读写和挂载类型以及可以提供的存储空间 Pvc开发做要和开发沟通好你期望的读写和挂载类型以及存储空间 当我发布vc之后可以生成pv还可以在共享服务器上直接生成挂载目录 Pvc直接绑定和使用pv
动态pv需要两个组件
1 卷插件k8s本身支持的动态pv创建不包括nfs需要声明和安装一个外部插件provisioner存储分配器可以动态创建pv然后根据pvc的请求自动绑定和使用 2 StorageClass来定义pv的属性存储类型大小回收策略 还是用nfs来实现动态pvnfs支持的格式nfs-client先把Provisioner来适配nfs-client
SesrviceAccount NFS PRovisioner是一个插件没有权限是无法在集群当中获取k8s的消息插件要有权限能够监听apiserver获取getlist获取集群的列表资源create delete RbacRole-based ACCESS CONTROL 定义角色在集群当中可以使用的权限 1.20之后有一个新的机制 SelfLinkAPI的资源对象之一表示资源对象在集群当中自身的一个链接self-link是一个唯一的表示符号可以用于表示k8s集群当中每个资源的对象 Selfink的值是一个URL指向该资源对象的k8s api的路径 更好的视线资源对象的查找和引用 Feature-gatesRemoveSelfLinkfalse Feature-gates在不破快现有规则以及功能基础上引入新功能或者修改先有功能的机制 禁用不影响之前的规则 部署nfs-provisioner的插件 Nfs的provisioner的客户端以podded方式运行在集群中今天k8s集群当中pv的请求动态的创建于NFS服务器相关的pv 容器里使用的配置在provisioner当中定义好环境变量床给容器storgeclass的名称nfs服务器的地址已经nfs的目录
创建 Service Account
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: nfs-Client-provisioner-role
rules:- apiGroups: []
#apiGroups定义了规则适用于哪个api的组这里使用了空字符,空字符表示直接使用API的核心组的资源resources: [persistentvolumes]verbs: [get,list,watch,create,delete]
#表示权限的动作- apiGroups: []resources: [persistentvolumeclaims]verbs: [watch,get,list,update]- apiGroups: [storage.k8s.io]resources: [storageclasses]verbs: [get,list,watch]- apiGroups: []resources: [events]verbs: [list,watch,create,update,patch]- apiGroups: []resources: [endpoints]verbs: [create,delete,get,list,watch,patch,update]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: nfs-client-provisioner-bind
subjects:
- kind: ServiceAccountname: nfs-client-provisionernamespace: default
roleRef:kind: ClusterRolename: nfs-client-provisioner-roleapiGroup: rbac.authorization.k8s.io使用 Deployment 来创建 NFS Provisioner
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-provisionerlabels:app: nfs1
spec:replicas: 1selector:matchLabels:app: nfs1template:metadata:labels:app: nfs1spec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs1image: quay.io/external_storage/nfs-client-provisioner:latestvolumeMounts:- name: nfsmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: nfs-storage
#配置provisioner的账户名称要和storageclass的资源名称一致- name: NFS_SERVER
#指定的是nfs共享服务器的地址value: 192.168.233.84- name: NFS_PATHvalue: /opt/k8svolumes:- name: nfsnfs:server: 192.168.233.84path: /opt/k8svim /etc/kubernetes/manifests/kube-apiserver.yaml
spec:containers:- command:- kube-apiserver- --feature-gatesRemoveSelfLinkfalse #添加这一行- --advertise-address192.168.233.91 NFS Provisioner
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-client-storageclass
#匹配provisioner
provisioner: nfs-storage
parameters:archiveOnDelete: false
#pvc被删除之后pv的状态定义的falsepvc如果被删除pv的状态将是released可以人工调整继续使用如果定义的是truepv的将是Achived表示pv不再可用
reclaimPolicy: Retain
#定义pv的回收策略retain另一个是delete不支持回收
allowVolumeExpansion: true
#pv的存储空间可以动态的扩缩容创建 StorageClass
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc
spec:accessModes:- ReadWriteManystorageClassName: nfs-client-storageclassresources:requests:storage: 2Gi
#创建一个pvc名称为nfs-pvc使用的pv属性是nfs-client-storageclass定义的属性创建的pv大小是2Gpv
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx1labels:app: nginx1
spec:replicas: 1selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- name: nginx1image: nginx:1.22volumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlpersistentVolumeClaim:claimName: nfs-pvc查看 NFS 服务器上是否生成对应的目录自动创建的 PV ${namespace}-${pvcName}-${pvName} 的目录格式放到 NFS 服务器上 ls /opt/k8s/