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

云计算 云原生
Pod是kubernetes中最小的资源管理组件,本文将深入讲解如何封装多个容器在一个Pod中,释放Kubernetes的强大潜能。

在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/
责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2019-11-20 09:15:53

KubernetesPod

2021-11-22 08:00:00

Kubernetes容器集群

2023-12-31 16:23:39

KubernetesPod容器

2020-05-21 10:44:57

CSS混合模式开发

2024-01-10 16:46:13

Kubernetes容器

2023-08-27 15:25:49

2024-03-04 18:42:11

网络策略k8s网络通信

2021-09-14 13:25:23

容器pod僵尸进程

2013-04-07 09:53:24

Windows系统优化

2009-10-09 13:44:00

ccna考试必备知识ccna考试

2009-10-09 14:19:00

CCNA考试必备资料CCNA考试CCNA

2024-03-26 00:05:00

VS Code插件列开发

2020-07-06 07:52:10

Kubernetes网络通信

2020-04-26 11:16:46

KubernetesPodLinux

2024-02-28 10:23:18

etcd数据库Kubernetes

2011-07-12 09:47:53

WebService

2019-05-22 15:36:22

Linux容器镜像

2022-04-26 05:55:13

容器K8s管理debug问题

2021-02-14 00:11:19

物联网大数据IOT

2009-12-18 16:00:48

点赞
收藏

51CTO技术栈公众号