一、nfs服务器安装nfs与配置
yum -y install nfs-utils rpcbind
systemctl start rpcbind.service
systemctl start nfs
#配置
mkdir /data/nfs -p
chow nfsnobody.nfsnobody /data/nfs
cat>>/etc/exports<<EOF
/data/nfs 172.16.208.0/20(rw,sync,no_root_squash,no_all_squash)
EOF
exportfs -arv
二、其它客户端服务器安装nfs-utils
yum install -y nfs-utils
三、master导入相应的nfs的yaml配置
github地址: https://github.com/kubernetes-retired/external-storage
1、下载yaml配置
wget https://raw.githubusercontent.com/kubernetes-retired/external-storage/master/nfs-client/deploy/rbac.yaml
wget https://raw.githubusercontent.com/kubernetes-retired/external-storage/master/nfs-client/deploy/class.yaml
wget https://raw.githubusercontent.com/kubernetes-retired/external-storage/master/nfs-client/deploy/deployment.yaml
2、导入rbac与class
kubectl apply -f class.yaml
kubectl apply -f rbac.yaml
3、修改deploymet文件
[root@master ~]# cat deployment.yaml
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: quay.io/external_storage/nfs-client-provisioner:latest
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 172.16.208.176 #nfs服务器ip
- name: NFS_PATH
value: /data/nfs #nfs服务器的挂载目录
volumes:
- name: nfs-client-root
nfs:
server: 172.16.208.176 #nfs服务器ip
path: /data/nfs #nfs服务器的挂载目录
4、导入deploy
kubectl apply -f deployment.yaml
5、查看
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-dfb75c8bb-42p8l 1/1 Running 0 80s
[root@master ~]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage fuseim.pri/ifs Delete Immediate false 5m56s
四、k8s1.20.1版本修改api-server配置
修改/etc/kubernetes/manifests/kube-apiserver.yaml 文件
添加添加- --feature-gates=RemoveSelfLink=false
[root@master ~]# grep -B 5 'feature-gates' /etc/kubernetes/manifests/kube-apiserver.yaml
- --service-account-key-file=/etc/kubernetes/pki/sa.pub
- --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
- --service-cluster-ip-range=10.96.0.0/12
- --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
- --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
- --feature-gates=RemoveSelfLink=false #添加内容
五、测试
[root@master ~]# cat test-pvc.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-claim annotations: volume.beta.kubernetes.io/storage-class: "managed-nfs-storage" spec: accessModes: - ReadWriteMany resources: requests: storage: 1Mi [root@master ~]# kubectl apply -f test-pvc.yaml persistentvolumeclaim/test-claim created [root@master ~]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE test-claim Bound pvc-eeb6dd0b-feb8-4884-999a-a15bcd27d7ea 1Mi RWX managed-nfs-storage 9m18s