Kubernetes 提供了一个抽象层,是用户可以在屋里或虚拟环境中部署容器化应用,提供以容器为中心的基础架构。
Kubernetes的控制平面和工作节点都有什么组建? 分别有什么作用?
控制平面组件负责管理集群的全局决策(如调度),以及检测和响应集群事件。
kube-apiserver
etcd
kube-scheduler
kube-controller-manager
cloud-controller-manager(可选)
工作节点组件在每个节点上运行,维护运行中的Pod并提供Kubernetes运行环境。
kubelet
kube-proxy
容器运行时
此外,集群中通常还会部署一些附加组件(如CoreDNS用于DNS服务、Dashboard用于Web界面等),这些组件增强了集群的功能性。
正在收集工作区信息# Kubernetes目录结构概述
从提供的工作区信息中,可以看到Kubernetes项目的主要目录结构如下:
这是特别重要的目录,包含已分离成独立仓库的代码包。这些代码最终会作为独立的 k8s.io/ 仓库发布,例如:
从提供的信息中可以看到 kubectl
相关代码位于 staging/src/k8s.io/kubectl 目录中,包含对资源进行描述的 describe
包。
api/openapi-spec 目录包含 Kubernetes API 的 OpenAPI 规范,定义了 x-kubernetes-group-version-kind
和 x-kubernetes-action
等扩展。
Kubernetes 提供了两种环境构建方式:
构建产物输出到 _output/
目录,主要包括二进制文件和Docker镜像。
Kubernetes 代码库是一个大型项目,使用模块化结构组织代码。核心功能被分解到不同的子模块中,这些子模块最终会发布为独立的仓库,便于其他项目引用。构建系统提供了一致的环境来编译和测试代码。
/api/v1 (核心API组)
/apis/apps/v1 (命名API组)
/apis/batch/v1
/apis/networking.k8s.io/v1
这种分层架构使得 Kubernetes:
每一层都专注于特定的功能,通过标准接口相互协作,共同构建了一个完整的容器编排平台。
Kubernetes API 采用了分层的设计架构,主要分为以下几个层次:
API Groups 是相关 API 的集合,便于扩展和演进。主要分为两类:
核心组(Core Group):也称为 Legacy Group
/api/v1
命名组(Named Groups):
/apis/$GROUP_NAME/$VERSION
每个 API Group 可以存在多个版本:
/apis/apps/v1 # 稳定版
/apis/apps/v1beta1 # 测试版
/apis/apps/v1alpha1 # 实验版
版本命名规则:
每个 API Group 和 Version 下包含多个资源类型:
/apis/apps/v1/deployments
/apis/apps/v1/statefulsets
/apis/apps/v1/daemonsets
所有 API 对象都遵循相同的结构:
apiVersion: GROUP/VERSION # 如 apps/v1
kind: RESOURCE_TYPE # 如 Deployment
metadata: # 元数据
name: my-deployment
namespace: default
spec: # 规约
...
status: # 状态
...
核心组 (/api/v1)
apps (/apis/apps/v1)
batch (/apis/batch/v1)
networking.k8s.io (/apis/networking.k8s.io/v1)
rbac.authorization.k8s.io (/apis/rbac.authorization.k8s.io/v1)
Kubernetes 提供了两种扩展 API 的机制:
CustomResourceDefinitions (CRDs)
API Aggregation
这种分层结构使得 Kubernetes API:
位于 /api/v1
路径下
# 基础对象
- Pod # 最小部署单元
- Service # 服务发现和负载均衡
- ConfigMap # 配置管理
- Secret # 敏感信息
- Namespace # 命名空间
- Node # 节点
- PersistentVolume # 持久卷
- PersistentVolumeClaim # 持久卷声明
用于管理应用部署和扩展
# 工作负载对象
- Deployment # 无状态应用部署
- StatefulSet # 有状态应用部署
- DaemonSet # 守护进程集
- ReplicaSet # 副本集控制
用于批处理和定时任务
# 任务相关对象
- Job # 一次性任务
- CronJob # 定时任务
网络相关资源
# 网络对象
- Ingress # 入口控制器
- NetworkPolicy # 网络策略
- IngressClass # Ingress类别
角色基于访问控制
# 权限控制对象
- Role # 角色
- RoleBinding # 角色绑定
- ClusterRole # 集群角色
- ClusterRoleBinding # 集群角色绑定
存储相关资源
# 存储对象
- StorageClass # 存储类
- VolumeAttachment # 卷附加
自动扩缩容
# 扩缩容对象
- HorizontalPodAutoscaler # 水平Pod自动扩缩容
- VerticalPodAutoscaler # 垂直Pod自动扩缩容
策略相关
# 策略对象
- 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
基础部署
网络访问
权限控制
存储方案
这些对象通过API Server进行管理,使用kubectl命令行工具或其他客户端进行操作。每个对象都有其特定的用途和最佳实践,组合使用可以构建完整的应用系统。