暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

巴韭特锁螺丝 2024-12-13
6

一、基础概念

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

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

  1. 容器共享网络和存储

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

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

  2. 生命周期和终止

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

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

  3. 标签和选择器

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

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

  4. 多容器 Pod

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

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

  5. Pod 状态和事件

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

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

  6. Pod 控制器

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

  7. 生命周期钩子

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

  8. 资源和限制

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

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

二、Pod常用命令

 1、查看所有pods

        kubectl get pods

    [root@jdmaster ~]# kubectl get pod
    NAME                         READY   STATUS    RESTARTS   AGE
    k8s-nginx-6d779d947c-jkwh5   1/1     Running   0          26s
    k8s-nginx-6d779d947c-lgbfx   1/1     Running   0          26s
    复制

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

        kubectl get pods -n <namespace>

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

    3、查看详细信息

        kubectl describe pod <pod-name>

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

    4、查看 Pod 的日志

        kubectl logs <pod-name>

        替换 <pod-name>
     为实际的 Pod 名称。这会显示 Pod 中容器的日志。

        kubectl logs k8s-nginx-6d779d947c-jkwh5

        替换 <pod-name>
     为实际的 Pod 名称,<container-name>
     为容器名称。这对于多容器 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.sh
      10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
      10-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 up
      2023/11/16 05:24:57 [notice1#1: using the "epoll" event method
      2023/11/16 05:24:57 [notice1#1: nginx/1.25.3
      2023/11/16 05:24:57 [notice1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 
      2023/11/16 05:24:57 [notice1#1: OS: Linux 5.10.134-13.an8.x86_64
      2023/11/16 05:24:57 [notice1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
      2023/11/16 05:24:57 [notice1#1: start worker processes
      2023/11/16 05:24:57 [notice1#1: start worker process 28
      2023/11/16 05:24:57 [notice1#1: start worker process 29


      复制

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

          kubectl logs <pod-name> -c <container-name>

          替换 <pod-name>
       为实际的 Pod 名称,<container-name>
       为容器名称。这对于多容器 Pod 很有用。

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

          kubectl exec -it <pod-name> -- /bin/sh

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

      7、删除 Pod

          kubectl delete pod <pod-name>

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

      8、删除 Pod

         删除:kubectl delete  deployment  k8s-nginx

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

          强制删除:

              kubectl delete pod <pod-name> --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=0
          warning: 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.phase
            NAME                         STATUS
            k8s-nginx-6d779d947c-jkwh5   Running
            k8s-nginx-6d779d947c-lgbfx   Running
            复制

            10、使用标签选择 Pods

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

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


            文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论

            暂无图片
            获得了115次点赞
            暂无图片
            内容获得99次评论
            暂无图片
            获得了28次收藏