容器编排引擎
架构图:https://devops.oss.cn-north-4.inspurcloudoss.com/kubernetes%E6%9E%B6%E6%9E%84.png
-
-
功能主要包括:安装,部署,应用管理,网络,存储,监控,日志。
Cluster:(资源得集合) 计算,存储,网络资源得集合。
Master:[多master](cluster的大脑):调度和决定我们的应用程序放在那里去运行。
Node:(负责运行容器)运行容器的应用,由master进行管理,监控汇报容器当前处于什么 状态,并且根据master 的要求来管理容器的生命周期。
Pod:是K8S中最小的工作单元,
在K8S中并不直接管理容器,而是管理pod,而pod是来管理我们的容器的,每个pod可以包含一个或者多个容器,pod中的容器会作为一个整体被master调度到node上,举个例子:
现在有一个pod里面有三个容器或者多个容器,那么无论是master或者cluster和kubernetes来调用的时候,只能调用pod,pod里面的容器是一起行动的,不能分开来做,为了能够灵活和分开来做,我们可以一个pod里面放一个容器。 一个pod是一个完全隔离的命名空间,每一个pod里面的网络都是共享的。 -
Kubernetes为什么要引入pod,pod主要是干什么呢?
1.可管理性,有的容器天生是需要紧密联系在一起工作的。Pod提供了比容器更高的一个层次上的抽象,会将所有的内容封装到部署的一个单元里面。Kubernetes是以pod为最小的单元进行调度和扩展共享资源和管理周期的。
2.通讯和资源进行共享,比如pod中所有的容器使用同一个网络,或者他们使用相同的IP地址和相同的pod空间,可以直接使用localhost进行通讯,不是直接管理容器的,第二种
Pod运行方式,就是运行多个容器,但是运行多个容器的问题在于,那些容器放在一个pod里面,那些容器不要放在一个pod里面,放在一起的容器必须非常紧密的链接在一起而且是直接共享资源的才可以。 -
Pod实现的机制:
共享网络:容器之间是通过nameapace或者group进行隔离的 -
kubernetes框架结构
-
-
Master:
-
kube-apiserver:是kuber-Cluster的前端接口,各种各样的客户端工具,通过APIserver来管理我们的资源)提供是否访问,对外的功能,提供:http/https协议 restful API
-
Etcd:键值对的数据库,存放kubernet-cluster的配置信息和各种资源的使用状态,当数据发生变化的时候,etcd就会快速的通知kubernetes的各个组件,无论K8S中哪个组件调用资源的时候都要跟ETCD进行联动。
-
Controller-manager :负责管理cluster各种资源,让我们的资源处于期望状态的,(期望状态:一旦确定某些容器应该运行多少个pod,那这个pod的应用书不会减少的,比如说有十个容器,有两个突然坏掉了,会自动创建两个新的pod来顶替这两个坏的pod。)
-
Scheduler:调度器(决定Pod放在哪个node节点上去运行),在进行调度的时候,会考虑到我们kubernetes的拓扑结构,当每个节点的负载均衡和高可用性,以及性能数据这些需求都会考虑到,考虑到这些综合因素,才决定将pod放到哪个node上去运行。
-
Coredns:域名解析
-
-
Node
-
Kubelet:默认情况下是节点上的anget(代理),{当master中的scheduler来确定某个node上来运行pod的时候,会将pod的具体信息以及volume信息,发送到node节点中kubelet上,kubelet会根据接收过来的信息来创建和运行容器,创建完成后,会向master报告当前主机的状态是什么。
-
kube-proxy:kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡,一般情况下用于四层网络。
-
Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI),Kubernetes 支持许多容器运行环境,例如 containerd、 CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。
Ingress Controller 为服务提供外网入口
Prometheus 提供资源监控
Dashboard 提供 GUI
Federation 提供跨可用区的集群
Fluentd-elasticsearch 提供集群日志采集、存储与查询