美文网首页
K8S动态PV实战之mariadb部署

K8S动态PV实战之mariadb部署

作者: david161 | 来源:发表于2022-03-28 09:29 被阅读0次

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 .

相关文章

网友评论

      本文标题:K8S动态PV实战之mariadb部署

      本文链接:https://www.haomeiwen.com/subject/unicjrtx.html