002.k8s(Kubernetes)一小时快速入门(先看docker30分钟)
-
简介(免费开源,google开源)
-
关键概念:
- 容器(Containers):Kubernetes 管理容器,通常使用 Docker,允许应用程序在隔离的环境中运行。
- 节点(Nodes):节点是 Kubernetes 运行的虚拟或物理机器,分为 主节点(Master) 和 工作节点(Worker)。
- Pod:Pod 是 Kubernetes 中最小的可部署单位,包含一个或多个共享存储、网络以及运行配置的容器。
- 服务(Services):服务定义了一组逻辑上的 Pod 以及访问它们的策略,确保对外暴露一个稳定的访问端点。
- 部署(Deployments):部署管理无状态服务,确保在任何时候都有期望数量的 Pod 副本在运行。
- 命名空间(Namespaces):命名空间用于在集群内隔离资源组。
- 卷(Volumes):Kubernetes 卷可以让数据在 Pod 生命周期之外持久化,或在容器之间共享数据。
-
为什么使用 Kubernetes?
- 可扩展性:根据流量自动扩展应用程序。
- 自我修复:自动重启失败的容器、替换和重新调度容器,终止不响应的容器。
- 负载均衡:Kubernetes 将流量分配到已部署的服务上。
- 存储编排:可以挂载并管理来自本地系统或云提供商的存储解决方案。
- 声明式配置:使用 YAML 或 JSON 进行配置,易于定义目标状态并进行版本控制。
-
kubernetes:容器编排引擎
-
-
Kubernetes核心组件
-
为了清晰展示 Kubernetes 资源对象的演进过程,我们可以通过“目的”的角度,逐步连接和解释它们的引入。
-
### 1. **Node** – 提供容器的运行环境
-
最基本的需求是为应用程序的容器提供一个实际的运行环境。**Node** 作为 Kubernetes 的基础工作单元,负责承载和执行容器化的工作负载。每个 Node 运行着控制器代理(如 `kubelet`),确保容器按计划启动并运行。
-
**目的**:为容器提供计算资源(CPU、内存、存储)和网络支持,是工作负载运行的基础单元。
-
-
### 2. **Pod** – 封装和调度容器
-
有了 Node,我们需要一个机制来部署和管理容器。**Pod** 引入是为了解决如何在 Node 上管理和调度容器的问题。Pod 可以封装一个或多个容器,允许它们共享存储和网络资源。
-
**目的**:在 Kubernetes 中将容器作为一个整体进行管理,实现容器的调度和隔离。
-
-
### 3. **ReplicaSet** – 确保应用的高可用性
-
运行一个 Pod 可以启动容器,但单个 Pod 无法保证应用的高可用性。为了解决 Pod 失效的问题,**ReplicaSet** 被引入。它保证在任何时刻都有指定数量的 Pod 副本在运行,自动补充失败的 Pod。
-
**目的**:确保应用程序有足够的 Pod 副本持续运行,实现容器的冗余和高可用性。
-
-
### 4. **Deployment** – 提供版本管理和滚动更新
-
当应用的副本数量增加后,管理应用的更新、扩缩容变得复杂。**Deployment** 引入了声明式的更新机制,可以控制应用如何逐步更新、回滚,确保在不中断服务的情况下完成新版本的部署。
-
**目的**:通过声明式更新、回滚等机制,简化应用的版本管理和生命周期控制。
-
-
### 5. **Service** – 提供稳定的访问和负载均衡
-
随着多个 Pod 副本的存在,应用内部以及外部需要有一个固定的方式来访问这些 Pod。**Service** 提供了一个稳定的访问端点,通过负载均衡将流量分发到后端的多个 Pod 副本。
-
**目的**:提供负载均衡和稳定的服务发现机制,确保应用在副本增加时可以被可靠访问。
-
-
### 6. **ConfigMap** 和 **Secret** – 分离配置和机密数据
-
应用逐渐复杂化后,配置和敏感数据(如密码)需要被安全地管理。**ConfigMap** 用于管理常规的非敏感配置信息,而 **Secret** 专门用于存储和传递加密的敏感数据。通过将这些数据与代码分离,应用变得更加灵活且安全。
-
**目的**:分离环境配置和敏感数据,简化应用管理并提升安全性。
-
-
### 7. **PersistentVolume (PV)** 和 **PersistentVolumeClaim (PVC)** – 提供持久化存储
-
有些应用(如数据库、文件系统)需要数据持久化,即使 Pod 被销毁或重启,数据依然需要保留。**PersistentVolume (PV)** 提供了实际的存储资源,而 **PersistentVolumeClaim (PVC)** 允许 Pod 请求这些持久存储资源。
-
**目的**:实现数据持久化,确保应用的数据不会随着 Pod 的销毁而丢失。
-
-
### 8. **HorizontalPodAutoscaler (HPA)** – 实现动态扩展
-
当应用面临不稳定的流量时,手动管理 Pod 的副本数量显得效率低下。**HorizontalPodAutoscaler (HPA)** 能根据资源利用情况(如 CPU 或内存)自动调整 Pod 的副本数量,确保应用能够根据实际需求自动扩展或缩减。
-
**目的**:动态调整应用的资源,确保在负载波动时应用能够自动扩展或缩减,保持高可用性和成本效益。
-
-
### 9. **NetworkPolicy** – 控制网络访问
-
随着集群规模增大,安全性变得至关重要。**NetworkPolicy** 引入了对 Pod 网络通信的控制,允许用户定义哪些 Pod 或外部流量可以访问哪些 Pod,从而确保集群内部和外部的流量受控。
-
**目的**:提供网络隔离和流量控制,确保应用之间的通信安全。
-
-
### 连接解释总结:
-
1. **Node** 作为基础,提供容器运行环境。
-
2. **Pod** 通过封装容器,实现调度和管理。一个或者多个容器集合(一般是一个)
-
3. **ReplicaSet** 确保 Pod 的副本足够,增强应用高可用性。
-
4. **Deployment** 进一步简化了应用的版本管理和升级过程。
-
5. **Service** 提供稳定的网络端点和负载均衡,使得多副本应用可以被统一访问。
-
6. **ConfigMap** 和 **Secret** 通过分离配置和敏感数据,提高应用的安全性和灵活性。
-
7. **PersistentVolume** 确保数据持久化,允许应用长期保存数据。
-
8. **HorizontalPodAutoscaler** 根据实际负载自动扩展应用资源,提升了资源利用效率。
-
9. **NetworkPolicy** 提供网络安全控制,保障集群内部和外部的通信安全。
-
-
-
Kubernetes架构
-
1. 控制平面(Control Plane)
-
控制平面负责整个集群的全局决策和管理,是 Kubernetes 的大脑部分。它管理节点,调度 Pod,并确保集群中的状态符合预期。
-
1.1 API 服务器(kube-apiserver)
- 作用:提供 Kubernetes 的 REST API,是所有操作和查询的入口。
- 功能:负责处理来自集群用户和其他组件的请求,并将它们传递给合适的组件进行处理。API 服务器是控制平面与外界通信的桥梁。
-
1.2 etcd
- 作用:分布式键值存储,用于持久化存储集群的所有配置信息、状态和元数据。
- 功能:保存所有的集群数据,确保数据一致性,是 Kubernetes 高可用的核心组件之一。
-
1.3 调度器(kube-scheduler)
- 作用:负责将新创建的 Pod 分配到合适的节点上。
- 功能:根据 Pod 的资源需求和节点的资源可用性、策略、约束等,选择最优的节点来运行每个 Pod。
-
1.4 控制器管理器(kube-controller-manager)
- 作用:负责集群内的各种控制循环,确保系统的实际状态与预期状态保持一致。
- 功能:运行一组控制器,包括副本控制器(确保正确数量的 Pod 副本)、节点控制器(监控节点健康)、端点控制器等。
-
1.5 云控制器管理器(cloud-controller-manager)
- 作用:与云平台集成,管理云资源。
- 功能:处理与底层云服务相关的控制逻辑,如负载均衡器、节点生命周期管理等。这是一个可选组件,主要用于集成 Kubernetes 和云平台。
-
-
2. 工作节点组件(Node Components)
-
工作节点是 Kubernetes 集群中实际运行容器的地方。每个节点都有自己的组件来确保 Pod 正常运行,并与控制平面通信。
-
2.1 kubelet
- 作用:每个节点上的核心代理,负责确保 Pod 按照定义运行。
- 功能:接收 API 服务器的指令,启动和停止容器,并通过健康检查确保 Pod 正常运行。它不断汇报 Pod 的状态给控制平面。
-
2.2 kube-proxy
- 作用:节点上的网络代理,管理 Pod 的网络通信。
- 功能:负责在每个节点上维护网络规则,确保集群内不同 Pod 之间的通信,以及外部流量与集群的通信。
-
2.3 容器运行时(Container Runtime)
- 作用:运行容器的实际环境。
- 功能:Kubernetes 支持多种容器运行时,如 Docker、containerd 和 CRI-O。容器运行时负责拉取镜像并启动、停止容器。
-
-
3. 附加组件(Add-ons)
-
除了核心组件,Kubernetes 还支持多种附加组件,用来增强集群的功能。
-
3.1 DNS
- 作用:为 Kubernetes 服务提供服务发现。
- 功能:每个集群通常会自动部署一个 DNS 服务,用来解析服务名称为 IP 地址,支持 Pod 间的网络通信。
-
3.2 Dashboard
- 作用:提供图形化用户界面。
- 功能:为用户提供对集群资源的可视化管理和监控工具。
-
3.3 日志收集和监控
- 作用:为集群提供日志和监控支持。
- 功能:常见的监控工具如 Prometheus,日志收集工具如 Fluentd,可以帮助用户了解集群的运行状况和排查问题。
-
-
Kubernetes 架构的工作流程
- 用户请求:用户通过
kubectl
或其他客户端工具向 API 服务器发出请求(如创建、更新或删除 Pod)。 - API 服务器处理请求:API 服务器接收到请求后,将其持久化存储到
etcd
,然后将任务分发给合适的控制器(如 ReplicaSet 控制器)进行处理。 - 调度器调度 Pod:如果是新创建的 Pod,调度器会根据节点资源状况、策略和约束,决定将 Pod 分配到哪个节点上。
- kubelet 执行指令:kubelet 接收到调度命令后,使用容器运行时在节点上启动或停止 Pod,确保应用程序在正确的环境中运行。
- kube-proxy 设置网络:kube-proxy 配置网络规则,确保 Pod 之间的流量可以正确路由,同时处理外部与集群的通信。
- 持续监控:控制平面中的控制器和 kubelet 持续监控集群状态,自动调整和修复 Pod、节点,确保集群保持在预期状态。
- 用户请求:用户通过
-
-
搭建Minikube环境
-
搭建K3S环境
-
在线环境
-
kubectl常用命令
-
配置文件
-
配置和公开服务
-
Portainer