为用户提供一个具有普遍意义的容器编排工具。
它着重解决的问题是:大规模集群中的各种运行任务之间的关系处理,这些关系的处理,是作业编排和管理系统最困难的地方。
其能力有:
? 基于容器的应用部署、维护和滚动升级
? 负载均衡和服务发现
? 跨机器和跨地区的集群调度
? 自动伸缩
? 无状态服务和有状态服务
? 插件机制保证扩展性
从一开始,Kubernetes 项目就没有像同时期的各种“容器云”项目那样,把 Docker 作为整个架构的核心,而仅仅把它作为最底层的一个容器运行时实现。
它真正的价值,在于提供了一套基于容器构建分布式系统的基础依赖。这也是k8s能长久发展的一个原因。
可以从这四个方面了解一下:
可扩展性:
? 基于微服务部署应用
? 横向扩容缩容
? 自动扩容缩容
高可用:
? 基于replicaset,statefulset 的应用高可用
? Kubernetes 组件本身高可用
可移植性:
? 多种 host Os 选择
? 多种基础架构的选择
? 基于集群联邦建立混合云
安全:
? 基于 TLS 提供服务
? Serviceaccount 和 user
? 基于 namespace 的隔离
? secret
? Taints,psp,networkpolicy
优势特点,主要是这8个层面:
资源利用:高效率/高密度
低耦合:松散耦合、分布式、弹性、解放的微服务
可移植性和灵活性:K8s有很强的兼容性,它可以在各种基础设施和环境设置下运行
敏捷性:敏捷应用程序的创建和部署,与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率
跨平台:跨云和操作系统,可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行
开源:CNCF负责管理K8s,这是一个完全开源、由社区驱动的项目
多云兼容性: ? ??
1.容器编排支持多云架构 ? ??
2.轻松实现环境迁移/扩展
k8s项目的架构,由 Master 和 Node 两种节点组成,这两种角色分别对应着控制节点和计算节点
kube-apiserver
kube-apiserver:kube-apiserver是k8s集群的控制面板,提供了RESTful API来管理集群状态和配置。它是k8s中的核心组件之一,所有其他组件都与kube-apiserver进行通信。kube-apiserver是k8s的面向用户的接口,可以使用kubectl等工具与其进行交互。
kube-scheduler
kube-scheduler:kube-scheduler是k8s的调度器,负责将Pods分配到可用的节点上。kube-scheduler使用节点资源和Pods的需求来进行调度决策。kube-scheduler还支持自定义调度策略,以满足特定的业务需求。
kube-controller-manager
kube-controller-manager:kube-controller-manager是k8s的控制器,负责监视集群状态,并确保集群中的对象处于所需的状态。kube-controller-manager包括多个控制器,如Replication Controller和Endpoint Controller,它们负责管理ReplicaSets和Endpoints等对象。
etcd
etcd:etcd是一个高可用性的键值存储系统,用于存储k8s集群的所有数据。etcd可以存储集群配置、Pods和Services等对象的状态。etcd是一个分布式系统,可以通过多个节点实现高可用性
kubelet
kubelet:kubelet是k8s节点上的代理,负责管理节点上的Pods。kubelet与kube-apiserver通信,获取需要在节点上运行的Pods的信息,并确保Pods处于运行状态。kubelet还负责监视Pods的健康状况,并在必要时重新启动它们。
kube-proxy
kube-proxy:kube-proxy是k8s的网络代理,负责在集群内部进行负载均衡和服务发现。kube-proxy可以将Pods暴露为Kubernetes Services,并使用IPVS或iptables等机制进行负载均衡。
docker/Container Runtime
docker/Container Runtime:Worker Node的运行环境,负责镜像管理以及 Pod 和容器的真正运行
?总结
控制节点,即 Master 节点,由4个紧密协作的独立组件组合而成,它们分别是:
负责 API 服务的 kube-apiserver、负责调度的 kube-scheduler、负责容器编排的 kube-controller-manager。整个集群的持久化数据,则由 kube-apiserver 处理后保存在 Etcd 中。
而计算节点上最核心的部分,则是一个叫作 kubelet 的组件。
在 k8s项目中,kubelet 主要负责同容器运行时(比如 Docker 项目)打交道。而这个交互所依赖的,是一个称作 CRI(Container Runtime Interface)的远程调用接口,这个接口定义了容器运行时的各项核心操作比如:启动一个容器需要的所有参数。
这也是为什么,Kubernetes 项目并不关心你部署的是什么容器运行时、使用的什么技术实现,只要你的这个容器运行时能够运行标准的容器镜像,它就可以通过实现 CRI 接入到 Kubernetes 项目当中。
参考: