k8s部署mysql单机版
环境:
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-secret
namespace: 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-cnf
namespace: 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=86400
wait_timeout=86400
max_connections = 5000
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
skip-name-resolve
#master-slaver repication
server_id=1
log-bin=mysql-bin
read-only=0
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
gtid_mode=ON
enforce_gtid_consistency = ON
lower_case_table_names=1
sql_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-pv
namespace: ns-mysql
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
nfs:
path: /k8s/mysql/data
readOnly: false
server: 192.168.1.102
需要创建好子目录,k8s目录为nfs共享目录
mkdir -p /k8s/mysql/data
kubectl apply -f 3-pv.yaml
5.创建pvc
[root@master single]# more 4-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
namespace: ns-mysql
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeName: 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-mysql
labels:
app: mysql-hxl ##可自定义名称
name: mysql-hxl-sts ##可自定义名称
annotations:
kubesphere.io/alias-name: mysql-hxl ##可自定义名称
spec:
replicas: 1 ##这里只能设置副本数为1
selector:
matchLabels:
app: mysql-hxl
template:
metadata:
labels:
app: mysql-hxl ##必须与spec.selector 同名称
annotations:
kubesphere.io/containerSecrets: null
logging.kubesphere.io/logsidecar-config: '{}'
spec:
containers:
- name: hxl-container
##type: worker
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: '0.01'
memory: 10Mi
limits:
cpu: '0.98'
memory: 1700Mi
image: registry.cn-shenzhen.aliyuncs.com/hxlk8s/mysql:5.7.30
ports:
- name: tcp-3306
protocol: TCP
containerPort: 3306
##servicePort: 3306
- name: tcp-33060
protocol: TCP
containerPort: 33060
##servicePort: 33060
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_ROOT_PASSWORD
volumeMounts:
- name: hxl-cnf-volume ##必须与volumes定义的同名称
readOnly: false
mountPath: /etc/mysql
- name: hxl-data-volume ##必须与volumes定义的同名称
readOnly: false
mountPath: /var/lib/mysql
serviceAccount: default
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: mysql-hxl
topologyKey: kubernetes.io/hostname
initContainers: []
imagePullSecrets: null
volumes:
- name: hxl-cnf-volume #映射configMap信息
configMap:
name: mysql-cnf
items:
- key: my.cnf
path: my.cnf
- name: hxl-data-volume #映射pvc信息
persistentVolumeClaim:
claimName: mysql-pvc
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
kubectl apply -f 5-sts.yaml
deployment版
vi 5-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hxl-mysql-deploy
namespace: ns-mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql-hxl
template:
metadata:
labels:
app: mysql-hxl
spec:
containers:
- name: hxl-container
image: registry.cn-shenzhen.aliyuncs.com/hxlk8s/mysql:5.7.30
imagePullPolicy: IfNotPresent
ports:
- name: tcp-3306
protocol: TCP
containerPort: 3306
##servicePort: 3306
- name: tcp-33060
protocol: TCP
containerPort: 33060
##servicePort: 33060
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: MYSQL_ROOT_PASSWORD
volumeMounts:
- name: hxl-cnf-volume
readOnly: false
mountPath: /etc/mysql
- name: hxl-data-volume
readOnly: false
mountPath: /var/lib/mysql
volumes:
- name: hxl-cnf-volume #映射configMap信息
configMap:
name: mysql-cnf
items:
- key: my.cnf
path: my.cnf
- name: hxl-data-volume #映射pvc信息
persistentVolumeClaim:
claimName: mysql-pvc
8.创建nodeport service
[root@master single]# more 7-nodeport-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql-front
labels:
app: mysql-hxl
namespace: ns-mysql
spec:
selector:
app: mysql-hxl
type: NodePort
ports:
- name: ''
port: 3306
protocol: TCP
targetPort: 3306
nodePort: 30001 #指定主机任意端口30000-32767
sessionAffinity: 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)
该账号默认对连接客户端不做限制.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2024-03-05 神舟数据库物理备份和恢复
2024-03-05 神舟数据库导出导入
2024-03-05 神舟数据库日常维护
2024-03-05 神舟通用数据库安装(交互方式)
2020-03-05 oracle 12C CDB下开启wallet
2019-03-05 redis集群部署+节点端口修改+数据恢复