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

相关推荐
小灰灰要减肥10 分钟前
装饰者模式
java
张铁铁是个小胖子21 分钟前
MyBatis学习
java·学习·mybatis
Yan.love1 小时前
开发场景中Java 集合的最佳选择
java·数据结构·链表
椰椰椰耶1 小时前
【文档搜索引擎】搜索模块的完整实现
java·搜索引擎
大G哥1 小时前
java提高正则处理效率
java·开发语言
智慧老师2 小时前
Spring基础分析13-Spring Security框架
java·后端·spring
lxyzcm2 小时前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
V+zmm101342 小时前
基于微信小程序的乡村政务服务系统springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
Oneforlove_twoforjob3 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存
xmh-sxh-13143 小时前
常用的缓存技术都有哪些
java