首页 > 数据库 >云原生之在kubernetes集群下部署Mysql应用

云原生之在kubernetes集群下部署Mysql应用

时间:2023-04-18 17:32:56浏览次数:43  
标签:原生 kubernetes Mysql 8d 130d Running master mysql k8s

(云原生之在kubernetes集群下部署mysql应用)

一、Mysql介绍

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。MySQL是一种开源的关系型数据库管理系统,可将数据保存在不同的表中,而不是将所有数据放在一个大的仓库内,从而加快了访问速度并提高了灵活性。MySQL 使用了标准的 SQL 语言形式。支持大型的数据库,可以处理拥有上千万条记录的大型数据库。MySQL 还可用于多种系统中,且支持多种语言。

二、kubernetes集群介绍

1.k8s简介

kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

2.k8s架构图

kubernetes集群架构示意图

在这里插入图片描述

三、本次实践介绍

1.本次实践简介

1.在k8s集群环境中快速部署一个mysql应用服务,在个人环境中测试与学习; 2.本次实践环境为个人环境,生产环境请谨慎使用; 3.本次实践直接在yaml文件中写入数据库账号信息,方便以最快速度部署一个测试数据库服务; 4.如果了安全,可以使用k8s的Secret资源对象保存数据库的账号密码信息,来加强数据库的安全性;

2.本次环境规划

本次实践规划环境介绍

hostname IP地址 操作系统版本 k8s版本 角色
k8s-master 192.168.3.201 centos7.6 v1.23.1 master节点
k8s-node01 192.168.3.202 centos7.6 v1.23.1 worker节点
k8s-node02 192.168.3.203 centos7.6 v1.23.1 worker节点

三、检查本地k8s集群环境

1.检查k8s各节点状态

检查k8s各节点状态,确保k8s集群各节点状态正常。

[root@k8s-master ~]# kubectl get nodes 
NAME         STATUS   ROLES                  AGE    VERSION
k8s-master   Ready    control-plane,master   130d   v1.23.1
k8s-node01   Ready    <none>                 130d   v1.23.1
k8s-node02   Ready    <none>                 130d   v1.23.1


2.检查k8s版本

查看k8s的版本,注意部署应用时兼容的k8s版本。

[root@k8s-master ~]# kubectl version --short 
Client Version: v1.23.1
Server Version: v1.23.1

3.检查k8s系统pod状态

检查k8s集群的系统pod状态,确保所有系统pod运行正常。

[root@k8s-master ~]# kubectl get pods -n kube-system 
NAME                                       READY   STATUS    RESTARTS     AGE
calico-kube-controllers-7bc6547ffb-2nf66   1/1     Running   1 (8d ago)   130d
calico-node-8c4pn                          1/1     Running   1 (8d ago)   130d
calico-node-f28qq                          1/1     Running   1 (8d ago)   130d
calico-node-wmc2j                          1/1     Running   1 (8d ago)   130d
coredns-6d8c4cb4d-6gm4x                    1/1     Running   1 (8d ago)   130d
coredns-6d8c4cb4d-7vxlz                    1/1     Running   1 (8d ago)   130d
etcd-k8s-master                            1/1     Running   1 (8d ago)   130d
kube-apiserver-k8s-master                  1/1     Running   1 (8d ago)   130d
kube-controller-manager-k8s-master         1/1     Running   1 (8d ago)   130d
kube-proxy-8dfw8                           1/1     Running   1 (8d ago)   130d
kube-proxy-ghzrv                           1/1     Running   1 (8d ago)   130d
kube-proxy-j867z                           1/1     Running   1 (8d ago)   130d
kube-scheduler-k8s-master                  1/1     Running   1 (8d ago)   130d


四、编辑mysql.yaml文件

编辑mysql.yaml,该文件使用最简单方式部署了一个mysql应用服务。

[root@k8s-master mysql]# cat mysql.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: my-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
         app: mysql
    spec:
      containers: # 定义容器部分
      - image: mysql:5.7
        name: mysql
        ports:
         - containerPort: 3306
        env:
         - name: MYSQL_ROOT_PASSWORD
           value: "123456"
---
apiVersion: v1
kind: Service
metadata:
  name: my-db
spec:
  ports:
      - port: 3306
        nodePort: 30011
  selector:
      app: mysql
  type: NodePort 

五、创建mysql应用

1.应用mysql.yaml

应用mysql.yaml文件,快速创建部署一个数据库服务。


[root@k8s-master mysql]# kubectl apply -f mysql.yaml 
deployment.apps/my-mysql created
service/my-db created


2.查看pod状态

检查pod是否正常运行,确保pod运行状态正常。如果运行异常,可根据pod日志信息,判断故障。

[root@k8s-master ~]# kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
my-mysql-9b877f47-nqf5f   1/1     Running   0          7m54s




六、查看mysql服务IP

查看svc资源对象,查看mysql的外部访问端口为30011

[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          130d
my-db        NodePort    10.98.200.79   <none>        3306:30011/TCP   8m32s


七、外部客户端远程访问mysql

远程连接mysql服务,进入mysql数据库,确保能正常进入。


[root@server ~]# mysql -h 192.168.3.202 -P30011 -uroot -p123456
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 2
Server version: 5.7.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> 


八、本次实践总结

1.本次实践为之前在初学k8s时的学习笔记,旨在为新手小白快速部署一个mysql应用; 2.mysql的存储可以配置持久存储来保存数据,使用storageclass来配置持久存储; 3.安全性方面,可以配置secret来确保数据库的安全性; 4.还可以配置初始化容器,来检查pod的运行环境是否正常; 5.对于本次yaml文件,可以增加更多的功能及高级特性,进行不断的优化升级; 6.本次实践的yaml文件可作为新手小白后续进阶学习的基础模板。

标签:原生,kubernetes,Mysql,8d,130d,Running,master,mysql,k8s
From: https://blog.51cto.com/u_14664141/6195327

相关文章

  • MySQL8初始化报错 --Data Dictionary initialization failed
     我使用的命令是:/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/  --user=mysql  拷少参数了还找半天,,,,,,,, [root@node02bin]#./mysqld--initialize-insecure--defaults-file=/etc/my.cnf--basedir=/usr/lo......
  • MySQL参数max_connect_errors分析释疑【转】
    最近一MySQL服务器,由于一些特殊因素遇到“ERROR1129(00000):Host'xxx'isblockedbecauseofmanyconnectionerrors.Unblockwith'mysqladminflush-hosts'”,在问题解决后,在详细了解参数max_connect_errors的过程中,有些不同网络资料的矛盾描述确实让我有点迷惑和混淆(关于......
  • mysql——with xxx as生成临时表
    1、withxxxas (select"a"asname,1asageunionallselect"b",2)生成一张叫xxx的临时表nameagea1b2   2、withxxxas (selecta字段fromb表),xxx2as(selecta2字段fromb2表)生成两张临时表,一张叫xxx,一张叫xxx2 https://zhuanlan.z......
  • mysql——关于join的一些知识
    1、select*fromajoinb,与select*froma,b结果是相同的,都是两张表的笛卡尔积 2、jion、innerjoin和crossjoin在innerjoin没有加on条件时,join、innerjoin和crossjoin没有区别xxx joinxxx,就等于xxxinnerjoinxxx,也等于 xxxcrossjoinxxx,得到的结果都是两......
  • MySQL多源复制报错,在线更改relay_log_info_repository,master_info_repository参数
    MySQL在5.7之后才支持多源复制,之前介绍过官方文档。原理:多源复制加入了一个叫做Channel的概念,每一个Channel都是一个独立的Slave,都有一个IO_THREAD和SQL_THREAD。原理和普通复制一样。我们只需要对每一个Master执行ChangeMaster语句,只需要在每个语句最后使用ForChannel来进行......
  • mysql在线将传统复制模式改为GTID复制模式
    gtid_mode参数各个值的含义:OFF:生成的是匿名事务,从库只能应用匿名事务OFF_PERMISSIVE:生成的是匿名事务,从库可以应用匿名事务和GTID事务ON_PERMISSIVE:生成的是GTID事务,从库可以应用匿名事务和GTID事务ON:生成的是GTID事务,从库只能应用GTID事务一、在线开启GTID,需要满足两个条件......
  • #### Mysql 基础
    MySQL数据库知识基本概念MySQL搭建SQL语句编写约束索引事务锁机制设计数据库表性能优化学习建议其中,SQL语句编写和设计数据库表这两个能力一定要有!比如让你做一个学生管理系统,你要能想到需要哪些表,比如学生表、班级表;每个表需要哪些字段、字......
  • 火山引擎云原生数据仓库 ByteHouse 技术白皮书 V1.0 (Ⅲ)
     更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群近日,《火山引擎云原生数据仓库ByteHouse技术白皮书》正式发布。白皮书简述了ByteHouse基于ClickHouse引擎的发展历程,首次详细展现ByteHouse的整体架构设计及自研核心技术,为云原生数据......
  • 火山引擎云原生数据仓库 ByteHouse 技术白皮书 V1.0 (Ⅲ)
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,《火山引擎云原生数据仓库ByteHouse技术白皮书》正式发布。白皮书简述了ByteHouse基于ClickHouse引擎的发展历程,首次详细展现ByteHouse的整体架构设计及自研核心技术,为云原生数......
  • MySQL 执行计划分析
    一、获取方法与阅读顺序1. 获取方法注意这个执行计划只是预估的explainsql语句--或者descsql语句2.阅读顺序id值相同:从上往下顺序执行(下图为tc->c->t)一般越小或者返回值越少的表会越先被执行,这样才能保证后面关联时外层查询结果尽量小,内层查询被循环次数少id值不同:越大......