前期准备
- 创建nfs服务器
- 各k8s节点安装nfs-utils(针对centos7系统)
说明
- 演示中的k8s master节点IP是:192.168.10.200
- 演示中的nfs server的IP地址也是:192.168.10.200
- nfs server的挂载路径是:/data/nfs
步骤
- 创建nfs供应商
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-provisioner
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: nfs-provisioner
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: nfs-provisioner
namespace: default
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-provisioner
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-provisioner
template:
metadata:
labels:
app: nfs-provisioner
spec:
serviceAccount: nfs-provisioner
containers:
- name: nfs-provisioner
image: registry.cn-hangzhou.aliyuncs.com/ylqer/nfs-subdir-external-provisioner:v4.0.0
imagePullPolicy: IfNotPresent
env:
- name: PROVISIONER_NAME
value: example.com/nfs
- name: NFS_SERVER
value: 192.168.10.200
- name: NFS_PATH
value: /data/nfs
volumeMounts:
- mountPath: /persistentvolumes
name: nfs
volumes:
- name: nfs
nfs:
server: 192.168.10.200
path: /data/nfs
- 创建StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs
provisioner: example.com/nfs
- 创建pvc(可选,可以选择在创建应用时动态创建pvc)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-html
spec:
storageClassName: nfs
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 1Gi
- 创建应用使用pvc
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /usr/share/nginx/html
name: html
volumes:
- name: html
persistentVolumeClaim:
claimName: nginx-html
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
nodePort: 30001
- 测试
echo hello > index.html
http://192.168.10.200:30001