【云原生】Kubernetes之Pod的使用和Pod模板定义详解
Pod的使用和定义模板
文章目录
一、Pod
-
Pod是可以在Kubernetes中创建和管理的、最小的可部署的计算单元。
-
Pod(就像豌豆荚中)是一组(一个或多个)容器的集合;这些容器共享存储、网络、以及怎样运行这些容器的声明。Pod中的内容总是并置的并且一同调度,在共享的上下文中运行。Pod所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器,这些容器相对紧密耦合在一起。在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。
-
除了应用容器,Pod还可以包含在Pod启动期间运行的Init(初始化容器)。你也可以以注入临时性容器来调试正在运行的Pod。
二、什么是Pod?
2.1、什么是Pod
- Pod的共享上下文包括一组Linux名称空间、控制组(cgroup)和可能一些其他的隔离方面,即用来隔离容器的技术。在Pod的上下文中,每个独立的应用可能会进一步实施隔离。
2.2、K8S集群中的Pod的两种用法
- 运行单个容器的Pod:每个Pod一个容器模型是最常见的Kubernetes用例;在这种情况下,可以将Pod看作单个容器的包装,并且Kubernetes直接管理Pod,而不是容器
- 运行多个协同动作的容器的Pod:Pod可以封装由紧密耦合且需要共享资源的多个并置容器组成的应用。这些位于同一位置的容器构成一个内聚单元。
备注
- 将多个并置、同管的容器组织到一个Pod中是一个相对高级的使用场景。只有在一些场景中,容器之间紧密关联时你才应用使用这种模式
三、使用Pod
- 下面是一个Pod示例,它由一个运行镜像
nginx:1.14.2
的容器组成
[root@master ~]# cat pod-nginx.yaml
apiVersion: "v1"
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
[root@master ~]# kubectl apply -f pod-nginx.yaml
pod/nginx created
四、介绍Pod模板
- 工作负载资源的控制器通常使用Pod模板来代替你创建
Pod
并管理它们。 Pod
模板是包含在工作负载对象中的规范,用来创建Pod
。这类负载资源包括Deployment
、Job
和DaemonSet
等。- 工作负载的控制器会使用负载对象中的
PodTemplate
来生成实际的Pod
。PodTemplate
是你用来运行应用时指定的负载资源的目标状态的一部分。 - 创建Pod时,你可以在Pod模板中包含的Pod中运行的容器的环境变量
五、使用Pod模板的优点
5.1、可重用性
- Pod模板允许你定义一次Pod的配置,然后再多个地方重用它。例如,你可以创建一个包含特定应用程序和配置的Pod模板,然后在需要运行该应用程序的多个地方引用该模板。这避免了在每个地方重复相同的配置,减少了错误和遗漏的可能性
5.2、一致性
- 通过使用Pod模板,你可以确保所有基于该模板创建的Pod都具有相同的配置。这对于维护应用程序的一致性和稳定性非常重要,因为它介绍了由配置差异而导致的问题
5.3、灵活性
- Pod模板是高度可配置的,允许你根据需要定义各种参数,如容器镜像、命令、参数、环境变量、存储卷等。这种灵活性意味着你可以根据不同的用力和需求轻松地定义Pod模板
5.4、管理便捷性
- 当使用Pod模板时,你可以通过更新模板来更新所有基于该模板创建的Pod。这对于批量更新应用程序版本、配置或安全补丁非常有用。此外,kubernetes提供了丰富的API和工具来管理Pod模板和基于创建的Pod,使得管理变得更加便捷和高效
5.5、支持高级功能
- Pod模板与Kubernetes的高级功能(如自动扩展、滚动更新、健康检查等)紧密集成。通过使用Pod模板,你可以更容器地利用这些功能来确保你的应用程序在Kubernetes集群中高效、可靠地运行
5.6、易于理解和维护
- 将Pod的配置封装在模板中可以使得你的Kubernetes配置文件更加清晰和易于理解。这有助于团队成员更快地熟悉和理解你的部署架构,从而更容易地进行维护和和故障排除
5.7、支持不同的工作负载类型
- 虽然Pod模板本身是针对Pod的,但Kubernetes中的许多高级工作负载类型(如Deployment、StatefulSet、DaemonSet等)都基于Pod模板来创建和管理Pod。这意味着你可以通过定义Pod模板来支持不同的工作负载类型,从而满足你的不同需求
六、Pod模板应用
- 下面的示例是一个简单的Job(一次性计划任务)的资源清单,其中的
template
指示启动一个容器。该Pod中的容器会打印一条消息之后暂停
[root@master ~]# cat podtemplate.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: hello
spec:
template:
# 这里是 Pod 模板
spec:
containers:
- name: hello
image: busybox:1.28
# Pod执行3006秒后退出
command: ['sh','-c','echo "hello,Kubernetes!" && sleep 3600']
# Pod 的重启策略,一共有三种Never、OnFailure、Always
restartPolicy: OnFailure
[root@master ~]# kubectl apply -f podtemplate.yaml
job.batch/hello created
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-kk2sq 1/1 Running 0 20s
原文地址:https://blog.csdn.net/weixin_73059729/article/details/140616217
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!