文章目录
一、k8s技术栈
Kubernetes(常被简称为 K8s,其中 "K" 代表 "Kubernetes" 的首字母,"8" 代表两者之间的八个字母,"s" 代表 "system" 或 "services")是一个开源的容器编排平台,用于自动化应用部署、扩展和管理。Kubernetes 技术栈包括了以下几个主要组件和技术:
核心组件
- API Server - 提供了集群内部的 RESTful API 接口,是集群控制面的核心网络服务。
- Controller Manager - 负责运行控制器,这些控制器处理各种控制循环工作,例如复制控制器来保持期望状态。
- Scheduler - 负责监视新创建的未调度的 Pod,并选择一个节点来运行它们。
- etcd - 存储集群所有数据的键值存储系统。
- Kubelet - 在每个节点上运行的一个代理,负责使 Pod 和容器在其主机上运行。
- Kube-proxy - 维护节点上的网络规则,实现 Kubernetes 服务(Service)概念。
- 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)服务组件可以分为两大类:控制平面组件和节点组件。控制平面组件负责管理整个集群的状态,而节点组件则负责管理节点上的容器。下面详细列出了这两类组件以及一些常见的附加组件和服务。
控制平面组件
-
API Server
- 提供了集群的主要网络入口点。
- 所有对象的存储状态都通过此服务器访问。
- 实现了 Kubernetes 的 REST API。
-
Controller Manager
- 包含一组控制循环,每个循环负责同步一个特定方面的集群状态。
- 控制器的例子包括副本控制器、部署控制器、命名空间控制器等。
-
Scheduler
- 观察所有未分配给节点的新创建的 Pod。
- 选择合适的节点来运行 Pod。
- 如果没有合适的节点,则不会调度 Pod。
-
etcd
- 分布式键值存储,用于存储所有集群数据。
-
Cloud Controller Manager
- 对于云托管的集群,它负责与云提供商的交互。
- 管理诸如节点实例、负载均衡器等资源。
节点组件
-
Kubelet
- 每个节点上的代理,负责执行 Pod 和容器。
- 与 API 服务器通信,获取分配给该节点的 Pod。
- 监控 Pod 的状态,并向 API 服务器报告。
-
Kube-proxy
- 维护节点的网络规则。
- 使得 Pod 可以在集群内部通信,并且可以通过外部 IP 地址和端口访问。
-
Container Runtime
- 负责拉取和运行容器。
- 常见的容器运行时有 Docker、containerd 和 CRI-O。
附加组件和服务
除了核心组件之外,还有许多附加组件和服务,它们不是 Kubernetes 的一部分,但通常与 Kubernetes 一起使用来增强其功能或简化某些操作。以下是一些常见的附加组件和服务:
-
Ingress Controllers
- 实现外部访问集群内服务的规则。
- 通常与负载均衡器和反向代理一起使用。
- 示例包括 Nginx Ingress Controller、Traefik 等。
-
Service Mesh
- 如 Istio、Linkerd 或 Consul Connect。
- 提供服务间通信的安全性和可观察性。
-
Monitoring and Logging
- 监控工具如 Prometheus 和 Grafana。
- 日志收集工具如 Fluentd 或 Fluent Bit。
-
CI/CD Tools
- 如 Jenkins、GitLab CI/CD、Spinnaker 等,用于持续集成和持续交付。
-
Package Management
- Helm 是 Kubernetes 上的应用程序包管理器。
-
Storage Orchestration
- 如 Rook,用于管理存储基础设施。
-
Network Policies and Security
- Calico、Antrea 等用于网络策略实施。
- 网络隔离和安全工具,如 kube-router。
这些组件共同构成了 Kubernetes 的强大生态系统,允许用户以更高效、安全的方式部署、管理和扩展应用程序。
三、k8s 常见资源
在 Kubernetes 中,资源(Resources)是指可以被创建、更新、删除或查询的对象。这些资源由 Kubernetes API 定义,并通过 kubectl
命令行工具或其他客户端库进行交互。以下是 Kubernetes 中一些最常见的资源类型及其用途:
核心资源
-
Pods
- 最小的可部署单元。
- 包含一个或多个容器,共享存储和网络资源。
- 通常由更高级别的抽象来管理,如 Deployment 或 StatefulSet。
-
Services
- 定义逻辑上的"服务",可以将流量路由到一组 Pods。
- 提供服务发现机制和负载均衡功能。
- 可以定义不同类型的 Services,如 ClusterIP、NodePort、LoadBalancer 等。
-
ReplicaSets
- 确保任何时刻都有指定数量的 Pod 副本正在运行。
- 通常不直接使用,而是通过 Deployment 来间接管理。
-
Deployments
- 提供声明式的更新机制,用于创建和管理 ReplicaSets。
- 用于自动滚动更新和回滚应用程序。
-
StatefulSets
- 为有状态应用程序提供管理,确保每个 Pod 有一个持久的身份和持久存储。
- 支持有序部署和优雅地缩放。
-
DaemonSets
- 确保所有(或某些)节点上运行一个 Pod 的副本。
- 通常用于运行集群范围的服务,如日志聚合或监控代理。
-
Jobs
- 运行批处理任务,直到成功完成指定的工作量。
- 可以跟踪任务是否成功完成。
-
CronJobs
- 创建基于时间的任务,类似于 Unix cron。
- 用于定期执行 Jobs。
-
ConfigMaps
- 用于存储非机密的数据,如配置文件。
- 可以作为环境变量或挂载卷中的文件注入到 Pods 中。
-
Secrets
- 用于存储敏感信息,如密码、OAuth 令牌或 SSH 密钥。
- 可以以加密的形式存储,并且可以像 ConfigMaps 一样注入到 Pods 中。
-
PersistentVolumes (PV)
- 存储资源的声明,由管理员创建并分配给集群。
- 可以被 PersistentVolumeClaims (PVC) 使用。
-
PersistentVolumeClaims (PVC)
- 用户对存储资源的需求声明。
- 可以绑定到一个 PV,为应用提供持久化的存储。
-
Ingress
- 定义外部访问 Kubernetes 服务的规则,如 HTTP。
- 通常与 Ingress Controller 一起使用,以实现外部负载均衡。
-
Namespace
- 提供一种方法来划分集群资源。
- 有助于组织和限制资源使用。
扩展资源
除了上述核心资源外,还有一些扩展资源,通常是通过安装额外的控制器或 Operator 来添加的,例如:
-
NetworkPolicy
- 控制 Pod 间的网络访问。
- 用于实现细粒度的网络隔离。
-
HorizontalPodAutoscaler (HPA)
- 自动调整 Pod 的副本数,基于 CPU 使用率或其他自定义指标。
-
PriorityClass
- 为 Pod 分配优先级,影响调度决策。
-
PodDisruptionBudget (PDB)
- 控制因维护等原因导致的 Pod 下线的最大数量。
-
CertificateSigningRequest (CSR)
- 请求证书签名,用于启用 TLS 加密。
-
CustomResourceDefinitions (CRDs)
- 允许定义自定义资源类型,扩展 Kubernetes API。
-
CronJob
- 用于计划执行批处理任务。
这些资源共同构成了 Kubernetes 的基础架构,使得用户能够以声明式的方式管理复杂的分布式系统。通过组合这些资源,可以创建出满足各种业务需求的应用程序部署方案。
四、系列文档
// TODO 后续会有相关学习文档补充
其他参考
kubernetes官网地址
kubernetes文档地址
kubernetes中文社区
[kubernetes中文文档]((http://docs.kubernetes.org.cn/)