Kubernetes 篇

一、核心概念

Kubernetes(K8S)是一个用于自动化部署、扩展和管理容器化应用程序的开源系统,以下为你详细介绍其核心组件和相关概念:

核心组件

控制平面组件(Control Plane Components)

控制平面组件负责做出全局决策,比如资源调度,同时检测和响应集群事件。

  • kube - apiserver
    • 功能:作为 Kubernetes 控制平面的前端,它提供了 Kubernetes API,是所有组件通信的枢纽。其他组件通过与 API Server 进行交互来完成各自的工作,如创建、读取、更新和删除(CRUD)Kubernetes 资源对象。
    • 特点:支持水平扩展,可通过部署多个实例来提高可用性和性能。
  • etcd
    • 功能:一个高可用的键值存储系统,用于持久化存储 Kubernetes 集群的所有状态信息,例如 Pod、Service 等资源的定义和状态。
    • 特点:具有强一致性和高可用性,是 Kubernetes 集群的重要数据存储基础。
  • kube - scheduler
    • 功能:负责将待调度的 Pod 分配到合适的节点上运行。它会根据节点的资源使用情况、Pod 的资源请求等因素进行调度决策。
    • 特点:可以通过自定义调度器来满足特定的调度需求。
  • kube - controller - manager
    • 功能:运行多个控制器,这些控制器负责处理集群中各种常规任务,如节点控制器(Node Controller)负责监测和响应节点的添加、删除和故障;副本控制器(Replication Controller)负责维护 Pod 的副本数量。
    • 特点:每个控制器都是一个独立的进程,但为了降低复杂性,它们被编译成一个二进制文件并在一个进程中运行。
  • cloud - controller - manager
    • 功能:将云提供商的特定控制逻辑与 Kubernetes 核心分离。它允许云提供商的代码和 Kubernetes 代码独立进行开发和维护。例如,在云环境中处理节点的创建、删除和负载均衡等操作。
    • 特点:只有在使用云服务提供商的基础设施时才需要使用该组件。
节点组件(Node Components)

节点组件在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。

  • kubelet
    • 功能:作为节点上的代理,负责与控制平面通信,接收分配给该节点的 Pod 定义,并确保这些 Pod 中的容器正常运行。它会定期向 API Server 汇报节点和 Pod 的状态信息。
    • 特点:会监控容器的资源使用情况,并在必要时进行资源限制和回收。
  • kube - proxy
    • 功能:在每个节点上运行,负责实现 Kubernetes 的服务网络功能。它通过在节点上创建网络规则,将对 Service 的请求转发到后端的 Pod 上。
    • 特点:支持多种代理模式,如 IPTables 模式和 IPVS 模式。
  • 容器运行时(Container Runtime)
    • 功能:负责运行容器,Kubernetes 支持多种容器运行时,如 Docker、Containerd、CRI - O 等。
    • 特点:通过容器运行时接口(CRI)与 kubelet 进行交互。

相关概念

资源对象
  • Pod
    • 定义:Kubernetes 中最小的可部署计算单元,一个 Pod 可以包含一个或多个紧密相关的容器,这些容器共享网络和存储资源。
    • 用途:通常用于部署单个应用实例或一组紧密耦合的应用组件。
  • Deployment
    • 定义:用于声明式地管理 Pod 和 ReplicaSet。它可以定义 Pod 的期望状态,如副本数量、镜像版本等,并自动创建和管理相应的 Pod。
    • 用途:常用于部署无状态应用,支持滚动更新、回滚等操作。
  • Service
    • 定义:为一组具有相同功能的 Pod 提供一个统一的访问入口,它通过标签选择器来关联后端的 Pod。
    • 用途:可以实现负载均衡、服务发现等功能,使客户端可以通过固定的 IP 地址和端口访问后端的 Pod。
  • Volume
    • 定义:用于在容器之间或容器与宿主机之间共享数据。Kubernetes 支持多种类型的 Volume,如 EmptyDir、HostPath、NFS 等。
    • 用途:解决容器生命周期短暂导致的数据持久化问题,以及容器之间的数据共享问题。
  • Namespace
    • 定义:用于将集群资源划分为不同的虚拟空间,不同命名空间中的资源相互隔离。
    • 用途:可以用于多租户环境,不同的团队或项目可以使用不同的命名空间来管理自己的资源。
其他概念
  • 标签(Labels)和选择器(Selectors)
    • 定义:标签是附加在资源对象上的键值对,用于对资源进行分类和标识;选择器则用于根据标签筛选资源对象。
    • 用途:在 Deployment、Service 等资源中,通过标签选择器来关联和管理 Pod。
  • 注解(Annotations)
    • 定义:也是附加在资源对象上的键值对,但主要用于存储一些非标识性的元数据,如构建信息、运维信息等。
    • 用途:帮助工具和系统理解和处理资源对象。

二、POD日志查询指令

在 Kubernetes(K8S)集群环境下,查询一个 Pod 日志的完整流程及相关指令如下:

1. 确认与 K8S 集群的连接

在开始查询 Pod 日志之前,需要确保你已经正确配置了 Kubectl 工具,并且能够连接到目标 K8S 集群。你可以使用以下命令来验证连接:

kubectl cluster-info
  • 指令说明:该命令用于显示当前 Kubectl 所连接的 K8S 集群的信息,包括 Kubernetes 主节点和 KubeDNS 的 URL。如果能够正常显示信息,说明你已经成功连接到集群。

2. 查看命名空间

Kubernetes 中的资源通常是按命名空间(Namespace)进行隔离的,因此需要先确定目标 Pod 所在的命名空间。可以使用以下命令查看所有命名空间:

kubectl get namespaces
  • 指令说明:该命令会列出集群中所有的命名空间。如果不确定目标 Pod 所在的命名空间,可以通过查看输出找到可能的命名空间。

3. 确定目标 Pod 的名称

在确定了命名空间之后,需要找到目标 Pod 的名称。可以使用以下命令列出指定命名空间中的所有 Pod:

kubectl get pods -n <namespace>
  • 参数说明
    • -n <namespace>:指定要查询的命名空间。如果不指定该参数,默认查询default命名空间。
  • 指令说明:该命令会列出指定命名空间中的所有 Pod 的名称、状态、重启次数等信息。根据输出找到目标 Pod 的名称。

4. 查询 Pod 日志

找到目标 Pod 的名称后,可以使用以下命令查询该 Pod 的日志:

kubectl logs <pod-name> -n <namespace>
  • 参数说明
    • <pod-name>:目标 Pod 的名称。
    • -n <namespace>:指定目标 Pod 所在的命名空间。
  • 指令说明:该命令会输出指定 Pod 的日志信息。如果 Pod 中有多个容器,可以使用-c <container-name>参数指定要查看日志的容器。例如:
kubectl logs <pod-name> -c <container-name> -n <namespace>

5. 检索关键字

如果日志信息较多,可以使用grep命令结合kubectl logs命令来检索包含特定关键字的日志信息。例如,要检索包含error关键字的日志信息,可以使用以下命令:

kubectl logs <pod-name> -n <namespace> | grep "error"
  • 指令说明:该命令会先获取指定 Pod 的日志信息,然后使用grep命令过滤出包含error关键字的日志行。

6. 查看实时日志

如果需要查看 Pod 的实时日志,可以使用-f参数。例如:

kubectl logs -f <pod-name> -n <namespace>
  • 指令说明:该命令会持续输出指定 Pod 的实时日志信息,类似于tail -f命令。

完整示例

假设目标 Pod 所在的命名空间为my-namespace,Pod 名称为my-pod,要检索包含error关键字的日志信息,可以使用以下完整命令:

kubectl cluster-info
kubectl get namespaces
kubectl get pods -n my-namespace
kubectl logs my-pod -n my-namespace | grep "error"

通过以上步骤,你可以在 K8S 集群环境下完整地查询一个 Pod 的日志,并检索包含特定关键字的日志信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值