美文网首页
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