1.简介
Kubernetes(通常简称为K8s)是一个开源的容器编排和管理平台,它可以帮助您自动化部署、扩展和管理容器化应用程序。Kubernetes最初由Google开发并开源,现在由Cloud Native Computing Foundation(CNCF)进行维护和发展。
Kubernetes是一个分布式系统,可以自动管理应用程序的部署、扩展和故障恢复,并提供了一套API,允许您声明所需的状态,然后Kubernetes会确保集群状态与声明的状态一致。Kubernetes还提供了一些其他功能,例如服务发现、负载均衡、自动扩展、滚动升级、自动容器恢复等,这些功能可以帮助您管理大规模的容器化应用程序。
Kubernetes使用基于容器的技术来部署和管理应用程序。容器是一种轻量级的、可移植的、可扩展的软件包,可以在任何环境中运行,而不需要太多的配置和依赖项。容器可以封装应用程序及其所有依赖项,并提供一种独立于底层基础设施的方式来运行应用程序。
Kubernetes可以运行在任何云平台上,也可以在本地部署。Kubernetes具有高度可扩展性、弹性、可靠性和安全性,这使得它成为当今最受欢迎的容器编排和管理平台之一,广泛应用于云计算、微服务、大数据、机器学习等领域
K8S文档:https://kubernetes.io/docs/home/
2.k8s常见概念
Kubernetes 它由 Master 和 Node 两个主要组件组成。
Master 组件是 Kubernetes 控制平面的核心组件,它负责整个集群的管理和控制。
Master 组件包括以下几个子组件:
- kube-apiserver:提供 Kubernetes API 服务,处理 API 请求和响应。
- etcd:分布式键值存储,用于存储 Kubernetes 集群的配置信息和状态数据。
- kube-scheduler:负责将新创建的 Pod 调度到合适的 Node 上运行。
- kube-controller-manager:包含多个控制器,用于监控集群状态和执行相应的调整操作。
Node 组件是 Kubernetes 工作负载的运行环境,它负责在 Node 上启动 Pod 并监控其状态。
Node 组件包括以下几个子组件:
- kubelet:运行在每个 Node 上,负责管理 Node 上的容器和 Pod,并与 Master 组件通信以接收指令和上报状态。
- kube-proxy:运行在每个 Node 上,负责维护集群网络规则,实现 Service 的负载均衡和访问控制。
- Container runtime:Kubernetes 支持多种容器运行时,如 Docker、containerd、cri-o 等,负责在 Node 上运行容器和管理容器生命周期。
在 Kubernetes 中,可以将 Node 分为 Master Node 和 Worker Node 两类。
-
Master Node 是运行 Master 组件的节点,它通常是一个集群中的单个节点,用于集中管理和控制整个集群。Master Node 通常不运行用户工作负载,而是专门用于控制平面的管理。
-
Worker Node 是运行 Node 组件的节点,它是集群中的工作节点,用于运行用户工作负载,例如容器。每个 Worker Node 上可以运行多个 Pod,每个 Pod 可以包含一个或多个容器。Worker Node 的数量通常是根据需要进行动态扩缩容的。
在 Kubernetes 中,Pod、Service、Label、Namespace等是常见的概念和组件。
它们在 Kubernetes 中的作用和使用方法如下:
-
Pod
Pod 是 Kubernetes 的最小调度单位,它可以包含一个或多个容器。同一个 Pod 中的容器共享相同的网络命名空间和存储卷,它们可以通过 localhost 进行通信。Pod 通常用于运行一个单一的应用或进程。Pod 由 Kubernetes 调度器在 Node 上进行调度和运行。 -
Service
Service 是一种抽象的逻辑概念,它为一组 Pod 提供了一个稳定的 IP 地址和 DNS 名称,使得客户端可以通过它们来访问这些 Pod。Service 可以实现负载均衡和服务发现,它可以将请求分发到同一 Service 下的多个 Pod 中,并自动感知 Pod 的变化并更新路由规则。 -
Label
Label 是一种 Kubernetes 对象的元数据,它用于标识和分类 Kubernetes 对象。每个 Label 都由一个键值对组成,例如 app=web、env=prod 等。Label 可以用来筛选、查找和操作 Kubernetes 对象。Pod 和 Service 都可以使用 Label 进行标记和分类,以便于管理和使用。 -
Namespace
Namespace 是 Kubernetes 的一种资源隔离机制,它可以将一个集群划分为多个逻辑部分,每个部分拥有独立的资源配额和访问控制策略。Namespace 可以用来实现多租户、多团队、多环境的资源隔离。Kubernetes 默认有一些预定义的 Namespace,如 default、kube-system 等,用户也可以自定义 Namespace。
应用分类:
在 Kubernetes 中,应用可以分为有状态和无状态两种类型。
1.有状态应用
有状态应用通常需要持久化存储,例如数据库、缓存等。这些应用通常需要在运行过程中保存一些状态信息,因此需要使用持久化存储来保存数据。在 Kubernetes 中,有状态应用可以使用 StatefulSet 来进行部署和管理。StatefulSet 可以为每个 Pod 分配一个唯一的标识符(例如 hostname),并保证每个 Pod 的标识符在整个生命周期中保持不变。这种方式可以确保应用在重启或迁移时可以保持数据的持久化和一致性。
2.无状态应用
无状态应用通常不需要持久化存储,例如 Web 应用、API 服务等。这些应用通常只需要处理请求并返回响应,不需要保存任何状态信息。在 Kubernetes 中,无状态应用可以使用 Deployment 进行部署和管理。Deployment 可以根据需要自动进行伸缩,实现自动扩容和缩容,以应对不同的负载情况。无状态应用的部署和管理通常比有状态应用更加简单和灵活。
在实际应用中,通常需要根据应用的性质和需求来选择有状态或无状态部署方式。如果应用需要持久化存储或有状态管理需求,就可以选择使用 StatefulSet;如果应用不需要持久化存储或对状态管理需求不高,就可以选择使用 Deployment。