安装nfs服务这里安装在slave2一个节点上
[root@k8s-slave2 ~]# yum -y install nfs-utils rpcbind
[root@k8s-slave2 ~]# cat /etc/exports/data/nfs/ *(insecure,rw,async,no_root_squash)
[root@k8s-slave2 ~]# chmod 777 /data/nfs/
先启动rpcbind服务在启动nfs
[root@k8s-slave2 ~]# systemctl start rpcbind
[root@k8s-slave2 ~]# systemctl start nfs
主节点验证
[root@k8s-master ~]# showmount -e 192.168.60.102
Export list for 192.168.60.102:
/data/nfs *
下载外部存储卷的供应器代码
git clone https://github.com/kubernetes-incubator/external-storage
下载完成进入external-storage目录
[root@k8s-master deploy]# pwd
/root/external-storage/nfs-client/deploy
创建storageclass
[root@k8s-master deploy]# kubectl apply -f class.yaml
[root@k8s-master deploy]# kubectl apply -f rbac.yaml
修改deloyment.yaml中的nfs挂载参数
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: 192.168.60.102
- name: NFS_PATH
value: /data/nfs
volumes:
- name: nfs-client-root
nfs:
server: 192.168.60.102
path: /data/nfs
[root@k8s-master deploy]# kubectl apply -f deployment.yaml
查看 storageclass
[root@k8s-master deploy]# kubectl get storageclass
NAME PROVISIONER AGE
managed-nfs-storage fuseim.pri/ifs 18h
也可以通过dashboard查看
生成资源类型:
[root@k8s-master deploy]# kubectl apply -f test-claim.yaml
生成一个测试pod:
[root@k8s-master deploy]# kubectl apply -f test-pod.yaml
查看服务,也可通过dashborad查看,这里不做展示下面通过一个mysql实例演示一下
[root@k8s-master deploy]# kubectl get pv
[root@k8s-master deploy]# kubectl get pvc
mysql pod动态存储的生成
这里nodeport端口还是mysql的3306 kubernets默认映射端口3000端口起步
这里修改kube-api参数
vim /etc/kubernetes/manifests/kube-apiserver.yaml
添加 - --service-node-port-range=1-65535
重启服务
systemctl restart kubelet
[root@k8s-master mysql]# cat mysql-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-claim
annotations:
volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
[root@k8s-master mysql]# cat mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: default
labels:
k8s-app: mysql
spec:
replicas: 1
selector:
matchLabels:
k8s-app: mysql
template:
metadata:
labels:
k8s-app: mysql
spec:
nodeName: k8s-slave1
containers:
- image: registry.cn-hangzhou.aliyuncs.com/mysql5-7/mysql5-7:5.7
name: mysql
imagePullPolicy: Always
env:
- name: MYSQL_ROOT_PASSWORD
value: "123.com"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: nfs-pv
mountPath: /var/lib/mysql
volumes:
- name: nfs-pv
persistentVolumeClaim:
claimName: mysql-claim
[root@k8s-master mysql]# cat nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
k8s-app: mysql
ports:
- nodePort: 3306
protocol: TCP
port: 3306
targetPort: 3306
type: NodePort
[root@k8s-master mysql]# cat service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 3306
selector:
k8s-app: mysql
依次生成:
[root@k8s-master mysql]# kubectl apply -f mysql-claim.yaml
[root@k8s-master mysql]# kubectl apply -f mysql-deployment.yaml
[root@k8s-master mysql]# kubectl apply -f nodeport.yaml
[root@k8s-master mysql]# kubectl apply -f service.yaml
查看服务
[root@k8s-master mysql]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-f9c4bb26-f788-4e08-820b-d128d3921604 10Gi RWO Delete Bound default/mysql-claim managed-nfs-storage 18h
[root@k8s-master mysql]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-claim Bound pvc-f9c4bb26-f788-4e08-820b-d128d3921604 10Gi RWO managed-nfs-storage 18h
现在到nfs服务端查看:
本地验证一下: