环境:
Os:Centos 7
k8s:1.28
1.创建名称空间
kubectl create namespace ns-mysql
2.创建secret
[root@master single]# more 1-secret.yaml
apiVersion: v1
data:MYSQL_ROOT_PASSWORD: bXlzcWw= #密码mysql 采用base64编码后结果
kind: Secret
metadata:name: mysql-secretnamespace: ns-mysql
type: Opaque
kubectl apply -f 1-secret.yaml
3.创建configmap
[root@master single]# more 2-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-cnfnamespace: ns-mysql
data:my.cnf: |-[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]init_connect='SET collation_connection = utf8mb4_general_ci'init_connect='SET NAMES utf8mb4'interactive_timeout=86400wait_timeout=86400max_connections = 5000character-set-server=utf8mb4collation-server=utf8mb4_general_ciskip-character-set-client-handshakeskip-name-resolve#master-slaver repicationserver_id=1log-bin=mysql-binread-only=0replicate-ignore-db=mysqlreplicate-ignore-db=sysreplicate-ignore-db=information_schemareplicate-ignore-db=performance_schemagtid_mode=ONenforce_gtid_consistency = ONlower_case_table_names=1sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
kubectl apply -f 2-configmap.yaml
4.创建pv
[root@master single]# more 3-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-pvnamespace: ns-mysql
spec:accessModes:- ReadWriteOncecapacity:storage: 5Ginfs:path: /k8s/mysqlreadOnly: falseserver: 192.168.1.102
kubectl apply -f 3-pv.yaml
5.创建pvc
[root@master single]# more 4-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pvcnamespace: ns-mysql
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5GivolumeName: mysql-pv
kubectl apply -f 4-pvc.yaml
6.创建sts
[root@master single]# more 5-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:namespace: ns-mysqllabels:app: mysql-hxl ##可自定义名称name: mysql-hxl-sts ##可自定义名称annotations:kubesphere.io/alias-name: mysql-hxl ##可自定义名称
spec:replicas: 1selector:matchLabels:app: mysql-hxltemplate:metadata:labels:app: mysql-hxl ##必须与spec.selector 同名称annotations:kubesphere.io/containerSecrets: nulllogging.kubesphere.io/logsidecar-config: '{}'spec:containers:- name: hxl-container##type: workerimagePullPolicy: IfNotPresentresources:requests:cpu: '0.01'memory: 10Milimits:cpu: '0.98'memory: 1700Miimage: registry.cn-shenzhen.aliyuncs.com/hxlk8s/mysql:5.7.30ports:- name: tcp-3306protocol: TCPcontainerPort: 3306##servicePort: 3306- name: tcp-33060protocol: TCPcontainerPort: 33060##servicePort: 33060env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: MYSQL_ROOT_PASSWORDvolumeMounts:- name: hxl-cnf-volume ##必须与volumes定义的同名称readOnly: falsemountPath: /etc/mysql- name: hxl-data-volume ##必须与volumes定义的同名称readOnly: falsemountPath: /var/lib/mysqlserviceAccount: defaultaffinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchLabels:app: mysql-hxltopologyKey: kubernetes.io/hostnameinitContainers: []imagePullSecrets: nullvolumes:- name: hxl-cnf-volume #映射configMap信息configMap:name: mysql-cnfitems:- key: my.cnfpath: my.cnf- name: hxl-data-volume #映射pvc信息persistentVolumeClaim:claimName: mysql-pvcupdateStrategy:type: RollingUpdaterollingUpdate:partition: 0
kubectl apply -f 5-sts.yaml
8.创建nodeport service
[root@master single]# more 7-nodeport-svc.yaml
apiVersion: v1
kind: Service
metadata:name: mysql-frontlabels:app: mysql-hxlnamespace: ns-mysql
spec:selector:app: mysql-hxltype: NodePortports:- name: ''port: 3306protocol: TCPtargetPort: 3306nodePort: 30001 #指定主机任意端口30000-32767sessionAffinity: None
kubectl apply -f 7-nodeport-svc.yaml
9.通过客户端连接
使用端口30001
/opt/mysql57/bin/mysql -h 192.168.1.102 -uroot -pmysql -P30001
/opt/mysql57/bin/mysql -h 192.168.1.105 -uroot -pmysql -P30001
/opt/mysql57/bin/mysql -h 192.168.1.106 -uroot -pmysql -P30001
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| root | % |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)mysql> show grants for 'root'@'%';
+-------------------------------------------------------------+
| Grants for root@% |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
该账号默认对连接客户端不做限制.