k8s的一些关键信息(归类摘抄,非提炼)

零:举例说明

当用户提交一个 Deployment 对象到 Kubernetes 集群时,控制平面的 API Server 接收到该请求,并将其转发给 Controller Manager。Controller Manager 中的 Deployment Controller 监听到该请求,并根据用户定义的配置信息,创建相应的 ReplicaSet 对象。Scheduler 负责将该 ReplicaSet 中的 Pod 调度到集群中的合适节点上。一旦 Pod 被调度到节点上并成功启动,控制平面会监控 Pod 的运行状态,并根据需要执行相应的自愈操作,以确保应用程序能够稳定地运行。整个过程中,控制平面负责管理和协调集群中的各种资源和操作,以实现集群的高效管理和运行。

一:对象

Kubernetes(K8s)中的对象是用来描述、配置和管理集群中各种资源和组件的抽象概念。Kubernetes 提供了多种类型的对象,每种对象都有不同的作用和用途,用于解决不同的业务问题。以下是一些常见的 Kubernetes 对象及其作用。

  1. Pod:

    • 作用:Pod 是 Kubernetes 中最基本的部署单元,可以包含一个或多个容器,并共享相同的网络命名空间、IP 地址和存储卷。
    • 业务问题:解决容器的部署和管理问题,提供了一个逻辑上的单元,用于运行应用程序或服务。
    • 设计原理:Pod 提供了容器的原子调度单元,使得应用程序或服务能够以一个独立的实体进行管理。
    • 实现技术:Pod 通过 Kubernetes API 和容器运行时实现,可以使用 YAML 文件来定义 Pod 的规格和配置。

    示例:

    python 复制代码
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
  2. Deployment:

    • 作用:Deployment 用于定义和管理 Pod 的部署策略,可以实现自动化的容器部署、滚动升级和回滚等操作。
    • 业务问题:解决应用程序的部署和更新问题,提供了一种方便和可靠的部署机制。
    • 设计原理:Deployment 提供了 Pod 的声明式定义和管理,通过控制器来实现 Pod 的自动化部署和更新。
    • 实现技术:Deployment 是通过 Kubernetes 控制器来实现的,可以使用 YAML 文件来定义 Deployment 的规格和配置。

    示例:

    python 复制代码
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            ports:
            - containerPort: 80

    Deployment 控制器是 Kubernetes 控制器的一种实现,负责管理 Pod 的部署策略。在 Kubernetes 中还有许多其他类型的控制器,如 ReplicaSet、StatefulSet、DaemonSet 等,它们分别用于管理不同类型的资源对象,并提供了不同的功能和特性,以满足不同的业务需求。

  3. Service:

    • 作用:Service 定义了一组 Pod 的访问方式,可以实现负载均衡、服务发现和访问控制等功能。
    • 业务问题:解决应用程序的服务发现和访问问题,提供了一种稳定和可靠的服务访问机制。
    • 设计原理:Service 提供了一个虚拟的服务入口,通过标签选择器来匹配 Pod,并将请求转发到对应的 Pod。
    • 实现技术:Service 是通过 Kubernetes 的网络模型和代理机制来实现的,可以使用 YAML 文件来定义 Service 的规格和配置。

    示例:

    python 复制代码
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80

以上是 Kubernetes 中的一些常见对象及其作用、业务问题、设计原理和实现技术的概述和示例。这些对象共同构成了 Kubernetes 集群的基础架构,为用户提供了丰富的功能和特性,帮助用户更加轻松地管理和运行容器化应用程序。

二:对象配置

Kubernetes 中的所有对象都可以使用 YAML 或 JSON 格式的配置文件来定义和配置。无论是内置对象(如 Pod、Deployment、Service 等)还是自定义对象(如 CustomResourceDefinition),都可以通过 YAML 或 JSON 文件来描述其规格和配置。(其实这里我觉得分为资源对象Pod等,控制器对象deployment等,服务对象service等等)

在 Kubernetes 的 YAML 文件中,通常包含以下内容:

  1. apiVersion: 指定 Kubernetes API 的版本,用于定义所创建资源对象的 API 版本。

  2. kind: 指定要创建的资源对象的类型,如 Pod、Deployment、Service 等。

  3. metadata: 包含了资源对象的元数据信息,如名称、命名空间、标签等。

  4. spec: 定义了资源对象的规格和配置信息,包括容器、存储卷、端口映射等。

  5. status: 包含了资源对象的状态信息,由 Kubernetes 控制平面自动更新。

这些内容的业务目标主要是描述和配置 Kubernetes 中的资源对象,以实现应用程序的部署、运行和管理。通过 YAML 文件可以清晰地定义资源对象的各种属性和配置,使得用户可以方便地创建和管理 Kubernetes 中的各种资源。

这些内容的实现是通过 Kubernetes 的 API 和控制平面来实现的。用户可以通过编辑 YAML 文件来定义资源对象的规格和配置,然后通过 Kubernetes 控制平面来解析和处理这些文件,从而创建和管理相应的资源对象。

三:对象中的容器

以下是一些常见 Kubernetes 对象的 YAML 文件,它们包含容器部分:

  1. Pod: 定义了一个或多个容器的共享运行环境。

    复制代码

    yamlCopy code

    apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80

  2. Deployment: 定义了一组 Pod 的副本,并负责对这些 Pod 进行管理和维护。

    复制代码

    yamlCopy code

    apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80

  3. StatefulSet: 类似于 Deployment,但用于有状态应用程序,确保 Pod 按照顺序启动和终止。

    复制代码

    yamlCopy code

    apiVersion: apps/v1 kind: StatefulSet metadata: name: my-statefulset spec: replicas: 3 serviceName: my-service selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80

  4. Job: 定义了一次性任务,运行完即止,不保持运行状态。

    复制代码

    yamlCopy code

    apiVersion: batch/v1 kind: Job metadata: name: my-job spec: template: spec: containers: - name: nginx-container image: nginx:latest command: ["echo", "Hello Kubernetes!"] restartPolicy: Never

  5. CronJob: 类似于 Job,但可以根据 Cron 表达式定期执行任务。

    复制代码

    yamlCopy code

    apiVersion: batch/v1 kind: CronJob metadata: name: my-cronjob spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: nginx-container image: nginx:latest command: ["echo", "Hello Kubernetes!"] restartPolicy: Never

以上是一些常见的包含容器部分的 Kubernetes 对象的 YAML 示例。这些对象定义了不同类型的应用程序或任务,并指定了相应的容器镜像和配置信息。

四:对象中的非容器

不是,不是所有的 YAML 文件都包含容器部分。容器的部分主要出现在定义 Pod、Deployment、StatefulSet、Job、CronJob 等涉及到容器的 Kubernetes 对象时。例如,定义 ConfigMap、Secret、Service、Namespace 等对象时,并不包含容器部分。

下面是一些 Kubernetes 对象的例子,它们不包含容器部分:

  1. ConfigMap: 用于存储配置数据,如环境变量、配置文件等。

    复制代码

    yamlCopy code

    apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: key1: value1 key2: value2

  2. Secret: 用于存储敏感数据,如密码、密钥等。

    复制代码

    yamlCopy code

    apiVersion: v1 kind: Secret metadata: name: my-secret data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm

  3. Service: 用于定义服务的访问方式和网络策略。

    复制代码

    yamlCopy code

    apiVersion: v1 kind: Service metadata: name: my-service spec: ports: - port: 80 targetPort: 8080 selector: app: my-app

  4. Namespace: 用于逻辑上的隔离和管理,包含其他对象。

    复制代码

    yamlCopy code

    apiVersion: v1 kind: Namespace metadata: name: my-namespace

这些对象的定义中并不包含容器部分,因为它们与容器无关。容器通常出现在定义 Pod 或其他包含容器的对象时。

五:k8s核心组件

Kubernetes 是一个高度可扩展的容器编排平台,由多个组件组成,每个组件都有自己的功能和作用。以下是 Kubernetes 中常见的组件及其功能:

  1. kube-apiserver(API Server):

    • 解决问题:提供 Kubernetes 集群的 API 接口,处理外部和内部的 API 请求。
    • 实现技术:Go 语言,基于 HTTP/HTTPS 协议提供 RESTful API。
    • 示例:当用户通过 kubectl 提交创建 Pod 的请求时,该请求首先会发送到 API Server。
  2. kube-controller-manager(Controller Manager):

    • 解决问题:负责运行一系列控制器,监控集群状态并进行调整。
    • 实现技术:Go 语言,每个控制器都是一个独立的进程。
    • 示例:Deployment Controller 监控 Pod 的状态,并确保根据用户定义的副本数进行副本的创建和删除。
  3. kube-scheduler(Scheduler):

    • 解决问题:负责将 Pod 调度到集群中的节点上,根据节点资源和 Pod 要求进行智能调度。
    • 实现技术:Go 语言,调度算法包括优先级算法、过滤算法等。
    • 示例:Scheduler 根据 Pod 的资源需求和调度策略,选择合适的节点进行调度。
  4. kubelet:

    • 解决问题:负责管理单个节点上的 Pod,执行 Pod 的创建、启动、停止等操作。
    • 实现技术:Go 语言,与 Docker 或其他容器运行时进行交互。
    • 示例:kubelet 根据 API Server 下发的指令,创建并管理节点上的 Pod。
  5. kube-proxy:

    • 解决问题:负责实现 Kubernetes 服务的网络代理和负载均衡,将服务暴露给集群内外的其他组件。
    • 实现技术:Go 语言,基于 IPTables 或 IPVS 等技术进行网络代理和负载均衡。
    • 示例:kube-proxy 接收到服务请求后,将请求转发给后端的 Pod,实现服务的负载均衡和高可用性。
  6. etcd:

    • 解决问题:提供 Kubernetes 集群的分布式键值存储,用于存储集群的状态和配置信息。
    • 实现技术:Go 语言,使用 Raft 一致性算法来保证数据的一致性和高可用性。
    • 示例:etcd 存储着集群的各种资源对象信息,如 Pod、Service、ConfigMap 等。
  7. kube-dns(CoreDNS):

    • 解决问题:为 Kubernetes 集群提供 DNS 服务,实现服务发现和解析。
    • 实现技术:Go 语言,基于 DNS 协议提供域名解析服务。
    • 示例:当服务需要通过域名进行通信时,kube-dns 负责将服务名称解析为对应的 Pod IP 地址。

以上是 Kubernetes 中的一些核心组件,它们协同工作,共同构建了 Kubernetes 的完整功能。这些组件基于 Go 编程语言实现,采用了分布式系统和微服务架构,通过 API 接口相互通信和协作,实现了 Kubernetes 集群的高效管理和运行。

六:举例说明

当用户提交一个 Deployment 对象到 Kubernetes 集群时,控制平面的 API Server 接收到该请求,并将其转发给 Controller Manager。Controller Manager 中的 Deployment Controller 监听到该请求,并根据用户定义的配置信息,创建相应的 ReplicaSet 对象。Scheduler 负责将该 ReplicaSet 中的 Pod 调度到集群中的合适节点上。一旦 Pod 被调度到节点上并成功启动,控制平面会监控 Pod 的运行状态,并根据需要执行相应的自愈操作,以确保应用程序能够稳定地运行。整个过程中,控制平面负责管理和协调集群中的各种资源和操作,以实现集群的高效管理和运行。

相关推荐
虚伪的空想家2 小时前
rook-ceph配置dashboard代理无法访问
ceph·云原生·k8s·存储·rook
庸子4 小时前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins
Connie14517 小时前
k8s多集群管理中的联邦和舰队如何理解?
云原生·容器·kubernetes
一眼万年048 小时前
Redis Cluster模式
redis·微服务
伤不起bb12 小时前
Kubernetes 服务发布基础
云原生·容器·kubernetes
国际云,接待13 小时前
微软服务器安全问题
运维·服务器·云原生·云计算·azure
别骂我h15 小时前
Kubernetes服务发布基础
云原生·容器·kubernetes
要开心吖ZSH15 小时前
微服务架构的演进:迈向云原生
java·微服务·云原生
dyj09515 小时前
Rancher Server + Kubernets搭建云原生集群平台
云原生·rancher
weixin_3993806916 小时前
k8s一键部署tongweb企业版7049m6(by why+lqw)
java·linux·运维·服务器·云原生·容器·kubernetes