使用NFS实现共享存储
5.1服务器Labs-K8s-NFS:部署NFS共享存储服务
hostnamectl set-hostname Labs-K8s-NFS
reboot
yum install -y nfs-utils rpcbind
systemctl enable rpcbind --now
systemctl enable nfs-server --now
systemctl status rpcbind
systemctl status nfs-server
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
systemctl restart nfs-server
reboot
showmount -e
5.2 服务器Labs-K8s-Master-1:安装NFS客户端
yum install -y nfs-utils
5.3 服务器Labs-K8s-Master-2:安装NFS客户端
yum install -y nfs-utils
5.4 服务器Labs-K8s-Master-3:安装NFS客户端
yum install -y nfs-utils
5.5 服务器Labs-K8s-Worker-1:安装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/
tee deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
labels:
app: nfs-client-provisioner
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: 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.10.2.159
- name: NFS_PATH
value: /K8s-NFS
volumes:
- name: nfs-client-root
nfs:
server: 10.10.2.159
path: /K8s-NFS
EOF
tee class.yaml <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: k8s-nfs
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
archiveOnDelete: "false"
EOF
5.7服务器Labs-K8s-Master-1:部署NFS动态存储驱动
kubectl create namespace nfs-provisioner
kubectl get namespace
sed -i 's/namespace: default/namespace: nfs-provisioner/g' `grep -rl 'namespace: default' ./`
cat >> check-namespace.sh << 'EOF'
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 ~