19.kubesphere部署mysql

部署中间件三要素

 

 

 

 

 

 

 

 

 先在这个里选定用哪种方式来部署,再创建一个服务提供对外访问。

应用路由即k8s的ingress

配置中心---配置  即k8s的configMap

 

 

部署MySQL

先配署存储、config、再部署容器、最后部署服务

 

部署分析

 

 

1.MySQL的镜像

在dockerhub.com中找到MySQL的镜像文件,它上面的关于启动的方式参数等。

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
启动mysql时加上-e参数指定密码
MySQL使用期间,配置文件、数据存在哪

2.在配置中心配置mysql的配置文件, my.cnf文件

 

 

 kye是文件名,value是文件内容。

 

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init_connect="SET collation_connection=utf8mb4_unicode_ci"
init_connect="SET NAMES utf8mb4"
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
skip_name_resolve

 

 

 3.配置mysql需要的存储

3.1.配置好NFS服务器端

 

 3.2.创建 nfsProvisioner

nfsProvisioner.yaml

apiVersion: apps/v1
kind: Deployment # 部署nfs-client-provisioner
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  namespace: default #与RBAC文件中的namespace保持一致
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-client-provisioner
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner # 指定serviceAccount!
      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 # 配置provisioner的Name
              value: qgg-nfs-storage # 确保该名称与 StorageClass 资源中的provisioner名称保持一致
            - name: NFS_SERVER #绑定的nfs服务器
              value: 10.146.16.248 #NFS服务器IP
            - name: NFS_PATH   #绑定的nfs服务器目录
              value: /data/kubesphere     # NFS共享目录
      volumes:  ##申明nfs数据卷
        - name: nfs-client-root
          nfs:
            server: 10.146.16.248 ##NFS服务器IP
            path: /data/kubesphere #NFS共享目录
kubectl apply -f nfsProvisioner.yaml

3.3.创建rbac.yaml

apiVersion: v1
kind: ServiceAccount #  创建一个账户,主要用来管理NFS provisioner在k8s集群中运行的权限
metadata:
  name: nfs-client-provisioner
  namespace: default
---
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
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 # 角色名
  namespace: default # Role需要指定名称空间,ClusterRole 不需要
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
roleRef: # 绑定哪个角色
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io
kubectl apply -f rbac.yaml

3.4.创建StorageClass

sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass # 创建StorageClass
metadata:
  name: managed-nfs-storage
provisioner: qgg-nfs-storage #这里的名称要和provisioner配置文件中的环境变量PROVISIONER_NAME保持一致
parameters:
   archiveOnDelete: "false"

3.5.配置PVC

4.部署mysql pod

工作负载(即POD)

 

 在官网上找下一个mysql镜像版本,也可以用私用仓库

 

 

 

 

 

 

 

 

 

 

 

在集群内部通过应用的  服务名.项目名就可以访问到mysql了。如test-mysql.test-dev

 

 5.暴露到集群外

默认仅集群内可访问

验证下,在集群内可以通过应用服务名访问。

 

 配置   服务,让其可以在集群外访问

 

 

 

 用node ip+node port即可访问mysql  10.146.16.207:31114

 

posted @ 2022-03-29 15:55  天涯160  阅读(575)  评论(0)    收藏  举报