福州seo建站,天猫购买,旅游网站开发网站设计报告书,软件公司做网站一、StatefulSet由以下几个部分组成#xff1a;
用于定义网络标志#xff08;DNS domain#xff09;的Headless Service用于创建PersistentVolumes的volumeClaimTemplates定义具体应用的StatefulSet
二、StatefulSet 特点 StatefulSet 适用于有以下某个或多个需求的应用
用于定义网络标志DNS domain的Headless Service用于创建PersistentVolumes的volumeClaimTemplates定义具体应用的StatefulSet
二、StatefulSet 特点 StatefulSet 适用于有以下某个或多个需求的应用
稳定唯一的网络标志。稳定持久化存储。有序优雅地部署和 scale。有序优雅地删除和终止。有序自动的滚动升级。
三、什么是StorageClass StatefulSet是为了解决有状态服务的问题对应Deployments和 ReplicaSets是为无状态服务而设计其应用场景包括 稳定的持久化存储即Pod重新调度后还是能访问到相同的持久化数据基于PVC来实现 稳定的网络标志即Pod重新调度后其PodName和HostName不变基于Headless Service即没有Cluster IP的Service来实现 有序部署有序扩展即Pod是有顺序的在部署或者扩展的时候要依据定义的顺序依次依次进行即从0到N-1在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态基于init containers来实现 有序收缩有序删除即从N-1到0
StorageClass是一个存储类通过创建StorageClass可以动态生成一个存储卷供k8s用户使用。使用StorageClass可以根据PVC动态的创建PV减少管理员手工创建PV的工作。
四、StorageClass部署流程 要使用 StorageClass我们就得安装对应的自动配置程序比如我们这里存储后端使用的是 nfs那么我们就需要使用到一个 nfs-client 的自动配置程序我们也叫它 Provisioner这个程序使用我们已经配置好的 nfs 服务器来自动创建持久卷也就是自动帮我们创建 PV。
搭建StorageClassNFS,大致有以下几个步骤: 1.创建一个可用的NFS Serve 2.创建Service Account.这是用来管控NFS provisioner在k8s集群中运行的权限 3.创建StorageClass.负责建立PVC并调用NFS provisioner进行预定的工作,并让PV与PVC建立管理 4.创建NFS provisioner.有两个功能,一个是在NFS共享目录下创建挂载点(volume),另一个则是建了PV并将PV与NFS的挂载点建立关联
五、部署步骤 1部署NFS 在所有节点中执行
yum -y install nfs-utils rpcbind
systemctl enable rpcbind systemctl start nfs
systemctl enable nfs-server systemctl start rpcbind2)创建共享目录
# 创建共享目录
mkdir /home/data
# 设置环境变量
vi /etc/exports
# 添加以下内容
/home/data *(insecure,rw,sync,no_subtree_check,no_root_squash)
# 重启服务systemctl restart nfs3创建目录
添加nfs-subdir-external-provisioner仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
#查看nfs-subdir-external-provisioner所有版本
helm search repo nfs-subdir-external-provisioner --versions
#拉取文件
helm install my-nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.17
#如果下载有问题直接下载tgz包
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.17/nfs-subdir-external-provisioner-4.0.17.tgz
#编辑values配置文件
vi nfs-subdir-external-provisioner/values.yaml
修改如下参数replicaCount: 3 # 第1行副本个数根据自身需求设置建议3个
image: registry.cn-beijing.aliyuncs.com/xngczl/nfs-subdir-external-provisione
repository: # 第5行设置镜像仓库
tag: v4.0.0 # 第6行镜像版本
nfs:
server: 192.168.100.15 # 第11行nfs server端地址
path: /home/data # 第12行nfs目录
storageClass:
defaultClass: true # 第27行设置为默认存储类如果不设置使用存储类时需要指定
name: nfs-storage # 第31行设置存储类资源名称4创建namespace
kubectl create namespace nfs-storage5安装nfs-subdir-external-provisioner
[rootmaster1 ~]# helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner -n nfs-storage
NAME: nfs-subdir-external-provisioner
LAST DEPLOYED: Fri Dec 29 19:44:31 2023
NAMESPACE: nfs-storage
STATUS: deployed
REVISION: 1
TEST SUITE: None6查看pod状态
[rootmaster1 ~]# kubectl get pod -n nfs-storage
NAME READY STATUS RESTARTS AGE
nfs-subdir-external-provisioner-6b48cd99bc-hvgqx 1/1 Running 0 9s
nfs-subdir-external-provisioner-6b48cd99bc-k9ph5 1/1 Running 0 9s
nfs-subdir-external-provisioner-6b48cd99bc-kcrf4 1/1 Running 0 9s7测试
vim test-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: test-pvc
spec:storageClassName: nfs-storage # 指定存储类如果设置了默认可以去掉accessModes:- ReadWriteManyresources:requests:storage: 1Mi#创建pvc会自动相应的pv
kubectl apply -f test-pvc.yaml -n nfs-storage
#查看pvc和pv是否创建
[rootmaster1 ~]# kubectl get pvc,pv -n nfs-storage
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/test-pvc Bound pvc-98c9cdeb-6519-4c8e-a147-61472fb06959 1Mi RWX nfs-storage 96sNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-98c9cdeb-6519-4c8e-a147-61472fb06959 1Mi RWX Delete Bound nfs-storage/test-pvc nfs-storage 96s六、关于StorageClass回收策略对数据的影响 第一种
# 配置archiveOnDelete: false reclaimPolicy: Delete #默认没有配置,默认值为Delete
#结果
1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
3.删除PVC后,PV被删除且NFS Server对应数据被删除第二种
#配置archiveOnDelete: false reclaimPolicy: Retain
#结果
1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
3.删除PVC后,PV不会别删除,且状态由Bound变为Released,NFS Server对应数据被保留
4.重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中第三种
#配置archiveOnDelete: ture reclaimPolicy: Retain
#结果
1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
3.删除PVC后,PV不会别删除,且状态由Bound变为Released,NFS Server对应数据被保留
4.重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中 第四种
#配置archiveOnDelete: ture reclaimPolicy: Delete
#结果
1.pod删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
2.sc删除重建后数据依然存在,旧pod名称及数据依然保留给新pod使用
3.删除PVC后,PV不会别删除,且状态由Bound变为Released,NFS Server对应数据被保留
4.重建sc后,新建PVC会绑定新的pv,旧数据可以通过拷贝到新的PV中