04-Pod的基础管理上篇(增删查)
一、什么是Pod
所谓的Pod是k8s集群调度的最小单元,说白了,就是一个Pod仅能部署到某一个节点,不能出现一个Pod部署到不同节点的情况。
一个Pod里面可以有多个容器。说白了,就是一个容器组。
Pod的三种类型
一个Pod有三种容器类型:
-
基础架构容器
该容器有K8S集群自行维护,其中pause镜像就是基础架构容器的镜像。为Pod所有容器提供网络名称空间的初始化。
-
初始化容器
在基础架构容器之后启动的容器,用户可以不一定义,说白了,该容器是可选的,用户可以选择不创建。
如果用户定义初始化容器,一般情况下都是为了业务容器做初始化相关的工作。
-
业务容器
就是你实际工作中业务的相关容器。
无论是初始化容器还是业务容器,都可以定义多个,但是基础架构容器仅有一个,由K8S的kubelet组件自行维护。
初始化容器可以不定义,一般情况下,我们只需要关注业务容器。
值得注意的是,当基础架构容器退出时,意味着网络名称空间将没有容器提供,则此时所有的业务容器都会被迫退出。
二、响应式管理Pod
1.创建Pod
- 语法
kubectl run [Pod名] --image=[镜像名及版本]
- 示例
[root@master231 ~]# kubectl run xiuxian --image=registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
2.查看Pod列表
- 语法
#简短输出
kubectl get pods
#详细输出
kubectl get pods -o wide
- 示例
[root@master231 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
xiuxian 2/2 Running 0 4h20m 10.100.140.75 worker233 <none> <none>
- 输出字段说明
NAME:
Pod的名称
READY:
Pod是否就绪。格式: "实际运行的容器数量/期望运行的容器数量"。
STATUS:
表示Pod的状态。
RESTARTS:
表示Pod内所有容器重启的次数累加和。这里的重启标识重新创建容器的次数。
AGE:
表示Pod的运行时间。
IP:
表示Pod的IP地址。
NODE:
表示调度Pod到哪个节点。
NOMINATED NODE|READINESS GATES:
无需关心。
3.访问Pod内的容器测试
kubectl get pods -o wide 会输出Pod的IP地址,如果容器内运行了web服务,可以使用curl测试
[root@master231 ~]# curl 10.100.203.133
4.验证容器的数量
当一个Pod创建并运行时,假设Pod内有n个容器运行,那么在worker节点上就会有n+1个容器被创建,其中有基础架构容器和业务容器
[root@worker232 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1274d180a37d f28fd43be4ad "/docker-entrypoint.…" 7 seconds ago Up 7 seconds k8s_xiuxian_xiuxian_default_26969c74-58c8-4201-8ab0-9a0be47faf05_0
a941dfa6ab85 registry.aliyuncs.com/google_containers/pause:3.6 "/pause" 7 seconds ago Up 7 seconds k8s_POD_xiuxian_default_26969c74-58c8-4201-8ab0-9a0be47faf05_0
5.测试验证
5.1 查看Pod列表
[root@master231 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
xiuxian 1/1 Running 0 95s 10.100.203.134 worker232 <none> <none>
5.2 删除业务容器
删除之后还会再次重新运行业务容器
[root@worker232 ~]# docker rm -f 1274d180a37d
1274d180a37d
[root@worker232 ~]#
[root@worker232 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd3f66a51cc3 f28fd43be4ad "/docker-entrypoint.…" 2 seconds ago Up 1 second k8s_xiuxian_xiuxian_default_26969c74-58c8-4201-8ab0-9a0be47faf05_1
a941dfa6ab85 registry.aliyuncs.com/google_containers/pause:3.6 "/pause" 2 minutes ago Up 2 minutes k8s_POD_xiuxian_default_26969c74-58c8-4201-8ab0-9a0be47faf05_0
...
[root@worker232 ~]#
5.3 再次查看列表
列表显示,容器已经重启了一次
[root@master231 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
xiuxian 1/1 Running 1 2m45s 10.100.203.134 worker232 <none> <none>
5.4 删除Pause基础架构容器
删除之后还会再次重新运行Pause基础架构容器
[root@worker232 ~]# docker rm -f a941dfa6ab85
a941dfa6ab85
[root@worker232 ~]#
[root@worker232 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d939860fe08 f28fd43be4ad "/docker-entrypoint.…" 2 seconds ago Up 1 second k8s_xiuxian_xiuxian_default_26969c74-58c8-4201-8ab0-9a0be47faf05_3
9d2c419ee497 registry.aliyuncs.com/google_containers/pause:3.6 "/pause" 2 seconds ago Up 1 second k8s_POD_xiuxian_default_26969c74-58c8-4201-8ab0-9a0be47faf05_0
...
[root@worker232 ~]#
5.5 再次查看列表
重启次数变为2次
[root@master231 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
xiuxian 1/1 Running 2 (68s ago) 7m13s 10.100.203.135 worker232 <none> <none>
6.删除Pod资源
- 语法
kubectl delete pod [pod名]
- 示例
[root@master231 ~]# kubectl delete pod xiuxian
三、声明式管理Pod指定节点调度
1.资源清单的组成部分
-
apiVersion
表示资源API的版本号,可以基于模板获取,可以忽略。 -
kind
表示资源的类型,可以基于模板获取,可以忽略。 -
metadata
资源的元数据信息。比如创建时间,名称空间,标签,注解,资源的名称等。 -
spec:
用户期望资源运行的状态。 -
status
资源的实际运行状态,该字段由K8S自行维护。
2.获取创建Pod的资源清单模板
[root@master231 pods]# kubectl run xiuxian --image=registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 -o yaml --dry-run=client
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: xiuxian
name: xiuxian
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
name: xiuxian
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
参数说明
-o yaml
获取资源的yaml文件格式。
--dry-run=client
不创建资源,用于客户端测试。
3.编写资源清单
#创建专门存放资源清单的目录
[root@master231 ~]# mkdir -p /dezyan/manifests/pods
[root@master231 pods]# cd /dezyan/manifests/pods
#导出生成的资源清单并编写
[root@master231 pods]# kubectl run xiuxian --image=registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 -o yaml --dry-run=client > 01-pods-single-xiuxian.yaml
apiVersion: v1
kind: Pod
metadata:
# Pod资源的名称
name: xiuxian-xixi
spec:
# 指定节点调度,节点的名称必须在etcd中有记录,可以使用"kubectl get nodes"查看。
nodeName: worker233
# 定义容器的相关配置
containers:
# 指定容器的镜像信息
- image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
# 指定容器的名称
name: xiuxian
4.创建资源
- 语法
kubectl create -f 资源清单文件
- 实例
[root@master231 pods]# kubectl create -f 01-pods-single-xiuxian.yaml
pod/xiuxian-xixi created
5.查看资源列表
[root@master231 pods]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
xiuxian-xixi 1/1 Running 0 3s 10.100.140.70 worker233 <none> <none>
6.测试验证
[root@master231 pods]# curl 10.100.140.70
7.删除资源
- 语法
kubectl delete -f 资源清单文件
- 示例
[root@master231 pods]# kubectl delete -f 01-pods-single-xiuxian.yaml
pod "xiuxian-xixi" deleted
本文来自博客园,作者:丁志岩,转载请注明原文链接:https://www.cnblogs.com/dezyan/p/18813808

浙公网安备 33010602011771号