原文作者:NGINX
原文链接:Kubernetes:快速入门指南
转载来源:NGINX 官方网站
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn
什么是 Kubernetes?
Kubernetes又称为 k8s,是一个开源平台,用于实现容器化应用和工作负载部署、扩展和管理的自动化与编排。它为在内部、云和边缘等任何环境中以容器形式运行的应用提供了具有内置灵活性、可扩展性、可靠性、高可用性和可移植性的计算基础设施。
Kubernetes 可自动处理与大规模管理容器化工作负载相关的最常见任务,包括部署、负载均衡、横向扩展、发布和回滚以及自我修复。
许多组织已经在生产环境中使用 Kubernetes(支持的应用有少有多),还有一些组织正在对这一技术进行评估。由于其普及性,Kubernetes 已成为容器编排和管理领域的事实标准。
Kubernetes 的优势
Kubernetes 正快速普及,因为它可以帮助:
-
加快和简化应用发布周期
-
实现跨公有云、私有云和混合云以及多云环境的工作负载可移植性
-
提高资源利用效率
-
轻松实现可扩展性和做好生产准备
-
优化环境以满足业务服务级别协议 (SLA)
Kubernetes 和微服务
将传统的单体应用重构为更小的松散耦合部分,即微服务,可加快新应用特性和更新发布速度并简化扩展,从而帮助提高业务敏捷性。云原生微服务架构的采用推动了对底层计算基础架构的演进需求,我们发现,从物理系统和虚拟机过渡到容器是运行微服务的最有效方式之一。
随着微服务和容器数量的增加,对容器管理自动化的需求也不断增长。Kubernetes 可帮助满足这一需求。
Kubernetes vs. Docker
Kubernetes 能够大规模地编排和运行容器化应用;但它无法将应用代码打包成容器化格式以进行分发和执行(容器镜像包括应用代码和必要的运行时、库及其他软件依赖项)。为了运行 pod,Kubernetes 还要求必须在每个节点上安装容器运行时。
Kubernetes 最初使用Docker Engine作为容器运行时。但从 Kubernetes 1.24 开始,容器运行时必须符合容器运行时接口 (CRI) 标准,而 Docker Engine 不满足这一要求。CRI-O 和containerd(最初是一个 Docker 项目)是两个常用的符合 CRI 标准的容器运行时。
要将应用打包成容器,您需要一个像Docker 这样的工具。Docker 是构建、共享和运行容器化应用的最常用工具之一。它实现了将应用打包成可移植容器镜像操作的简化和自动化,这些容器镜像可随时在内部和云平台上(包括在 Kubernetes 环境中)执行和部署。Docker 打包容器能够在 containerd 和 CRI-O 运行时上原生运行。
Kubernetes 架构
Kubernetes 平台由一组节点组成,这些节点相互连接构成集群,共享池化计算资源。每个集群都管理着许多 pod,pod 是 Kubernetes 架构中最小的可部署单位。
一个 pod 包含一个或多个应用容器。多个 pod 组合构成一个服务。可通过多种方法从外部访问 Kubernetes 集群内的应用,其中Ingress controller(Ingress 控制器)是最流行、最高效的方法之一。
下面让我们来详细了解一下 Kubernetes 环境中的组件:
Kubernetes Pod
Kubernetes pod 是可以在 Kubernetes 中部署的最小可执行单元。Pod 是一个或多个应用容器镜像的“虚拟主机”(就像传统应用的物理服务器或虚拟机),它封装了一个或多个共享相同的计算、存储和网络资源(因此可以被视为是相对紧密地耦合)的容器。Pod 在 Kubernetes 节点上部署和执行。
Kubernetes 节点
Kubernetes 节点是计算基础设施的最小单位。节点可以是虚拟机或物理服务器,分配处理器、内存、存储和网络资源以部署、运行、扩展和管理 pod。多个节点相互连接构成一个集群。
Kubernetes 集群
Kubernetes 集群由一组节点组成,这些节点跨 pod 共享池化计算资源。集群中有两种节点:
-
工作节点——运行 pod 中的容器化应用
-
主节点——运行 Kubernetes 控制平面,编排和管理工作节点和 pod。
通常情况下,在 Kubernetes 集群中每种类型的节点都不止一个,以此来保障可用性和容错能力。
Kubernetes deployment
Kubernetes的deployment 描述了如何在集群中将应用作为一组 pod 副本(或实例)运行。Deployment 定义了:
-
要运行的 pod 副本的数量。
-
如何逐步部署 pod 更新
-
如何将 pod 副本回滚到之前的状态
-
如何横向扩展 pod 副本
Kubernetes 中的应用互联
Kubernetes 支持 IPv4/IPv6 双协议栈,为在集群中运行的容器化应用提供网络连通性。与 Kubernetes 集群内应用的通信以及集群内服务之间的通信都是在四层(IP 地址、端口)和七层(主机名、通用资源标识符 [URI])进行管理,包含路由、负载均衡、安全防护、监控和可视化功能。
Kubernetes 网络
在 Kubernetes 网络模型中,每个 pod 都有一个唯一 IP 地址,该地址从集群的私有地址池动态分配。同一集群中的所有节点上运行的全部 pod 都属于同一个 IP 网络,可通过该网络相互通信。Pod 内的多个容器通过环回接口彼此通信。
Kubernetes service
Kubernetes service 让集群中作为一个或多个 pod 运行的应用或微服务可在网络上访问(即所谓的“暴露”)。
关于此处内容,您可以点击文章《Kubernetes:快速入门指南》进行查看。
Kubernetes 安全防护
Kubernetes 安全防护采用分层方法来保护基础架构(内部和云计算资源、网络通信和管理平面)以及在 Kubernetes 集群内运行的应用。
为了确保基础架构的安全,请遵循通用安全防护建议、教程和最佳实践来保护云端和本地私有的实施部署。
要想保护应用,可以在边缘和 Kubernetes 集群内实施强大的安全防护控制,以提供身份验证、授权、访问控制、加密、监控和可视化能力,并为进出集群及集群内的所有通信提供可选的 Web 应用防火墙和拒绝服务防护。
生产环境中的应用
在 Kubernetes 的早期采用阶段,自己动手 (DIY) 方法占主导地位,但对许多组织来说,这种方法太过复杂,难以构建和操作。因此,对于生产部署,组织正在采用云托管的 Kubernetes 平台和预打包的 Kubernetes 发行版——它们集成了各种技术组件,简化了维护生命周期,并可跨混合和多云环境部署。
NGINX 如何助您一臂之力
NGINX Kubernetes 原生应用连接栈可通过降低复杂性,延长正常运行时间,并提供内部、云和边缘运行的 Kubernetes 应用的实时、详尽可视化信息,帮助改善客户体验。
-
Kubernetes 互联套件 —— 跨混合多云环境扩展、观测、治理和保护 Kubernetes 应用。
-
NGINX Ingress Controller —— 利用 API 网关、身份和可观测性功能来管理 Kubernetes 集群边缘的应用互联
-
NGINX Service Mesh—— 一款开发人员友好型解决方案,可确保 service 到 service 连通性、安全防护、可观测性和灵活编排
NGINX 唯一中文官方社区 ,尽在nginx.org.cn
更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源:
- 开源社区官网:https://www.nginx.org.cn/
- 微信公众号:https://mp.weixin.qq.com/s/XVE5yvDbmJtpV2alsIFwJg