您现在的位置是:首页 > 诗句大全

Kubernetes(k8s)核心资源解析:Pod详解

作者:纳雷武时间:2024-04-12 13:51:01分类:诗句大全

简介  文章浏览阅读9.8k次,点赞41次,收藏33次。Kubernetes(k8s)核心资源解析:Pod详解。_一个pod内的所有容器共享网络吗?

点击全文阅读

Kubernetes核心资源解析:Pod详解

1、什么是Pod?2、Pod 的组成3、Pod 如何管理多个容器4、Pod 的网络5、Pod 的存储方式6、Pod 的工作方式6.1 自主式 Pod6.2 监控和管理 Pod6.3 Pod 的创建流程


💖The Begin💖点点关注,收藏不迷路💖

1、什么是Pod?

Pod是Kubernetes中最小的调度单元,它可以包含一个或多个容器。Pod中的所有容器共享网络和存储卷,它们一起运行在同一个节点上。Pod提供了一种抽象层,使得容器可以作为一个逻辑单元来管理。

Pod中的容器共享IP地址、端口空间和存储,它们可以通过localhost / 127.0.0.1相互通信。

Pod的运行需要根据Kubernetes集群的工作节点来运行,具体调度哪个节点,根据调度器(Scheduler)实现。

2、Pod 的组成

1、容器:Pod中可以包含一个或多个容器,这些容器共享网络和存储卷。
2、共享网络命名空间:Pod中的所有容器共享同一个网络命名空间,它们可以相互通信。
3、存储卷:Pod中的容器可以共享存储卷,这些存储卷可以用于数据持久化或共享。

在这里插入图片描述

3、Pod 如何管理多个容器

在 Kubernetes 中,Pod 是最小的可部署单元,可以包含一个或多个容器。Pod 内的所有容器共享相同的网络命名空间、IP 地址和存储卷,并在同一主机上调度。

例如:

可以将一个主要容器与一个或多个 Sidecar 容器组合在同一个 Pod 中。主要容器负责应用程序的主要逻辑,而 Sidecar 容器可以处理辅助任务,例如日志收集、监控等。

要管理多个容器的 Pod,需要仔细设计容器之间的交互和共享资源,并利用 Kubernetes 提供的各种功能来简化管理和操作。

比如:Kubernetes 提供了各种资源来管理多容器的 Pod,如 Deployment、StatefulSet、DaemonSet 等。这些资源可以自动管理 Pod 的部署、扩展和更新。

4、Pod 的网络

在容器化应用中,Pod 中的容器需要相互通信,以及与外部系统进行通信。Pod 网络提供了一种机制来管理这种通信,并确保安全、高效地进行网络连接。

Pod 网络的特性:

1、容器间通信:Pod 网络允许 Pod 内的容器相互通信,这使得容器之间可以共享资源和信息。
2、跨节点通信:Pod 可以分布在 Kubernetes 集群的不同节点上,Pod 网络负责确保跨节点的通信。
3、服务发现:Pod 网络通常与 Kubernetes 中的服务发现机制结合使用,使得应用程序能够轻松地发现和连接到其他服务。
4、网络策略:Pod 网络可以实施网络策略,限制 Pod 之间的通信,提高安全性。

Pod 网络实现方式:

1、Overlay 网络:使用 Overlay 网络技术(如 VXLAN、Flannel、Calico 等)创建一个虚拟网络层,使得 Pod 可以透明地跨节点通信。
2、Host 网络:容器直接使用节点的网络命名空间,与节点共享网络配置。这种方式效率高,但缺乏网络隔离性。
3、混合网络:结合 Overlay 网络和 Host 网络的优势,提供更灵活的网络管理方式。

5、Pod 的存储方式

容器是短暂的,它们可以随时启动、停止或重新调度。因此,任何存储在容器中的数据都会随着容器的生命周期而消失。为了持久化存储应用程序的数据,需要一种机制来确保数据的持久性和可靠性。

Pod 存储的特性:

1、持久性:Pod 存储提供持久化的存储机制,确保数据在容器重新启动或迁移时不会丢失。
2、可靠性:Pod 存储通常提供数据的备份、复制和恢复机制,以确保数据的可靠性和安全性。
3、性能:Pod 存储应该具有良好的性能,能够满足应用程序对存储的高吞吐量和低延迟的需求。
4、扩展性:Pod 存储应该能够方便地扩展以应对不断增长的数据量和请求量。

Pod 存储的实现方式:

1、空白存储:它不会持久化保存任何数据,只是一种临时存储卷类型,在容器退出后会被删除,用于临时操作。
2、持久卷:通过 Kubernetes 的持久卷机制,可以将外部存储卷挂载到 Pod 中,以实现数据的持久化存储。
3、配置存储:用于存储敏感信息的一种资源,比如密码、API 密钥等。通常用于 Pod 的环境变量或者文件中,跨pod共享数据使用,与容器内部数据无关。

6、Pod 的工作方式

6.1 自主式 Pod

自主式 Pod(也称为静态)Pod 是 Kubernetes 中的一种特殊类型的 Pod,它们不受控制器的管理,而是由用户直接创建和管理。这意味着它们不受 ReplicaSet、Deployment 或其他控制器的管理。

自主式 Pod 通常用于特殊用例(测试、开发环境)。

自主式 Pod 如果被删除、即会从集群中彻底删除,不会自动创建。

创建自主式 Pod 的一般步骤:

例子(创建自主式 Nginx Pod):

1、编写 Nginx Pod 的 YAML 配置文件:

vim nginx-pod.yaml
apiVersion: v1kind: Podmetadata:  name: nginx-pod  labels:    app: nginxspec:  containers:  - name: nginx    image: nginx:latest    ports:    - containerPort: 80---apiVersion: v1kind: Servicemetadata:  name: nginx-servicespec:  type: NodePort  selector:    app: nginx  ports:  - protocol: TCP    port: 80    targetPort: 80    nodePort: 30007    

注意:nginx-service 将会匹配所有带有 app: nginx 标签的 Pods,并通过 NodePort 30007 将流量转发到这些 Pods 的 80 端口。

在这里插入图片描述

2、 将 YAML 文件应用到 Kubernetes 集群:

kubectl apply -f nginx-pod.yaml

在这里插入图片描述

3. 验证 Pod 是否成功创建:

kubectl get podskubectl get pods -o wide -l app=nginx#查看Pod 的详细信息kubectl describe pod nginx

在这里插入图片描述

4. 访问 Nginx Pod:

既然 Service 类型是 NodePort,可以通过任意 Kubernetes 集群节点的 IP 地址加上端口号 30007 来访问 Nginx 服务,如 http://:30007。

在这里插入图片描述

在这里插入图片描述
5. 验证自主式Pod删除:

##删除前面创建的自主式 Nginx Pod[root@k8s-master test]# kubectl delete pod nginx-podpod "nginx-pod" deleted[root@k8s-master test]#[root@k8s-master test]# kubectl get pods -o wide -l app=nginxNo resources found in default namespace.[root@k8s-master test]#

在这里插入图片描述

**结论**: 一旦删除自主式 Pod,其状态将无法恢复。在 Kubernetes 中,自主式 Pod 不会被控制器(如 Deployment 或 StatefulSet)所管理,因此删除后无法自动重建。



6.2 监控和管理 Pod

通常在生产环境中,Pod 都会由控制器对象(如 Deployment、StatefulSet、DaemonSet 等)进行管理,以确保高可用性、自动伸缩和故障恢复等功能。 这样做的好处包括能够更灵活地管理 Pod、自动重启失败的 Pod、根据需求扩展或缩减 Pod 数量等。

Kubernetes 会持续监控 Pod 的状态,并确保其处于期望的状态。如果 Pod 发生故障或终止,Kubernetes 将尝试重新启动 Pod,直到它达到期望的状态为止。

1、编写 Nginx Pod 的 YAML 配置文件:

前面的YAML 文件中包含了一个 Pod 和一个 Service 的定义,但没有使用控制器(如 Deployment 或 StatefulSet、Daemonset等)来管理 Pod。

例如:使用Deployment控制器来管理 Pod,修改 前面YAML 文件以包含 Deployment 部分。

vim nginx-deployment-service.yaml
apiVersion: apps/v1kind: Deployment # 指定资源的类型,这里是一个 Deployment 资源。metadata:  name: nginx-deployment # 设置 Deployment 的名称为 nginx-deploymentspec: # 规格部分,包含了 Deployment 的规格信息  replicas: 2  # 副本数为 2,表示将会创建 2 个 Pod,可以根据需要进行修改  selector:    matchLabels:      app: nginx # 选择具有 app: nginx 标签的 Pod  template:    metadata:      labels:        app: nginx  # 为 Pod 设置标签为 app: nginx    spec:      containers:      - name: nginx  # 容器的名称为 nginx        image: nginx:latest  # 使用最新版本的 nginx 镜像        ports:        - containerPort: 80---apiVersion: v1kind: Servicemetadata:  name: nginx-service # 设置 Service 的名称为 nginx-servicespec:  type: NodePort # 设置 Service 的类型为 NodePort,可以通过节点 IP 和节点端口来访问 Service  selector:    app: nginx  ports:  - protocol: TCP    port: 80  # Service 监听的端口号为 80    targetPort: 80  # 将流量转发到 Pod 中的端口号为 80 的容器    nodePort: 30007  # NodePort 类型的 Service 将会暴露在节点的 30007 端口上,可以通过节点 IP 和该端口来访问 Service

在这里插入图片描述

2、 将 YAML 文件应用到 Kubernetes 集群:

kubectl apply -f nginx-deployment-service.yaml

在这里插入图片描述

3. 验证 Pod 是否成功创建:

kubectl get podskubectl get pods -o wide -l app=nginx#查看Pod 的详细信息kubectl describe pod nginx

在这里插入图片描述

5. 验证控制器管理的Pod删除:

测试:当删除一个由控制器(如 Deployment)管理的 Pod 时,控制器将负责维护所需的副本数2。如果删除了一个 Pod,控制器将会检测到并尝试按照定义的副本数重新创建 Pod,以确保所需的 Pod 数量处于正常状态。

1、删除 Pod:首先,我们将删除由控制器管理的 Pod nginx-deployment-544dc8b7c4-5s9mk。kubectl delete pods nginx-deployment-544dc8b7c4-5s9mk2、验证 Pod 删除:使用以下命令确认 Pod 是否已被删除:kubectl get pods

在这里插入图片描述

3、等待 Pod 恢复:等待一段时间,让控制器检测到 Pod 的删除并采取行动。根据配置,可能需要几秒钟或几分钟来重新创建 Pod。4、确认 Pod 是否已恢复:再次运行以下命令来检查 Pod 是否已被重新创建:

在这里插入图片描述

能够看到新的 Pod 正在运行,并且它们的名称与之前的 Pod 不同,因为控制器会为它们生成新的唯一标识符。这表明控制器成功地将被删除的 Pod 替换为新的 Pod。

6.3 Pod 的创建流程

在这里插入图片描述

Pod 创建流程

Pod 创建的流程通常包括以下几个步骤:

1、定义 Pod 的 YAML 文件:首先,您需要创建一个 Pod 的描述文件,通常是一个 YAML 文件,其中包含了 Pod 的各种配置信息,比如容器镜像、资源需求、环境变量等。

2、API Server 接收请求:将 Pod 的 YAML 文件提交给 Kubernetes 集群的 API Server。

3、验证和准备:API Server 首先会对 Pod 的描述进行验证,包括格式检查、权限检查等。一旦验证通过,Kubernetes 就会为 Pod 分配一个唯一的标识符。

4、调度器选择节点:接下来,调度器(Scheduler)会根据 Pod 的调度需求(比如资源需求、亲和性和反亲和性规则等)选择一个合适的节点(Node)来运行 Pod。

5、节点拉取镜像:一旦调度器确定了节点,该节点上的容器运行时(比如 Docker 或者 Containerd)将会拉取 Pod 中定义的容器镜像。

6、创建 Pod:容器运行时根据 Pod 的描述信息在节点上创建容器,并且应用相关的配置,比如挂载卷、设置网络等。

7、运行容器:一旦容器创建完成,容器运行时就会启动容器,并且监控容器的运行状态。

8、Pod 状态更新:一旦 Pod 中的容器全部启动成功,Kubernetes 就会更新该 Pod 的状态为“运行中”。

9、监控和自愈:Kubernetes 会持续监控 Pod 的运行状态,如果发现 Pod 出现异常(比如容器崩溃、节点故障等),Kubernetes 会尝试自动修复或者重新创建 Pod。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

上一篇:谷雨_绝美诗歌句子

下一篇:返回列表

我来说两句