k8s本地构建后台开发环境

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s本地构建后台开发环境相关的知识,希望对你有一定的参考价值。

参考技术A 近期陆续遇到几个问题,涉及到zk和kafka相关。为了学习zk和kafka等中间件,同时也更方便的程序,萌生了在本地部署mysql,zk,kafka集群的想法。毕竟集群维度的扩容,启停等操作没有办法在测试环境中执行。

在云原生的背景下,使用k8s来部署这些中间件无疑是最方便的选择之一,也可以顺便学习一下k8s,于是有了这篇文章。使用k8s还有一个好处,只需写好yaml文件,其他同学也可以快速复制这个环境。

本文不会可以介绍k8s相关的概念,这是一篇tutorial,重点在于可以快速的复刻。

虽然不刻意介绍k8s相关的概念,但是有些概念还是不得不提。k8s中服务分为有状态的服务(stateful)和无状态的服务(stateless),mysql、zk、kafka等都属于有状态的服务。我们要部署多节点的集群,而不是像使用docker似的直接拉起一个单节点服务。对这些细节感兴趣的同学,请阅读k8s的官方文档进行学习。

k8s关于stateful的介绍和示例: https://kubernetes.io/docs/tasks/run-application/run-single-instance-stateful-application/

最后提一点,学无止境,也要适可而止,重点还是放在测试业务上,比如测试集群节点down机后业务软件的高可用设计等。

ok, let's go

部署mysql集群仅需按照 官方文档 步骤操作即可,有如下点改动:

mysql-services.yaml

mysql-statefulset.yaml

执行如下命令即可创建mysql集群

查看services列表,可看到有读写两个services,其中可写的集群外部可通过30001访问。请注意cluster ip列都是k8s内部访问的IP,本地访问IP地址使用127.0.0.1

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 25h
mysql NodePort 10.110.247.59 <none> 3306:30001/TCP 13m
mysql-read ClusterIP 10.108.247.87 <none> 3306/TCP 13m

在外部访问方式:mysql -h127.0.0.1 -P30001 -uroot

参考这篇文档: http://cloudurable.com/blog/kubernetes_statefulset_zookeeper_part1/index.html

kafka的这个镜像给的配置较低,存在服务启动慢和健康检查执行时间长的问题,需要设置readinessProbe下的initialDelaySeconds和timeoutSeconds参数,检查间隔也调整为20s。

以上是关于k8s本地构建后台开发环境的主要内容,如果未能解决你的问题,请参考以下文章

K8s开发环境搭建

K8s开发环境搭建

使用Ubuntu22.04搭建k8s环境和一些k8s基础知识

Blazor+Dapr+K8s微服务之开发环境调试

干货 | eBay Feature测试环境上k8s的实践

本地服务调用K8S环境中的SpringCloud微服务实战