在了解了k8s的发展历程之后,正式进入到学习k8s的阶段,本文主要内容是K8S的整体架构的说明和K8S一些特性的概括。
架构
如下图是K8S的整体架构图,Kubernetes属于主从分布式架构,主要由Master Node和Worker Node组成,还包括客户端命令行工具kubectl和其它组件。
组件
如上图所示是k8s的架构图,Master和Work节点的组成部分如下:
-
Master节点 作为控制节点,对集群进行调度管理,不存储容器,包括:
-
Kubectl:通过命令行与API Server进行交互,对集群中的各种资源进行增删改查等操作。
-
APIServer :K8S的网关,所有访问的统一入口。所有组件都会与他交互,会造成很大压力,所以各个组件都会设置自己的缓存。
-
Scheduler:负责分配任务,选择符合的node节点分配任务。
-
Relplication Crontroller:根据用户的期望数维护pod的副本数,不多也不会少。
-
ETCD:键值对数据库,存储集群需要持久化的配置信息,并且天生支持集群化,可借助ETCD恢复K8S集群,ETCD坏掉会导致K8S集群瘫痪。
-
Node节点作为工作节点,运行业务应用容器的,不仅仅只有容器,还包括:
-
kubelet:与容器引擎交互,操作容器引擎创建continer,维持pod的生命周期。
-
kube proxy:写入规则到iptables或者IPVS,实现pod之间的映射访问与负载均衡。
-
fluentd: 日志收集服务。
-
pod :k8s的最小服务单元,pod内部是具体的docker容器,k8s通过操作pod来操作容器。
-
coredns:为集群中的SVC(service服务)创建域名和IP对应关系,直接使用CORE为他生成的域名访问,而不需要IP。
-
dashboard:B/S架构访问K8S,例如kubesphere
-
Incress Controler :官方只实现四层代理,但是Incress可以实现七层代理
-
federation:跨集群中心,多个K8S统一管理
-
prometheus :提供K8S集群资源的监控,例如CPU,内存,磁盘的监控
-
ELK:提供K8S集群日志统一分析介入平台
特性
-
弹性伸缩: 通过监控容器的cpu负载值,如果负载值高于80%,增加容器副本的数量,如果低于10%,则减少容器副本的数量。将CPU和内存等资源的利用率最大化。
-
自愈:自动重启失败的容器,在节点上容器不可用时,替换和重新调度其他节点上的容器,还可以利用 Liveness 和 Readiness 探测机制设置更精细的健康检查。当容器未通过监控检查时,会关闭此容器;直到容器正常运行时,才会对外提供服务。
-
服务发现:K8s集群内置一个dns服务器,k8s将Service的名称当做域名注册到dns中,通过Service的名称就可以访问。
-
负载均衡:运行在每个节点上的kube-proxy进程其实就是一个智能的软件负载均衡器,负责把service的请求转发到后端的某个pod实例。
-
滚动升级和回滚:升级的过程,当v2版本启动后,v1版本才会退出,但是V1版本并没有被删除,而是被停用了,再回滚的时候,会重新启用v1版本。
-
保密和配置管理:在不需要重新构建镜像的情况下,可以部署和更新保密和应用配置。
-
存储编排:自动挂接存储系统,这些存储系统可以来自于本地、公共云提供商(例如:GCP和AWS)、网络存储(例如:NFS、iSCSI、Gluster、Ceph、Cinder和Floker等)。