在Debian上配置Kubernetes存储解决方案的步骤
在配置存储前,需完成Debian系统和Kubernetes集群的基础设置:
kubeadm、kubelet、kubectl(用于集群管理):sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本避免自动升级
kubeadm初始化集群(以10.244.0.0/16为Pod网络CIDR为例):sudo kubeadm init --pod-network-cidr=10.244.0.0/16
按提示完成初始化,配置kubectl上下文:mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml
NFS适用于需要共享存储的场景(如多个Pod访问同一数据目录),配置步骤如下:
sudo apt install -y nfs-kernel-server
sudo mkdir -p /data/nfs-server
sudo chmod 777 /data/nfs-server # 测试时可放宽权限,生产环境需严格限制
/etc/exports导出共享目录:echo "/data/nfs-server *(rw,async,no_subtree_check)" | sudo tee -a /etc/exports
sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-testpv
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany # 多个Pod可同时读写
nfs:
server: <NFS_SERVER_IP> # 替换为NFS服务器IP
path: /data/nfs-server
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-testpvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
kubectl apply -f nfs-pv.yaml
kubectl apply -f nfs-pvc.yaml
Ceph提供对象、块、文件存储,适合高可用、可扩展的场景,需通过Rook简化部署:
sudo apt install -y ceph-common
Longhorn专注于有状态应用(如数据库),提供高可用和自动灾难恢复:
适用于单节点存储或测试场景,直接使用节点本地目录:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer # 延迟绑定,确保Pod调度到有存储的节点
应用配置:kubectl apply -f local-storage-class.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce # 单节点读写
hostPath:
path: /mnt/data # 节点本地目录
storageClassName: local-storage
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-storage
kubectl apply -f local-pv.yaml
kubectl apply -f local-pvc.yaml
无论选择哪种存储方案,均需通过以下命令验证PV和PVC是否绑定成功:
kubectl get pv # 查看PV状态应为"Bound"
kubectl get pvc # 查看PVC状态应为"Bound"
ReadWriteOnce(单节点)、ReadWriteMany(多节点)等访问模式;