nfs服务
rbac
nfsmariadb/nfsrbac.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 #替换成要部署NFS Provisioner的namespace
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 #替换成要部署NFS Provisioner的namespace
roleRef:
kind: Role
name: leader-locking-nfs-client-provisioner
apiGroup: rbac.authorization.k8s.io
storageClass
nfsmariadb/nfsmariadbstorage.yml。与前文介绍类似,注意修改storageClass的名称
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-client-provisioner
labels:
app: nfs-client-provisioner
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
#由于quay.io仓库部分镜像国内无法下载,所以替换为其他镜像地址
image: vbouchaud/nfs-client-provisioner:v3.1.1
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: nfs-client-mariadb #nfs-provisioner的名称,以后设置的storageclass要和这个保持一致
- name: NFS_SERVER
value: 192.168.198.156 #NFS服务器地址,与volumes.nfs.servers保持一致
- name: NFS_PATH
value: /mariadb #NFS服务共享目录地址,与volumes.nfs.path保持一致。使用NFS4版本进行多级目录挂载
volumes:
- name: nfs-client-root
nfs:
server: 192.168.198.156 #NFS服务器地址,与spec.containers.env.value保持一致
path: /mariadb #NFS服务器目录,与spec.containers.env.value保持一致。使用NFS4版本进行多级目录挂载
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storage-mariadb
annotations:
storageclass.kubernetes.io/is-default-class: "true" #设置为默认的storageclass
#动态卷分配者名称,必须和创建的"provisioner"变量中设置的name一致
provisioner: nfs-client-mariadb
parameters:
archiveOnDelete: "true" #设置为"false"时删除PVC不会保留数据,"true"则保留数据
mountOptions:
- hard #指定为硬挂载方式
- nfsvers=4 #指定NFS版本,这个需要根据 NFS Server 版本号设置
mariadb
pvc
nfsmariadb/mariadbpvc.yml。为后续容灾测试方便。单独创建pvc文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
# pvc名称
name: mariadbpvc
spec:
# 使用的存储类
storageClassName: nfs-storage-mariadb
# 读写权限
accessModes: - ReadWriteMany
# 定义容量
resources:
requests:
storage: 5Gi
statefulset
nfsmariadb/mariadbstatefulset.yml
apiVersion: v1
kind: Service
metadata:
name: mariadbsvc
spec:
ports:
- port: 3306
# 创建service为无头服务,标识容器
clusterIP: None
selector:
app: mariadb-public
---
apiVersion: apps/v1
kind: StatefulSet
# 名称
metadata:
name: mariadbsts
spec:
# 指定service名称
serviceName: "mariadbsvc"
replicas: 1
# 标签选择器
template:
metadata:
labels:
app: mariadb-public
spec:
# 镜像容器编辑
containers:
- name: mariadb
image: mariadb:10.5.2
env:
# 创建数据库用户密码
- name: MYSQL_ROOT_PASSWORD
value: "admin"
- name: TZ
value: Asia/Shanghai
# 创建数据库
- name: MYSQL_DATABASE
value: test
args:
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
# 启用端口
ports:
- containerPort: 3306
# 数据卷
volumeMounts:
# 挂在容器目录
- mountPath: "/var/lib/mysql"
# 使用来源
name: mariadb-data
# 使用数据卷来源
volumes:
# 数据卷名称
- name: mariadb-data
# 指定数据卷动态供给
persistentVolumeClaim:
# pvc动态供给名称
claimName: mariadbpvc
selector:
matchLabels:
app: mariadb-public
部署mariadb服务
部署服务
kubectl apply -f .
查看storage
kubectl get storageclasses.storage.k8s.io
查看pv绑定情况
kubectl get pv
查看pvc绑定情况
kubectl get pvc
查看服务
kubectl get svc
查看statefulset
kubectl get sts
查看pod
kubectl get pods
测试mariadb
查看statefulset的服务名称
kubectl get svc
创建一个临时的pod用于访问statefulset。通过statefulset的服务名进行访问:- hmariadbsvc。
语法规则:--command -- mysql,mysql与--之间有空格。
kubectl run mariadb-test --image=mariadb:10.5.2 --restart=Never -it --rm -- command -- mysql -hmariadbsvc -uroot -padmin
命令行方式查看database
show databases;
命令行方式创建database
create database lagou;
进入容器查看database目录
kubectl exec -it mariadbsts-0 sh
cd /var/lib/mysql
ls
exit
查看nfs共享目录,自动创建目录格式为:${namespace}-${pvcName}-${pvName}的文件夹
cd /nfs/data
ls
cd default-mariadbpvc-pvc-26c5785e-5703-4175-bc6a-3f9097d51d98/
ls
容灾测试
删除pod测试
删除pod进行测试
kubectl get pvc
kubectl delete pod
进入容器查看database目录
kubectl exec -it mariadbsts-0 sh
cd /var/lib/mysql
ls
exit
查看nfs共享目录中database保存情况
cd /nfs/data
ls
cd default-mariadbpvc-pvc-26c5785e-5703-4175-bc6a-3f9097d51d98/
ls
临时客户端查看
kubectl run mariadb-test --image=mariadb:10.5.2 --restart=Never -it --rm -- command -- mysql -hmariadbsvc -uroot -padmin
show databases;
exit
删除statefuset
kubectl delete -f .
网友评论