Kubernetes是云技术的最核心的部分,也是云原生的基石,下面我就全面来详解Kubernetes@mikechen
kubernetes是什么
Kubernetes通常缩写为K8s,是一个开源的容器编排和管理平台,用于自动化部署、扩展和操作容器化应用程序。
Kubernetes最初由Google开发,并捐赠给云原生计算基金会(CNCF)进行维护。
kubernetes功能特点
Kubernetes提供了一种跨多个主机进行容器化应用程序部署、扩展和管理的标准机制。
1.自动化运维平台
中小型企业以及大型互联网公司,可以使用Kubernetes构建一套自动化运维平台,从而降本增效。
K8s + Docker 可以保持开发、测试、生产环境一致,而且部署一个新的环境, 只需要执行一些命令行即可比较方便。
2. 容器编排
容器编排是指自动化和协调多个容器实例的部署、升级、伸缩和运维工作
Kubernetes能够协调和调度多个容器,确保它们按照用户定义的规则和策略进行运行。
3. 弹性和伸缩
Kubernetes能够根据应用程序的负载自动进行伸缩,增加或减少容器实例的数量,以满足应用程序的性能需求。
4. 健康检查和自愈
Kubernetes通过定期的健康检查机制监测应用程序的状态,如果发现容器处于不正常状态,会自动进行恢复,以确保应用程序的可用性。
5. 插件和扩展
Kubernetes提供了丰富的插件和扩展机制,可以集成各种不同的服务和工具,满足不同场景的需求。
kubernetes架构
Kubernetes架构,主要涉及到:Master节点、Node节点、AIP节点..等等。
如下图所示:
Master节点
Master节点,是Kubernetes集群的控制中心,负责:管理、和调度集群中的各个资源。
Master节点包含:了多个关键组件,每个组件都承担着不同的角色,主要会涉及到:
Scheduler(调度器)
Scheduler(调度器),主要负责:监控集群中的Pod,并将其调度到合适的Node上运行。
Scheduler根据Pod的调度策略(如:资源需求、亲和性规则…等),选择最合适的Node,并将Pod绑定到选定的Node上。
Controller Manager(控制器管理器)
Controller Manager(控制器管理器),主要负责:控集群中的资源对象的状态,并确保其按照期望的状态运行。
Controller Manager包含了多个控制器,常见的控制器包括:
- Replica Controller:确保Pod的副本数与期望值一致,并根据需要自动扩展或缩减副本数。
- Node Controller:负责监控和管理集群中的Node节点,并确保其状态正常。
- Service Controller:负责监控Service对象的变化,并更新负载均衡器以确保服务的可访问性。
这些组件,使得 Kubernetes 集群能够实现自动化的资源管理,并且,提高了集群的可靠性、可用性和可扩展性。
etcd(键值存储)
etcd是分布式键值存储系统,用于存储集群的配置信息、状态信息、和元数据。
所有的集群状态,都被存储在etcd中,包括:节点信息、资源分配情况、Pod状态…等。
而且,etcd还提供了强一致性的分布式存储,并支持Watch机制用于实时监控集群状态的变化。
Node节点
Node节点是Kubernetes集群中的工作节点,用于运行容器化应用程序、和服务。
每个Node节点。主要会包含以下几个关键组件:
- Kubelet:负责管理Node节点上的Pod和容器,通过与API Server通信来获取Pod的配置信息,并维持Pod的运行状态。
- Kube Proxy:负责实现Kubernetes Service的负载均衡、和网络代理功能,将请求路由到对应的Pod上。
- Container Runtime:负责在Node节点上运行和管理容器,如:Docker、containerd…等。
kubernetes VS Docker关系
Docker是一种容器化平台,允许开发者将应用程序,及其所有依赖项打包到一个称为容器的可移植单元中。
Kubernetes是一个容器编排、和管理平台,用于自动化容器的部署、扩展和操作。
两者的关系,主要体现在如下几点:
- 角色不同: Docker是一种容器技术的实现,而Kubernetes是一个容器编排和管理平台。
- 层次关系: Docker可以视为底层的容器引擎,而Kubernetes则是更高层次的容器编排系统。
- 功能不同: Docker主要关注容器的创建和运行,而Kubernetes关注容器的编排、调度、服务发现和自动化运维。
- 适用范围: Docker适用于单个主机上的容器化应用,而Kubernetes适用于跨多个主机的分布式、微服务化应用。
通常,这两者一起使用,Docker负责构建和运行容器,而Kubernetes负责在生产环境中对这些容器进行编排和管理。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》