CKA考试必备:解锁Pod封装多容器的高级技巧!
创始人
2025-07-14 01:00:15
0

在Kubernetes的世界里,Pod是最小的可部署单元,而有时候我们需要在同一个Pod中运行多个容器,以便它们可以紧密协作。本文将深入讲解如何封装多个容器在一个Pod中,释放Kubernetes的强大潜能。

一、Pod基础概念

Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的。

Pod

在Kubrenetes集群中Pod有如下两种使用方式:

(1) 一个Pod中运行一个容器:

每个pod中一个容器的模式是最常见的用法,在这种使用方式中,你可以把pod想象成是单个容器的封装,kuberentes管理的是Pod而不是直接管理容器。

(2) 在一个Pod中同时运行多个容器:

一个Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个Pod中的容器可以互相协作成为一个service单位,比如一个容器共享文件,另一个"sidecar"容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。

例如,你可能有一个容器,为共享卷中的文件提供 Web 服务器支持,以及一个单独的 Sidercar 容器负责从远端更新这些文件,如下图所示:

有些 Pod 具有 Init 容器[1]和 应用容器[2]。 Init 容器默认会在启动应用容器之前运行并完成。

二、案例演示

1.一个Pod中运行一个容器

下面是一个 Pod 示例,它由一个运行镜像 nginx:1.14.2 的容器组成。这种就是一个Pod中运行一个容器。

apiVersion:v1
kind:Pod
metadata:
  name:simple-pod
spec:
  containers:
  -name:nginx
    image:nginx:1.14.2
    ports:
    -containerPort:80

要创建上面显示的 Pod,请运行以下命令:

kubectl apply -f simple-pod.yaml

Pod 通常不是直接创建的,而是使用工作负载资源创建的。

2.一个Pod中同时运行多个容器

下面是一个Pod封装多个容器的示例,它由一个运行镜像 nginx:1.14.2和MYSQL的容器组成。

apiVersion:v1
kind:Pod
metadata:
  name:complex-pod
spec:
  containers:
  -name:nginx
    image:nginx:1.14.2
    ports:
    -containerPort:80
  -name:mysql
    image:mysql
    env:
    -name:MYSQL_ROOT_PASSWORD
      value:"@123456@"
    ports:
    -containerPort:3306

由于最新版的MySQL容器必须要配置一个环境变量,不然就会启动失败:

创建上面显示的 Pod,请运行以下命令:

kubectl apply -f complex-pod.yaml

一个Pod封装多个容器,采用kubectl操作pod里面的容器时,跟一个Pod中运行一个容器不同。例如,要进入nginx容器内。在Pod封装多个容器应该执行如下命令:

kubectl exec -it complex-pod -c nginx /bin/sh
  • complex-pod: 是pod的名称
  • -c 指定是pod中容器的名称,例如:nginx

三、CKA真题讲解

1.真题截图

2.中文解析

切换 k8s 集群环境:kubectl config use-context k8sTask: 创建一个 Pod,名字为 kucc1,这个 Pod 包含 4 个容器,为 nginx、redis、memcached、consul。

3.官方参考文档

Pod封装多个容器[3]

4.做题解析

(1) 切换k8s集群环境

kubectl config use-context k8s

(2) 编写Pod资源对象文件

apiVersion:v1
kind:Pod
metadata:
  name:kucc1
spec:
  containers:
  -name:nginx
    image:nginx
  -name:redis
    image:redis
  -name:memcached
    image:memcached
  -name:consul
    image:consul

(3) 提交资源清单

kubectl apply -f kucc1.yaml

(4) 查看Pod创建的状态

kubect get pod

参考资料

  • [1]Init 容器: https://kubernetes.io/zh-cn/docs/reference/glossary/?all=true#term-init-container
  • [2]应用容器: https://kubernetes.io/zh-cn/docs/reference/glossary/?all=true#term-app-container
  • [3]Pod封装多个容器: https://kubernetes.io/zh-cn/docs/tasks/inject-data-application/define-environment-variable-container/

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...