文档说明

实验环境: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单实例数据库相关推荐

  1. kaniko-在k8s集群中构建容器镜像

    微信公众号搜索 DevOps和k8s全栈技术 ,即可关注公众号,也可扫描文章最后的二维码关注公众号,每天会分享技术文章供大家阅读参考哈~ 前言 通常情况下,我们在使用dockerfile构建镜像的时候 ...

  2. oracle rac ocr文件,管理oracle集群中的ocr文件

    OCR 文件及位置 ocrconfig 工具是Oracle 集群注册表的主要配置工具.可以使用此工具执行以下操作: 使用–export 选项生成OCR 的逻辑备份,并在以后使用–import 选项从这 ...

  3. K8s入门教程|这个给集群搞硬装的才是幕后英雄

    大家好啊,咱们的Kubernetes学习笔记时隔两月终于又迎来了更新,前面咱们介绍的Deployment.Service.Statefulset 相信看过文章的同学都已经明白他们各自的能力和使用场景了 ...

  4. k8s容器化部署及集群搭建笔记

    kubeadm部署k8s 将此文章写给我最心爱的女孩 目录 kubeadm部署k8s 1.部署准备工作 小知识 2.安装具体步骤 1.安装docker 2.配置国内镜像加速器 3.添加k8s的阿里云y ...

  5. 手动安装K8s第三节:etcd集群部署

    手动安装K8s第三节:etcd集群部署 准备安装包 https://github.com/coreos/etcd 版本:3.2.18 wget https://github.com/coreos/et ...

  6. 集群scan_扫描k8s集群中的漏洞

    Kubei是一个漏洞扫描和CIS Docker基准测试工具,它能够对kubernetes集群进行准确,即时的风险评估.Kubei扫描Kubernetes集群中正在使用的所有图像,包括应用程序Pod和系 ...

  7. K8S部署工具:KubeOperator集群导入

    K8S部署工具:KubeOperator集群导入 基本信息⚓︎ 输入要导入集群的名称.Api Server.Router.Token 示例 Api Server: https://172.16.10. ...

  8. K8S部署工具:KubeOperator集群部署

    K8S部署工具:KubeOperator集群部署 集群信息⚓︎ 项目: 选择集群所属项目 供应商: 支持裸金属(手动模式)和部署计划(自动模式) 版本: 支持版本管理中最新的两个 Kubernetes ...

  9. K8S部署工具:KubeOperator集群规划-手动模式

    K8S部署工具:KubeOperator集群规划-手动模式 KubeOperator 支持两种 Kubernetes 集群部署方式,一种是手动模式,另外一种是自动模式.手动模式下,用户需要自行准备主机 ...

最新文章

  1. linux mysql 单机主从_MariaDB单机双实例主从复制
  2. linux virt java_Linux下Java环境安装
  3. 微信小程序最常用的布局——Flex布局
  4. 物联网计算机相关专业吗,物联网工程属于计算机专业吗
  5. python 共享数据_用Python共享全局数据
  6. 将字符串转换为全角或半角
  7. servlet container:tomcat jetty and undertow
  8. [转]Terraform 使用 - 从最简单例子开始
  9. msp430和stm32 lcd屏驱动程序
  10. 旧版sai笔刷_漂亮的sai笔刷大全(ps笔刷包) 简化中文版
  11. idea设置jsp模板
  12. 部署Exchange 2010
  13. 【设计鉴赏】超美的墨汁喷溅字体
  14. 家里网络连不上outlook_家里OUTLOOK上不了如何处理--
  15. 开学季好物怎么选,学生党必备的几款好物分享
  16. Flink SQL自定义connector
  17. Mac电脑的微信截图快捷键
  18. 9、RH850 SPI(CSIH) 通讯功能和配置
  19. XML详解----Schema
  20. [计算机图形学入门]9.几何

热门文章

  1. java中getup用法_你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!
  2. java8 groupingby_Java8 教程第五章之Streams Collectors groupingBy
  3. matlab读取xlsx文件,从电子表格读取数据
  4. 【存档】MySQL(8.0.12 .msi)安装文档
  5. OpenDayLight Helium实验一 OpenDaylight的C/S模式实验
  6. 【MIT领导力课程笔记】前Nokia 总裁Ollila——打造移动未来
  7. asp.net中的加密方法
  8. k-means算法实现python
  9. 五大软件设计原则学习笔记2——开放封闭原则
  10. php nb2br,PHP中基本符号及使用方法