后Kubernetes时代,带你系统梳理K8S 12大关键特性

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 导读: Kubernetes如今风靡一时,所有主要的云服务提供商都将其作为部署云原生应用的解决方案。Kubernetes有哪些显著的特性和工具优势,让企业开始接受它?本文作者给出了系统的梳理。 “Action without orchestration is burn out; orchestration w/o action is management.” 没有编排的行动是完蛋的,没有行动的编排是管理,行动加上编排是领导。

导读:

Kubernetes如今风靡一时,所有主要的云服务提供商都将其作为部署云原生应用的解决方案。Kubernetes有哪些显著的特性和工具优势,让企业开始接受它?本文作者给出了系统的梳理。

“Action without orchestration is burn out; orchestration w/o action is management.”


没有编排的行动是完蛋的,没有行动的编排是管理,行动加上编排是领导。― Orrin Woodward”

Kubernetes是一种优化资源利用率的抽象概念,它允许跨节点集群高效地进行应用程序分发。

Kubernetes,舵手 !

Kubernetes是一个希腊语单词,意思是“舵手”。

它是一个由谷歌开始的开源项目,从Borg衍生而来,在谷歌内部使用了好几年,现在用于容器管理。目前由CNCF托管。

Kubernetes(缩写为K8S)是一种抽象,它通过容器来优化CPU和内存等资源的利用率,从而可以跨多个节点高效地进行应用程序分发。K8S可以在裸金属或任何云基础设施提供商的任何地方运行。这个新工具是云无关的,聚焦于在基础设施内部部署和调度容器,而不是直接利用节点/主机。

K8S提供的一些平台特性是:

使用pod进行容器分组
自愈
自动伸缩
DNS管理
负载均衡
滚动更新或回滚
资源监控和日志记录
Kubernetes 架构

Kubernetes集群由主节点和一组worker/从属节点组成。

Kubernetes的主节点组成部分是:

  • API服务器(API Server)用户通过Rest操作或kubectl cli与manifestyaml交互。它用于所有与API对象相关的操作,如pod创建,它是在etcd中存储所需状态的唯一组件。
  • 调度器(Scheduler):用户使用kubectl cli向API服务器发出一个命令来创建pod。在执行此操作之后,调度程序根据资源需求将pods分配给可用节点。
  • 控制器管理器(Controller Manager):控制器管理器基于集群状态对资源进行操作,并根据清单yaml进行更改,将当前状态应用程序达到所需状态。换句话说,控制器管理器可以将实际状态与所需的状态进行协调。在控制器管理器中有多个专用的控制器,以便简化集群管理。例如,节点控制器检查是否有当前正在运行的节点停机,并采取纠正措施,而复制控制器确保在节点中实际运行所需的pod数量。
  • etcd:所有关于集群状态的配置信息都以key/value对的形式存储在etcd中,这个组件由CoreOS实现。这些状态显示了集群中包含的节点和需要在其中运行的pods。
  • 插件(Addons):为了将服务器DNS记录添加到Kubernetes,我们需要一个集群DNS 插件。该插件有助于扩展与Kubernetes集群或节点相关的功能。还有许多其他的插件,比如用于日志记录的fluntd、基于角色访问的rbac等等。

安装在Kubernetes节点中的组件是:

  • Docker: Docker守护进程在每个节点中运行。如果容器镜像不存在,那么它将从docker注册中提取并运行。
  • Kubelet: Kubelet节点代理定期检查容器内容器的健康状况。此外,它还确保按manifest安装卷,并下载运行容器所需的敏感信息。它还将节点链接到API服务器。
  • Kube-proxy: Kube-proxy在每个节点上运行,以便在pod中进行负载分配,并为外部主机提供可用的服务。它使用iptable规则或轮询调度来将请求转发到正确的容器。

对于高可用和容错的Kubernetes生产和部署,需要多个主节点和一个单独的etcd集群。如果运行了三个API服务器,则需要一个网络负载平衡器来正确地将负载分配到服务器。唯一剩下的问题是需要三个角色来管理控制器管理器和调度器以维护集群状态和分配节点。为了更高效、更可靠地执行它,只有一个参与者应该执行实际的更改,但是在机器宕机的情况下仍然需要其他实例。为了解决这个问题,我们可以在API中使用lease-lock 来执行主选,而使用它的标志是leader- elect。

Kubernetes通过以下任一种方式实现从Pod到Pod的联网:

1)第2层(切换解决方案)
2)第3层(桥接解决方案)
3) overlay解决方案(weave andflannel)

它们允许在集群中进行Pod和Pod之间的通信,并为每个Pod提供唯一的IP地址。

Kubernetes关键特性

Pod: Collection of Containers容器集

pod是K8S中的一个部署单元,它有一个单独的IP地址。在它内部,Pause容器通过持有一个网络的名称空间、端口和ip地址来处理网络,而这个地址又被pod中的所有容器使用。

ReplicationController

ReplicationController确保在给定的时间内启动和运行所需的容器数量。Pod模板用于定义容器镜像标识符、端口和标签。使用liveness probes,它可以自动治愈pods,并按照期望的状态维持pods数量。也可以通过使用kubectl来手动控制副本计数。

存储管理

Pods本质是短暂的——任何储存在pod或容器中的信息都会丢失。为了存储数据,一个持久的系统是必需的,即使在一个pod被杀死或重新调度之后,如Amazon Elastic Block Storage (EBS),谷歌GCE PD,或一个分布式文件系统,如网络文件系统(NFS)或Gluster文件系统(GFS)。

资源监控

监控是成功运行基础设施的关键之一,它是可靠性等级的基础。Heapster是一个从kubelet收集指标的插件,与cAdvisor集成。cAdvisor用于收集与运行容器的CPU、内存、I/O和网络统计数据相关的指标。由Heapster收集的数据存储在influx DB中,并使用Grafana在UI中显示。还有其他可使用的接收器,如Kafka或Elastic Search,可以用于存储数据并显示在用户界面中。

健康检查

kubernetes的健康检查由kubelet代理完成。它分为liveness 和 readiness probes两种。

处理程序主要有三种类型:

ExecAction:执行Shell命令,如果生成的退出代码为0,则意味着实例是健康的。在任何其他情况下,实例不健康。
TCPAction: Kubelet将尝试连接到指定的端口,如果它建立到给定socket的连接,诊断成功。
HTTPGetAction:基于应用程序公开的HTTP端点,kubelet对指定路径上的容器IP地址执行HTTP GET请求,如果返回200到300个响应代码,诊断就成功了。

每个probe通常有三个结果:

成功:容器通过诊断。
失败:容器未通过诊断。
未知:诊断失败,不要采取任何行动。

水平自动伸缩功能

自动伸缩使用基于负载的计算资源。K8S scale pod自动使用Horizontal Pod Autoscaler对象,从Heapster获取度量数据,并相应地减少或增加pod的数量。例如,如果自动伸缩是基于内存利用率,那么控制器就会开始在pod中观察内存使用情况,并根据容量对该副本计数进行扩展。

服务发现

Kubernetes pods是短暂的,ReplicationController 在任何节点上动态创建它们,因此在集群中发现服务是一个挑战。服务需要发现一个IP地址和动态的端口,以便在集群中进行通信。

有两种主要的方法来找到它——环境变量(Environment variables)和DNS。

更可取的是基于DNS的服务发现,它可以作为集群附加组件使用。跟踪集群中的新服务,并为每个服务创建一组DNS记录。

网络

要完全管理集群,必须正确设置网络,并解决三个网络问题:

1.容器到容器的通信:pods通过本地主机通信,并使用Pause容器网络名称空间,解决这个问题。
2.Pod-to-Pod通信:由软件定义的网络解决,如上面架构图所示。
3.外部到pod通信:由服务覆盖。

Kubernetes提供了广泛的网络选择。现在还支持容器网络接口(CNI)插件,这是容器的通用插件架构。目前支持多种编排工具,如Kubernetes、Mesos和CloudFoundry。

有各种覆盖插件:

1.Flannel来自CoreOS,是一个非常简单的etcd后端覆盖网络。它创建了另一个虚拟的、可路由的IP / Pod网络,运行在底层网络之上;ergo,称为覆盖网络。在这个覆盖网络中,每个Pod将被分配一个IP地址,并且会直接使用它们的IP进行通信。
2.Weave通过CNI插件提供与Kubernetes兼容的覆盖网络。

服务

Kubernetes服务是一种抽象,它将通信路由到一组pod,以提供一个微服务。Kube-proxy在每个节点上运行,并通过设置一组iptable规则来管理服务。

设立服务的模式有三种:

1.ClusterIP(只提供内部访问)
2.NodePort(需要在端口上打开防火墙;不建议公开访问)
3.负载均衡器(由AWS或GKE等公有云供应商拥有)

ConfigMap和Secret

ConfigMap使注入基于环境的配置成为可能,同时使容器镜像在多个环境中保持一致。这些可以通过安装卷或环境变量(environment variables)来注入,并将这些值存储在key/value格式中。

Secrets用于存储敏感数据,如密码、OAuth令牌等。

滚动部署和回滚

部署对象持有一个或多个副本集,以支持回滚机制。换句话说,每次更改部署配置时都会创建一个新的副本集,并保留以前的版本,以便有回滚选项。只有一个副本集将在特定时间处于活动状态。

对于滚动部署,需要的策略类型是RollingUpdate和minReadySecs,它指定应用程序为服务流量所花费的时间。如果在应用程序pod还没有准备好时,将其保持默认状态,它将不可用。这个动作可以通过以下命令来完成:

或者,

通过替换部署yaml文件中的内容并运行以下命令:

如果新版本不像预期的那样,那么可以通过运行以下命令回滚到以前的版本:

如果所需版本是前一版本以外的版本,则运行:

Logging记录

要监视应用程序的行为,必须检查日志——每个pod生成多个日志。要开始在仪表板UI中搜索日志,必须有一些机制收集并将它们聚合到一个日志查看器中。为了说明这一点,Fluentd是一个开源工具,也是CNCF的一部分,与 Elastic Search 和 Kibana 完美结合。

本文转自kubernetes中文社区-后Kubernetes时代,带你系统梳理K8S 12大关键特性

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
1月前
|
Kubernetes 网络协议 Nacos
OpenAI 宕机思考丨Kubernetes 复杂度带来的服务发现系统的风险和应对措施
Kubernetes 体系基于 DNS 的服务发现为开发者提供了很大的便利,但其高度复杂的架构往往带来更高的稳定性风险。以 Nacos 为代表的独立服务发现系统架构简单,在 Kubernetes 中选择独立服务发现系统可以帮助增强业务可靠性、可伸缩性、性能及可维护性,对于规模大、增长快、稳定性要求高的业务来说是一个较理想的服务发现方案。希望大家都能找到适合自己业务的服务发现系统。
123 12
|
2月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
234 19
|
2月前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
698 10
|
2月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
3月前
|
Kubernetes Cloud Native API
深入理解Kubernetes——容器编排的王者之道
深入理解Kubernetes——容器编排的王者之道
73 1
|
1月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
2月前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
152 12
|
2月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
2月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
87 2

热门文章

最新文章