K8S架构


一、架构图

1.Mater
API-Server       : api接口调用
Scheduler         : 资源调度
Controller-manager  : 容器编排

2.Etcd
集群持久化数据存储地

3.Node
CNI(container networking interface) : 容器网络接口
CRI(container runtime interface)    : 容器运行时接口
CSI(container storage interface)    : 容器存储接口 
OCI(Open Container Initiative)      : 开放式容器协议

4.过程
kublet通过CRI接口调用container runtime启动一个容器镜像,container runtime通过调用OCI协议与linux os进行系统调用(操作 Linux Namespace 和 Cgroups 等)
k8s把docker当做最底层的容器运行时实现。

二、pod

容器的IP地址不固定,会变化,因此k8s给pod绑定一个service服务(IP等信息固定不变)。

三、k8s核心功能全景图


容器紧密协作           : container到pod

多个相同实例           : pod到deployment(replicas)

固定IP和负载均衡       : service
授权信息              : secret

Web 应用对数据库访问时需要 Credential(数据库的用户名和密码)Kubernetes 项目提供了一种叫作 Secret 的对象,它其实是一个保存在 Etcd 里的键值对数据。这样,你把 Credential 信息以 Secret 的方式存在 Etcd 里,Kubernetes 就会在你指定的 Pod(比如,Web 应用的 Pod)启动时,自动把 Secret 里的数据以 Volume 的方式挂载到容器里。这样,这个 Web 应用就可以访问数据库了。

一次性运行任务         : job(大数据任务)

描述每个宿主机上必须且只能运行一个副本的守护进程服务 : DaemonSet

定时任务              :CronJob

如此种种,正是 Kubernetes 项目定义容器间关系和形态的主要方法。

 四、k8s编排逻辑

首先,通过一个“编排对象”,比如 Pod、Job、CronJob 等,来描述你试图管理的应用;
然后,再为它定义一些“服务对象”,比如 Service、Secret、Horizontal Pod Autoscaler(自动水平扩展器)等。这些对象,会负责具体的平台级功能。