基于K8s与ServiceComb实现微服务系统
kubernetes与ServiceComb
- kubernetes在平台层配置管理、服务发现、负载均衡、追踪、指标、单例模式、调度作业提供服务,并且在应用套件之外。
- ServiceComb作为一个应用层的微服务框架,对标的更多是springcloud。ServiceComb为华为内部框架,目前由于华为大力推广华为云,作为一个推向业界的微服务方案,从出发目的上来讲应该不会如同dubbo断更。
从微服务的层面上来说,kubernetes与serviceComb二者处于不同的层次。Kubernetes主要用来解决大规模集群的弹性伸缩,负载均衡等,而ServiceComb更多的是解决开发上的解耦合。
当我们使用ServiceComb开发好应用后,可以借助docker-compsoe和kubernetes完成应用的部署。本文主要说明这一过程中遇到的一些问题以及解决方案。
kubernetes问题与解决方案
kubernetes部署
在1.6版本后,kubernetes加入了越来越多的安全性验证,增加了k8s的部署难度。
同时在生产环境上部署k8s集群,需要实现高可用,配置多个master节点,防止apiServer和etcd出现单点故障。
为了实现快速部署高可用k8s集群,使用rancher提供的rke工具搭建。
部署环境说明:
- rancher-server。在上面有rke和rancher/server镜像。rke quick start guide。rancher/server作为一个简单的Paas平台,相对于openshift功能薄弱。但更贴近与k8s。
- Server:K8s master Server and node。
- Client-1:K8s master Server and node。
-
Client-2:K8s master Server and node。
AWS Console:
Screenshot from 2018-05-06 20-39-45.png
部署过程
- 在四台服务器上安装docker17.03(K8s在17.03上经过了充分的测试),rke quick start guide文档中有一键安装脚本。
- 在server和client-1,client-2上配置非root用户下可以访问docker,参考文档。
- 在rancher-server中通过ssh链接到其它三台服务器,并部署k8s集群。在aws上由于无法以root用户登录其他服务器,因此需要是docker能够在ubuntu用户下被其他机器访问。其次需要将其他服务器的访问私钥放在rancher-server中。对于AWS而言为pem文件。
- 如果需要本地仓库支持,可以使用docker registry,并且需要在其他节点配置insecure registry。(后续如果需要使用本地私有仓库,则需要进行配置。dockerhub官方仓库上传太慢。)
- 当通过rke配置集群后,生成config.yaml文件,使用rke up启动集群,会自动在其他机器上拉取镜像,完成部署,部署完成后,会生成kube_cluster_config.yaml 文件。
- 生成配置文件后,将其导入到rancher Paas平台中。rancher2.0 支持导入集群。
K8s访问
集群搭建好后,可以通过外部的服务器访问集群。
- 首先需要在其他服务器上安装kubectl,kubectl client端和server端不需要版本一致。
- 将之前生成的kube_cluster_config.yaml 复制到其他服务器上。
- 每次使用kubectl 需要加上 --kubeconfig kube_cluster_config.yaml 命令。
K8s dashboard
Screenshot from 2018-05-06 20-39-20.pngkubernetes提供了dashboard工具,做集群监控。项目地址
在安装的机器使用“kubectl --kubeconfig kube_cluster_yaml proxy”后,通过
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
可以访问监控界面。
为了不通过token访问dashboard,可以配置access control规则。
kubernetes Access Control
当搭建好dashboard后,可以使用更简便的方法通过yaml 创建deployment,service。
Screenshot from 2018-05-06 21-17-21.png
ServiceComb问题与解决方案
部署过程
当拉取ServiceComb workshop代码后,需要经过以下的处理:
- 使用maven 编译docker镜像,在readme文档中有说明,需要在项目中配置。
- 在本地编译好镜像后,可以将其push到docker hub上。
docker hub push。这样可以在master和node节点上拉取镜像。 - 执行kubernetes目录下 bash start.sh,启动微服务应用。
在company-manager-service.yaml文件中,service通过nodePort暴露出去,可以通过nodeIp:nodePort访问。k8s service外部访问。
当部署好应用后,通过以下步骤可以进行验证。
- Retrieve manager's ip address
- If you use docker compose:
export HOST="<NodeIp>:<NodePort>"
- Log in and retrieve token from
Authorization
section
Then you can copy the token from thecurl -v -H "Content-Type: application/x-www-form-urlencoded" -d "username=jordan&password=password" -XPOST "http://$HOST/doorman/rest/login"
Authorization
section and use it to replace theAuthorization
header in the following requests. - Get the sixth fibonacci number from the worker service
curl -H "Authorization: replace_with_the_authorization_token" -XGET "http://$HOST/worker/fibonacci/term?n=6"
- Get the number of drone's ancestors at the 30th generation from the beekeeper service
curl -H "Authorization: replace_with_the_authorization_token" -XGET "http://$HOST/beekeeper/rest/drone/ancestors/30"
- Get the number of queen's ancestors at the 30th generation from the beekeeper service
curl -H "Authorization: replace_with_the_authorization_token" -XGET "http://$HOST/beekeeper/rest/queen/ancestors/30"
后续会写一系列的关于ServiceComb一系列的文章。
网友评论