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
posted @ 2025-04-07 23:22  丁志岩  阅读(17)  评论(0)    收藏  举报