坚持学习Java100天第019天 使用k8s部署MySQL并支持远程访问

2022年6月26日 1042点热度 0人点赞 0条评论

大家好,又来给大家分享Java的学习文章了,今天分享的是使用k8s部署MySQL并支持远程访问。


今天的代码封装使用的是Go,不过这个并不影响大家学Java,因为思想是相通的。


项目代码可以从我的Github获取,地址是:https://github.com/zhangdapeng520/zdpgo_k8s


昨天的文章中,已经和大家分享了使用yaml部署的基本操作,今天这篇文章,带大家具体实战一下。


在真实的开发中,MySQL一般建议是单独部署的,作者个人的开发生涯中,之前用的最多的是PostgreSQL,当时采用的是Docker容器化部署,并没有遇到特别棘手的问题。将MySQL使用K8S进行容器化部署,个人还没有深入调研过。不过既然已经进入了云原生时代,像阿里这样的企业已经实现了全容器化部署,那么,使用K8S管理MySQL,应该也是一种趋势。


另一个方面,即使大家不会真的在工作中使用k8s部署MySQL,也可以将这篇文章作为一个k8s的练习。


废话不多说,进入今天的正题。


在k8s中,我们要部署一个服务,最关键的就是要创建RC和Service。RC叫做副本控制器,是用来创建Pod的,Service是服务,是用来在k8s集群中,和其他服务相互通信的。

在k8s中,要使得外部能够访问集群中的服务,最关键的就是要将Service的Type改为NodePort,表示要对外暴露端口。

以上两点非常的关键,是大家能否彻底掌握今天这个实践案例的关键。

今天这个案例,我们采用yaml配置文件的方式来部署MySQL。

首先,创建mysql-rc.yaml

apiVersion: v1kind: ReplicationController # 副本控制器RCmetadata:  name: mysql # RC的名称,全局唯一spec:  type: NodePort # 指定可以通过外网访问  replicas: 1 # Pod副本的期待数量  selector:    app: mysql # 符合目标的Pod拥有此标签  template: # 根据此模板创建Pod的副本,也就是实例    metadata:      labels:        app: mysql # Pod副本拥有的标签,对应RC的selector    spec:      containers: # Pod内容器的定义部分        - name: mysql          image: mysql          ports:            - containerPort: 3306 # 容器监听的端口号          env:            - name: MYSQL_ROOT_PASSWORD              value: "root" # 自定义MySQL的root用户密码

我们使用以下命令创建一个RC:

kubectl create -f mysql-rc.yaml

然后,我们创建mysql-svc.yaml

apiVersion: v1kind: Service # 表名是Kubernetes Servicemetadata:  name: mysql # Service的全局唯一名称spec:  ports:    - port: 3306 # Service提供服务的端口号  selector:    app: mysql # Service对应的Pod拥有这里定义的标签

我们实现以下命令来创建一个Service:

kubectl create -f mysql-svc.yaml

然后,我们可以使用以下命令来查看创建结果:

kubectl get svc

以上就是一个实践案例,是不是特别简单?比起Docker部署来说,实际上稍微复杂了一点,但是k8s的优势是可以轻松创建集群,轻松扩容和收缩,自动部署和运维,这些都是Docker不具备的。

为了方便大家使用,当然我自己也经常用,所以封装了一个k8s的库,是用Go语言开发的,支持一键部署。

比如,我们要创建一个支持远程访问的MySQL服务,使用以下代码:

package main
import ( "github.com/zhangdapeng520/zdpgo_k8s" "github.com/zhangdapeng520/zdpgo_log" "github.com/zhangdapeng520/zdpgo_ssh")
/*@Time : 2022/6/26 14:43@Author : 张大鹏@File : main@Software: Goland2021.3.1@Description: 部署Redis实例*/
func main() { // 创建k8s对象 k := zdpgo_k8s.NewWithConfig(&zdpgo_k8s.Config{Ssh: &zdpgo_ssh.Config{ Host: "192.168.33.10", Port: 22, Username: "zhangdapeng", Password: "zhangdapeng", }}, zdpgo_log.Tmp)
// 创建MySQL RC k.CreateMysqlRc()
// 创建MySQL SVC k.CreateMysqlSvc()}

然后使用IDEA连接测试:

图片

怎么样,是不是特别简单?

这个代码是开源的,大家可以从以下地址获取:

https://github.com/zhangdapeng520/zdpgo_k8s

最后打一个小广告哈,是关于游戏的,不喜欢玩游戏的可以不用继续往下看了哈,如果你稍微喜欢玩游戏,则强烈推荐你下载看看,这个App真的不错,我自己用了五六年了,非常好用,里面经常会更新一些送Vip送红包送元宝的福利游戏。

 

图片


为啥推荐呢?

 

图片


都有什么游戏呢?

 

图片


下载地址:https://www.tsyule.cn/index.php/index/index/appid/7/tgid/ca0000500


通过这个地址下载一个手机App,苹果手机和安卓手机都可以下载哈。下载以后安装,然后注册一个账号登录就行了。里面有几千款游戏,特别是那种BT游戏,特别多。BT游戏就是只要你玩游戏,就会自动送你VIP,送你元宝,送你钻石的那种。打怪掉宝的几率也特别高,喜欢玩游戏的可以自行下载体会哈。

20480坚持学习Java100天第019天 使用k8s部署MySQL并支持远程访问

root

这个人很懒,什么都没留下

文章评论