演示示例使用的是3.4.1,各版本有名字差异 功能是一样的 由于mysql需要做数据持久化所以需要挂载数据
1.创建mysql基础配置
项目中-配置-配置字典
添加键值对
1 2 3 4 5 6 7 8 9 10 11 | [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_unicode_ci
skip-character- set -client-handshake
skip-name-resolve
|
贴一下yaml配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | kind: ConfigMap
apiVersion: v1
metadata:
name: mysql-conf
namespace: gitee
annotations:
kubesphere.io/creator : admin
data:
my.cnf: |
[ 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_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
|
2.创建pvc挂载
项目-存储-持久卷声明
方式就选择默认
访问模式:单节点读写
大小:根据自己需要的数值增加,这里选择的是1Gb
然后直接下一步创建即可
yaml配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-pvc
namespace: gitee
annotations:
kubesphere.io/creator : admin
finalizers:
- kubernetes.io/pvc-protection
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local
volumeMode: Filesystem
|
3.创建工作负载
应用负载-工作负载
名称:
添加容器使用的是本地私有镜像(私有镜像使用的是harbor,也可以使用其他镜像配置比较简单这里不详细说)
使用默认镜像端口并且同步主机时区
添加环境变量
设置数据库密码
MYSQL_ROOT_PASSWORD
首先挂载pvc做数据持久化
选择我们一开始创建的pvc
模式:读写
路径:/var/lib/mysql
注意:路径要一致不能错!!!
挂载配置文件
选择本教程最开始创建的字典数值
模式:只读
路径:/etc/mysql/conf.d
注意:路径要一致不能错!!!
下一步直接创建即可(如果创建失败请检查镜像是否能正常拉取)
yaml配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | kind: Deployment
apiVersion: apps/v1
metadata:
name: mysql
namespace: gitee
labels:
app: mysql
annotations:
deployment.kubernetes.io/revision : '1'
kubesphere.io/creator : admin
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
creationTimestamp: null
labels:
app: mysql
annotations:
kubesphere.io/creator : admin
kubesphere.io/imagepullsecrets : '{"container-hrnhuh":"harbor"}'
logging.kubesphere.io/logsidecar-config : '{}'
spec:
volumes:
- name : host-time
hostPath:
path: /etc/localtime
type: ''
- name : volume-ve0oq2
persistentVolumeClaim:
claimName: mysql-pvc
- name : volume-lg3r9w
configMap:
name: mysql-conf
defaultMode: 420
containers:
- name : container-hrnhuh
image: '192.168.21.234:81/tools/mysql:8.0.3'
ports:
- name : tcp-3306
containerPort: 3306
protocol: TCP
env:
- name : MYSQL_ROOT_PASSWORD
value: '123456'
resources:
limits:
cpu: '1'
memory: 1Gi
requests:
cpu: '1'
memory: 1Gi
volumeMounts:
- name : host-time
readOnly: true
mountPath: /etc/localtime
- name : volume-ve0oq2
mountPath: /var/lib/mysql
- name : volume-lg3r9w
readOnly: true
mountPath: /etc/mysql/conf.d
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
serviceAccountName: default
serviceAccount: default
securityContext: { }
imagePullSecrets:
- name : harbor
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
|
4.创建服务(创建服务后才能进行外部访问)
工作负载-服务-指定工作负载
访问模式:虚拟ip地址
工作负载:选择刚刚创建的mysql
端口:名字自己填写 容器端口3306 服务端口3306
勾选外部访问并且选择NodePort模式
创建成功后这里的端口数据库连接的时候会用到
5.测试mysql是否能正常访问
服务器地址:集群ip
端口:刚刚创建成功后的对外端口
数据库:sys
用户名:root
密码:创建工作负载时设置的MYSQL_ROOT_PASSWORD值,当时设置的是123456 所以这里就用123456登录(如果忘记就去工作负载里找)
设置应用路由(ingress)然后用域名访问不知道为什么使用自定义域名:3306 连接不上数据库 所以直接用了NodePort