Kubernetes基本概念

本文深入解析Kubernetes的关键概念,包括Cluster、Master、Node、Pod、Controller、Service、Namespace等,阐述各组件的功能与作用,以及如何管理和部署容器化应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念

1. Cluster

Cluster是计算、存储和网络资源的集合,Kubernetes 利用这些资源运行各种基于容器的应用。

2. Master

Master是Cluster的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Master运行Linux操作系统,可以是物理机或者虚拟机。为了实现高可用,可以运行多个Master。

3. Node

Node的职责是运行容器应用。Node由Master管理,Node负责监控并汇报容器的状态,同时根据Master的要求管理容器的生命周期。Node运行在Linux操作系统上,可以是物理机或者是虚拟机。

4. Pod

Pod是Kubernetes 的最小工作单元。每个Pod 包含-一个或多个容器。Pod中的容器会作为一个整体被Master 调度到一个Node上运行。

5. Controller

Kubernetes通常不会直接创建Pod,而是通过Controller 来管理Pod 的。Controller 中定义了Pod的部署特性,比如有几个副本、在什么样的Node.上运行等。 为了满足不同的业务场景,Kubernetes 提供了多种Controller, 包括Deployment、 ReplicaSet、 DaemonSet、StatefuleSet、Job等,我们逐- -讨论。

(1) Deployment是最常用的Controller, 比如在线教程中就是通过创建Deployment 来部署应用的。Deployment 可以管理Pod的多个副本,并确保Pod按照期望的状态运行。

(2) ReplicaSet实现了Pod 的多副本管理。使用Deployment 时会自动创建ReplicaSet,也就是说Deployment 是通过ReplicaSet 来管理Pod 的多个副本的,我们通常不需要直接使用ReplicaSet。

(3) DaemonSet 用于每个Node 最多只运行一个Pod副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行daemon。

(4) StatefuleSet 能够保证Pod的每个副本在整个生命周期中名称是不变的,而其他Controller不提供这个功能。当某个Pod发生故障需要删除并重新启动时,Pod 的名称会发生变化,同时StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。

(5) Job用于运行结束就删除的应用,而其他Controller中的Pod通常是长期持续运行。

6. Service

Deployment可以部署多个副本,每个Pod都有自己的IP, 外界如何访问这些副本呢?通过Pod的IP吗?

要知道Pod很可能会被频繁地销毁和重启,它们的IP会发生变化,用IP 来访问不太现实。

答案是Service。

Kubernetes Service定义了外界访问一组特定Pod 的方式。Service有自己的IP和端口,Service为Pod提供了负载均衡。

Kubernetes运行容器(Pod)与访问容器(Pod)这两项任务分别由Controller 和Service执行。

7. Namespace

如果有多个用户或项目组使用同-一个 Kubernetes Cluster,如何将他们创建的Controller、Pod等资源分开呢?

答案就是Namespace。

Namespace可以将-一个物理的Cluster 逻辑上划分成多个虚拟Cluster, 每个Cluster 就是一个Namespace。不同Namespace里的资源是完全隔离的。

Kubernetes默认创建了两个Namespace

default:创建资源时如果不指定,将被放到这个Namespace 中。

kube-system: Kubernetes 自己创建的系统资源将放到这个Namespace 中。

kubelet 运行在Cluster 所有节点上,负责启动Pod和容器。

kubeadm 用于初始化Cluster。

kubectl是Kubernetes 命令行工具。通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。

Master节点

1. API Server ( kube- apiserver )

API Server 提供HTTP/HTTPS RESTful API,即Kubernetes API。 API Server 是Kubernetes Cluster的前端接口,各种客户端工具(CLI或UI)以及Kubernetes 其他组件可以通过它管理Cluster 的各种资源。

2. Scheduler ( kube -scheduler )

Scheduler负责决定将Pod 放在哪个Node. 上运行。 Scheduler 在调度时会充分考虑Cluster的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。

3. Controller Manager ( kube-controller-manager )

Controller Manager负责管理Cluster 各种资源,保证资源处于预期的状态。ControllerManager由多种controller 组成,包括replication controller、 endpoints controller、 namespacecontroller、serviceaccounts controller

不同的controller 管理不同的资源。例如,replication controller 管理Deployment 、StatefulSet、DaemonSet 的生命周期,namespace controller管理Namespace 资源。

4. etcd

etcd负责保存Kubernetes Cluster 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会快速地通知Kubernetes 相关组件。

5. Pod网络

Pod要能够相互通信,Kubernetes Cluster 必须部署Pod 网络,flannel 是其中一个可选方案。

Node节点

1. kubelet

kubelet是Node的agent, 当Scheduler 确定在某个Node.上运行Pod 后,会将Pod ,

的具体配置信息(image、 volume 等)发送给该节点的kubelet, kubelet 根据这些信息创建和运行容器,并向Master 报告运行状态。

2. kube-proxy

service在逻辑.上代表了后端的多个Pod,外界通过service 访问Pod。 service 接收到的请求是如何转发到Pod的呢?这就是kube-proxy要完成的工作。

每个Node都会运行kube-proxy 服务,它负责将访问service 的TCP/UPD数据流转发到后端的容器。如果有多个副本,kube-proxy 会实现负载均衡。

3. Pod网络

Pod.要能够相互通信,Kubernetes Cluster 必须部署Pod 网络,flannel 是其中-一个可选方案。

kubelet是唯一没 有以容器形式运行的Kubernetes 组件,它在Ubuntu 中通过Systemd服务运行

Helm- Kubernetes 的包管理器。

每个成功的软件平台都有一个优秀的打包系统,比如Debian、 Ubuntu 的apt, Red Hat、CentOS的yum。 Helm 则是Kubernetes. 上 的包管理器。

Helm有两个重要的概念: chart 和release。

●chart 是创建一个应用的信息集合,包括各种Kubernetes 对象的配置模板、参数定

义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将chart想象成apt、yum中的软件安装包。

●release是chart 的运行实例,代表了一个正在运行的应用。当chart 被安装到

Kubernetes集群,就生成一个release。 chart 能够多次安装到同一个集群,每次安装都是一个release。

Helm是包管理工具,这里的包就是指的chart。 Helm能够:

●从零创建新chart。

●与存储chart 的仓库交互,拉取、保存和更新chart。在Kubernetes 集群中安装和卸载release。

●更新、回滚和测试release.

转载于:https://my.oschina.net/u/3779841/blog/3048878

### Kubernetes 核心概念 #### Pod Pod 是 Kubernetes 中最小的可部署单元,通常包含一个或多个容器。这些容器共享存储、网络以及如何运行的选项。Pod 的设计目的是支持多个协同工作的进程共同完成一项工作[^2]。 #### Node Node 表示集群中的计算节点,可以是物理机也可以是虚拟机。每个 Node 都由 Master 组件管理,并且至少要安装有 container runtime 和 kubelet。Node 上会运行被分配给它的 Pods,同时也会向 Master 报告自身的健康状况和其他元数据信息[^3]。 #### 控制器 (Controller) 控制器用于定义期望的应用程序状态并确保该状态得以维持。常见的控制器包括 Deployment Controllers 来管理无状态应用;StatefulSet 控制器来处理有状态应用程序;还有其他类型的控制器如 DaemonSets, Jobs 等等。它们通过 API Server 实时监测资源的变化情况,在检测到异常时自动采取措施使系统恢复至预期的状态[^4]。 #### Service Service 定义了一组逻辑上的相同功能的 Pods 及访问策略。即使后端 Pods 发生变更(比如重启),只要前端客户端使用的是这个 service name 或者 IP 地址,则仍然能够正常通信。这使得微服务架构下的服务调用更加稳定可靠. #### Etcd Etcd 是一种分布式的键值数据库,用来保存整个 K8s 集群的重要配置信息和状态数据。API Server 就是从这里读取最新的集群设置并将更新写入其中。为了保证高可用性和灾难恢复能力,建议对 etcd 进行定期备份并且采用多副本的方式部署. ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: nginx-container image: nginx ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值