目的

在K8s中无状态的部署挂载方式选择hostpath方式,当容器重启后,pod漂移到其它节点,数据将丢失。所以选择local provisioner 方式,目的是pod重启后,能走自动寻找到之前部署的host,并将host上文件加载到pod中

1.准备工作

1.1下载部署包

包中含有local provisioner helm chart 

wget https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/archive/refs/tags/v2.4.0.tar.gz 

1.2安装helm 

curl -OL https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz
tar -xf helm-v3.6.3-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
# 因为已下载了 v2.4.0.tar.gz ,所以helm不用加上helm源
tar -xf v2.4.0.tar.gz

 2.开始部署

2.1 创建storageclass 

storageclass命名fast-disks

kubectl apply -f deployment/kubernetes/example/default_example_storageclass.yaml

2.2  创建namespace 

kubectl create ns fast-disks

2.3 修改 provisioner  charts values.yaml

注意:修改3处  

classes:
– name: fast-disks # Defines name of storage classe. 这是storage class的名字,接下来创建storage class是必须与这里的名字一致,默认都是fast-disks
hostDir: /mnt/fast-disks    # 加载的目录,这个目录需要提前在每个worker上建好

image: googleimages/local-volume-provisioner:v2.4.0  #镜像需要用这个,原文中镜像是无法下载的

vim helm/provisioner/values.yaml

 2.4  使用helm 创建 部署的yaml文件

helm template -f helm/provisioner/values.yaml lvm-storage --namespace fast-disks ./helm/provisioner > local-volume-provisioner.generated.yaml

helm template -f <path-to-your-values-file> <release-name> –namespace <namespace> ./helm/provisioner > local-volume-provisioner.generated.yaml
edit local-volume-provisioner.generated.yaml

注意:创建yaml成功后,需要修改ClusterRole权限,不然部署后pod启动会报没有足够的权限获取node的信息

 2.5  执行部署

kubectl create -f local-volume-provisioner.generated.yaml

2.6 挂载目录

在每个worker节点上创建目录 /mnt/fast-disks,并执行如下脚本

因上面配置的挂载目录为/mnt/fast-disks,因此需要在/mnt/fast-disks创建一个目录,比如pv1,然后将/dev/vg1/k8s-volume挂载到/mnt/fast-disks/pv1,/mnt/fast-disks目录下的每一个挂载点都会自动生成为一个pv,挂载之后使用kubectl get pv查看
这个需要做个mount欺骗,让worker认为有磁盘挂载

#!/bin/bash
for i in $(seq 1 5); do
  mkdir -p /mnt/fast-disks-bind/vol${i}
  mkdir -p /mnt/fast-disks/vol${i}
  mount --bind /mnt/fast-disks-bind/vol${i} /mnt/fast-disks/vol${i}
done

 创建成功后,会看到每个节点上有5个pv,我是两个节点一共10个pv

 2.7 创建pvc

没有加namespace ,默认default

 查看pv情况,pv和pvc绑定成功

 查看具体创建在worker节点,/mnt/fast-disks/vol4目录

3 测试

部署nginx, 挂载 /etc/nginx/conf.d,挂载成功

注意:local的挂载,是将worker节点上的目录挂载到pod里面,而不是将pod的目录加载到woker节点上

如你部署了一个nginx, 那/etc/nginx/conf.d/defaut.conf 并不会挂载到worker01的/mnt/fast-disks/vol3,所以你在woker01节点上新建一个,看是否同步pod里面

至此,local-pv-provisioner 部署完成

原文地址:http://www.cnblogs.com/younger5/p/16789781.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性