k8s和mysql怎么通信_通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷...

本文介绍了如何在k8s上搭建MySQL,讲解了k8s的网络、持久卷和服务配置。通过创建MySQL部署和服务,展示了如何使用持久卷申请实现数据持久化,并探讨了k8s网络的多种访问方式,包括NodePort、LoadBalancer和Ingress。此外,文章还讨论了k8s的动态持久卷和静态持久卷的区别与应用场景,以及在不同网络环境下的通信策略。
摘要由CSDN通过智能技术生成

上一篇"通过实例快速掌握k8s(Kubernetes)核心概念"讲解了k8s的核心概念,有了核心概念整个骨架就完整了,应付无状态程序已经够了,但还不够丰满。应用程序分成两种,无状态和有状态的。一般的前段和后端程序都是无状态的,而数据库是有状态的,他需要把数据存储起来,这样即使断电,数据也不会丢失。要创建有状态的程序,还需要引入另外一些k8s概念。它们虽然不是核心,但也很重要,共有三个,持久卷,网络和参数配置。掌握了这些之后,基本概念就已经做到了全覆盖,k8s就已经入门了。我们通过搭建MySQL来熟悉这些k8s概念。容器本身是无状态的,一旦出现问题它会被随时销毁,它存储的数据也就丢失了。MySQL需要一个能保存数据的持久层,在容器被销毁之后仍然存在,k8s叫它持久卷。

创建和验证MySQL镜像:

在k8s上安装MySQL之前,先用Docker验证一下MySQL镜像:

docker run --name test-mysql -p 3306:33060 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

“root”是根(root)用户的password,这里是在创建MySQL容器时指定“root”用户的password。“test-MySQL”是容器的名字。“mysql:5.7”用的是docker库里的“MySQL”5.7版本。这次没有用最新的8.0版,因为新版跟以前的客户端不兼容,需要修改很多东西。所用的镜像是全版的Linux,因而文件比较大,有400M。

容器建好了之后,键入“docker logs test-mysql”,查看日志。

...

2019-10-03T06:18:50.439784Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.17' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.

2019-10-03T06:18:50.446543Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060

查看容器状态。

vagrant@ubuntu-xenial:~$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

3b9c50420f5b mysql:latest "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 3306/tcp, 33060/tcp test-mysql

为了验证MySQL,需要在虚机上安装MySQL客户端。

sudo apt-get -y -f install mysql-client

完成之后,键入“docker inspect test-mysql”找到容器IP地址, 下面显示"172.17.0.2"是容器IP地址。

vagrant@ubuntu-xenial:~$ docker inspect test-mysql

...

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

...

键入“mysql -h 172.17.0.2 -P 3306 --protocol=tcp -u root -p”登录到MySQL,"172.17.0.2"是MySQL的IP地址,“3306”是MySQL端口,是在创建镜像时设定的对外开放的端口,“root”是用户名,“-p”是password的参数选项。敲入命令后,系统要求输入password,输入后,显示已成功连接到MySQL。

vagrant@ubuntu-xenial:~$ mysql -h 172.17.0.2 -P 3306 --protocol=tcp -u root -p

...

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.7.27 MySQL Community Server (GPL)

...

在k8s上安装MySQL

在k8s上安装MySQL分成三个部分,创建部署文件,创建服务文件和安装测试。

部署(Deployment)文件

下面是部署配置文件。在上一篇文章中已经详细讲解了文件格式,所有的k8s的配置文件格式都是相同的。“template”之上是部署配置,从“template”向下是Pod配置。从“containers”开始是Pod里面的容器配置。“env:”是环境变量,这里通过环境变量来设置数据库的用户名和口令,后面还会详细讲解。MySQL的端口是“3306”

apiVersion: apps/v1

kind: Deployment # 类型是部署

metadata:

name: mysql-deployment # 对象的名字

spec:

selector:

matchLabels:

app: mysql #用来绑定label是“mysql”的Pod

strategy:

type: Recreate

template: # 开始定义Pod

metadata:

labels:

app: mysql #Pod的Label,用来标识Pod

spec:

containers: # 开始定义Pod里面的容器

- image: mysql:5.7

name: mysql-con

imagePullPolicy: Never

env: # 定义环境变量

- name: MYSQL_ROOT_PASSWORD # 环境变量名

value: root # 环境变量值

- name: MYSQL_USER

value: dbuser

- name: MYSQL_PASSWORD

value: dbuser

args: ["--default-authentication-plugin=mysql_native_password"]

ports:

- containerPort: 3306 # mysql端口

name: mysql

服务(Service)文件

下面是服务配置文件,这个与上一篇讲的配置基本相同,这里就不解释了。

apiVersion: v1

kind: Service

metadata:

name: mysql-se

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值