【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

这篇具有很好参考价值的文章主要介绍了【Kubernetes 系列】一文带你吃透 K8S 应用pod结点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:半身风雪
上一节:创建K8s集群项目
简介:上一节我们一起学习了,如何去部署一个K8S 的应用程序,这一节,我们主要讲解一下,K8S 应用的框架结构。



目标

本节我将和大家一起学习Kubernetes 应用中的pod结点

  • 了解 Kubernetes Pod。
  • 了解 Kubernetes 工作节点。
  • 对已部署的应用故障排除。

一、Kubernetes Pods

在上一节中,我们一起学会了如何使用 kubectl 创建一个应用。这里我们一起来重温一遍。

  1. 启动minikube 集群

minikube start

  1. 打开 Kubernetes 仪表板(Dashboard)

minikube dashboard

在 dashboard 中,我们找到pods 结点,并打开

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

1.1、Kubernetes 中的pod 是做什么的

PodKubernetes 抽象出来的,表示一组一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源。这些资源包括:

  • 共享存储,当作卷
  • 网络,作为唯一的集群 IP 地址
  • 有关每个容器如何运行的信息,例如容器映像版本或要使用的特定端口。

Pod 是为应用程序的“logic host”建模,并且可以包含相对紧耦合的不同应用容器。例如,Pod 可能既包含带有 Node.js 应用的容器,也包含另一个不同的容器,用于提供 Node.js 网络服务器要发布的数据。Pod 中的容器共享 IP 地址和端口,始终位于同一位置并且共同调度,并在同一工作节点上的共享上下文中运行。

Pod是 Kubernetes 平台上的原子单元。 当我们在 Kubernetes 上创建 Deployment 时,该 Deployment 会在其中创建包含容器的 Pod (而不是直接创建容器)。每个 Pod 都与调度它的工作节点绑定,并保持在那里直到终止(根据重启策略)或删除。 如果工作节点发生故障,则会在集群中的其他可用工作节点上调度相同的 Pod。

通过运行起来的程序,我们可以在web 界面中,非常直观的看到pods 所有信息。

二、工作结点

首先,我们先来看一张图:

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

通过这张官方图,再结合我们自己的应用程序中的pods 结点的展示内容,你是不是也发现了什么呢?

每一个 pod 都是运行在 工作节点中。工作节点是 Kubernetes 中的参与计算的机器,可以是虚拟机或物理计算机,具体取决于集群。每个工作节点由主节点管理。工作节点可以有多个 pod ,Kubernetes 主节点会自动处理在集群中的工作节点上调度 pod 。 主节点的自动调度考量了每个工作节点上的可用资源。

每一个 Kubernetes 工作节点必须包含Kubelet容器:

  • Kubelet,负责 Kubernetes 主节点和工作节点之间通信的过程; 它管理 Pod 和机器上运行的容器。
  • 容器运行时(如 Docker)负责从仓库中提取容器镜像,解压缩容器以及运行应用程序。

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

三、故障排除

我们之前一直使用的Kubectl 命令来获取应用的相关信息,那么我们如何查看已经部署的项目的环境信息呢?当然还是使用Kubectl 相关命令咯。

3.1、常见kubectl 命令

下面我们一起来看看几个最常见的 kubectl 命令:

  • kubectl get - 列出资源
  • kubectl describe - 显示有关资源的详细信息
  • kubectl logs - 打印 pod 和其中容器的日志
  • kubectl exec - 在 pod 中的容器上执行命令

3.2、可视化界面

我们除了使用上面的 kubectl 命令 来查看及排查应用的故障之外, Kubernetes 仪表板(Dashboard)也为我们做出了最直观的展示。

点击应用名称,进入详情页面
【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

  • Metadata - 元数据
    【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

  • Resource information - 资源信息

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

  • Conditions - 条件

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

  • Controlled by - 管控器

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

  • Persistent Volume Claims - 资源体积

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

  • Events - 事件

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

  • 容器状态

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

四、pod 资源详情

看到这里,肯定大家也有一些困惑,我们能不能更直观的,查看整个pods 资源,并且做一些修改呢?下面我们一起来看一张图:

【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

  1. 查看pods 日志。
  2. 在pod 中重新运行编译加载资源。
  3. pod 资源编辑,在这里可以修改当前pod 资源类似。
    【Kubernetes 系列】一文带你吃透 K8S 应用pod结点
  4. 删除当前pod 资源

pod 资源详细内容

kind: Pod
apiVersion: v1
metadata:
  name: hello-node-6b89d599b9-jdg2k
  generateName: hello-node-6b89d599b9-
  namespace: default
  uid: 52ca897e-8cf5-469c-a221-b19d1f5f8dfc
  resourceVersion: '1984'
  creationTimestamp: '2022-07-01T06:36:04Z'
  labels:
    app: hello-node
    pod-template-hash: 6b89d599b9
  ownerReferences:
    - apiVersion: apps/v1
      kind: ReplicaSet
      name: hello-node-6b89d599b9
      uid: 6fff5c66-6897-47f0-b531-c7f8c6d2acb3
      controller: true
      blockOwnerDeletion: true
  managedFields:
    - manager: kube-controller-manager
      operation: Update
      apiVersion: v1
      time: '2022-07-01T06:36:04Z'
      fieldsType: FieldsV1
      fieldsV1:
        f:metadata:
          f:generateName: {}
          f:labels:
            .: {}
            f:app: {}
            f:pod-template-hash: {}
          f:ownerReferences:
            .: {}
            k:{"uid":"6fff5c66-6897-47f0-b531-c7f8c6d2acb3"}: {}
        f:spec:
          f:containers:
            k:{"name":"echoserver"}:
              .: {}
              f:image: {}
              f:imagePullPolicy: {}
              f:name: {}
              f:resources: {}
              f:terminationMessagePath: {}
              f:terminationMessagePolicy: {}
          f:dnsPolicy: {}
          f:enableServiceLinks: {}
          f:restartPolicy: {}
          f:schedulerName: {}
          f:securityContext: {}
          f:terminationGracePeriodSeconds: {}
    - manager: Go-http-client
      operation: Update
      apiVersion: v1
      time: '2022-07-01T06:36:05Z'
      fieldsType: FieldsV1
      fieldsV1:
        f:status:
          f:conditions:
            k:{"type":"ContainersReady"}:
              .: {}
              f:lastProbeTime: {}
              f:lastTransitionTime: {}
              f:status: {}
              f:type: {}
            k:{"type":"Initialized"}:
              .: {}
              f:lastProbeTime: {}
              f:lastTransitionTime: {}
              f:status: {}
              f:type: {}
            k:{"type":"Ready"}:
              .: {}
              f:lastProbeTime: {}
              f:lastTransitionTime: {}
              f:status: {}
              f:type: {}
          f:containerStatuses: {}
          f:hostIP: {}
          f:phase: {}
          f:podIP: {}
          f:podIPs:
            .: {}
            k:{"ip":"172.17.0.3"}:
              .: {}
              f:ip: {}
          f:startTime: {}
      subresource: status
spec:
  volumes:
    - name: kube-api-access-79cmb
      projected:
        sources:
          - serviceAccountToken:
              expirationSeconds: 3607
              path: token
          - configMap:
              name: kube-root-ca.crt
              items:
                - key: ca.crt
                  path: ca.crt
          - downwardAPI:
              items:
                - path: namespace
                  fieldRef:
                    apiVersion: v1
                    fieldPath: metadata.namespace
        defaultMode: 420
  containers:
    - name: echoserver
      image: k8s.gcr.io/echoserver:1.4
      resources: {}
      volumeMounts:
        - name: kube-api-access-79cmb
          readOnly: true
          mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      terminationMessagePath: /dev/termination-log
      terminationMessagePolicy: File
      imagePullPolicy: IfNotPresent
  restartPolicy: Always
  terminationGracePeriodSeconds: 30
  dnsPolicy: ClusterFirst
  serviceAccountName: default
  serviceAccount: default
  nodeName: minikube
  securityContext: {}
  schedulerName: default-scheduler
  tolerations:
    - key: node.kubernetes.io/not-ready
      operator: Exists
      effect: NoExecute
      tolerationSeconds: 300
    - key: node.kubernetes.io/unreachable
      operator: Exists
      effect: NoExecute
      tolerationSeconds: 300
  priority: 0
  enableServiceLinks: true
  preemptionPolicy: PreemptLowerPriority
status:
  phase: Running
  conditions:
    - type: Initialized
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2022-07-01T06:36:04Z'
    - type: Ready
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2022-07-01T06:36:05Z'
    - type: ContainersReady
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2022-07-01T06:36:05Z'
    - type: PodScheduled
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2022-07-01T06:36:04Z'
  hostIP: 192.168.49.2
  podIP: 172.17.0.3
  podIPs:
    - ip: 172.17.0.3
  startTime: '2022-07-01T06:36:04Z'
  containerStatuses:
    - name: echoserver
      state:
        running:
          startedAt: '2022-07-01T06:36:04Z'
      lastState: {}
      ready: true
      restartCount: 0
      image: k8s.gcr.io/echoserver:1.4
      imageID: >-
        docker-pullable://k8s.gcr.io/echoserver@sha256:5d99aa1120524c801bc8c1a7077e8f5ec122ba16b6dda1a5d3826057f67b9bcb
      containerID: >-
        docker://ad3680651ec9494578d3217606d040e1ce5469eb8ba7644f8efa4d8c0d5e8411
      started: true
  qosClass: BestEffort

总结

本节内容相对比较简单,但却很重要,还是需要花费一点时间,做一个详细的验证学习理解的。
那么本节内容到这里就结束了,下一节我们一起学习如何将 Pod 暴露给外部实现通信交互。文章来源地址https://www.toymoban.com/news/detail-401711.html

到了这里,关于【Kubernetes 系列】一文带你吃透 K8S 应用pod结点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【云原生 | Kubernetes 系列】K8s 实战 如何给应用注入数据

    【云原生 | Kubernetes 系列】K8s 实战 如何给应用注入数据

    前面我们已经一起学习了很多的东西了,本篇文章,我们将一起学习,如何给应用注入数据,当然,本篇文章不会讲解全部知识点,而是带领大家,一起学习如何对我们的项目进行相关的配置和设置。 创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数。如果要

    2024年02月02日
    浏览(41)
  • Kubernetes(K8s)从入门到精通系列之五:K8s的基本概念和术语之应用类

    Service: Service指的是无状态服务,通常多个程序副本提供服务,在特殊情况下也可以是有状态的单实例服务,比如MySQL这种数据存储类的服务。 K8s里的Service具有一个全局唯一的虚拟ClusterIP地址,客户端可以通过这个虚拟IP地址+服务的端口直接访问该服务,再通过部署K8s集群的

    2024年02月14日
    浏览(40)
  • 【Kubernetes】K8s 查看 Pod 的状态

    NAME :Pod 的名称。 READY :代表 Pod 里面有几个容器,前面是启动的,后面是总数, 1 / 1 1/1 1/1 。 STATUS :就是当前 Pod 状态,最常见的就是 Running 正在运行,最期望的状态,只要不是 Running 的就说明有问题,就算是 Running 的就不一定没有问题。 状态 说明 Pending 挂起 在执行创建

    2024年01月15日
    浏览(48)
  • kubernetes(k8s) pod(资源限制、基础概念)

    kubernetes(k8s) pod(资源限制、基础概念)

    目录  一、资源限制 1、概念 1.2、Pod和容器的资源请求和限制 1.3、CPU资源单位 1.4、内存资源单位 1.5、CPU和内存的Requests和Limits的特点 1.6、案例 二、pod 的两种使用方式 三、pod 资源共享 四、底层容器Pause 1、pause 共享资源 1.1、网络 1.2、存储 1.3、小结 2、Pause主要功能 3、Pod

    2024年02月05日
    浏览(40)
  • Kubernetes(k8s)核心资源解析:Pod详解

    Kubernetes(k8s)核心资源解析:Pod详解

    💖The Begin💖点点关注,收藏不迷路💖 Pod是Kubernetes中最小的调度单元,它可以包含一个或多个容器。Pod中的所有容器共享网络和存储卷,它们一起运行在同一个节点上。Pod提供了一种抽象层,使得容器可以作为一个逻辑单元来管理。 Pod中的容器共享IP地址、端口空间和存储

    2024年04月11日
    浏览(45)
  • Kubernetes(k8s)容器编排Pod介绍和使用

    Kubernetes(k8s)容器编排Pod介绍和使用

    Pod是kubernetes中你可以创建和部署的最小也是最简的单位,一个Pod代表着集群中运行的一个进程。 Pod有两个必须知道的特点 通过yaml文件或者json描述Pod和其内容器的运行环境和期望状态,例如一个最简单的运行nginx应用的pod,定义如下 3.1.1 参数描述 下面简要分析一下上面的

    2024年02月08日
    浏览(43)
  • Kubernetes(k8s):精通 Pod 操作的关键命令

    Kubernetes(k8s):精通 Pod 操作的关键命令

    💖The Begin💖点点关注,收藏不迷路💖 Kubernetes 是一个强大的容器编排平台,其中的核心概念之一就是 Pod。Pod 是 Kubernetes 中最小的可部署单元,它由一个或多个容器组成,共享网络和存储资源。 在本篇博客中,我们将深入探讨 Kubernetes 集群中与 Pod 相关的一些重要命令,帮

    2024年04月14日
    浏览(454)
  • K8S第四讲 Kubernetes删除pod阻塞问题

    在Kubernetes中,当您尝试删除一个Pod时,可能会遇到Pod一直阻塞的情况。这通常是由于Pod正在运行或被其他资源(例如ReplicaSet或Deployment)控制而导致的。以下是一些可能的解决方案: 1: 确认Pod是否正在运行:在执行删除Pod命令之前,请先检查Pod的状态,确保它没有在运行中

    2024年02月05日
    浏览(38)
  • K8s(Kubernetes)学习(三):pod概念及相关操作

    K8s(Kubernetes)学习(三):pod概念及相关操作

    摘取官网: https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/#working-with-pods 1.1 简介 Pod 是可以在 Kubernetes 中 创建和管理的、最小的可部署的计算单元 。 Pod (就像在鲸鱼荚或者豌豆荚中) 是一组(一个或多个)容器 ; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 P

    2024年02月13日
    浏览(36)
  • kubernetes(k8s)为容器和 Pod 分配内存资源

    kubernetes(k8s)为容器和 Pod 分配内存资源

    展示如何将内存请求(request)和内存限制(limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。 创建新的命名空间 编辑yaml文件 配置文件的 args 部分提供了容器启动时的参数。 “–vm-bytes”, “150M” 参数告知容器尝试分配 15

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包