加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

基于K8S的容器云平台如何部署微服务?

发布时间:2018-08-14 03:00:47 所属栏目:云计算 来源:talkwithtrend
导读:K8S是第一个将一切以服务为中心,一切围绕服务运转作为指导思想的创新型产品,它的功能和架构设计自始至终都遵循了这一指导思想,构建在K8S上的系统不仅可以独立运行在物理机、虚拟机集群或者企业私有云上,也可以被托管在公有云中。 微服务架构的核心是将

prometheus作为一个时间序列数据收集,处理,存储的服务,能够监控的对象必须直接或间接提供prometheus认可的数据模型,通过http api的形式发出来。我们知道cAdvisor支持prometheus,同样,包含了cAdivisor的kubelet也支持prometheus。每个节点都提供了供prometheus调用的api。

prometheus支持k8s

prometheus获取监控端点的方式有很多,其中就包括k8s,prometheu会通过调用master的apiserver获取到节点信息,然后去调取每个节点的数据。

k8s节点的kubelet服务自带cadvisor用来收集各节点容器相关监控信息,然后通过heapster收集,这样在dashboard上可以看到容器使用CPU和Memory。

为了长期监控,可以采用prometheus监控方案nodeExporter收集主机监控信息cadvisor收集容器监控信息

k8s中需要给kubelet配合kube-reserved和system-reserved相关参数给系统预留内存

监控领域,无非就是E*K,heapster、influxDB、heapster、hawkular、prometheus、grafana这些东西了,就目前来看,prometheus应该是最具前景的监控工具,在openshift 3.12里面,heapster将由prometheus替换,未来应该是prometheus的天下吧!

二、微服务部署piapian   Q1: 微服务架构按照什么细粒度拆分?

A1:

既然理解微服务是用来重构业务应用的,这个问题就很简单,以业务应用为核心,构建业务服务。忘掉,重构!

业务服务需要数据服务、计算服务、搜索服务、算法服务……以及基本的日志、监控、配置、注册发现、网关、任务调度等组件。

至于数据服务怎么实现,看你团队能力。这才涉及数据分拆,模型重构。

服务通信可以考虑事件驱动机制,也是后期业务数据处理,态势感知,智能风控,智能营销,智能运维等的基础。

感觉这是个没有标准答案的问题,如何拆?按什么套路来拆?问答这两个问题的基础一定要十分熟悉你的业务逻辑才行。微服务这东西,尤其是那种已经运行多年的老系统,一不小心就能拆出问题。

如果对云计算,对OpenStack有了解,建议以OpenStack中的Kolla项目为微服务入门学习对象,Kolla干的事情就是把OpenStack服务拆分成微服务的形式跑在容器中,OpenStack号称全球最大开源Python项目,由几十个开源子项目组成,如果能把这样复杂的集群项目都拆分成微服务,那么一定会得到很多别人给不了的心得体会。

这里以OpenStack为例,Kolla这个项目对OpenStack的拆分,大概如下:

1、先按服务功能划分,得到粗粒度,如计算服务、网络服务、存储服务,这些租粒度模块通常会共享同一个base镜像,这个base镜像中预置了服务模块的共性依赖;

2、基于服务模块的“原子性”拆分,如把计算服务Nova拆分为noav-api、nova-scheduler、nova-compoute、nova-libvirt等等,所谓原子性拆分,就是拆分到不能再往下拆为止,原子拆分后通常就是彼此独立的单进程了,也可以把他们称为是叶子节点了,他们的镜像都是针对自己依赖的“个人”镜像,不能被其他进程共享了。

如果从镜像的角度来看,大概是这样:

父镜像:centos-base

一级子镜像:centos-openstack-base

二级子镜像:centos-nova-base

叶子节点镜像:centos-nova-api

这几个镜像的继承关系是这样的:centos-base->centos-openstack-base->centos-nova-base->centos-nova-api

以上只是举个例子供参考,建议深入了解下Kolla这个项目,对于微服务的拆分就会更有底气些!

先将系统模块化 解耦,别的微服务还是一体都只是部署的问题。 常见的耦合方式有 逻辑耦合 功能耦合 时间耦合等, 感觉从码农的角度来分析解决耦合是基于微服务还是soa化的最大区别。 soa化的系统更多的是业务系统,领域模型级别的。 在分布式系统中远远不够需要考虑性能,安全,事务等,最起码的cap原则还是要把控的。 码农解耦的角度有 接口化,动静分离(查询和修改等),元数据抽取等等,更多的是代码上,设计模式上的真功夫 。 很多架构的估计没这个水平, 只看大象不看大腿。

需要明确:

1、充分分析拆分的目的是什么,需要解决什么问题。

2、是否具备微服务技术能力,是否已选型好相应的技术框架,技术变化对企业有什么影响。

3、是否有完善的运维设施保障,比如快速配置、基础监控、快速部署等能力。

Q2: svn环境下实现CI/CD?

A2:

svn可以使用hook(post commit)的方式来实现,但是需要编写hook脚本,灵活度存在问题;

这在svn-repo的粒度较细的情况下还可行,如何一个大的repo,管理起来较复杂,不建议使用;

建议使用jenkins 轮询scm的方式触发pipeline/job

能不能实现CI/CD与SVN无关,关键是你如何构建pipeline,微服务理念下大致这样:

gitlab/svn->Jenkins->build images->push images->docker-registry->pull images->containers

20

Q3: K8S DNS服务配置如何实现微服务的发布?

A3:

配置k8s dns

DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址。

Cluster DNS扩展插件用于支持k8s集群系统中各服务之间发现与调用。

组件:

•SkyDNS 提供DNS解析服务

•Etcd 存储DNS信息

•Kube2sky 监听kubernetes,当有Service创建时,生成相应的记录到SkyDNS。

如访问外部DNS,可以设置external_dns 到configmap实现

Q4: 请问在K8S中部署数据库现在有好的解决方案了么?

A4:

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读