K8S动态PV实战之nginx部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8S动态PV实战之nginx部署相关的知识,希望对你有一定的参考价值。

参考技术A

这里我们介绍动态PV第一个案例,部署3个副本的nginx服务。主要学习 volumeClaimTemplate 属性。

statefulSet的三个组成部分:
1)Headless Service :名为nginx,用来定义Pod网络标识( DNS domain)。
2)StatefulSet :定义具体应用,名为Nginx,有三个Pod副本,并为每个Pod定义了一个域名。
3)volumeClaimTemplates : 存储卷申请模板,创建PVC,指定pvc名称大小,将自动创建pvc,且pvc必须由存储类供应。
为什么需要 headless service 无头服务?
在用Deployment时,每一个Pod名称是没有顺序的,是随机字符串,因此是Pod名称是无序的,但是在statefulset中要求必须是有序 ,每一个pod不能被随意取代,pod重建后pod名称还是一样的。而pod IP是变化的,所以是以Pod名称来识别。pod名称是pod唯一性的标识符,必须持久稳定有效。这时候要用到无头服务,它可以给每个Pod一个唯一的名称 。
为什么需要volumeClaimTemplate?
对于有状态的副本集都会用到持久存储,对于分布式系统来讲,它的最大特点是数据是不一样的,所以各个节点不能使用同一存储卷,每个节点有自已的专用存储,但是如果在Deployment中的Pod template里定义的存储卷,是所有副本集共用一个存储卷,数据是相同的,因为是基于模板来的 ,而statefulset中每个Pod都要自已的专有存储卷,所以statefulset的存储卷就不能再用Pod模板来创建了,于是statefulSet使用volumeClaimTemplate,称为卷申请模板,它会为每个Pod生成不同的pvc,并绑定pv, 从而实现各pod有专用存储。这就是为什么要用volumeClaimTemplate的原因。

rbac
nfsnginx/nfsrbac.yml。与前文保持一致。

nfsnginx/nfsnginxstorage.yml。与前文介绍类似,注意修改storageClass的名称

如果定义多个副本。必须使用volumeClaimTemplate属性。如果定义1个副本。可以使用pod+pvc方式。
nfsnginx/nginxstatefulset.yml

以上是关于K8S动态PV实战之nginx部署的主要内容,如果未能解决你的问题,请参考以下文章

云原生之kubernetes实战在k8s集群下部署ingress对外访问服务

Kubernetes(k8s)实战部署nginx服务

企业运维实战-k8s学习笔记17.k8s集群+Prometheus监控部署基于prometheus实现k8s集群的hpa动态伸缩虚拟机部署prometheus监控

k8s部署ingress及httphttps-实战篇

K8S之动态PV原理

云原生之Docker实战使用docker部署nginx服务