CKA考试必备:解锁Pod封装多容器的高级技巧!

往期精彩文章 :

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

1Pod基础概念

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

Pod

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

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

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

  1. 在一个Pod中同时运行多个容器:

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

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

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

2案例演示

一个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 通常不是直接创建的,而是使用工作负载资源创建的。

一个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

3CKA真题讲解

真题截图

中文解析

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

官方参考文档

Pod封装多个容器[3]

做题解析

  1. 切换k8s集群环境
kubectl config use-context k8s
  1. 编写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
  1. 提交资源清单
kubectl apply -f kucc1.yaml
  1. 查看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/


相关推荐

  • 阿里面试官: 说说你知道的移动端适配方式?
  • 生来取代Docker、JS,谷歌力推,这项技术发布7年后,现状如何?
  • 招商银行内推。。。
  • 聊聊MySQL的锁
  • 上来就对标 20k Star 的开源项目,是自不量力还是后起之秀?
  • 18.7 k 一款媲美飞书的团队协作利器,开源了!
  • Stable Diffusion 3论文终于发布,架构细节大揭秘,对复现Sora有帮助?
  • 院士委员:“破五唯”似乎越“破”越“唯”,“帽子”比以前更多了,建议将青年科技人员帽子和待遇脱钩,避免把人分为三六九等
  • [开源]MIT开源协议,一款完全开源免费且可商用的OA办公管理系统
  • AI太火,量子位今年更缺人了 (含实习)
  • 通报一起“AI人格觉醒”事件
  • 阿里领投Minimax 6亿美元融资,5家大模型独角兽集齐了
  • Stable Diffusion 3技术报告出炉:揭露Sora同款架构细节
  • Claude 3“自我认知”事件引爆,马斯克坐不住了,OpenAI被曝还有后手
  • 如何缩小中美通用大模型差距? 我在两会看到了答案
  • 用Python优雅地编写LaTeX
  • 基于扩散模型的图像编辑:首篇综述
  • 【AAAI2023】基于神经跨度的持续命名实体识别模型
  • Notion CEO:为什么RAG会彻底改变知识型工作?
  • 每日 Prompt:行走的运动鞋