Kubernetes 101,第二部分,pod

在上一篇文章中,我们了解了Kubernetes 的基础知识以及对其主要架构的介绍。

介绍完毕后,就该探索如何在 Kubernetes 中运行应用程序了。


容器包装器

在 Kubernetes 中,我们无法直接创建单个容器。相反,为了更好,我们可以将容器包装成一个单元,其中包括:

  • 规范:多个容器可以使用与可部署单元相同的规范

  • 共享存储:他们可以使用共享存储,因此相同的卷可以跨多个容器安装

  • 单一网络:同一包装器下的容器可以共享单一网络,因此它们可以相互通信

与 Docker 相比,这种包装器类似于docker-compose.yml,其中不同的服务(容器)可以共享一个共同的规范、卷和网络。

是的,我们正在谈论 Pods


豆荚

Pod是您可以在 Kubernetes 中创建和管理的最小可部署单元。

在 Pod 中,我们可以将多个容器分组,这些容器应该使用相同的网络或通过共享卷以某种方式相互通信。

让我们创建一些 Pod。

永远使用 YAML

到目前为止,我们已经使用kubectlorder 来创建 pod,例如:

$ kubectl run <container_name> --image=<some_image>

它非常适合运行实验性 Pod、在 k8s 中创建临时资源和其他工作负载(稍后我们将讨论工作负载)。

我们可以使用创建多个 Pod kubectl run ...,但是如果我们想与其他人、团队甚至开源社区分享我们如何声明我们的 Pod怎么办?

如何在像 Git 这样的 VCS 存储库中使用标准序列化格式在 k8s中共享我们应用程序所需状态的表示?

Kubernetes 带来了一种序列化格式,可以用来表示我们的 Pod,是的,不管你喜不喜欢,它就是众所周知的YAML

创建一个 Pod

使用 YAML,我们可以使用kind属性声明 Kubernetes 对象。K8s 使用了许多不同类型的对象,我们将在以后的文章中探讨这些对象,但此时我们将从 Kubernetes 中最常见和最小的单元开始:一个 Pod

我们的Pod 规范应该由以下部分组成:

  • 一个名为“服务器”的容器,由图像支持ubuntu,与 Pod 共享一个卷。这个容器将在共享卷中创建一个UNIX 命名管道又名FIFO,监听进入 FIFO 的一些消息。

  • 一个名为“客户端”的容器,也由图像支持ubuntu,与 Pod 共享一个卷。该容器将向共享卷写入一条名为“嘿”的简单消息。

期待

服务器启动时,将在共享卷中创建 FIFO。服务器一直在等待一些消息到达 FIFO。

当客户端启动时,它会将消息“Hey”写入共享卷。

之后,我们查看容器服务器日志,因为它应该打印客户端发送的消息 Hey

让我们声明 YAMl 文件fifo-pod.yml

kind:PodapiVersion:v1metadata:name:fifo-podspec:volumes:-name:queueemptyDir:{}containers:-name:serverimage:ubuntuvolumeMounts:-name:queuemountPath:/var/lib/queuecommand:["/bin/sh"]args:["-c","mkfifo /var/lib/queue/fifo; cat /var/lib/queue/fifo"]-name:clientimage:ubuntuvolumeMounts:-name:queuemountPath:/var/lib/queuecommand:["/bin/sh"]args:["-c","echo Hey > /var/lib/queue/fifo"]
  • kind:对象种类。在这种情况下,只需 Pod

  • metadata name:集群中 Pod 的名称,在当前默认命名空间下(我们将在以后的文章中讨论命名空间)

  • volumes:Pod 的共享卷。我们正在使用emptyDir它将共享 Pod 文件系统中的任何空目录

  • volumeMounts将 Pod 的共享卷挂载到容器文件系统的某个目录中

  • command:要在容器中执行的命令

声明后,我们可以使用 Git 与我们的朋友、同事等共享 YAMl 文件。但是该对象尚未在我们的集群中创建。我们通过使用命令来做到这一点kubectl apply

$ kubectl apply -f fifo-pod.yml
pod/fifo-pod created

让我们检查一下容器的日志server。我们可以使用命令kubectl logs <pod>来获取 Pod 中每个容器的日志。但是我们只想从容器中获取日志server

$ kubectl logs fifo-pod -c server
Hey

耶!有用!🚀

获取 Pod 列表

使用kubectl我们可以获得集群中的 Pod 列表:

$ kubectl get pods
NAME         READY   STATUS      RESTARTS      AGE
nginx        1/1     Running     1 (92m ago)   6d3h
fifo-pod     0/2     Completed   0             64m

我们有一个名为 PodnginxRunning6 天。这很容易理解,因为我在 6 天前运行过kubectl run nginx --image=nginx。另外,众所周知,NGINX 是一个持续运行的 Web 服务器(监听 TCP 连接),因此 Pod 仍处于 Running状态

但是我们刚刚创建的 Podfifo-pod正在返回一个Completed状态。为什么?

Pod 生命周期

Pod 遵循 Kubernetes 中的生命周期

与Docker 中的容器一样,Pod 被设计为短暂的。一旦 Pod 被调度(分配)到一个节点,Pod 就会在该节点上运行,直到它停止或终止。

Pod 生命周期按阶段工作。让我们了解每个阶段。

待办的

这是当一个 Pod 被集群接受但它的容器还没有准备好时。Pod尚未调度到任何节点。

跑步

所有容器都已创建,并且Pod 已被调度到一个节点。

至少有一个容器仍在运行或正在启动。

成功/失败

如果所有容器都Terminated成功,则 Pod 状态为Succeeded

但是如果所有容器都已终止但至少有 1 个容器失败终止,则 Pod 状态为Failed

终止/完成

表示所有容器都已终止(在 Kubernetes 内部)或已完成


更多关于 Pod 生命周期

Pod 生命周期在 Kubernetes 中是一个比较大的话题,涵盖了 Pod 的状态、就绪性、活跃度等。我们将在以后的文章中深入探讨有关生命周期的更多细节。


包起来

这篇文章更多地展示了Pod,它是Kubernetes 中最小和主要的可部署单元

最重要的是,我们还创建了一个 Pod,其中包含两个使用 FIFO 和共享卷相互通信的容器。

此外,我们还了解了Pod 生命周期。因此,Pod 生命周期及其生命周期对于理解即将发布的帖子的主题至关重要:Kubernetes 中的自我修复能力。

敬请期待!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

产品大道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值