k8s本地构建后台开发环境
发布网友
发布时间:2022-12-18 11:44
我来回答
共1个回答
热心网友
时间:2023-09-18 12:12
近期陆续遇到几个问题,涉及到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://clourable.com/blog/kubernetes_statefulset_zookeeper_part1/index.html
kafka的这个镜像给的配置较低,存在服务启动慢和健康检查执行时间长的问题,需要设置readinessProbe下的initialDelaySeconds和timeoutSeconds参数,检查间隔也调整为20s。