赞
踩
选取 192.168.0.57 节点做为服务端
[root@master ~]# mkdir -p /data/nfs
[root@master ~]# chmod -R 777 /data/nfs/
[root@master ~]# yum install nfs-utils -y
[root@master ~]# vim /etc/exports
[root@master ~]# /data/nfs *(rw,sync,no_root_squash,no_all_squash)
[root@master ~]# systemctl start nfs
[root@master ~]# systemctl enable nfs
#检查nfs是否生效
[root@master ~]# showmount -e 192.168.0.57
# 下载代码 yum install git -y git clone https://github.com/rimusz/nfs-client-provisioner.git # 创建集群角色,添加权限 [root@master ~]# cd /root/nfs-client-provisioner/ [root@master nfs-client-provisioner]# vim deploy/auth/clusterrolebinding.yaml # 将roleRef.name的值修改为:cluster-admin roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io [root@master nfs-client-provisioner]# kubectl create -f deploy/auth/serviceaccount.yaml -f deploy/auth/clusterrole.yaml -f deploy/auth/clusterrolebinding.yaml # 编辑文件/root/nfs-client-provisioner/deploy/deployment.yaml修改nfs服务器的地址及路径,apiVersion值修改为:apps/v1,并添加selector [root@master nfs-client-provisioner]# vim deploy/deployment.yaml kind: Deployment # 第一处修改 apiVersion: apps/v1 metadata: name: 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 image: quay.io/external_storage/nfs-client-provisioner:latest volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: fuseim.pri/ifs - name: NFS_SERVER # 第三处修改 value: 192.168.0.57 - name: NFS_PATH # 第四处修改 value: /data/nfs volumes: - name: nfs-client-root nfs: # 第五处修改 server: 192.168.0.57 # 第六处修改 path: /data/nfs [root@master nfs-client-provisioner]# kubectl apply -f deploy/class.yaml -f deploy/deployment.yaml # 测试:创建一个pvc,创建一个pod [root@master nfs-client-provisioner]# kubectl create -f deploy/test-claim.yaml -f deploy/test-pod.yaml [root@master nfs-client-provisioner]# kubectl get po NAME READY STATUS RESTARTS AGE nfs-client-provisioner-67fdcd8c7-8ft5w 1/1 Running 0 2m30s test-pod 0/1 Completed 0 39s
[root@master ~]# cd /usr/local/bin/
[root@master ~]# wget https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz
[root@master ~]# tar -zxvf helm-v3.5.4-linux-amd64.tar.gz
[root@master ~]# cd linux-amd64
[root@master ~]# cp helm ../
# 验证helm安装是否成功
[root@master ~]# helm version
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
version.BuildInfo{Version:"v3.5.4", GitCommit:"1b5edb69df3d3a08df77c9902dc17af864ff05d1", GitTreeState:"clean", GoVersion:"go1.15.11"}
[root@master ~]# helm repo add mysql https://apphub.aliyuncs.com
# 更新仓库
[root@master ~]# helm repo update
# 查看可以下载的版本 [root@master ~]# helm search repo mysqlha WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config NAME CHART VERSION APP VERSION DESCRIPTION mysql/mysqlha 1.0.0 5.7.13 MySQL cluster with a single master and zero or ... # 下载至本地 [root@master ~]# helm pull mysql/mysqlha --version=1.0.0 [root@master ~]# ll -rw-r--r-- 1 root root 6956 Dec 15 10:57 mysqlha-1.0.0.tgz # 解压缩 [root@master ~]# tar -zxvf mysqlha-1.0.0.tgz [root@master ~]# ll drwxr-xr-x 3 root root 4096 Dec 15 11:14 mysqlha -rw-r--r-- 1 root root 6956 Dec 15 10:57 mysqlha-1.0.0.tgz
[root@master ~]# vim mysqlha/templates/svc.yaml # Headless service for stable DNS entries of StatefulSet members. apiVersion: v1 kind: Service metadata: name: {{ template "fullname" . }} labels: app: {{ template "fullname" . }} chart: "{{ template "mysqlha.chart" . }}" release: "{{ .Release.Name }}" heritage: "{{ .Release.Service }}" spec: ports: - name: {{ template "fullname" . }} port: 3306 # 添加第一处 targetPort: 3306 # 添加第二处 nodePort: 30036 # 添加第三处 type: NodePort # 注释下面一行 #ClusterIP: None selector: app: {{ template "fullname" . }}
[root@master ~]# vim mysqlha/templates/statefulset.yaml # 第一处修改:修改api版本为如下 apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ template "fullname" . }} labels: app: {{ template "fullname" . }} chart: "{{ template "mysqlha.chart" . }}" release: "{{ .Release.Name }}" heritage: "{{ .Release.Service }}" spec: serviceName: {{ template "fullname" . }} replicas: {{ .Values.mysqlha.replicaCount }} # 第二处修改:增加selector属性 selector: matchLabels: app: {{ template "fullname" . }} template: metadata: labels: app: {{ template "fullname" . }} {{- if .Values.mysqlha.podAnnotations }} ...
[root@master ~]# vim mysqlha/values.yaml mysqlha: # 编辑副本数 replicaCount: 3 # 取消注释,设置root密码 mysqlRootPassword: CloudEasy2020 mysqlReplicationUser: repl # 取消注释,设置同步用户repl的密码 mysqlReplicationPassword: CloudEasy2021 ... persistence: enabled: true # 取消注释,填写前面创建的sc名称 storageClass: "managed-nfs-storage" accessModes: - ReadWriteOnce size: 10Gi annotations: {}
# 创建namespace
[root@master ~]# kubectl create ns mysql
# 部署
[root@master ~]# helm install mysql mysqlha/ -n mysql
[root@master ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
[root@master ~]# helm repo update
[root@master ~]# helm search repo bitnami/mysql -l
[root@master ~]# helm pull bitnami/mysql
# 默认下载最新版本,也可以指定版本号,如: --version 9.0.6
[root@master ~]# tar -zxvf mysql-9.6.0.tgz
[root@master ~]# cd mysql/
[root@master mysql]# vim values.yaml
global:
...
storageClass: "nfs-stroage"
更改镜像就是更改版本,如示例为8.0.2版本,可以修改为5.7.38(5.7.38-debian-10-r32)
镜像地址:点击跳转
image:
registry: docker.io
repository: bitnami/mysql
tag: 8.0.32-debian-11-r14
digest: ""
修改提示信息
appVersion: 5.7.38
结果展示
## @param architecture MySQL architecture (`standalone` or `replication`)
# 默认standalone
architecture: standalone
auth:
rootPassword: "CloudEasy2020"
新建 IngressRouteTCP 资源
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
name: mysql
namespace: mysql
spec:
entryPoints:
- mysql
routes:
- match: HostSNI(`*`)
services:
- name: mysql
port: 3306
在traefik中添加路由
$ kubectl edit deployments.apps -n kube-system traefik
spec:
template:
spec:
containers:
- args:
- --entrypoints.mysql.address=:13306 # 此处指定暴露至外网的端口
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。