核心功能
- 容器编排和管理:Kubernetes可以自动化容器的部署、管理和扩展,使得应用程序可以在多个容器之间进行平滑的切换。
- 自动化负载均衡:Kubernetes可以通过将请求分配到不同的容器来平衡负载,以确保应用程序的高可用性和性能。
- 自动扩展:Kubernetes可以根据应用程序的负载和资源需求自动扩展容器数量,以满足应用程序的需求。
- 存储管理:Kubernetes提供了多种存储选项,包括本地存储、网络存储和云存储,可以满足不同应用程序的存储需求。
- 自动故障恢复:Kubernetes可以自动检测并恢复故障容器,以确保应用程序的高可用性和稳定性。
- 自动滚动升级:Kubernetes可以在不中断服务的情况下对应用程序进行滚动升级,以确保应用程序的可靠性和安全性。
- 网络管理:Kubernetes提供了网络管理功能,可以管理容器之间的通信和网络连接。
- 配置管理:Kubernetes可以管理应用程序的配置信息,包括环境变量、配置文件和密钥等。
- 安全管理:Kubernetes提供了多种安全功能,包括容器隔离、安全策略和身份验证等,以确保应用程序的安全性。
调度
它可以把用户提交的docker容器部署到k8s管理的集群的某一台,放哪一台取决于他所需要的cpu和memory。
自动修复
k8s会检测这个集群中的全部宿主机,故障时会进行健康检查并进行发现,会把失败失败节点上的容器进行自动迁移,迁移到一个健康的宿主机上恢复。
水平伸缩
k8s还会对业务进行负载检查,检测业务上所承担的负载,若业务出现对CPU的利用率过高或者响应时间过长,即进行扩容。
架构
API Server:顾名思义是用来处理 API 操作的,Kubernetes 中所有的组件都会和 API Server 进行连接,组件与组件之间一般不进行独立的连接,都依赖于 API Server 进行消息的传送;
Controller:是控制器,它用来完成对集群状态的一些管理。比如刚刚我们提到的两个例子之中,第一个自动对容器进行修复、第二个自动进行水平扩张,都是由 Kubernetes 中的 Controller 来进行完成的;
Scheduler:是调度器,“调度器”顾名思义就是完成调度的操作,就是我们刚才介绍的第一个例子中,把一个用户提交的 Container,依据它对 CPU、对 memory 请求大小,找一台合适的节点,进行放置;
etcd:是一个分布式的一个存储系统,API Server 中所需要的这些原信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。
Node
每个业务负载以Pod的形式运行。
一个Pod中运行一个或者多个容器
运行过程
用户可以通过 UI 或者 CLI 提交一个 Pod 给 Kubernetes 进行部署,这个 Pod 请求首先会通过 CLI 或者 UI 提交给 Kubernetes API Server,下一步 API Server 会把这个信息写入到它的存储系统 etcd,之后 Scheduler 会通过 API Server 的 watch 或者叫做 notification 机制得到这个信息:有一个 Pod 需要被调度。
这个时候 Scheduler 会根据它的内存状态进行一次调度决策,在完成这次调度之后,它会向 API Server report 说:“OK!这个 Pod 需要被调度到某一个节点上。”
这个时候 API Server 接收到这次操作之后,会把这次的结果再次写到 etcd 中,然后 API Server 会通知相应的节点进行这次 Pod 真正的执行启动。相应节点的 kubelet 会得到这个通知,kubelet 就会去调 Container runtime 来真正去启动配置这个容器和这个容器的运行环境,去调度 Storage Plugin 来去配置存储,network Plugin 去配置网络。