Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文带你理解14个K8s必备基础概念

一文带你理解14个K8s必备基础概念

作者头像
CNCF
发布于 2021-05-27 08:08:51
发布于 2021-05-27 08:08:51
9130
举报
文章被收录于专栏:CNCFCNCF

关于K3s,你想了解的都在这里 本周五下午2:30,SUSE技术社区经理将在直播间进行QA,时间一共30分钟!现在提前征集QA问题啦!关于K3s你想知道的一切,都写在石墨文档里吧!周五下午QA环节为你解答噢! QA链接:https://shimo.im/docs/G6kwTpXTD9qkc9kY 直播链接:https://live.polyv.cn/watch/2235539

在微服务、云计算和无服务架构时代,理解Kubernetes并且知道如何使用它是十分有用的。然而,官方的Kubernetes文档对于刚开始接触云计算的用户来说有些难以理解。在本文中,我们将了解在Kubernetes中的重要概念。在之后的系列文章中,我们还将了解如何写配置文件、使用Helm作为软件包管理器、创建一个云基础架构、使用Kubernetes轻松编排服务并且创建一个CI/CD流水线来自动化整个工作流。有了这些信息,你可以启动任意种类的项目,并且创建一个强大的基础架构。

首先,我们知道使用容器有多种好处,从部署速度的提升到大规模一致性交付等。即使如此,容器也并非一切问题的解决之道,因为使用容器会带来一定的开销,比如维护一个容器编排层。所以,你需要在项目开始的时候分析成本/效益。

现在,让我们开启Kubernetes世界之旅吧!

Kubernetes硬件结构

节点

节点是Kubernetes中的worker机器,可以是任何具有CPU和RAM的设备。例如,智能手表、智能手机或者笔记本,甚至是树莓派都可以成为一个节点。当我们使用云时,节点就是一个虚拟机(VM)。所以,简单来说,节点是单一设备的抽象概念。这种抽象的好处是,我们不需要知道底层的硬件结构。我们只使用节点,这样一来,我们的基础设施就独立于平台。

集群

一个集群是一组节点。当你将程序部署到集群上时,它会自动将工作分配到各个节点。如果需要更多的资源(简单来讲,我们需要更多钱),那么集群中将会加入新的节点并且将会自动重新分配工作。

我们在集群上运行我们的代码,但我们不需要关心具体在哪个节点上运行了哪部分的代码。工作的分配是自动的。

持久卷(persistent volumes)

因为我们的代码可以从一个节点转移到另一个节点(例如,某个节点没有足够的内存,那么工作将会被重新调度到另一个拥有充足内存的节点上),所以在节点上保存数据容易丢失。如果我们想要永久保存我们的数据,我们应该使用持久卷。持久卷有点类似外部的硬盘,你可以将它插入并在上面保存你的数据。

Google开发的Kubernetes是一个无状态应用程序的平台,其持久性数据存储在其他地方。当这一项目发展成熟之后,许多企业想要在有状态应用程序中使用它,所以开发人员需要添加持久卷管理。如同早期的虚拟化技术,数据库server通常情况下并不是首要迁移到新架构上去的server。这是因为数据库是许多应用程序的核心,并且可能包含很多重要信息,所以本地数据库系统在虚拟机或物理机中通常规模很大。

所以,问题是,我们应该什么时候开始使用持久卷?要回答这个问题,首先,我们应该理解数据库应用的不同类型。

我们将数据管理解决方案分为以下两类:

  1. 垂直伸缩——包括传统的RDMS解决方案,例如MySQLPostgreSQL以及SQL Server
  2. 水平伸缩——包括“NoSQL”解决方案,例如ElasticSearch或基于Hadoop的解决方案

垂直伸缩解决方案(如MySQL、PostgreSQL以及Microsoft SQL)不应该应用在容器内。这些数据库平台要求高I/O、共享磁盘以及block存储等,并且无法处理集群内的节点丢失,但这一情况常常会发生在基于容器的生态系统内。

对于水平伸缩应用程序(如Elastic、Cassanda、Kafka等)可以使用容器。他们能够承受数据库集群内的节点丢失以及数据库应用可以自行恢复均衡。

通常情况下,你应该容器化分布式数据库,从而利用冗余的存储技术并且能够处理数据库集群内的节点丢失(ElasticSearch是一个很好的例子)。

Kubernetes软件组件

容器

现代软件开发的目标之一是保证各类应用程序在相同的主机或集群上可以彼此隔离。虚拟机是解决该问题的一个方案。但虚拟机需要他们自己的操作系统,所以他们的规模通常是千兆字节。

容器则恰恰相反,它可以隔离应用程序的执行环境但共享底层操作系统。所以,容器就像一个盒子,我们可以在其中保存一切运行应用程序所需要的:代码、运行时、系统工具、系统仓库、设置等。它们通常仅需要几兆字节即可运行,远远少于虚拟机所需资源,并且可以立即启动。

Pods

Pod是一组容器。在Kubernetes中,最小的单位是Pod。一个pod可以包含多个容器,但通常情况下我们在每个pod中仅使用一个容器,因为在Kubernetes中最小复制单位是pod。如果我们想要为每个容器单独扩容,我们添加一个容器到Pod中即可。

Deployments

Deployment的最初功能是为pod和ReplicaSet(相同Pod在其中会被复制很多次)提供声明式更新。使用deployment,我们可以指定有多少相同pod的副本应该随时运行。Deployment类似于pod的管理器,它可以自动启动所需数量的pod、监控pod并在出现故障时重新创建Pod。Deployment极其有用,因为你不需要单独创建和管理每个pod。

我们通常为无状态应用程序使用deployment。然而,你可以通过给他附加一个持久卷来残存deployment的状态并使其变得有状态。

Stateful Sets

StatefulSet是Kubernetes中的一个新概念并且它是用于管理有状态应用的资源。它管理deployment和一组pod的扩展,并且确保这些pod的顺序以及独特性。它与deployment类似,唯一的区别是deployment创建一组任意名称的pod,并且pod的顺序对它来说并不重要,而StatefulSet创建的pod都有独一无二的名称以及顺序。所以,如果你想为名为example的pod创建3个副本,那么StatefulSet将会创建为:example-0、example-1、example-2。因此,这一创建方式最重要的好处就是你可以通过pod的名称就了解大致的情况。

DaemonSets

DaemonSet可以确保pod运行在集群的所有节点上。如果从集群中添加/移除了一个节点,DaemonSet会自动添加/删除该pod。这对于监控以及日志十分重要,因为你可以监控每个节点并且不需要手动监控集群。

Services

Deployment负责保持一组Pod处于运行状态,那么Service负责为一组Pod启动网络访问。Services可以跨集群提供标准化的特性:负载均衡、应用间的服务发现以及零宕机应用程序deployment。每个服务都有独一无二的IP地址以及DNS主机名称。可以为需要使用服务的应用程序手动配置相应的IP地址或主机名称,然后流量将会被负载均衡到正确的pod。在外部流量的部分,我们会了解到更多的服务类型以及我们如何在内部服务和外部世界间进行通信。

ConfigMaps

如果你想部署到多个环境中,如staging、开发环境和生产环境,bake配置到应用程序中并不是一个好的操作,因为环境之间存在差异性。理想状况下,你会希望每个部署环境对应不同的配置。于是,ConfigMap应运而生。ConfigMaps可以让你从镜像中解耦配置工件以保持容器化应用程序的便携性。

外部流量

既然你已经了解运行在集群中的服务,那么你如何获取外部流量到你的集群中呢?有三种服务类型可以处理外部流量:ClusterIP、NodePort以及LoadBalancer。还有第4种解决方案:再添加一个抽象层,称为Ingress Controller。

ClusterIP

ClusterIP是Kubernetes中默认的服务类型,它可以让你在集群内部与其他服务进行通信。虽然ClusterIP不是为外部访问而设计的,但只要使用代理进行了一些改动,外部流量就可以访问我们的服务。不要在生产环境中采用这一解决方案,但可以用其来进行调试。声明为ClusterIP的服务不应该可以从外部直接可见。

NodePort

正如我们在本文第一部分中所看到的那样,pod正在节点上运行。节点可以是各种不同的设备,如笔记本电脑或虚拟机(但在云端运行时)。每个节点有一个固定的IP地址。通过将一个服务声明为NodePort,服务将会暴露节点IP地址,以便你可以从外部访问它。你可以在生产环境中使用NodePort,但对于拥有许多服务的大型应用程序来说,手动管理所有不同的IP地址十分麻烦。

LoadBalancer

声明一个LoadBalancer类型的服务,就可以使用云提供商的LoadBalancer向外部公开。外部load balancer如何将流量路由到服务Pod取决于集群提供程序。有了这个解决方案,你不必管理集群中每个节点的所有IP地址,但你将为每个服务配备一个load balancer。缺点是,每个服务都有一个单独的load balancer,你将按照load balancer实例付费。

这一解决方案适用于生产环境,但它有些昂贵。接下来,我们来看看稍微便宜一些的解决方案。

Ingress

Ingress不是一个服务,而是一个API对象,它可以管理外部对集群服务的访问。它作为反向代理和单一入口点(entry point)进入你的集群,将请求路由到不同的服务。我通常使用NGINX Ingress Controller,它承担了反向代理,同时也作为SSL发挥作用。暴露ingress的最佳生产方案是使用一个load balancer。

借助这一解决方案,你可以使用单个load balancer暴露任意数量的服务,所以你可以让费用保持在最低水平。

总结

在本文中,我们了解了Kubernetes中的基本概念及其硬件架构。我们还讨论了不同的软件组件,如Pod、Deployment、StatefulSets以及Services,并且了解了服务与外部世界之间如何进行通信。希望可以帮助你再次梳理Kubernetes里错综复杂的组件架构。

推荐阅读

入门教程:5步创建K8S Job,搞定批处理

Kubernetes网络概念初探

借助Rancher持续交付,3步实现金丝雀发布!

点击上方卡片关注公众号并设为星标✨

即可及时获取K8S干货哟

About SUSE Rancher

Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为“2020年多云容器开发平台领导厂商”以及“2018年全球容器管理平台领导厂商”,被Gartner评为“2017年全球最酷的云基础设施供应商”。

目前Rancher在全球拥有超过三亿的核心镜像下载量,并拥有包括中国联通、中国平安、中国人寿、上汽集团、三星、施耐德电气、西门子、育碧游戏、LINE、WWK保险集团、澳电讯公司、德国铁路、厦门航空、新东方等全球著名企业在内的共40000家企业客户。

2020年12月,SUSE完成收购RancherLabs,Rancher成为了SUSE “创新无处不在(Innovate Everywhere)”企业愿景的关键组成部分。SUSE和Rancher共同为客户提供了无与伦比的自由和所向披靡的创新能力,通过混合云IT基础架构、云原生转型和IT运维解决方案,简化、现代化并加速企业数字化转型,推动创新无处不在。

当前,SUSE及Rancher在中国大陆及港澳台地区的业务,均由数硕软件(北京)有限公司承载。SUSE在国内拥有优秀的研发团队、技术支持团队和销售团队,将结合Rancher领先的云原生技术,为中国的企业客户提供更加及时和可信赖的技术支撑及服务保障。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
k8s实践(1)--k8s集群入门介绍和基础原理
1、简单了解集群的工作原理和基础概念,名词解释。 2、安装etcd集群:etcd分布式键值存储系统,用于保持集群状态,比如Pod、Service等对象信息。 3、安装k8s集群,简单了解集群的如何工作。 4、搭建集群网络:基础网络搞好,后面才能顺利部署各种资源。 5、学习k8s的安全、Secrets,ssl认证。如果安全认证没有搞好,创建pod和service都会报各种错误。 6、然后我们深入学习pod和service。 7、深入学习集群工作原理分析,从基础到深度,才能学的扎实。 8、有了pod和service,就需要知道如果发现,学习coreDNS 9、开始部署一些有状态的服务 10、案例实践
黄规速
2022/04/14
2.4K0
k8s实践(1)--k8s集群入门介绍和基础原理
k8s 就是这么简单!一文看懂其核心概念!
上一篇讲了如何安装 K8s,并用 K8s 写了个hello,world来开了个头,这一次我们来了解下 K8s 的核心概念,K8s 的核心概念主要有:Pod、Node、Service 等,这些核心概念还有个高大上的名字叫做:资源对象,他们是通过 K8s 提供的 Kubectl 工具或者是 API 调用进行工作的,然后保存在 ectd 里;
业余草
2021/12/06
2.5K0
k8s 就是这么简单!一文看懂其核心概念!
带你一步一步摸索k8s
上面就是k8s的图标,是不是看上去很像海盗船的船舵,没错,Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。而且是谷歌“藏了多年的秘密武器”——-Borg 系统的开源版本
ikun999
2025/04/29
2780
带你一步一步摸索k8s
k8s实践(12)--K8s service服务详解
Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然而一旦被销毁生命就永远结束。 通过 ReplicationController 能够动态地创建和销毁 Pod(例如,需要进行扩缩容,或者执行)。 每个 滚动升级 Pod 都会获取它自己的 IP 地址,即使这些 IP 地址不总是稳定可依赖的。 这会导致一个问题:在 Kubernetes 集群中,如果一组 Pod(称为 backend)为其它 Pod (称为 frontend)提供服务,那么那些 frontend 该如何发现,并连接到这组 Pod 中的哪些 backend 呢?
黄规速
2022/04/14
9.7K0
k8s实践(12)--K8s service服务详解
k8s面试题
什么是Kubernetes(k8s)?它的主要功能是什么? Kubernetes(简称 k8s)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它的主要功能包括: 应用程序部署和版本控制 自动伸缩 容器负载均衡 自我修复 存储编排 什么是Pod?Pod之间的通信是如何实现的? Pod 是 Kubernetes 的基本部署单位,包含一个或多个容器。 Pod 内的容器共享相同的网络命名空间,可以通过 localhost 相互通信。 Pod 之间可以通过 Service 或直接使用 Pod IP
章工运维
2023/05/19
5030
《K8S权威指南》读书笔记-入门篇
一. k8s介绍 1. 是什么 kubernetes:古希腊“舵手”的意思(指引鲸鱼-docker) Production-Grade Container Orchestration:生产级别的容器编排系统 is an open-source system for automating deployment, scaling, and management of containerized applications:用于自动部署,扩展和管理容器化应用程序的开源系统 2. 发展历程 google内部使用十年之
kinnylee
2020/10/15
1.6K0
《K8S权威指南》读书笔记-入门篇
K3S 入门级实战教程,和 K8S 有何不同?
我们知道 Kubernetes(或 K8s)是用于管理容器化工作负载和服务的便携式开源平台。它有助于在集群中编排和管理 pod 中的应用程序。它还有效地改进了任务,例如重新部署的零停机时间或容器的自我修复。
我的小碗汤
2023/03/20
1.5K0
K3S 入门级实战教程,和 K8S 有何不同?
K8S外部流量相关的服务类型介绍
有三种服务类型可以处理外部流量:ClusterIP、NodePort以及LoadBalancer。还有第4种解决方案:再添加一个抽象层,称为Ingress Controller。如下图所示:
灰子学技术
2021/08/27
6160
K8S外部流量相关的服务类型介绍
k8s必学必会知识梳理
对外暴露了Kubernetes API。它是的 Kubernetes 核心控制层。它被设计为水平扩展,即通过部署更多实例来横向扩展。API Server 负责和 etcd 交互(其他组件不会直接操作 etcd,只有 API Server 这么做),是整个 kubernetes 集群的数据中心,所有的交互都是以 API Server 为核心的。API Server 提供了以下的功能:
我的小碗汤
2019/07/30
2K0
k8s网络模型与集群通信
在k8s中,我们的应用会以pod的形式被调度到各个node节点上,在设计集群如何处理容器之间的网络时是一个不小的挑战,今天我们会从pod(应用)通信来展开关于k8s网络的讨论。
你大哥
2021/11/18
5370
k8s网络模型与集群通信
k8s基本概念和术语
Master是集群的控制节点,每个K8s集群里需要有一个Master节点来负责整个集群的管理和控制。基本上k8s的所有控制命令都发给它,它来负责整个具体的执行过程。Master节点通常占据一个独立的服务器(高可用部署建议3台服务器)。
分母为零
2019/07/04
1.4K0
k8s基本概念和术语
《做一个不背锅运维:一篇搞定K8s Ingress》
Ingress是一种Kubernetes资源,用于将外部流量路由到Kubernetes集群内的服务。与NodePort相比,它提供了更高级别的路由功能和负载平衡,可以根据HTTP请求的路径、主机名、HTTP方法等来路由流量。
不背锅运维
2023/03/30
1.9K0
《做一个不背锅运维:一篇搞定K8s Ingress》
ASP.NET Core on K8S深入学习(4)你必须知道的Service
本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。
Edison Zhou
2019/08/20
7280
ASP.NET Core on K8S深入学习(4)你必须知道的Service
k8s基础概念及术语
上一篇简单介绍了一下k8s是什么以及如何使用kubeadm快捷安装,今儿来聊一下k8s的几个基础概念及术语。k8s中的资源都可以使用yaml文件进行描述。(文章内容来源于《kubernetes权威指南 第四版》)
Liusy
2020/09/16
1.2K0
k8s基础概念及术语
ASP.NET Core on K8S深入学习(11)K8S网络知多少
本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。
Edison Zhou
2019/12/17
6710
ASP.NET Core on K8S深入学习(11)K8S网络知多少
不背锅运维:粗讲:K8S的Service及分享现撸案例
Kubernetes中的Service是一种网络抽象,用于将一组Pod暴露给其他组件,例如其他Pod或外部用户。Service可以作为一个负载均衡器,为一组Pod提供单一的IP地址和DNS名称,并通过选择器来将流量路由到这些Pod。
不背锅运维
2023/03/08
1.3K0
不背锅运维:粗讲:K8S的Service及分享现撸案例
图解Kubernetes的服务(Service)
Kubernetes 中 Service 是 将运行在一个或一组 [Pod]上的网络应用程序公开为网络服务的方法。
JavaEdge
2024/01/10
3850
图解Kubernetes的服务(Service)
Kubernetes(k8s)-基本概念
作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2024/12/20
3250
Kubernetes(k8s)-基本概念
硬核技能k8s初体验
Kubernetes 是一个软件系统,使你在数以万计的电脑节点上运行软件时就像 所有节点是以单个大节点一样, 它将底层基础设施抽象,这样做同时简化了应用开发、部署,以及对开发和运维团队的管理。
有态度的马甲
2020/05/04
1.2K0
硬核技能k8s初体验
K8s的Service详解
● 在kubernetes中,Pod是应用程序的载体,我们可以通过Pod的IP来访问应用程序,但是Pod的IP地址不是固定的,这就意味着不方便直接采用Pod的IP对服务进行访问。
大忽悠爱学习
2022/09/28
1.4K0
K8s的Service详解
相关推荐
k8s实践(1)--k8s集群入门介绍和基础原理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档