generated from CaiJimmy/hugo-theme-stack-starter
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
88 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
--- | ||
title: "Kubernetes核心组件" | ||
author: "Li, Caleb Chaoqun" | ||
date: "2024-08-01" | ||
description: "K8s核心组件" | ||
typora-copy-images-to: "" | ||
tags: | ||
- "K8s" | ||
- "Kubernetes" | ||
- "运维" | ||
- "概览" | ||
--- | ||
|
||
# 核心组件 | ||
|
||
|
||
## Etcd (公共核心组件) | ||
|
||
etcd是一个分布式key-value存储系统,为Kubernetes提供原数据的存储。 | ||
|
||
- **接口简单:** 通过客户端或HTTP的方式访问; | ||
- **数据表示简单:** 存储key-value数据,可理解为一个有序的map; | ||
- **方便数据订阅:** 支持watch机制; | ||
|
||
![Etcd-同步策略.png](Etcd-同步策略.png) | ||
|
||
|
||
## Api-Server (Master) | ||
|
||
Api-Server通过Master节点上的kube-apiserver进程提供服务,该服务是集群内各个功能模块之间数据交互和通信的中心枢纽,实现了 Kubernetes 对象模型(如 Pods, Services, Deployments 等)的 CRUD 操作。 | ||
由于API Server承担了系统内关键的数据通信部分,所以API Server的性能高低决定了集群性能的高低。 | ||
|
||
使用 etcd 数据库作为持久化存储后端。所有 Kubernetes 对象的状态都保存在 etcd 中。 | ||
|
||
|
||
### API Server提供的API: | ||
1. /api/vi - 核心API | ||
2. /apis - 分组API | ||
3. /healthz - 健康监测 | ||
4. /logs - 日志 | ||
5. /swaggerapi - SwaggerAPI (OpenAPI) | ||
6. /metrics - 性能度量 | ||
|
||
### 访问控制 | ||
1. 授权 | ||
2. 身份验证 | ||
3. 准入控制 | ||
|
||
### 服务注册 | ||
|
||
1. Pod | ||
2. NameSpace | ||
3. Service | ||
4. Apps | ||
5. Storage | ||
6. ... | ||
|
||
|
||
## Controller Manager (Master) | ||
|
||
在Kubernetes中,每个Controller是一个控制回路,通过APIServer监视集群内Node、Pod的等资源的状态,并确保其当前状态(由spec字段规定)接近期望状态。 | ||
|
||
Controller按照其实现方式,可以分为内部控制器和外部控制器。 | ||
Kubernetes内部几乎每种特定资源都有特定的Controller维护管理,而ControllerManager的职责便是把所有的Controller聚合起来,以达到以下目的: | ||
- 提供基础设施,启动和维持Controller的正常运行,降低Controller的实现复杂度。 | ||
- 通过Watch apiserver监控资源状态变化,对不同的Controller分发事件通知。 | ||
|
||
### Controller工作流程 | ||
|
||
Controller Manager主要提供了一个分发事件的能力,而不同的Controller只需要注册对应的Handler来等待接收和处理事件。在Controller Manager的帮助下,Controller的逻辑可以做的非常纯粹,只需要实现相应的EventHandler即可。以Deployment controller为例: | ||
|
||
![Controller Manager 工作流程](controller工作流程.jpg) | ||
|
||
### 内部控制器 | ||
1. Deployment Controller: 用于管理应用程序的部署过程。 | ||
它基于 ReplicaSets 来管理 Pods,并支持滚动更新和回滚等高级部署策略。 | ||
2. ReplicaSet: 确保指定数量的副本(Pods)始终处于运行状态。如果 Pod 数量减少,它会自动创建新的 Pod;如果 Pod 数量超过期望值,则删除多余的 Pod。 | ||
3. StatefulSet Controller: 管理有状态的应用程序实例。维护持久的标识符和稳定的持久卷绑定。 | ||
4. DaemonSet Controller: 确保所有(或某些)节点上运行一个 Pod 的副本。常用于运行守护进程,如日志收集或监控代理。 | ||
5. Job Controller: 确保一个或多个任务完成指定次数的执行。通常用于批处理作业或一次性任务。 | ||
6. CronJob Controller: 创建基于时间的 Jobs,类似于 Unix cron 任务。 | ||
7. Namespace Controller: 管理 Namespace 的生命周期,包括删除 Namespace 及其关联资源。 | ||
8. Node Controller: 用于监控节点的状态,标记不健康的Node,并迁移其上的POD。 | ||
9. Endpoints Controller: 更新每个Service的Endpoint列表,以反映实际可用的Pod。 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.