当前位置: 首页 > article >正文

【学习笔记】Kubernetes

一、 概览

Kubernetes 提供了一个抽象层,是用户可以在屋里或虚拟环境中部署容器化应用,提供以容器为中心的基础架构。

Kubernetes的控制平面和工作节点都有什么组建? 分别有什么作用?

1.1 Kubernetes控制平面和工作节点的组件及其作用

控制平面组件

控制平面组件负责管理集群的全局决策(如调度),以及检测和响应集群事件。

  1. kube-apiserver

    • Kubernetes API的前端,所有组件通信的枢纽
    • 公开了Kubernetes API,使内部和外部组件可以与集群交互
    • 设计为水平扩展(可运行多个实例)
  2. etcd

    • 一致且高可用的键值存储
    • 存储所有集群数据(如配置、状态等)
    • 作为Kubernetes的"真相来源"
  3. kube-scheduler

    • 监视新创建的、未分配节点的Pod
    • 根据资源需求、亲和性/反亲和性、污点/容忍等选择最佳节点
    • 决定Pod放置在哪个节点上运行
  4. kube-controller-manager

    • 运行多个控制器进程,例如:
      • 节点控制器:管理节点状态
      • 副本控制器:维护正确数量的Pod副本
      • 端点控制器:连接Service与Pod
      • 服务账户和令牌控制器:创建默认账户和API访问令牌
  5. cloud-controller-manager(可选)

    • 嵌入特定云平台逻辑的控制器
    • 允许Kubernetes代码与云提供商代码分离
    • 包含节点控制器、路由控制器、服务控制器等

工作节点组件

工作节点组件在每个节点上运行,维护运行中的Pod并提供Kubernetes运行环境。

  1. kubelet

    • 在每个节点上运行的主要"节点代理"
    • 确保容器按照PodSpec的描述运行
    • 管理由Kubernetes创建的容器的生命周期
    • 通过API服务器注册节点并报告节点和Pod状态
  2. kube-proxy

    • 维护节点上的网络规则
    • 允许从集群内部或外部与Pod通信
    • 实现Kubernetes Service概念
    • 处理虚拟IP地址到Pod IP的转发,支持负载均衡
  3. 容器运行时

    • 负责运行容器的软件
    • Kubernetes支持多种运行时,如:
      • containerd
      • CRI-O
      • Docker Engine
      • 其他符合CRI (Container Runtime Interface) 的实现

此外,集群中通常还会部署一些附加组件(如CoreDNS用于DNS服务、Dashboard用于Web界面等),这些组件增强了集群的功能性。


1.2 目录结构

正在收集工作区信息# Kubernetes目录结构概述

从提供的工作区信息中,可以看到Kubernetes项目的主要目录结构如下:

顶层目录

  • api/ - 包含API规范和OpenAPI文档
  • build/ - 构建脚本和工具
  • cluster/ - 集群部署脚本
  • cmd/ - 可执行命令入口点
  • docs/ - 项目文档
  • hack/ - 开发辅助脚本
  • pkg/ - 核心代码库
  • plugin/ - 插件代码
  • staging/ - 分阶段发布的独立仓库
  • test/ - 测试代码和工具
  • third_party/ - 第三方代码
  • vendor/ - 依赖库

重要的子目录

staging/

这是特别重要的目录,包含已分离成独立仓库的代码包。这些代码最终会作为独立的 k8s.io/ 仓库发布,例如:

  • k8s.io/api
  • k8s.io/apimachinery
  • k8s.io/client-go
  • k8s.io/kubectl
  • 等20多个子项目
kubectl 目录

从提供的信息中可以看到 kubectl 相关代码位于 staging/src/k8s.io/kubectl 目录中,包含对资源进行描述的 describe 包。

OpenAPI 规范

api/openapi-spec 目录包含 Kubernetes API 的 OpenAPI 规范,定义了 x-kubernetes-group-version-kindx-kubernetes-action 等扩展。

构建系统

Kubernetes 提供了两种环境构建方式:

  1. 本地 Go 环境
  2. Docker 容器环境(推荐,提供一致的构建环境)

构建产物输出到 _output/ 目录,主要包括二进制文件和Docker镜像。

总结

Kubernetes 代码库是一个大型项目,使用模块化结构组织代码。核心功能被分解到不同的子模块中,这些子模块最终会发布为独立的仓库,便于其他项目引用。构建系统提供了一致的环境来编译和测试代码。


Kubernetes 层次架构

1. 物理架构层

控制平面(Control Plane)

  • API Server: 所有组件的通信中枢
  • etcd: 分布式键值存储
  • Controller Manager: 控制器管理
  • Scheduler: 调度决策

工作节点(Worker Nodes)

  • Kubelet: 节点代理
  • Container Runtime: 容器运行时
  • Kube-proxy: 网络代理

2. 逻辑架构层

基础抽象层

  • Node: 计算节点抽象
  • Container: 容器抽象
  • Pod: 最小部署单元

控制器抽象层

  • ReplicaSet: 副本控制
  • Deployment: 部署控制
  • StatefulSet: 有状态应用
  • DaemonSet: 守护进程集
  • Job/CronJob: 任务控制

应用配置层

  • ConfigMap: 配置管理
  • Secret: 敏感信息
  • Volume: 存储卷

服务访问层

  • Service: 服务发现和负载均衡
  • Ingress: 外部访问入口

3. 接口层

API 层级

/api/v1 (核心API组)
/apis/apps/v1 (命名API组)
/apis/batch/v1
/apis/networking.k8s.io/v1

扩展接口

  • CRD: 自定义资源定义
  • Admission Webhooks: 准入控制
  • API Aggregation: API聚合层

4. 功能层

集群管理

  • 节点管理
  • 资源配额
  • 命名空间隔离

应用管理

  • 部署管理
  • 配置管理
  • 状态管理

网络管理

  • Pod网络
  • Service网络
  • 集群网络策略

存储管理

  • 持久化存储
  • 临时存储
  • 存储类

5. 安全层

认证

  • X.509 证书
  • Bearer Token
  • Service Account

授权

  • RBAC
  • ABAC
  • Node/Webhook

准入控制

  • ValidatingWebhook
  • MutatingWebhook

这种分层架构使得 Kubernetes:

  • 高度模块化
  • 易于扩展
  • 解耦合度高
  • 职责划分清晰
  • 维护性好

每一层都专注于特定的功能,通过标准接口相互协作,共同构建了一个完整的容器编排平台。


构建过程

二、 Kubernetes 核心数据结构

2.1 Kubernetes API 的层次结构

Kubernetes API 采用了分层的设计架构,主要分为以下几个层次:

1. API Groups(API 组)

API Groups 是相关 API 的集合,便于扩展和演进。主要分为两类:

  • 核心组(Core Group):也称为 Legacy Group

    • 路径:/api/v1
    • 包含:Pod、Service、Node 等核心对象
  • 命名组(Named Groups)

    • 路径:/apis/$GROUP_NAME/$VERSION
    • 例如:
      • apps/v1 (Deployments, StatefulSets)
      • batch/v1 (Jobs, CronJobs)
      • networking.k8s.io/v1 (Ingress)

2. API 版本(Versions)

每个 API Group 可以存在多个版本:

/apis/apps/v1      # 稳定版
/apis/apps/v1beta1 # 测试版
/apis/apps/v1alpha1 # 实验版

版本命名规则:

  • alpha: 不稳定,可能有重大变化
  • beta: 相对稳定,可能有小的变化
  • GA/stable: 稳定版本,向后兼容

3. API 资源(Resources)

每个 API Group 和 Version 下包含多个资源类型:

/apis/apps/v1/deployments
/apis/apps/v1/statefulsets
/apis/apps/v1/daemonsets

4. API 对象结构

所有 API 对象都遵循相同的结构:

apiVersion: GROUP/VERSION  # 如 apps/v1
kind: RESOURCE_TYPE       # 如 Deployment
metadata:                 # 元数据
  name: my-deployment
  namespace: default
spec:                    # 规约
  ...
status:                  # 状态
  ...

5. 常见 API Groups

  1. 核心组 (/api/v1)

    • Pod
    • Service
    • ConfigMap
    • Secret
    • Namespace
    • Node
  2. apps (/apis/apps/v1)

    • Deployment
    • StatefulSet
    • DaemonSet
    • ReplicaSet
  3. batch (/apis/batch/v1)

    • Job
    • CronJob
  4. networking.k8s.io (/apis/networking.k8s.io/v1)

    • Ingress
    • NetworkPolicy
  5. rbac.authorization.k8s.io (/apis/rbac.authorization.k8s.io/v1)

    • Role
    • RoleBinding
    • ClusterRole
    • ClusterRoleBinding

6. API 扩展机制

Kubernetes 提供了两种扩展 API 的机制:

  1. CustomResourceDefinitions (CRDs)

    • 允许用户定义自己的资源类型
    • 无需修改 Kubernetes 源码
  2. API Aggregation

    • 允许在集群中运行自定义 API 服务器
    • 更灵活但实现更复杂

这种分层结构使得 Kubernetes API:

  • 易于扩展
  • 支持版本控制
  • 便于管理不同成熟度的功能
  • 提供清晰的组织结构

Kubernetes 常用对象及其分组

1. 核心组 (Core Group - v1)

位于 /api/v1 路径下

# 基础对象
- Pod          # 最小部署单元
- Service      # 服务发现和负载均衡
- ConfigMap    # 配置管理
- Secret       # 敏感信息
- Namespace    # 命名空间
- Node         # 节点
- PersistentVolume      # 持久卷
- PersistentVolumeClaim # 持久卷声明

2. apps 组 (/apis/apps/v1)

用于管理应用部署和扩展

# 工作负载对象
- Deployment    # 无状态应用部署
- StatefulSet  # 有状态应用部署
- DaemonSet    # 守护进程集
- ReplicaSet   # 副本集控制

3. batch 组 (/apis/batch/v1)

用于批处理和定时任务

# 任务相关对象
- Job          # 一次性任务
- CronJob      # 定时任务

4. networking.k8s.io 组 (/apis/networking.k8s.io/v1)

网络相关资源

# 网络对象
- Ingress           # 入口控制器
- NetworkPolicy     # 网络策略
- IngressClass      # Ingress类别

5. rbac.authorization.k8s.io 组 (/apis/rbac.authorization.k8s.io/v1)

角色基于访问控制

# 权限控制对象
- Role              # 角色
- RoleBinding       # 角色绑定
- ClusterRole       # 集群角色
- ClusterRoleBinding # 集群角色绑定

6. storage.k8s.io 组 (/apis/storage.k8s.io/v1)

存储相关资源

# 存储对象
- StorageClass      # 存储类
- VolumeAttachment  # 卷附加

7. autoscaling 组 (/apis/autoscaling/v2)

自动扩缩容

# 扩缩容对象
- HorizontalPodAutoscaler  # 水平Pod自动扩缩容
- VerticalPodAutoscaler    # 垂直Pod自动扩缩容

8. policy 组 (/apis/policy/v1)

策略相关

# 策略对象
- PodDisruptionBudget  # Pod中断预算

示例用法

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2

常见使用模式

  1. 基础部署

    • Deployment + Service + ConfigMap
    • StatefulSet + Service + PVC
    • DaemonSet + ConfigMap
  2. 网络访问

    • Service + Ingress
    • NetworkPolicy
  3. 权限控制

    • ServiceAccount + Role + RoleBinding
    • ClusterRole + ClusterRoleBinding
  4. 存储方案

    • PV + PVC + StorageClass

这些对象通过API Server进行管理,使用kubectl命令行工具或其他客户端进行操作。每个对象都有其特定的用途和最佳实践,组合使用可以构建完整的应用系统。


http://www.kler.cn/a/562074.html

相关文章:

  • 【星云 Orbit-F4 开发板】03b. 按键玩法二:独立按键双击双击触发
  • IOS网络安全体系结构 网络安全体系架构
  • 【Java 常用注解学习笔记3】——Java 常用注解扩展与完善
  • MySQL 数据库基础详细解释和示例
  • 数据结构之【链表简介】
  • vi 编辑器的使用
  • DeepSeek开源周Day2:DeepEP - 专为 MoE 模型设计的超高效 GPU 通信库
  • Web前端开发——HTML基础
  • Cassini_Network-Aware Job Schedulingin Machine Learning Clusters
  • 【【Systemverilog学习参考 简单的加法器验证-含覆盖率】】
  • unity学习51:所有UI的父物体:canvas画布
  • 鸿蒙5.0实战案例:har和hsp的转换
  • “深入解析 SQL Server 子查询:从基础到应用”
  • 安全开发-环境选择
  • AGI分级探索:从OpenAI到DeepMind,展望未来AI图景
  • Ubuntu从零创建Hadoop集群
  • idea里的插件spring boot helper 如何使用,有哪些强大的功能,该如何去习惯性的运用这些功能
  • IO进程 day06
  • Kafka 消费者组内分区分配策略 以及 管理控制台方案
  • 巨控科技的GRM550元出魔抗实现PLC远程下载与维护方案:工业自动化的高效解决方案