k8s相关技术栈

文章目录

    • 一、k8s技术栈
      • 核心组件
      • 常见工具和服务
      • 生态系统
    • 二、k8s服务组件
      • 控制平面组件
      • 节点组件
      • 附加组件和服务
    • 三、k8s 常见资源
      • 核心资源
      • 扩展资源
    • 四、系列文档
    • 其他参考

一、k8s技术栈

Kubernetes(常被简称为 K8s,其中 “K” 代表 “Kubernetes” 的首字母,“8” 代表两者之间的八个字母,“s” 代表 “system” 或 “services”)是一个开源的容器编排平台,用于自动化应用部署、扩展和管理。Kubernetes 技术栈包括了以下几个主要组件和技术:

核心组件

  1. API Server - 提供了集群内部的 RESTful API 接口,是集群控制面的核心网络服务。
  2. Controller Manager - 负责运行控制器,这些控制器处理各种控制循环工作,例如复制控制器来保持期望状态。
  3. Scheduler - 负责监视新创建的未调度的 Pod,并选择一个节点来运行它们。
  4. etcd - 存储集群所有数据的键值存储系统。
  5. Kubelet - 在每个节点上运行的一个代理,负责使 Pod 和容器在其主机上运行。
  6. Kube-proxy - 维护节点上的网络规则,实现 Kubernetes 服务(Service)概念。
  7. Container Runtime Interface (CRI) - 允许 Kubernetes 与容器运行时交互(如 Docker, containerd, CRI-O 等)。

常见工具和服务

  • Helm - 一个用于 Kubernetes 的包管理器,它帮助定义、安装和升级复杂的应用程序。
  • kubectl - Kubernetes 命令行工具,用来运行命令与集群进行交互。
  • Docker - 最常用的容器运行时之一,用于构建、打包和运行容器。
  • Prometheus & Grafana - 用于监控和可视化 Kubernetes 集群性能的工具。
  • Fluentd/Fluent Bit - 日志收集工具,通常用于 Kubernetes 日志聚合。
  • Istio - 服务网格平台,提供了一种透明的方式来连接、保护、控制和观察服务。
  • Kubernetes Dashboard - Kubernetes 的 Web UI,为集群提供了基本的管理和故障排除功能。
  • Kubernetes Ingress Controller - 实现负载均衡,暴露服务到外部流量。
  • Kubernetes Service Mesh - 如 Istio 或 Linkerd,用于管理服务间通信。

生态系统

Kubernetes 拥有一个庞大的生态系统,其中包括了大量的插件、附加组件和服务,用于支持不同的工作负载和需求,比如存储、网络、安全等。

了解 Kubernetes 的技术栈对于有效地部署和管理容器化应用程序至关重要。随着 Kubernetes 社区的不断增长和发展,新的工具和技术也在不断涌现,以增强其功能和易用性。

二、k8s服务组件

Kubernetes(K8s)服务组件可以分为两大类:控制平面组件和节点组件。控制平面组件负责管理整个集群的状态,而节点组件则负责管理节点上的容器。下面详细列出了这两类组件以及一些常见的附加组件和服务。

控制平面组件

  1. API Server

    • 提供了集群的主要网络入口点。
    • 所有对象的存储状态都通过此服务器访问。
    • 实现了 Kubernetes 的 REST API。
  2. Controller Manager

    • 包含一组控制循环,每个循环负责同步一个特定方面的集群状态。
    • 控制器的例子包括副本控制器、部署控制器、命名空间控制器等。
  3. Scheduler

    • 观察所有未分配给节点的新创建的 Pod。
    • 选择合适的节点来运行 Pod。
    • 如果没有合适的节点,则不会调度 Pod。
  4. etcd

    • 分布式键值存储,用于存储所有集群数据。
  5. Cloud Controller Manager

    • 对于云托管的集群,它负责与云提供商的交互。
    • 管理诸如节点实例、负载均衡器等资源。

节点组件

  1. Kubelet

    • 每个节点上的代理,负责执行 Pod 和容器。
    • 与 API 服务器通信,获取分配给该节点的 Pod。
    • 监控 Pod 的状态,并向 API 服务器报告。
  2. Kube-proxy

    • 维护节点的网络规则。
    • 使得 Pod 可以在集群内部通信,并且可以通过外部 IP 地址和端口访问。
  3. Container Runtime

    • 负责拉取和运行容器。
    • 常见的容器运行时有 Docker、containerd 和 CRI-O。

附加组件和服务

除了核心组件之外,还有许多附加组件和服务,它们不是 Kubernetes 的一部分,但通常与 Kubernetes 一起使用来增强其功能或简化某些操作。以下是一些常见的附加组件和服务:

  1. Ingress Controllers

    • 实现外部访问集群内服务的规则。
    • 通常与负载均衡器和反向代理一起使用。
    • 示例包括 Nginx Ingress Controller、Traefik 等。
  2. Service Mesh

    • 如 Istio、Linkerd 或 Consul Connect。
    • 提供服务间通信的安全性和可观察性。
  3. Monitoring and Logging

    • 监控工具如 Prometheus 和 Grafana。
    • 日志收集工具如 Fluentd 或 Fluent Bit。
  4. CI/CD Tools

    • 如 Jenkins、GitLab CI/CD、Spinnaker 等,用于持续集成和持续交付。
  5. Package Management

    • Helm 是 Kubernetes 上的应用程序包管理器。
  6. Storage Orchestration

    • 如 Rook,用于管理存储基础设施。
  7. Network Policies and Security

    • Calico、Antrea 等用于网络策略实施。
    • 网络隔离和安全工具,如 kube-router。

这些组件共同构成了 Kubernetes 的强大生态系统,允许用户以更高效、安全的方式部署、管理和扩展应用程序。

三、k8s 常见资源

在 Kubernetes 中,资源(Resources)是指可以被创建、更新、删除或查询的对象。这些资源由 Kubernetes API 定义,并通过 kubectl 命令行工具或其他客户端库进行交互。以下是 Kubernetes 中一些最常见的资源类型及其用途:

核心资源

  1. Pods

    • 最小的可部署单元。
    • 包含一个或多个容器,共享存储和网络资源。
    • 通常由更高级别的抽象来管理,如 Deployment 或 StatefulSet。
  2. Services

    • 定义逻辑上的“服务”,可以将流量路由到一组 Pods。
    • 提供服务发现机制和负载均衡功能。
    • 可以定义不同类型的 Services,如 ClusterIP、NodePort、LoadBalancer 等。
  3. ReplicaSets

    • 确保任何时刻都有指定数量的 Pod 副本正在运行。
    • 通常不直接使用,而是通过 Deployment 来间接管理。
  4. Deployments

    • 提供声明式的更新机制,用于创建和管理 ReplicaSets。
    • 用于自动滚动更新和回滚应用程序。
  5. StatefulSets

    • 为有状态应用程序提供管理,确保每个 Pod 有一个持久的身份和持久存储。
    • 支持有序部署和优雅地缩放。
  6. DaemonSets

    • 确保所有(或某些)节点上运行一个 Pod 的副本。
    • 通常用于运行集群范围的服务,如日志聚合或监控代理。
  7. Jobs

    • 运行批处理任务,直到成功完成指定的工作量。
    • 可以跟踪任务是否成功完成。
  8. CronJobs

    • 创建基于时间的任务,类似于 Unix cron。
    • 用于定期执行 Jobs。
  9. ConfigMaps

    • 用于存储非机密的数据,如配置文件。
    • 可以作为环境变量或挂载卷中的文件注入到 Pods 中。
  10. Secrets

    • 用于存储敏感信息,如密码、OAuth 令牌或 SSH 密钥。
    • 可以以加密的形式存储,并且可以像 ConfigMaps 一样注入到 Pods 中。
  11. PersistentVolumes (PV)

    • 存储资源的声明,由管理员创建并分配给集群。
    • 可以被 PersistentVolumeClaims (PVC) 使用。
  12. PersistentVolumeClaims (PVC)

    • 用户对存储资源的需求声明。
    • 可以绑定到一个 PV,为应用提供持久化的存储。
  13. Ingress

    • 定义外部访问 Kubernetes 服务的规则,如 HTTP。
    • 通常与 Ingress Controller 一起使用,以实现外部负载均衡。
  14. Namespace

    • 提供一种方法来划分集群资源。
    • 有助于组织和限制资源使用。

扩展资源

除了上述核心资源外,还有一些扩展资源,通常是通过安装额外的控制器或 Operator 来添加的,例如:

  1. NetworkPolicy

    • 控制 Pod 间的网络访问。
    • 用于实现细粒度的网络隔离。
  2. HorizontalPodAutoscaler (HPA)

    • 自动调整 Pod 的副本数,基于 CPU 使用率或其他自定义指标。
  3. PriorityClass

    • 为 Pod 分配优先级,影响调度决策。
  4. PodDisruptionBudget (PDB)

    • 控制因维护等原因导致的 Pod 下线的最大数量。
  5. CertificateSigningRequest (CSR)

    • 请求证书签名,用于启用 TLS 加密。
  6. CustomResourceDefinitions (CRDs)

    • 允许定义自定义资源类型,扩展 Kubernetes API。
  7. CronJob

    • 用于计划执行批处理任务。

这些资源共同构成了 Kubernetes 的基础架构,使得用户能够以声明式的方式管理复杂的分布式系统。通过组合这些资源,可以创建出满足各种业务需求的应用程序部署方案。

四、系列文档

// TODO 后续会有相关学习文档补充

其他参考

kubernetes官网地址
kubernetes文档地址
kubernetes中文社区
[kubernetes中文文档]((http://docs.kubernetes.org.cn/)

你可能感兴趣的:(云原生相关学习,kubernetes,容器,云原生)