学习的目标是适用yml配置文件,使我们要构建的点描述出来。
Kubernetes(简称 K8s)是一个开源的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。它提供了丰富的功能集,包括但不限于声明式配置、自我修复、负载均衡和服务发现等。以下是关于 Kubernetes 的一些关键知识点。
1. 核心概念
- 集群(Cluster):Kubernetes 集群由一组节点组成,这些节点可以是物理机或虚拟机。每个集群至少包含一个控制平面节点(Control Plane Node)和多个工作节点(Worker Nodes)。集群是 Kubernetes 管理计算资源的基本单位,计算资源的分配是根据集群来的。
- Pod:这是 Kubernetes 中最小的可部署单元,可以包含一个或多个容器。Pod 内的容器共享网络命名空间和存储卷,这使得它们之间的通信更加高效。Pod 是 Kubernetes 中的应用程序实例的基本组成部分。
- Service:Service 定义了一组 Pod 的逻辑集合和访问策略。它是 Kubernetes 中用于实现服务发现和负载均衡的关键组件。通过 Service,即使底层 Pod 发生变化,外部客户端仍然可以通过固定的 IP 地址和端口访问应用。
- Deployment:用于声明式地管理和更新无状态应用程序的状态。它可以确保指定数量的 Pod 副本始终处于运行状态,并支持滚动更新和回滚。Deployment 是最常用的控制器之一,适用于大多数 Web 应用程序
- StatefulSet:与 Deployment 类似,但专为有状态应用设计,提供有序的部署、扩展和删除操作,以及持久化的存储。StatefulSet 保证了 Pod 的唯一身份标识和顺序启动/终止特性
- DaemonSet:确保所有(或某些)节点上运行一个 Pod 的副本,常用于日志收集、监控等全局服务。DaemonSet 保证每个符合条件的节点上都有一个 Pod 运行。
- Job 和 CronJob:Job 用于执行一次性任务,而 CronJob 则用于定时执行任务。两者都适合批处理作业或其他非长期运行的服务。
- ConfigMap 和 Secret:用于将配置数据和敏感信息(如密码)从镜像中分离出来,以便更安全地管理和更新。ConfigMap 和 Secret 可以被 Pod 作为环境变量或挂载为文件系统的一部分使用。
- Volume:用于挂载持久存储到 Pod 中,支持多种类型的存储后端,如本地磁盘、云存储等。Volume 确保了 Pod 在重启或迁移时能够保持其数据不变
2.控制器(Controller)
控制器通过 API Server 监控集群的状态,并根据需要创建、更新或删除资源来达到期望的状态。常见的控制器包括:
- ReplicaSet:确保指定数量的 Pod 副本保持运行。通常由 Deployment 控制器自动创建和管理。
- Horizontal Pod Autoscaler (HPA):根据 CPU 使用率或其他自定义指标自动调整 Pod 数量。HPA 可以根据预设规则动态增加或减少 Pod 的数量,以适应流量的变化
3.API Server
API Server 是 Kubernetes 控制平面的前端,提供了 RESTful 接口供用户和其他组件与集群交互。所有的集群管理操作都是通过 API Server 进行的。API Server 不仅负责接收来自用户的请求,还负责验证、授权以及将命令分发给其他控制平面组件。
4.etcd
etcd 是一个高可用的键值存储系统,用于保存集群的所有配置数据和状态信息。它是 Kubernetes 控制平面的一部分,确保数据的一致性和持久性。etcd 在 Kubernetes 架构中扮演着至关重要的角色,因为它存储了所有集群级别的元数据
5. 调度器(Scheduler)
调度器负责决定将 Pod 分配到哪个节点上运行。它会考虑各种因素,如资源需求、亲和性规则、污点和容忍度等,以实现最佳的资源利用率和性能。调度器在选择节点时还会考虑到节点的健康状况和当前负载情况
6. kubelet
kubelet 是运行在每个节点上的代理,负责与 API Server 通信并管理该节点上的 Pod 生命周期。它还会定期向 API Server 汇报节点的状态。kubelet 是 Kubernetes 架构中的重要组成部分,它确保了 Pod 在节点上的正确执行
7. kube-proxy
kube-proxy 是 Kubernetes 网络代理,运行在每个节点上,维护网络规则并执行流量转发,以确保 Service 和 Pod 之间的正确通信。kube-proxy 支持多种模式,包括 iptables 和 IPVS,以优化网络性能
8. CNI(Container Network Interface)
CNI 是一种标准接口,用于定义容器网络插件。Kubernetes 支持多种 CNI 插件,如 Calico、Flannel、Weave Net 等,以满足不同的网络需求。CNI 插件允许容器之间进行跨主机通信,并且对于多租户环境至关重要
9. Ingress
Ingress 是一种 API 对象,用于管理外部对集群内服务的 HTTP(S) 访问。它通常与 Ingress Controller 结合使用,后者实现了路由规则并将流量分发给适当的服务。Ingress 提供了比普通 Service 更灵活的入口点配置选项
10. Helm
虽然不是 Kubernetes 的一部分,但 Helm 是一个流行的包管理工具,用于简化 Kubernetes 应用程序的部署和管理。它允许你通过 Chart 来打包、分发和安装复杂的 Kubernetes 应用。Helm 使得复杂应用的部署变得更加简单和可重复
11. 安全性
-
RBAC(基于角色的访问控制):用于定义和限制用户、服务账户对集群资源的访问权限。RBAC 确保只有授权用户才能执行特定的操作,增强了集群的安全性
-
Network Policies:用于定义 Pod 之间的网络通信规则,增强网络安全。Network Policies 可以限制哪些 Pod 可以相互通信,从而减少潜在的安全风险
TLS 加密:确保 API Server 和其他组件之间的通信安全。TLS 加密防止了中间人攻击,并保护敏感信息免受窃听
12. 日志和监控
- Prometheus:常用的监控解决方案,支持多维度数据模型和灵活的查询语言。Prometheus 可以收集集群内的各种指标,并提供警报机制,帮助运维人员及时发现问题
- ELK Stack (Elasticsearch, Logstash, Kibana) 或 EFK Stack (Elasticsearch, Fluentd, Kibana):用于集中收集、处理和可视化日志数据。这些工具可以帮助开发者分析日志,快速定位问题所在