kubernetes概述:
- Kubernetes是Google开源的容器集群管理系统。最初源于谷歌内部的Borg,是Google基于Borg开源的容器编排调度引擎。它构建在Docker技术之上,为跨主机的容器化的应用提供资源调度,服务发现、高可用管理和弹性伸缩等一整套功能,它提供完善的管理具,涵盖开发、部署测试、运维监控等各个环节。它的目标不仅仅是一个编排系统,而是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态,Kubernetes可以帮你将系统自动得达到和维持在这个状态。
- 帮助我们将精力专注于业务本身
kubernetes特性:
-
自动化部署: yaml部署到k8s,会根据应用程序计算资源需求。自动分配到node。
-
系统自愈:当成功部署到k8s中,node节点宕机,kubernetes会重新将pod调度到可用节点。
-
水平扩展:HPA周期调整RC的副本数量,将用户定义的resource值匹配。
-
服务发现和负载均衡:内置服务发现功能,为每个容器分配IP,service代理。
-
自动更新和回滚:监控应用状态,不会同时杀掉应用。 更新出错,自动恢复到原先状态。
kubernetes架构设计:
-
master(集群控制节点,负责整个集群的管理和控制)中:
-
api server: 增删改查
-
Scheduler:资源调度
-
Controller Manager: 控制应用的副本对应用的监控
-
ETCD: 把当前应用状态保存在 ETCD里面
-
-
node(工作节点,听从master的工作分配,node可以是一台物理机或者是一台虚拟机)中:
-
Kubelet: Pod容器创建、启停,集群管理等任务,同时和master密切协作实现集群管理的基本的功能。
-
kube-proxy: 实现service 的通信与负载均衡组件。
-
Docker: Docker引擎,负责本机容器创建和管理工作。
-
-
node可以在运行期间动态的加载到ks集群中,可以通过热加载的方式加入到kubernetes集群当中, 前提是节点已经排治好的node节点的那些服务,一旦node被纳入集群管理,那么kubelet进程就会定时向master节点汇报自身的情况,比如说自身的版本信息,docker版本,cpu使用率,以及之前有哪些pod在运行,这样master获得每个ide的资源实现情况,实现高效的资源调度策略,某个node没有按时上报信息 ,就会失联,就变为不可用not ready(可用ready) , 就会将不可用的node上的应用切换到其他可用的node节点上。
Kubernetes资源对象-Pod:
-
Pod是在K8s集群中运行部署应用或服务的最小单元,它是可以支持多容器的。Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
- pause: 根容器,每一个pod上面运行的
- container:真正的应用程序一个pod当中可以运行多个小容器的,container + x
- 结构组成原因:
- 当把一组容器当作一个单元的时候,我们就没法对症提及行有效的管理,加入一个挂掉了,整个集群就会出现问题
- pod里面运行了多个应用(容器)共享根容器的ip地址和挂载卷,相互关联下,这样既简化了关联的业务容器之间的通信的问题,也很好的解决了文件共享的问题
-
pod的 IP地址:网址分配给pod, 里面的容器共享这个IP地址。
-
kubernetes要求底层网络任意两个pod可以通信,这样的架构叫做OAS。
-
一个pod上的容器可以和另外一个主机上的pod是可以直接通信的
-
pod类型:
-
静态:将当前状态放到 某个node上的具体文件中,必须在node上启动运行。
-
普通:一旦pod创建成功,他就hi被放到etcd存储当中他的状态就会实时更新,随后master就会向某个node进行分配
-
-
pod是包含容器的,node上面运行pod。