最近一个月因为工作调动的原因开始研究kubernetes,这一个月通过文档和代码对k8s有了个大概的理解,趁着周末难得的空闲,记录下自己的理解。


        谈kubernetes的话就必须要先了解容器,容器技术目前k8s默认支持的也是业界用的最广的莫过于docker了,Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。Docker基于LXC的轻量级虚拟化,采用命名空间来进行隔离,相对于KVM等的虚拟化计划,更轻量级,启动速度更快,加之Docker采用了镜像分层的技术进行构建,每次打包只是打包镜像的差异项,这使得docker容器之间可以共享大部分共同的文件系统,而真实的虚拟化是每次都要包含所有的系统和文件,这使得它很庞大。

kubernetes是google开源的一套容器集群管理框架,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能。kubernetes是个典型的master/slave架构,master上提供了一套对容器集群进行管理的REST接口,并提供了kubetcl这个方便的工具来对容器进行管理

kubernetes主要组件

master节点:

scheduler:负责集群的资源调度,为新建的pod分配机器。这部分工作分出来变成一个组件,意味着可以很方便地替换成其他的调度器。

apiServer:作为kubenetes系统的入口,封装了核心对象的增删改查操作,以RESTFul接口方式提供给外部客户和内部组件调用。它维护的REST对象将持久化到etcd(一个分布式强一致性的key/value存储)。

controller-manage

  • endpoint-controller:定期关联service和pod(关联信息由endpoint对象维护),保证service到pod的映射总是最新的。
  • replication-controller:定期关联replicationController和pod,保证replicationController定义的复制数量与实际运行pod的数量总是一致的。

Slave节点:

kubelet

负责管控docker容器,如启动/停止、监控运行状态等。它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。

kube-proxy

负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转发。



Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐