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 部署完成

posted @ 2022-10-13 21:53  王叫兽  阅读(764)  评论(0编辑  收藏  举报