3、pod 的创建与销毁

本文详细介绍了Kubernetes中Pod的基本概念,包括Pod内包含多个容器的原因,Pod间的网络通信机制,以及如何通过标签进行管理和隔离,如金丝雀部署。还涵盖了Pod的命名空间、创建、删除和注解等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、pod定义

1.1、为什么一个pod要包含多个容器,不是包含一个容器(更好发挥服务器性能,类似与一个pod是一个虚拟机)

一个pod中包含多个容器,kubernetes操控对象是pod,pod中的容器间是部分隔离的,
Kubernetes通过配置Docker来让⼀个pod内的所有容器共享相同的Linux 命名空间,
⽽不是每个容器都有⾃⼰的⼀组命名空间,由于⼀个pod中的所有容器都在相同的
network和UTS命名空间下运 ⾏(在这⾥我们讨论的是Linux命名空间),所以它们都共享相同的主 
机名和⽹络接⼜。同样地,这些容器也都在相同的IPC命名空间下运⾏,
因此能够通过IPC(进程间通信)进⾏通信。容器间共享ip和端口空间

1.2、pod间的网络通讯

pod间的网络通讯,是根据实际pod的ip同步,kubernetes会创建一个局域网LAN。并没有做
NAT网络地址转换
pod是逻辑主机,其⾏为与⾮容器世界中的
物理主机或虚拟机⾮常相似。此外,运⾏在同⼀个pod中的进程与运⾏
在同⼀物理机或虚拟机上的进程相似,只是每个进程都封装在⼀个容
器之中。

1.3、何时决定一个pod中存在多个容器

它们需要⼀起运⾏还是可以在不同的主机上运⾏?
它们代表的是⼀个整体还是相互独⽴的组件?
它们必须⼀起进⾏扩缩容还是可以分别进⾏?

1.4、检查现有pod的yaml的文件

kubectl get pod <pod_name> -o yaml

metadata 包括名称、命名空间、标签和关于该容器的其他信息。
spec包含pod内容的实际说明,例如pod的容器、卷和其他数据。
status 包含运⾏中的pod的当前信息,例如pod所处的条件、每个容
器的描述和状态,以及内部IP和其他基本信息

1.5、配置一个简单的yaml

vim demo.yaml

1.6、根据yaml文件创建pod

kubectl create -f test.yaml

1.7、根据pod 查看yaml 的json格式

kubectl get po <pod_name> -o json

1.8、查看pod的日志请求

kubectl -n ydxs-uat logs  <pod_name> | grep '鉴权' -C 5
kubectl -n ydxs-uat logs --tail 100 -f <pod_name>

1.9、不通过servce 进行网络跳转

kubectl port-forward <pod_name> <out_port>:<in_port>

2. pod 标签

2.1、pod 标签的作用

进行金丝雀部署(灰色部署),让一部分用户使用新上的功能
app,它指定pod属于哪个应⽤、组件或微服务。
rel,它显⽰在pod中运⾏的应⽤程序版本是stable、beta还是
canary。

2.2、pod指定标签

# 编辑yaml
vim kubia-manaul-v2.yaml

# 启动yaml生成pod
kubectl create -f kubia-manaul-v2.yaml


# 查看标签
kubectl get po --show-labels

2.3、pod的对应列表展示yaml文件中对应列 (-L列出列表,不做选择)

kubectl get po -L creation_method,env

2.4、已有pod上手动添加修改 label

# 添加
kubectl label po <pod_name> creation_method=manual
 
#修改 pod上的env=prod标签更改为env=debug
kubectl label  po <pod_name> env=debug --overwrite

2.5、pod标签选择器(-l 选择)

# 查询creation_method=manaul 的pod
kubectl get po -l creation_method=manaul;

# 查询包含env的pod
kubectl get po -l env

# 查询没有env的pod
kubctl get po -l '!env'


注意 确保使⽤单引号来圈引!env,这样bash shell才不会解释感叹
号(译者注:感叹号在bash中有特殊含义,表⽰事件指⽰器)。
同理,我们也可以将pod与以下标签选择器进⾏匹配:
creation_method!=manual 选择带有creation_method标签,并且值不
等于manual的pod
env in(prod,devel)选择带有env标签且值为prod或devel的pod
env notin(prod,devel)选择带有env标签,但其值不是prod或devel
的pod

2.6、标签指定到 特定节点

# 查询节点信息
kubectl get nodes

# 配置标签到指定mode
kubectl label node <node_name> <label_key>=<label=value>

# 查看节点带有标签的列表
kubectl get nodes -l <label_key>=<label=value>

kubernetes 的特性就是把pod看作一个虚拟机。我们只关注pod的创建和删除,
pod中的容器分布我们不需要关注,kubernetes 会自动分配容器到对应pod中,
如果需要将特定的pod的容器部署指定的节点上,就需要添加标签

2.7、pod 部署执行的标签的node节点

kubectl create -f demo.yaml

3、 pod 注解

3.1、pod添加注解

# 添加修改注解
kubectl annotate pod <pod_name> mycompany.com/someannotation="foo bar"

# 查看注解
kubectl describe pod <pod_name>

对于一些数据的说明

4、pod命名空间

4.1、pod的命名空间(隔离资源,命名空间为资源名称提供了⼀ 个作⽤域

# 查看命名空间所有分组
kubectl get ns

# 切换命名空间分组
kubectl get pod <pod_name> -n <namespace_name>

从命名空间的名称可以清楚地看
到,这些资源与Kubernetes系统本⾝是密切相关的。通过将它们放在单
独的命名空间中,可以保持⼀切组织良好。如果它们都在默认的命名
空间中,同时与我们⾃⼰创建的资源混合在⼀起,那么我们很难区分
这些资源属于哪⾥,并且也可能会⽆意中删除⼀些系统资源。

4.2、命名空间相关操作(指定pod归属命名空间)

# 查看现有命名空间
 kubectl get ns <ns_name> -o yaml

#创建新的命名空间
# 创建yaml文件,创建命名空间
kubectl create -f name_space.yaml
# 直接使用命名创建
kubectl create namespace <ns_name>

#指定pod资源指向命名空间
kubectl create -f pod.yaml -n <ns_name>

5、pod的删除与停止

5.1、删除和停止pod

# 根据名称删除pod
kubectl delete po <po_name>

# 根据label删除
kubectl delete po -l rel=canary

# 根据命名空间删除
kubectl delete ns <ns_name>

# 删除pod 保留命名空间(但是会重新创建)
kubectl delete pods --all

只要删除由该ReplicationCcontroller创建的pod,它便会⽴即创建⼀个新的pod。如果
想要删除该pod,我们还需要删除这个ReplicationCcontroller。

# 删除全部资源(包含services )
kubectl delete all --all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值