安装NFS
yum -y install nfs-utils rpcbind
mkdir /nfs/renren -p chmod 755 /nfs/renren -R
cat /etc/exports /nfs/renren *(async,insecure,no_root_squash,no_subtree_check,rw)
|
启动NFS
systemctl start rpcbind systemctl enable rpcbind systemctl status rpcbind systemctl start nfs systemctl enable nfs systemctl status nfs
|
客户端在使用NFS时,需要安装NFS
yum -y install nfs-utils rpcbind systemctl start rpcbind systemctl enable rpcbind systemctl start nfs systemctl enable nfs
showmount -e k8s-master
|
创建基于NFS的StorageClass
https://github.com/kubernetes-retired/external-storage.git
主要部署下面这些资源清单,只有deployment.yaml需要修改nfs相关配置

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: 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.126.130 - name: NFS_PATH value: /nfs/renren volumes: - name: nfs-client-root nfs: server: 192.168.126.130 path: /nfs/renren
kubectl apply -f deployment.yaml
kubectl apply -f rbac.yaml
kubectl apply -f class.yaml
kubectl get pods
|
在pvc中调用storageclass动态提供pv
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-mysql namespace: renren-fast annotations: volume.beta.kubernetes.io/storage-class: "managed-nfs-storage" spec: volumeMode: Filesystem accessModes: - ReadWriteMany resources: requests: storage: 5Gi
kubectl apply -f pvc-mysql.yaml
|
在pod控制器中使用storageclass
apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-mysql namespace: renren-fast spec: selector: matchLabels: app: statefulset-mysql serviceName: headless-mysql volumeClaimTemplates: - metadata: name: pvc-mysql annotations: volume.beta.kubernetes.io/storage-class: "managed-nfs-storage" spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi template: metadata: labels: app: statefulset-mysql spec: volumes: - name: mysql-conf configMap: name: mysql-configmap items: - key: mysql.cnf path: mysql.cnf - key: mysqld.cnf path: mysqld.cnf - key: mysqldump.cnf path: mysqldump.cnf - key: docker.cnf path: docker.cnf containers: - name: mysql image: mysql:5.6 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: secret-mysql key: password volumeMounts: - mountPath: /var/lib/mysql name: mysql-data - mountPath: /etc/mysql/conf.d/mysql.cnf subPath: mysql.cnf name: mysql-conf - mountPath: /etc/mysql/conf.d/mysqldump.cnf subPath: mysqldump.cnf name: mysql-conf - mountPath: /etc/mysql/conf.d/docker.cnf subPath: docker.cnf name: mysql-conf - mountPath: /etc/mysql/mysql.conf.d/mysqld.cnf subPath: mysqld.cnf name: mysql-conf kubectl apply -f statefulset-mysql.yaml
|