1 nfs服务端
以master作服务端
yum -y install nfs-utils rpcbind #安装
#启动服务
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs
systemctl enable nfs
mkdir /home/nfs-share #创建共享目录(存储目录)
chmod -R 777 /home/nfs-share #设置权限
配置文件为/etc/exports,通过此配置文件可以设置服务端的共享文件目录。NFS客户端地址:允许其访问的NFS服务端的客户端地址,可以是客户端IP地址,也可以是一个网段(192.168.1.0/24),或者是*表示所有客户端IP都可以访问。
echo "/home/nfs-share 192.168.1.0/24(rw,async,insecure,no_subtree_check,no_root_squash)" >> /etc/exports #我以网段设置,用IP就需设置两条
exportfs -r #使设置生效
showmount -e 192.168.1.135 #检查nfs服务是否能正常访问
共享目录设置参数说明:
2 nfs客户端
Node作客户端
yum -y install nfs-utils #安装
systemctl start nfs && systemctl enable nfs #启动
设置挂载
mkdir /mnt/nfs #创建挂载目录
chmod -R 777 /mnt/nfs #设置权限
mount -t nfs 192.168.1.135:/home/nfs-share /mnt/nfs
umount /mnt/nfs #取消挂载
设置成功后可在客户端/mnt/nfs下添加文件或文件夹,会看到服务端和其它客户端都同时有了新加内容。
以上设置虽然挂载成功,但重启后会失效。
#自动挂载方法一(修改/etc/fstab)
vi /etc/fstab #修改文件
192.168.1.135:/home/nfs-share /mnt/nfs nfs defaults 0 0
#自动挂载方法二(修改/etc/rc.d/rc.local)
#/etc/fstab挂载可能有问题,开机时先挂载本机磁盘再启动网络,而NFS是需要网络启动后才能挂载的(暂未验证)
vi /etc/rc.d/rc.local #修改文件
mount -t nfs 192.168.1.135:/home/nfs-share /mnt/nfs #增加执行挂载命令
3 nfs持久化存储storageclass
nfs-storageclass.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-nfs-storage
annotations:
storageclass.kubernetes.io/is-default-class: "true" #设置其为默认存储后端
provisioner: storage.pri/nfs #or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
archiveOnDelete: "false" #删除pvc后,后端存储上的pv也自动删除
nfs-storageclass.yml
kind: ServiceAccount
apiVersion: v1
metadata:
name: nfs-client-provisioner
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-client-provisioner-runner
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-client-provisioner
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
namespace: default
roleRef:
kind: ClusterRole
name: nfs-client-provisioner-runner
apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
namespace: default
roleRef:
kind: Role
name: leader-locking-nfs-client-provisioner
apiGroup: rbac.authorization.k8s.io
nfs-provisioner.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: nfs-client-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: lizhenliang/nfs-client-provisioner:latest
volumeMounts:
- name: timezone
mountPath: /etc/localtime
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: storage.pri/nfs
- name: NFS_SERVER
value: 192.168.1.135
- name: NFS_PATH
value: /home/nfs-share
volumes:
- name: timezone
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
- name: nfs-client-root
nfs:
server: 192.168.1.135
path: /home/nfs-share
把上面的三个yaml放在“nfs”文件夹内,上传到服务器,执行如下命令
kubectl apply -f nfs/
#查看nfs-client-provisioner的日志会发现报错:selfLink was empty, can't make reference
kubectl logs -f nfs-client-provisioner-6ffd9bcf77-5r5xj -n default #或直接点日志查看
selfLink was empty 在k8s集群 v1.20之前都存在,在v1.20之后被删除,需要在/etc/kubernetes/manifests/kube-apiserver.yaml 添加参数
增加 - --feature-gates=RemoveSelfLink=false,如下图
添加之后使用kubeadm部署的集群会自动加载部署pod,如果api-server启动失败 需重新在执行一遍
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
2019-04-12 11:35:07 未知 回复