k8s-pod查看、创建、删除命令

创建并运行

kubernetes没有提供单独运行Pod的命令,都是通过 Pod控制器 来实现的

命令格式

kubectl run 指定pod控制器名称 --image  指定Pod的镜像 --port   指定端口 --namespace  指定namespace

例子:

创建 test 命名空间

kubectl create ns test

查看是否有 test 命名空间

kubectl get ns

创建并运行 nginx pod:

kubectl run nginx --image=nginx:latest --port=80 --namespace test

提示:

  • kubectl run nginx 中的 nginx:是控制器名称

执行结果如下:

deployment.apps/nginx created

查看pod信息

查看default命名空间下的pod

kubectl get pod

查看某命名空间下的pod

查看 test 命名空间下的 pod

kubectl get pod -n test

执行结果:

NAME                    READY   STATUS    RESTARTS   AGE
nginx-dd6b5d745-9v86k   1/1     Running   0          27s

查看某命名空间下的pod更多信息

查看 test 命名空间下的 pod

kubectl get pod -n test -o wide

执行结果如下:

NAME                    READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
nginx-dd6b5d745-9v86k   1/1     Running   0          7m39s   10.244.1.7   node1   <none>           <none>

解释:

  • READY:1/1 表示有1个容器,该容器准备好了(根容器不算在内)
  • IP:pod的ip
  • NODE:表示在哪个节点运行

查看Pod的详细信息

kubectl describe pod nginx-dd6b5d745-9v86k -n test

执行结果如下:

Name:         nginx-dd6b5d745-9v86k  # 名字
Namespace:    test   # 命名空间
Priority:     0
Node:         node1/192.168.58.102  # 所在节点
Start Time:   Sat, 30 Sep 2023 14:22:12 +0800  # 开始时间
Labels:       pod-template-hash=dd6b5d745  # 标签
              run=nginx
Annotations:  <none>
Status:       Running  # 状态,正在运行
IP:           10.244.1.7  # pod ip地址
IPs:
  IP:           10.244.1.7
Controlled By:  ReplicaSet/nginx-dd6b5d745 # 控制器
Containers:  # 容器,一个pod可以有多个容器
  nginx: # nginx 容器
    Container ID:   docker://b00c1a9881ab70f2657ecca427129ab3ddd901f9496019940fcff2e99e60d572
    Image:          nginx:latest # 镜像名字、版本
    Image ID:       docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
    Port:           80/TCP # 端口
    Host Port:      0/TCP
    State:          Running # 状态,正在运行
      Started:      Sat, 30 Sep 2023 14:22:14 +0800 # 开始时间,比上面pod开始时间晚了2秒
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts: # 挂载点
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-x28p9 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-x28p9:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-x28p9
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events: # 事件,常用与排错
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  11m   default-scheduler  Successfully assigned test/nginx-dd6b5d745-9v86k to node1 # 调度到node1 节点执行该任务
  Normal  Pulling    11m   kubelet, node1     Pulling image "nginx:latest" # 拉取镜像
  Normal  Pulled     11m   kubelet, node1     Successfully pulled image "nginx:latest"
  Normal  Created    11m   kubelet, node1     Created container nginx
  Normal  Started    11m   kubelet, node1     Started container nginx

提示: Events 部分通常用于排错

删除指定的pod

直接删除pod(失败)

必须指定命名空间,否则从 default 命名空间中查找

提示:执行删除命令,时间较长

kubectl delete pod nginx-dd6b5d745-9v86k  -n test
删除后,再次查看 test 空间下的pod
kubectl get pod -n test

执行结果如下:

NAME                   READY   STATUS              RESTARTS   AGE
nginx-dd6b5d745-fr7pb   1/1     Running   0          27s

删除一个pod,会自动再次创建并运行一个pod

为什么不能直接删除pod(旧版本)

因为Pod是由 Pod控制器 创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建,这是 k8s 的优点

注意: 1.19 版本中可以直接删除

通过删除控制器删除pod

要想删除Pod,必须 删除 Pod控制器

查看控制器

查看test命名空间下的控制器:

kubectl get deploy -n  test

显示如下:

NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           37m
删除控制器
kubectl delete deploy nginx -n test
再次查看pod

过几秒钟,再次执行下面命令:

kubectl get pod -n test

由于 pod控制器被删除了,所以 pod也就被删除了

删除所有pod

可通过删除 test 空间,实现删除所有的资源,如:pod、控制器

kubectl delete ns test

yaml 配置文件

可通过 yaml 配置文件,实现创建、删除

创建 pod-nginx.yaml 文件:

vim pod-nginx.yaml

按 i 键

复制粘贴下面内容:

apiVersion: v1
kind: Pod # 下面是 pod 配置
metadata:
  name: nginx # pod 名称
  namespace: test # test命名空间
spec:
  containers: # 容器
  - image: nginx:latest # 指名镜像是nginx最新版本
    name: pod # 容器名称
    ports:
    - name: nginx-port
      containerPort: 80 # 容器端口
      protocol: TCP # 端口对应的协议

按 esc 键,:wq 保存退出
然后就可以执行对应的创建和删除命令了:

创建 pod

kubectl create -f pod-nginx.yaml

删除 pod

提示:根据yaml配置文件删除pod,可直接删除

kubectl delete -f pod-nginx.yaml

原文出处:/show_1IX6KRoJiBSC.html