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(自动水平扩展器)等。这些对象,会负责具体的平台级功能。