k8s中pod基础知识和常用创建、删除操作【测试成功】

艺帆风顺 发布于 2025-04-02 15 次阅读


一、基础概念

     Kubernetes(k8s)中,Pod 是最小的可部署单元。它是一个由一个或多个容器组成的组。这些容器会共享网络和存储,并在同一主机上运行。Pod 提供了一种部署、扩展和管理容器的方式。

    以下是关于 Kubernetes 中的 Pod 的一些重要概念

  1. 容器共享网络和存储:

  • 在同一个 Pod 中的容器可以通过 localhost 相互通信,它们共享相同的网络命名空间。

  • 所有容器都可以访问 Pod 共享的存储卷,这在容器之间共享数据时非常有用。

  • 生命周期和终止:

    • Pod 是一个临时的、可以替换的实例。如果一个 Pod 被删除,Kubernetes 将创建一个新的 Pod 替代它。

    • Pod 中的容器可以通过 Kubernetes API 请求自己的终止。Kubernetes 会向 Pod 发送一个终止信号,容器在接收到信号后有一定时间来完成未完成的工作,然后正常退出。

  • 标签和选择器:

    • Pod 可以使用标签进行标识和选择。标签是键值对,可以附加到 Pod 上。

    • 选择器(Selector)允许你按标签选择一组 Pod,以便进行操作,如部署、暴露服务等。

  • 多容器 Pod:

    • Pod 可以包含多个容器。这些容器在同一网络命名空间中运行,共享相同的存储。

    • 这种模式在容器之间需要共享文件或者紧密协同工作的场景中很有用。

  • Pod 状态和事件:

    • Pod 有一个状态(Pending、Running、Succeeded、Failed、Unknown),表示当前 Pod 所处的状态。

    • 事件记录了 Pod 生命周期中的重要事件,可以用于故障排除和监控。

  • Pod 控制器:

    • Pod 通常由控制器(例如 Deployment、StatefulSet)创建和管理。这些控制器负责确保 Pod 的副本数目,支持滚动更新等功能。

  • 生命周期钩子:

    • Pod 提供了生命周期钩子,允许在容器启动前或终止后运行命令。这对于执行初始化任务或清理任务非常有用。

  • 资源和限制:

    • 可以为 Pod 中的容器设置资源请求和限制,以确保它们得到足够的计算资源,并防止资源耗尽。

        总体而言,Pod 提供了一种组织和部署容器的灵活且强大的方式。在实际应用中,通常使用 Pod 控制器(如 Deployment、StatefulSet)来管理 Pod 的创建、复制和伸缩。

    二、Pod常用命令

     1、查看所有pods

            kubectl get pods

      [root@jdmaster ~]# kubectl get podNAME                         READY   STATUS    RESTARTS   AGEk8s-nginx-6d779d947c-jkwh5   1/1     Running   0          26sk8s-nginx-6d779d947c-lgbfx   1/1     Running   0          26s

      2、查看特定命名空间中的 Pods

          kubectl get pods -n

          替换  为实际的命名空间名称。

      3、查看详细信息

          kubectl describe pod

          替换  为实际的 Pod 名称。这会显示有关 Pod 的详细信息,包括事件、标签和容器信息等。

      4、查看 Pod 的日志

          kubectl logs

          替换  为实际的 Pod 名称。这会显示 Pod 中容器的日志。

          kubectl logs k8s-nginx-6d779d947c-jkwh5

          替换  为实际的 Pod 名称, 为容器名称。这对于多容器 Pod 很有用。

        [root@jdmaster ~]# kubectl logs k8s-nginx-6d779d947c-jkwh5/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d//docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh/docker-entrypoint.sh: Configuration complete; ready for start up2023/11/16 05:24:57 [notice] 1#1: using the "epoll" event method2023/11/16 05:24:57 [notice] 1#1: nginx/1.25.32023/11/16 05:24:57 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 2023/11/16 05:24:57 [notice] 1#1: OS: Linux 5.10.134-13.an8.x86_642023/11/16 05:24:57 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:10485762023/11/16 05:24:57 [notice] 1#1: start worker processes2023/11/16 05:24:57 [notice] 1#1: start worker process 282023/11/16 05:24:57 [notice] 1#1: start worker process 29

        5、查看 Pod 内部容器的日志:

            kubectl logs -c

            替换  为实际的 Pod 名称, 为容器名称。这对于多容器 Pod 很有用。

        6、执行命令在 Pod 内部容器中

            kubectl exec -it -- /bin/sh

            这将在指定的 Pod 内部的一个容器中打开一个交互式终端。替换  为实际的 Pod 名称。

        7、删除 Pod

            kubectl delete pod

            替换  为要删除的 Pod 的名称。这会删除 Pod,并在需要时创建一个新的 Pod。

        8、删除 Pod:

           删除:kubectl delete  deployment  k8s-nginx

          [root@jdmaster ~]#  kubectl delete  deployment  k8s-nginxdeployment.apps "k8s-nginx" deleted

            强制删除:

                kubectl delete pod --force --grace-period=0

              kubectl delete pod k8s-nginx-6d779d947c-jtshd  --force --grace-period=0

            [root@jdmaster ~]# kubectl delete pod k8s-nginx-6d779d947c-xv22q  --force --grace-period=0warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.pod "k8s-nginx-6d779d947c-xv22q" force deleted

            9、查看 Pod 状态

            kubectl get pods --output=custom-columns=NAME:.metadata.name,STATUS:.status.phase

              [root@jdmaster ~]# kubectl get pods --output=custom-columns=NAME:.metadata.name,STATUS:.status.phaseNAME                         STATUSk8s-nginx-6d779d947c-jkwh5   Runningk8s-nginx-6d779d947c-lgbfx   Running

              10、使用标签选择 Pods:

                  kubectl get pods -l =    使用标签选择器查找具有特定标签的 Pods。替换  和  为实际的标签键和值。

              希望本篇文章能对读者有所帮助,欢迎扫描下方二维码关注本号,更多内容持续更新中。