【学习笔记】Kubernetes
一、 概览
Kubernetes 提供了一个抽象层,是用户可以在屋里或虚拟环境中部署容器化应用,提供以容器为中心的基础架构。
Kubernetes的控制平面和工作节点都有什么组建? 分别有什么作用?
1.1 Kubernetes控制平面和工作节点的组件及其作用
控制平面组件
控制平面组件负责管理集群的全局决策(如调度),以及检测和响应集群事件。
-
kube-apiserver
- Kubernetes API的前端,所有组件通信的枢纽
- 公开了Kubernetes API,使内部和外部组件可以与集群交互
- 设计为水平扩展(可运行多个实例)
-
etcd
- 一致且高可用的键值存储
- 存储所有集群数据(如配置、状态等)
- 作为Kubernetes的"真相来源"
-
kube-scheduler
- 监视新创建的、未分配节点的Pod
- 根据资源需求、亲和性/反亲和性、污点/容忍等选择最佳节点
- 决定Pod放置在哪个节点上运行
-
kube-controller-manager
- 运行多个控制器进程,例如:
- 节点控制器:管理节点状态
- 副本控制器:维护正确数量的Pod副本
- 端点控制器:连接Service与Pod
- 服务账户和令牌控制器:创建默认账户和API访问令牌
- 运行多个控制器进程,例如:
-
cloud-controller-manager(可选)
- 嵌入特定云平台逻辑的控制器
- 允许Kubernetes代码与云提供商代码分离
- 包含节点控制器、路由控制器、服务控制器等
工作节点组件
工作节点组件在每个节点上运行,维护运行中的Pod并提供Kubernetes运行环境。
-
kubelet
- 在每个节点上运行的主要"节点代理"
- 确保容器按照PodSpec的描述运行
- 管理由Kubernetes创建的容器的生命周期
- 通过API服务器注册节点并报告节点和Pod状态
-
kube-proxy
- 维护节点上的网络规则
- 允许从集群内部或外部与Pod通信
- 实现Kubernetes Service概念
- 处理虚拟IP地址到Pod IP的转发,支持负载均衡
-
容器运行时
- 负责运行容器的软件
- 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-kind
和 x-kubernetes-action
等扩展。
构建系统
Kubernetes 提供了两种环境构建方式:
- 本地 Go 环境
- 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-deploymentnamespace: default
spec: # 规约...
status: # 状态...
5. 常见 API Groups
-
核心组 (/api/v1)
- Pod
- Service
- ConfigMap
- Secret
- Namespace
- Node
-
apps (/apis/apps/v1)
- Deployment
- StatefulSet
- DaemonSet
- ReplicaSet
-
batch (/apis/batch/v1)
- Job
- CronJob
-
networking.k8s.io (/apis/networking.k8s.io/v1)
- Ingress
- NetworkPolicy
-
rbac.authorization.k8s.io (/apis/rbac.authorization.k8s.io/v1)
- Role
- RoleBinding
- ClusterRole
- ClusterRoleBinding
6. API 扩展机制
Kubernetes 提供了两种扩展 API 的机制:
-
CustomResourceDefinitions (CRDs)
- 允许用户定义自己的资源类型
- 无需修改 Kubernetes 源码
-
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: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2
常见使用模式
-
基础部署
- Deployment + Service + ConfigMap
- StatefulSet + Service + PVC
- DaemonSet + ConfigMap
-
网络访问
- Service + Ingress
- NetworkPolicy
-
权限控制
- ServiceAccount + Role + RoleBinding
- ClusterRole + ClusterRoleBinding
-
存储方案
- PV + PVC + StorageClass
这些对象通过API Server进行管理,使用kubectl命令行工具或其他客户端进行操作。每个对象都有其特定的用途和最佳实践,组合使用可以构建完整的应用系统。
相关文章:
【学习笔记】Kubernetes
一、 概览 Kubernetes 提供了一个抽象层,是用户可以在屋里或虚拟环境中部署容器化应用,提供以容器为中心的基础架构。 Kubernetes的控制平面和工作节点都有什么组建? 分别有什么作用? 1.1 Kubernetes控制平面和工作节点的组件及…...

【网络编程】几个常用命令:ping / netstat / xargs / pidof / watch
ping:检测网络联通 1. ping 的基本功能2. ping 的工作原理3. ping 的常见用法4. ping 的输出解释5. ping 的应用场景6. 注意事项 netstat:查看网络状态 1. netstat 的基本功能2. 常见用法3. 示例4. 输出字段解释5. netstat 的替代工具6. 注意事项 xargs&…...

上海创智学院(测试)算法笔试(ACM赛制)部分例题
1.第一个题,大概题目意思是求n句话中最长的单词和最短的单词 这个题目做的有点磕巴,好几年没有写过c/c了,连string的复制都不会写了,哈哈哈,太笨了 后面一点点捡起来,还是写出来了,本身没啥&…...

【学术投稿-第四届材料工程与应用力学国际学术会议(ICMEAAE 2025】材料工程与应用力学的探讨
重要信息 官网:www.icmeaae.com 时间:2025年3月7-9日 地点:中国西安 简介 第四届材料工程与应用力学(ICMEAAE 2025)将于2025年3月7日至9日在中国西安召开。本次会议将重点讨论材料科学、应用力学等领域的最新研究进…...

2025吐槽季第一弹---腾讯云EO边缘安全加速平台服务
前言: 关于EO边缘安全加速平台服务 参照:产品概述,具体如下: 边缘安全加速平台 EO(Tencent Cloud EdgeOne,下文简称为 EdgeOne)是国内首款基于全新架构的真正一体化的边缘安全加速平台。提供全面的安全防…...
力扣-动态规划-70 爬楼梯
思路 dp数组定义:爬到第i个台阶有多少种爬法递推公式: 当前台阶可能是从前一个或者前两个来的dp数组初始化:遍历顺序:顺序遍历时间复杂度: 代码 class Solution { public:int climbStairs(int n) {if(n 1) ret…...
【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片
【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求,目前需要了解以下几个关键点及分步解决方案: --- 一、现状分析 1. Ollama 的限制: - 目前Ollama主要面向文本大模型,原生不支持直接上传/处理图片 …...
使用 pytest-mock 进行 Python 高级单元测试与模拟
一、单元测试与模拟的意义 在软件开发中,单元测试用于验证代码逻辑的正确性。但实际项目中,代码常依赖外部服务(如数据库、API、文件系统)。直接测试这些依赖会导致: 测试速度变慢测试结果不可控产生副作用(如真实发送邮件)模拟(Mocking) 技术通过创建虚拟对象替代真…...

lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。
入口类:exportPdf package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…...

《Linux 指令集:开启极客世界的钥匙_01》
一、命令行基础 (一)命令行提示符解析 当前用户:显示当前登录的用户名。例如,当前用户为 “ubuntu_user”,则在命令行提示符中会显示该用户名。 连接符:通常是 “”,用于分隔用户名和计算机名…...

【Android】用 chrome://inspect/#devices 调试H5页面
通常做Android开发的过程中,不可避免的需要遇到去与H5交互,甚至有时候需要去调试H5的信息。 这里分享一下Android工程里如何调试H5页面信息: 直接在浏览器地址栏输入 : chrome://inspect/#devices 直接连接手机usb,打开开发者模式…...
Deepseek 实战全攻略,领航科技应用的深度探索之旅
想玩转 Deepseek?这攻略别错过!先带你了解它的基本原理,教你搭建运行环境。接着给出自然语言处理、智能客服等应用场景的实操方法与代码。还分享模型微调、优化技巧,结合案例加深理解,让你全面掌握,探索科技…...
《论区块链技术及应用》审题技巧 - 系统架构设计师
区块链技术及应用论题写作框架 一、考点概述 本论题“区块链技术及应用”主要考察软件测试工程师对区块链技术的理解及其在软件项目中的实际应用能力。论题涵盖了多个关键方面,首先要求考生对区块链技术有全面的认识,包括但不限于其作为分布式记账技术…...

ROS2 强化学习:案例与代码实战
一、引言 在机器人技术不断发展的今天,强化学习(RL)作为一种强大的机器学习范式,为机器人的智能决策和自主控制提供了新的途径。ROS2(Robot Operating System 2)作为新一代机器人操作系统,具有…...
【Python模块】——pymysql
pymysql是python操作mysql的标准库,可以通过pip install快速导入pymysql包操作数据库 使用pymysql操作mysql 简单demo import pymysql connect pymysql.connect(host"localhost",port3306,user"root",password"root",database&quo…...

【我的Android进阶之旅】Android Studio SDK Update Site 国内的腾讯云镜像配置指南
一、腾讯云的镜像 https://mirrors.cloud.tencent.com/AndroidSDK/ 二、 打开 Android Studio的SDK Manager 路径:Tools–>SDK Manager 在右侧找到 SDK Update Sites 列表,添加如下链接,像下面一样,一个一个添加 将下面几个链接都加上去 https:...

springboot实现多文件上传
springboot实现多文件上传 代码 package com.sh.system.controller;import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMap…...
Webpack打包优化
在使用 Webpack 打包项目时,随着项目规模的扩大,构建时间和打包产物的体积可能会逐渐增加。为了提高构建性能和减小打包产物的体积,可以采取以下几种 Webpack 打包优化 的方法。 1. 使用 mode 配置 Webpack 通过 mode 配置来指定构建模式。…...

浅谈HTTP及HTTPS协议
1.什么是HTTP? HTTP全称是超文本传输协议,是一种基于TCP协议的应用非常广泛的应用层协议。 1.1常见应用场景 一.浏览器与服务器之间的交互。 二.手机和服务器之间通信。 三。多个服务器之间的通信。 2.HTTP请求详解 2.1请求报文格式 我们首先看一下…...

GTID的基本概念
1.1 GTID的基本概念 1.1.1 GTID的作用 GTID的全称为Global Transaction Identifier,是MySQL的一个强大的特性。MySQL会为每一个DML/DDL操作都增加一个唯一标记,叫作GTID(每个事务一个GTID)。这个标记在整个复制环境中都是唯一的…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...

工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...

spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...

Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用 Linux 内核内存管理是构成整个内核性能和系统稳定性的基础,但这一子系统结构复杂,常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题,需要一套工具化、…...