kubernete 部署 local-pv-provisioner
目的
在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 部署完成