:mannotop manno – 第 5 页 – manno的博客

作者: manno

k8s概念和架构

Kubernetes 是一个可移植、可扩展的开源容器管理平台,用于管理容器化工作负载和服务,支持声明配置和自动化。它有一个庞大的、快速发展的生态系统。Kubernetes 服务、支持和工具广泛可用。

为什么需要 k8s 以及它能做什么

纯Docker运行模式的局限性:

  • 集群架构,业务容器数量庞大,N个数据节点,如何管理容器部署在哪个最合理的数据节点?容器管理
  • 跨主机通信问题,不同宿主机内的容器之间如何通信和相互调用?服务发现问题
  • 如何实现服务高可用?服务挂了怎么检测到并及时重启,健康监控问题
  • 容器如何实现多副本?多个副本之间如何实现负载均衡?
  • 如何实现服务的滚动升级,保证业务连续性?

k8s 为您提供:

  • 服务发现和负载平衡 Kubernetes 为容器提供一个 DNS 名称和 IP 地址,并使它们可以相互知晓彼此的存在。如果容器的流量很高,Kubernetes 能够负载平衡和分配容器间的网络流量,从而使部署稳定。
  • 存储编排 Kubernetes 允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。
  • 自动化上线和回滚 k8s会分步骤地监控应用或配置更改的上线(发布新的镜像),同时监视应用程序的执行状况以确保你不会同时终止所有实例,若上线过程出现问题,k8s会及时回滚到上线前的状态。
  • IPv4/IPv6 双协议栈,支持为Pod和容器分配IPv4或IPv6地址。
  • 自动装箱 您为 Kubernetes 提供了一个节点集群,它可以用来运行容器化任务。您可以指定 Kubernetes 为每个容器分配多少 CPU 和内存 (RAM)。Kubernetes 可以将容器安装到您的节点上,以充分利用您的资源。
  • 健康监控和自我修复 Kubernetes 会重启失败的容器,替换容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会向客户端发布它们。
  • 秘密和配置管理 Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。您可以部署和更新机密和应用程序配置,而无需重建容器映像,也无需在堆栈配置中公开机密。
  • 弹性伸缩 根据负载压力自动增加或削减容器数量。

k8s 不是什么

Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。由于 Kubernetes 在容器级别而不是在硬件级别运行,它提供了一些 PaaS 产品共有的普遍适用的功能,例如部署、扩展、负载平衡,并允许用户集成他们的日志记录、监控和警报解决方案。然而,Kubernetes 并不是单一的,这些默认解决方案是可选的和可插入的。Kubernetes 为构建开发人员平台提供了构建块,但在重要的地方保留了用户的选择和灵活性。

k8s 核心架构组件

*核心架构组件:安装、启动k8s后必定拥有的几个组件

  • etcd:k8s的内部运行组件,用于保存整个k8s集群的信息。(节点信息、节点上部署的容器信息等)
  • api-server:提供对k8s集群进行资源操作的唯一入口,对于每一个请求都有校验和鉴权。
  • controller manager:负责管理controller,它们共同负责维护k8s集群的状态,如故障检测、容器滚动更新、自动伸缩等。deployment controller就是其中之一。
  • scheduler:负责资源调度,按照预定的策略将Pod分配到Node机器上。
  • kuberlet:是K8s在目标Node上的进程,用于处理master节点下发到本节点的任务,管理Pod以及Pod中的容器。 每个kubelet进程会在API Server上注册节点信息,定期向master节点汇报节点资源的使用情况,并通过cAdvisor监控容器和节点的资源。
  • kubectl:k8s的命令行接口,用于对k8s集群运行命令,与api-server交互。

k8s 的系统架构

从系统架构来看,k8s包含两类角色:管理节点和工作节点。