Kubernetes指南:架构

发布于 2017-11-09 · 本文总共 2225 字 · 阅读大约需要 7 分钟

整体架构

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful), Kubernetes提供了应用部署,规划,更新,维护的一种机制

现在Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql), 在不久的将来会支持各种生产云平台中的各种服务,例如,分批,工作流,以及传统数据库。

所有Kubernetes中的资源,比如Pod,都通过一个叫URI的东西来区分,这个URI有一个UID,URI的重要组成部分是:对象的类型(比如pod),对象的名字,对象的命名空间,对于特殊的对象类型,在同一个命名空间内,所有的名字都是不同的,在对象只提供名称,不提供命名空间的情况下,这种情况是假定是默认的命名空间。UID是时间和空间上的唯一。

架构图

Kubernetes架构

kubernetes-arch

组件功能

1.kubelet:管理容器、镜像、已经使用的存储

2.kube-proxy:每一个节点都运行这个网络代理,这是为service提供负载均衡的,代理service的clusterip。本质通过iptables跳转

3.apis是提供api访问接口服务

4.scheduler:是调度服务,支持插件的调度策略非常方便

5.controller manager(主要是RC)管理RC个数生命周期等,还有节点管理等服务

kubelet

kubelet主要功能:

节点管理:kubelet可以自动向API Server注册自己,它可以采集所在计算节点的资源信息和使用情况并提交给API Server,通过启动/停止kubelet进程来实现计算节点的扩容、缩容。

Pod管理:kubelet通过API Server监听ETCD目录,同步Pod清单,当发现有新的Pod绑定到所在的节点,则按照Pod清单的要求创建改清单。如果发现本地的Pod被删除,则kubelet通过docker client删除该容器。

健康检查:Pod通过两类探针来检查容器的健康状态。一个是LivenessProbe探针,用于判断容器是否健康,如果LivenessProbe探针探测到容器不健康,则kubelet将删除该容器,并根据容器的重启策略做相应的处理。另一类是ReadnessProbe探针,用于判断容器是否启动完成,且准备接受请求,如果ReadnessProbe探针检测到失败,则Pod的状态被修改。Enpoint Controller将从Service的Endpoint中删除包含该容器的IP地址的Endpoint条目。kubelet定期调用LivenessProbe探针来诊断容器的健康状况,它目前支持三种探测:HTTP的方式发送GET请求; TCP方式执行Connect目的端口; Exec的方式,执行一个脚本。

cAdvisor资源监控: 在Kubernetes集群中,应用程序的执行情况可以在不同的级别上检测到,这些级别包含Container,Pod,Service和整个集群。作为Kubernetes集群的一部分,Kubernetes希望提供给用户各个级别的资源使用信息,这将使用户能够更加深入地了解应用的执行情况,并找到可能的瓶颈。Heapster项目为Kubernetes提供了一个基本的监控平台,他是集群级别的监控和事件数据集成器。Heapster通过收集所有节点的资源使用情况,将监控信息实时推送至一个可配置的后端,用于存储和可视化展示。

核心技术概念

密钥对象(Secret)

Secret是用来保存和传递密码、密钥、认证凭证这些敏感信息的对象。 使用Secret的好处是可以避免把敏感信息明文写在配置文件里。 在K8s集群中配置和使用服务不可避免的要用到各种敏感信息实现登录、认证等功能,例如访问AWS存储的用户名密码。 为了避免将类似的敏感信息明文写在所有需要使用的配置文件中,可以将这些信息存入一个Secret对象,而在配置文件中通过Secret对象引用这些敏感信息。 这种方式的好处包括:意图明确,避免重复,减少暴漏机会。

API对象

API对象是K8s集群中的管理操作单元。K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作。例如副本集Replica Set对应的API对象是RS。

每个API对象都有3大类属性:元数据metadata、规范spec和状态status。

  • 元数据metadata

元数据是用来标识API对象的,每个对象都至少有3个元数据:namespace,name和uid;除此以外还有各种各样的标签labels用来标识和匹配不同的对象,例如用户可以用标签env来标识区分不同的服务部署环境,分别用env=dev、env=testing、env=production来标识开发、测试、生产的不同服务。

  • 规范spec

规范描述了用户期望K8s集群中的分布式系统达到的理想状态(Desired State),例如用户可以通过复制控制器Replication Controller设置期望的Pod副本数为3;

  • 状态status

status描述了系统实际当前达到的状态(Status),例如系统当前实际的Pod副本数为2;那么复制控制器当前的程序逻辑就是自动启动新的Pod,争取达到副本数为3。

refs

https://kubernetes.io/docs/




本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:邱文奇(qiuwenqi)的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!
阅读次数:

文章评论

comments powered by Disqus


章节列表