k8s-v1.2.3部署mysql-8服务
一、环境准备CentOS Linux release 7.7.1908 (Core) 3.10.0-1062.el7.x86_64kubeadm-1.22.3-0.x86_64kubelet-1.22.3-0.x86_64kubectl-1.22.3-0.x86_64kubernetes-cni-0.8.7-0.x86_64主机名IPVIPk8s-master01192.168.30.106192
一、环境准备
CentOS Linux release 7.7.1908 (Core) 3.10.0-1062.el7.x86_64
kubeadm-1.22.3-0.x86_64
kubelet-1.22.3-0.x86_64
kubectl-1.22.3-0.x86_64
kubernetes-cni-0.8.7-0.x86_64
主机名 | IP | VIP |
k8s-master01 | 192.168.30.106 | 192.168.30.115 |
k8s-master02 | 192.168.30.107 | |
k8s-master03 | 192.168.30.108 | |
k8s-node01 | 192.168.30.109 | |
k8s-node02 | 192.168.30.110 | |
k8s-nfs | 192.168.30.114 |
二、配置好PV和PVC
这里我就不再详细说明,可以参考我上篇(归海听雪:k8s-1.22.3版本中使用持久化卷之StorageClass+NFS)
三、部署mysql8服务
1、把mysql8配置文件放到configmap
这里面的一些配置参数,可以根据自已的实际情况进行修改优化
vim mysql-configmap.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
namespace: k8s-mysql
labels:
app: mysql
data:
my.cnf: |-
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
max_connections = 2000
secure_file_priv=/var/lib/mysql
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
skip-name-resolve
open_files_limit = 65535
table_open_cache = 128
log_error = /var/lib/mysql/mysql-error.log #错误日志路径
slow_query_log = 1
long_query_time = 1 #慢查询时间 超过1秒则为慢查询
slow_query_log_file = /var/lib/mysql/mysql-slow.log
default-storage-engine = InnoDB #默认存储引擎
innodb_file_per_table = 1
innodb_open_files = 500
innodb_buffer_pool_size = 64M
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 32M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
[mysqldump]
quick
max_allowed_packet = 16M #服务器发送和接受的最大包长度
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
kubectl apply -f mysql-configmap.yaml
2、生成mysql-statefulset文件
vim mysql-statefulset.yaml
apiVersion: v1
kind: Service
metadata:
namespace: default
name: mysql-headless
spec:
clusterIP: None #无头服务
selector:
app: mysql
ports:
- name: mysql
port: 3306
protocol: TCP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: default
name: mysql
spec:
podManagementPolicy: OrderedReady #pod名-> 0-N,删除N->0
replicas: 1
revisionHistoryLimit: 10
serviceName: mysql-headless
selector:
matchLabels:
app: mysql
template:
metadata: #name没写,会默认生成的
labels:
app: mysql
spec:
containers:
- name: mysql
image: registry-op.test.cn/mysql:8.0.19
ports:
- containerPort: 3306
name: client
env:
- name: MYSQL_ROOT_PASSWORD ## 配置Root用户默认密码
value: "112233"
resources:
limits:
cpu: 2000m
memory: 512Mi
requests:
cpu: 2000m
memory: 512Mi
# health check
livenessProbe:
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
exec:
command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
readinessProbe:
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
exec:
command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
# health check
volumeMounts:
- name: conf
mountPath: /etc/mysql/conf.d/my.cnf
subPath: my.cnf
- name: data
mountPath: /var/lib/mysql
readOnly: false
- name: localtime
readOnly: true
mountPath: /etc/localtime
volumes:
- name: conf
configMap:
name: mysql-config
defaultMode: 0755
- name: localtime
hostPath:
type: File
path: /etc/localtime
imagePullSecrets:
- name: registry-op.test.cn
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteMany"]
storageClassName: managed-nfs-storage
volumeMode: Filesystem
resources:
requests:
storage: 20Gi
kubectl apply -f mysql-statefulset.yaml
3、设置外部访问
vim mysql-service.yaml
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: default
labels:
app: mysql
spec:
type: NodePort
ports:
- name: tcp
port: 3306
nodePort: 32306
selector:
app: mysql
kubectl apply -f mysql-service.yaml
4、查看状态
# kubectl get pods|grep mysql
mysql-0 1/1 Running 0 15h
# kubectl get svc|grep mysql
mysql NodePort 10.96.196.95 <none> 3306:32306/TCP 15h
mysql-headless ClusterIP None <none> 3306/TCP 15h
5、登录mysql验证
# kubectl exec -it mysql-0 /bin/sh -n default
# mysql -uroot -p112233
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11172
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
说明mysql8可以正常使用了
6、查看存储
# kubectl get pv|grep mysql
pvc-98be7119-fe14-4d50-9f68-a4e4031c68b0 20Gi RWX Retain Bound default/data-mysql-0 managed-nfs-storage 15h
# kubectl get pvc|grep mysql
data-mysql-0 Bound pvc-98be7119-fe14-4d50-9f68-a4e4031c68b0 20Gi RWX managed-nfs-storage 15h
#登录到192.168.10.114存储上看一下数据
# ll /data/volumes/default-data-mysql-0-pvc-98be7119-fe14-4d50-9f68-a4e4031c68b0/
total 178224
drwxr-x--- 2 polkitd input 4096 Dec 28 18:34 #innodb_temp
-rw-r----- 1 polkitd input 56 Dec 28 18:34 auto.cnf
-rw-r----- 1 polkitd input 3110839 Dec 28 18:34 binlog.000001
-rw-r----- 1 polkitd input 340 Dec 28 18:36 binlog.000002
-rw-r----- 1 polkitd input 32 Dec 28 18:34 binlog.index
-rw------- 1 polkitd input 1676 Dec 28 18:34 ca-key.pem
-rw-r--r-- 1 polkitd input 1112 Dec 28 18:34 ca.pem
-rw-r--r-- 1 polkitd input 1112 Dec 28 18:34 client-cert.pem
-rw------- 1 polkitd input 1680 Dec 28 18:34 client-key.pem
-rw-r----- 1 polkitd input 5400 Dec 28 18:34 ib_buffer_pool
-rw-r----- 1 polkitd input 33554432 Dec 28 18:36 ib_logfile0
-rw-r----- 1 polkitd input 33554432 Dec 28 18:34 ib_logfile1
-rw-r----- 1 polkitd input 33554432 Dec 28 18:34 ib_logfile2
-rw-r----- 1 polkitd input 12582912 Dec 28 18:36 ibdata1
-rw-r----- 1 polkitd input 12582912 Dec 28 18:35 ibtmp1
drwxr-x--- 2 polkitd input 4096 Dec 28 18:34 mysql
-rw-r----- 1 polkitd input 3647 Dec 28 18:34 mysql-error.log
-rw-r----- 1 polkitd input 537 Dec 28 18:34 mysql-slow.log
-rw-r----- 1 polkitd input 30408704 Dec 28 18:36 mysql.ibd
drwxr-x--- 2 polkitd input 4096 Dec 28 18:34 performance_schema
-rw------- 1 polkitd input 1676 Dec 28 18:34 private_key.pem
-rw-r--r-- 1 polkitd input 452 Dec 28 18:34 public_key.pem
-rw-r--r-- 1 polkitd input 1112 Dec 28 18:34 server-cert.pem
-rw------- 1 polkitd input 1676 Dec 28 18:34 server-key.pem
drwxr-x--- 2 polkitd input 4096 Dec 28 18:34 sys
drwxr-x--- 2 polkitd input 4096 Dec 28 18:36 test
-rw-r----- 1 polkitd input 12582912 Dec 28 18:34 undo_001
-rw-r----- 1 polkitd input 10485760 Dec 28 18:36 undo_002
四、外部访问验证
找一台外部机器,安装一下mysql8的client包
1、下载mysql8包
mkdir /opt/mysql8
cd /opt/mysql8
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar
2、安装
tar -xf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-client-8.0.16-2.el7.x86_64.rpm mysql-community-libs-8.0.16-2.el7.x86_64.rpm mysql-community-common-8.0.16-2.el7.x86_64.rpm
3、验证登录mysql
前面已经配置了mysql8为nodeport访问,并且端口是32306,所以理论外部可以直接访问的
#mysql -h 192.168.30.109 -P 32306 -uroot -p112233
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11315
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
可以测试一下,把当前的pod删除,自动创建后,看一下数据库中的数据是否正常。
更多推荐
所有评论(0)