kubernetes 概念和架构(入门)

1.基础知识

虚拟机和容器

操作系统 = 内核 + apps
虚拟化技术=资源隔离+资源控制
虚拟机技术:有自己的内核
容器技术:共享宿主机内核

Linux相关模块

A .Chroot
Chroot(改变 根目录)是一个改变当前进程和它子进程根目录到一个新目录的一个linux命令。在虚拟环境下,一些容器用Chroot来隔离和共享文件系统。

B.Cgroups
Cgroups 是内核子系统的一部分,提供了一个很好的细粒度控制,通过共享像CPU,内存,组进程等等的资源。几乎所有的容器都用cgroups作为资源管理的底层机制。Cgroups对这些资源做了限制。

C.内核命名空间
命名空间在不同级别的容器之间创建了栅栏。Pid命名空间允许每个容器有自己的进程id。网络的命名空间精简允许每个容器有一个网络构件,比如 路由表、ip表、回送接口。IPC(信息处理中心)命名空间为各种IPC机制,即信号、信息队列和共享内存片段,提供了隔离。Mnt(模组名表)命名空间为每个容器提供了自己的挂载点。UTS命名空间巴证了不同的容器可以查看以及改变专属的主机名称。

容器的实现:
Linux Containers (LXC)、Warden Container( Cloud Foundry)、OpenVZ 、Google lmctfy 、Docker
对比:
这里写图片描述
容器层次结构示意图:
这里写图片描述

2.kubernetes如何编排:

  1. Pods
    Pod是Kubernetes的基本操作单元,把相关的一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用。Pod包含的容器运行在同一个Minion(Host)上,看作一个统一管理单元,共享相同的volumes和network namespace/IP和Port空间。
    这样做的好处,方便绑定服务.比如如果你想运行一个应用,并且监控它的状态,而且又不想监控进程影响应用进程,那么一个pod里运行两个容器,一个跑主业务,一个跑监控,而且监控可以很方便的用localhost访问业务容器.
  2. Services
    Services也是Kubernetes的基本操作单元,是真实应用服务的抽象,每一个服务后面都有很多对应的容器来支持,通过Proxy的port和服务selector决定服务请求传递给后端提供服务的容器,对外表现为一个单一访问接口,外部不需要了解后端如何运行,这给扩展或维护后端带来很大的好处。也解决了内部通信,pod ip 不固定的问题!
  3. Replication Controllers
    Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行, 如果少于指定数量的pod副本(replicas),Replication Controller会启动新的Container,反之会杀死多余的以保证数量不变。Replication Controller使用预先定义的pod模板创建pods,一旦创建成功,pod 模板和创建的pods没有任何关联,可以修改pod 模板而不会对已创建pods有任何影响,也可以直接更新通过Replication Controller创建的pods。对于利用pod 模板创建的pods,Replication Controller根据label selector来关联,通过修改pods的label可以删除对应的pods。
    RC重启后的pod ip地址是随机的.
  4. Labels
    Labels是用于区分Pod、Service、Replication Controller的key/value键值对,Pod、Service、 Replication Controller可以有多个label,但是每个label的key只能对应一个value。Labels是Service和Replication Controller运行的基础,为了将访问Service的请求转发给后端提供服务的多个容器,正是通过标识容器的labels来选择正确的容器。同样,Replication Controller也使用labels来管理通过pod 模板创建的一组容器,这样Replication Controller可以更加容易,方便地管理多个容器,无论有多少容器。
    label 为key-value值形式,用法很灵活!

kubernetes架构:

  1. kube-apiserver:作为kubernetes系统的入口,封装了核心对象的增删改查操作,以RESTFul接口方式提供给外部客户和内部组件调用。它维护的REST对象将持久化到etcd(一个分布式强一致性的key/value存储)。
  2. kube-scheduler:负责集群的资源调度,为新建的pod分配机器。这部分工作分出来变成一个组件,意味着可以很方便地替换成其他的调度器。
    3.kube-controller-manager:执行各种控制器,不断通过api-server监听状态.比如replication controller, endpoints controller, namespace controller, and serviceaccounts controller.并
    endpoint-controller:定期关联service和pod(关联信息由endpoint对象维护),保证service到pod的映射总是最新的。
    replication-controller:定期关联replicationController和pod,保证replicationController定义的复制数量与实际运行pod的数量总是一致的。
  3. kube-proxy:负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转发。
  4. kubelet:负责管控docker容器,如启动/停止、监控运行状态等。它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。
    框架如下图所示:
    这里写图片描述

    简要流程:
    如何创建pod容器?
    1.向API server发送创建请求
    2.再由调度器决定minion节点
    3.api-server向kubelete发送请求创建容器

目前cAdvisor已经集成到了kubelet组件内.下幅图为编排对象,组件与功能之间关系!
这里写图片描述

参考文章:
https://segmentfault.com/a/1190000002886795

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值