Kubernetes Helm安装mysql 主备方式

一、安装

1.1下载

前往github上下载最新的V3版本的helm

https://github.com/helm/helm/releases

1.2解压

解压(tar -zxvf helm-v3.0.0-linux-386.tar.gz)

1.3安装

在解压目录中找到helm程序,移动到需要的目录中(mv linux-386/helm /usr/local/bin/helm)

二、配置仓库

#添加官方的仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
#添加微软的仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
#添加阿里的仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#更新
helm repo update
#查看配置的存储库
helm repo list
helm search repo stable
#删除存储库
helm repo remove aliyun
#有时候会出现添加源显示证书无效的情况,加上以下参数就可以了
helm repo add --insecure-skip-tls-verify jetstack https://charts.jetstack.io/

三、创建pv

3.1 安装nfs服务

在主备服务器上都安装。

yum install -y nfs-utils

vi /etc/exports
/home/nfs *(rw,no_root_squash,insecure,async)

systemctl enable nfs-server
systemctl start nfs-server

systemctl status nfs-server

修改完/etc/exports文件并保存后,可使用exportfs命令更新配置


更新exports配置:
sudo exportfs -arv

mount -t nfs zxhy-nacos:/home/kubernetes -o nolock

3.2 创建Service Account

# rbac.yaml:#唯一需要修改的地方只有namespace,根据实际情况定义
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

3.3 创建NFS资源的StorageClass

3.3.1 先创建主服务的StorageClass

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

3.3.2 先创建备服务的StorageClass

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

3.4 创建NFS provisioner

3.4.1 先创建主服务的provisioner


apiVersion: apps/v1
kind: Deployment # 部署nfs-client-provisioner
metadata:
  name: nfs-client-provisioner-master
  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: hub.kaikeba.com/java12/nfs-client-provisioner:v1 #镜像地址
          volumeMounts: # 挂载数据卷到容器指定目录
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME # 配置provisioner的Name
              value: zxhy-nfs-storage-master # 确保该名称与 StorageClass 资源中的provisioner名称保持一致
            - name: NFS_SERVER #绑定的nfs服务器
              value: zxhy-master
            - name: NFS_PATH   #绑定的nfs服务器目录
              value: /home/nfs
      volumes: # 申明nfs数据卷
        - name: nfs-client-root
          nfs:
            server: zxhy-master
            path: /home/nfs

3.4.2 先创建备服务的provisioner


apiVersion: apps/v1
kind: Deployment # 部署nfs-client-provisioner
metadata:
  name: nfs-client-provisioner-slave
  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: hub.kaikeba.com/java12/nfs-client-provisioner:v1 #镜像地址
          volumeMounts: # 挂载数据卷到容器指定目录
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME # 配置provisioner的Name
              value: zxhy-nfs-storage-slave# 确保该名称与 StorageClass 资源中的provisioner名称保持一致
            - name: NFS_SERVER #绑定的nfs服务器
              value: zxhy-slave
            - name: NFS_PATH   #绑定的nfs服务器目录
              value: /home/nfs
      volumes: # 申明nfs数据卷
        - name: nfs-client-root
          nfs:
            server: zxhy-slave
            path: /home/nfs

四、安装mysql

4.1下载helm文件并修改value.yaml参数

helm pull bitnami/mysql
tar -xf mysql-9.4.8.tgz
cd mysql
vi values.yaml

values文件只需要设置下面几项就可以

architecture: replication // 默认是standalone,也就是单例,没有高可用性。
auth.rootPassword: “<你的root密码>” //设置一下,随便搞搞
persistence.storageClass: “managed-nfs-storage-slave” // 重点的设置,这样primary的mysql 实例才会使用nfs-master的存储。
secondary的配置,只有persistence.storageClass: “managed-nfs-storage-slave”。

4.2安装mysql

helm install mysql-master-slave . -f values.yaml -n mysql --create-namespace

4.3检查一下

kubectl  get pod -n mysql

NAME                             READY   STATUS    RESTARTS   AGE
mysql-master-slave-primary-0     1/1     Running   0          74m
mysql-master-slave-secondary-0   1/1     Running   0          74m

4.4创建service,外部访问

4.4.1 创建主的

apiVersion: v1
kind: Service
metadata:
 name: mysql-service-master
 namespace: mysql
spec:
 type: NodePort         # 配置为NodePort,外部可以访问
 ports:
 - port: 3306          #容器间,服务调用的端口
   targetPort: 3306       #容器暴露的端口,与Dockerfile暴露端口保持一致
 selector:
   app.kubernetes.io/component: primary
   app.kubernetes.io/instance: mysql-master-slave
   app.kubernetes.io/name: mysql

4.4.2 创建备的

apiVersion: v1
kind: Service
metadata:
 name: mysql-service-slave
 namespace: mysql
spec:
 type: NodePort         # 配置为NodePort,外部可以访问
 ports:
 - port: 3306          #容器间,服务调用的端口
   targetPort: 3306       #容器暴露的端口,与Dockerfile暴露端口保持一致
 selector:
   app.kubernetes.io/component: secondary
   app.kubernetes.io/instance: mysql-master-slave
   app.kubernetes.io/name: mysql

4.4.3 最后可以用mysql客户端工具连接试试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值