生产中k8s适合mysql_在K8S集群中构建复杂的MySQL单实例数据库
文档说明
实验环境:kubernetes Version v1.9.6
网络CNI:fannel
存储CSI: NFS Dynamic Class
前期准备
简单部署 (无法满足生产环境要求)
一、持久化存储卷pvc
mysql-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-claim
annotations:
volume.beta.kubernetes.io/storage-class: "default"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
二、敏感数据Secret (最好base64编码加密)
mysql-dev-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysql-dev-secret
type: Opaque
data:
MYSQL_ROOT_PASSWORD: devadmin
MYSQL_DATABASE: test
三、Deployment
mysql-deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mysql
namespace: default
labels:
k8s-app: mysql
spec:
replicas: 1
selector:
matchLabels:
k8s-app: mysql
template:
metadata:
labels:
k8s-app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
imagePullPolicy: Always
envFrom:
- secretRef:
name: mysql-dev-secret
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: nfs-pv
mountPath: /var/lib/mysql
volumes:
- name: nfs-pv
persistentVolumeClaim:
claimName: mysql-claim
四、Service
1无clusterIP (kubernetes内部通过clusterIP访问)
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
k8s-app: mysql
clusterIP: None
2 NodePort (通过NodePort暴露给集群外部访问,可以搭配外部LoadBalancer提供服务)
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
k8s-app: mysql
ports:
- nodePort: 33006
protocol: TCP
port: 3306
targetPort: 3306
type: NodePort
验证:
PVC
PVC.png
Secret
Secret.png
Deployment
Deployment.png
Service
Service.png
扩展部署(可用于生产环境)
一、持久化存储卷pvc (pv 详见前期准备nfs提供动态pv部分)
tips: 确保存储卷后端的文件夹内为空,不然后期重新启动,会报错
mysql-ex-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-ex-claim
annotations:
volume.beta.kubernetes.io/storage-class: "default" #根据实际情况调整
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi #根据实际情况调整
二、敏感数据secret
mysql-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysql-user-pwd
data:
mysql-root-pwd: aGFyZHRvZ3Vlc3M=
mysql-app-user-pwd: aGFyZHRvZ3Vlc3M=
mysql-test-user-pwd: aGFyZHRvZ3Vlc3M=
image.png
三、ConfigMap用户自定义配置
mysql-cm.yaml (mysql8.0配置)
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
custom.cnf: |
[mysqld]
default_storage_engine=innodb
skip_external_locking
lower_case_table_names=1
skip_host_cache
skip_name_resolve
mysql-cm.yaml (mysql5.7配置)
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
custom.cnf: |
[mysqld]
server-id=1
log-bin
expire_logs_days=7
sync_binlog=0
binlog_cache_size=1M
四、Deployment (包含初始化容器、健康检查)
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: mysql-ex
name: mysql-ex
spec:
replicas: 1
selector:
matchLabels:
app: mysql-ex
template:
metadata:
labels:
app: mysql-ex
spec:
initContainers:
- name: mysql-init
image: busybox
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_TEST_USER_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-user-pwd
key: mysql-test-user-pwd
command:
- sh
- "-c"
- |
set -ex
rm -rf /var/lib/mysql/lost+found
cat > /docker-entrypoint-initdb.d/mysql-testdb-initt.sql <
create database testdb default character set utf8;
grant all on testdb.* to 'test'@'%' identified by '$MYSQL_TEST_USER_PASSWORD';
flush privileges;
EOF
cat > /docker-entrypoint-initdb.d/mysql-appdb-init.sql <
create table app(id int);
insert into app values(1);
commit;
EOF
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
- name: mysql-initdb
mountPath: /docker-entrypoint-initdb.d
containers:
#这边可以更改image: mysql:5.7
- image: mysql
name: mysql
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-user-pwd
key: mysql-root-pwd
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-user-pwd
key: mysql-app-user-pwd
- name: MYSQL_USER
value: app
- name: MYSQL_DATABASE
value: appdb
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
- name: mysql-initdb
mountPath: /docker-entrypoint-initdb.d
- name: mysql-config
mountPath: /etc/mysql/conf.d/
ports:
- name: mysql
containerPort: 3306
livenessProbe:
exec:
command:
- /bin/sh
- "-c"
- MYSQL_PWD="${MYSQL_ROOT_PASSWORD}"
- mysql -h 127.0.0.1 -u root -e "SELECT 1"
initialDelaySeconds: 30
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
readinessProbe:
exec:
command:
- /bin/sh
- "-c"
- MYSQL_PWD="${MYSQL_ROOT_PASSWORD}"
- mysql -h 127.0.0.1 -u root -e "SELECT 1"
initialDelaySeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: mysql-ex-claim
- name: mysql-initdb
emptyDir: {}
- name: mysql-config
configMap:
name: mysql-config
五、Service
NodePort形式
apiVersion: v1
kind: Service
metadata:
name: mysql-ex
spec:
selector:
app: mysql-ex
ports:
- nodePort: 33016
protocol: TCP
port: 3306
targetPort: 3306
type: NodePort
tips: 以上默认使用的image用的latest是mysql8.0 configmap有变化
验证:
image.png
image.png
数据库连接情况:
image.png
image.png
生产中k8s适合mysql_在K8S集群中构建复杂的MySQL单实例数据库相关推荐
- kaniko-在k8s集群中构建容器镜像
微信公众号搜索 DevOps和k8s全栈技术 ,即可关注公众号,也可扫描文章最后的二维码关注公众号,每天会分享技术文章供大家阅读参考哈~ 前言 通常情况下,我们在使用dockerfile构建镜像的时候 ...
- oracle rac ocr文件,管理oracle集群中的ocr文件
OCR 文件及位置 ocrconfig 工具是Oracle 集群注册表的主要配置工具.可以使用此工具执行以下操作: 使用–export 选项生成OCR 的逻辑备份,并在以后使用–import 选项从这 ...
- K8s入门教程|这个给集群搞硬装的才是幕后英雄
大家好啊,咱们的Kubernetes学习笔记时隔两月终于又迎来了更新,前面咱们介绍的Deployment.Service.Statefulset 相信看过文章的同学都已经明白他们各自的能力和使用场景了 ...
- k8s容器化部署及集群搭建笔记
kubeadm部署k8s 将此文章写给我最心爱的女孩 目录 kubeadm部署k8s 1.部署准备工作 小知识 2.安装具体步骤 1.安装docker 2.配置国内镜像加速器 3.添加k8s的阿里云y ...
- 手动安装K8s第三节:etcd集群部署
手动安装K8s第三节:etcd集群部署 准备安装包 https://github.com/coreos/etcd 版本:3.2.18 wget https://github.com/coreos/et ...
- 集群scan_扫描k8s集群中的漏洞
Kubei是一个漏洞扫描和CIS Docker基准测试工具,它能够对kubernetes集群进行准确,即时的风险评估.Kubei扫描Kubernetes集群中正在使用的所有图像,包括应用程序Pod和系 ...
- K8S部署工具:KubeOperator集群导入
K8S部署工具:KubeOperator集群导入 基本信息⚓︎ 输入要导入集群的名称.Api Server.Router.Token 示例 Api Server: https://172.16.10. ...
- K8S部署工具:KubeOperator集群部署
K8S部署工具:KubeOperator集群部署 集群信息⚓︎ 项目: 选择集群所属项目 供应商: 支持裸金属(手动模式)和部署计划(自动模式) 版本: 支持版本管理中最新的两个 Kubernetes ...
- K8S部署工具:KubeOperator集群规划-手动模式
K8S部署工具:KubeOperator集群规划-手动模式 KubeOperator 支持两种 Kubernetes 集群部署方式,一种是手动模式,另外一种是自动模式.手动模式下,用户需要自行准备主机 ...
最新文章
- linux mysql 单机主从_MariaDB单机双实例主从复制
- linux virt java_Linux下Java环境安装
- 微信小程序最常用的布局——Flex布局
- 物联网计算机相关专业吗,物联网工程属于计算机专业吗
- python 共享数据_用Python共享全局数据
- 将字符串转换为全角或半角
- servlet container:tomcat jetty and undertow
- [转]Terraform 使用 - 从最简单例子开始
- msp430和stm32 lcd屏驱动程序
- 旧版sai笔刷_漂亮的sai笔刷大全(ps笔刷包) 简化中文版
- idea设置jsp模板
- 部署Exchange 2010
- 【设计鉴赏】超美的墨汁喷溅字体
- 家里网络连不上outlook_家里OUTLOOK上不了如何处理--
- 开学季好物怎么选,学生党必备的几款好物分享
- Flink SQL自定义connector
- Mac电脑的微信截图快捷键
- 9、RH850 SPI(CSIH) 通讯功能和配置
- XML详解----Schema
- [计算机图形学入门]9.几何
热门文章
- java中getup用法_你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!
- java8 groupingby_Java8 教程第五章之Streams Collectors groupingBy
- matlab读取xlsx文件,从电子表格读取数据
- 【存档】MySQL(8.0.12 .msi)安装文档
- OpenDayLight Helium实验一 OpenDaylight的C/S模式实验
- 【MIT领导力课程笔记】前Nokia 总裁Ollila——打造移动未来
- asp.net中的加密方法
- k-means算法实现python
- 五大软件设计原则学习笔记2——开放封闭原则
- php nb2br,PHP中基本符号及使用方法