使用Kubernetes建设容器化数据中心操作命令-5.使用NFS实现共享存储

145 阅读1分钟

使用NFS实现共享存储

5.1服务器Labs-K8s-NFS:部署NFS共享存储服务

#修改主机名
hostnamectl set-hostname Labs-K8s-NFS
reboot

#安装nfs-utils rpcbind
yum install -y nfs-utils rpcbind
systemctl enable rpcbind --now
systemctl enable nfs-server --now
systemctl status rpcbind
systemctl status nfs-server

#配置firewalld防火墙规则
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --add-service=mountd --permanent
firewall-cmd --reload
firewall-cmd --list-all

#格式化磁盘并挂载到共享目录
fdisk -l
mkfs.ext4 /dev/sdb
mkdir /K8s-NFS
chmod 777 /K8s-NFS
mount /dev/sdb /K8s-NFS
df -h
sed -i '$a /dev/sdb  /K8s-NFS  ext4  defaults  0 0' /etc/fstab

#允许客户端访问
cat >> /etc/exports <<EOF
/K8s-NFS 10.10.2.0/24(rw,sync,no_root_squash)
EOF

#重启服务和系统,验证NFS服务
systemctl restart nfs-server
reboot

#列出共享目录信息
showmount -e

5.2 服务器Labs-K8s-Master-1:安装NFS客户端

#安装NFS客户端
yum install -y nfs-utils

5.3 服务器Labs-K8s-Master-2:安装NFS客户端

#安装NFS客户端
yum install -y nfs-utils

5.4 服务器Labs-K8s-Master-3:安装NFS客户端

#安装NFS客户端
yum install -y nfs-utils

5.5 服务器Labs-K8s-Worker-1:安装NFS客户端

#安装NFS客户端
yum install -y nfs-utils

5.6服务器Labs-K8s-Master-1:创建NFS动态存储类

wget -P /var/kubernetes https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/archive/refs/tags/nfs-subdir-external-provisioner-4.0.18.tar.gz
tar -zxvf /var/kubernetes/nfs-subdir-external-provisioner-4.0.18.tar.gz -C /var/kubernetes/
cd /var/kubernetes/nfs-subdir-external-provisioner-nfs-subdir-external-provisioner-4.0.18/deploy/

#重定向deployment.yaml内容
tee deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          # image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
          # 更换国内镜像源
          image: swr.cn-east-2.myhuaweicloud.com/kuboard-dependency/nfs-subdir-external-provisioner:v4.0.2
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: k8s-sigs.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              # value: 10.3.243.101
              # 修改NFS_SERVER环境变量的值为10.10.2.159
              value: 10.10.2.159
            - name: NFS_PATH
              # value: /ifs/kubernetes
              # 修改NFS_PATH环境变量的值为/K8s-NFS
              value: /K8s-NFS
      volumes:
        - name: nfs-client-root
          nfs:
            # server: 10.3.243.101
            # 修改NFS服务器地址为10.10.2.159
            server: 10.10.2.159
            #path: /ifs/kubernetes
            # 修改NFS服务器共享目录为/K8s-NFS
            path: /K8s-NFS
EOF

#重定向class.yaml内容
tee class.yaml <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  # name: nfs-client
  # 修改动态存储供应的名称为k8s-nfs
  name: k8s-nfs
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
  archiveOnDelete: "false"
EOF

5.7服务器Labs-K8s-Master-1:部署NFS动态存储驱动

#在deploy目录下操作
kubectl create namespace nfs-provisioner
kubectl get namespace

#yaml资源清单文件中namespace的值为nfs-provisioner
sed -i 's/namespace: default/namespace: nfs-provisioner/g' `grep -rl 'namespace: default' ./`

#检查namespace的值是否修改成功
cat >> check-namespace.sh << 'EOF'
#!/bin/bash
yamls=$(grep -rl 'namespace:' ./*)
while IFS= read -r yaml; do
    echo "=== 文件:$yaml ==="
    grep 'namespace:' "$yaml"
done <<< "$yamls"
EOF

chmod +x check-namespace.sh
bash check-namespace.sh
kubectl apply -k .
kubectl get all -o wide -n nfs-provisioner
kubectl get storageclass

#返回个人目录
cd ~