Skip to content

Kubernetes-汇总

资源及其简写列表

资源全称(NAME)简写(SHORTNAMES)说明
podspo最小调度单元
servicessvc服务抽象
deploymentsdeploy无状态应用控制器
replicasetsrs副本集
statefulsetssts有状态应用控制器
daemonsetsds每节点运行一个 Pod
jobs一次性任务(无标准简写)
cronjobscj定时任务
configmapscm配置数据
secrets敏感信息(通常无简写)
namespacesns命名空间
nodesno节点
persistentvolumespv持久卷(集群级)
persistentvolumeclaimspvc持久卷声明(命名空间级)
ingressesing入口路由
endpointsep服务端点
eventsev事件记录
serviceaccountssa服务账户
horizontalpodautoscalershpa水平 Pod 自动扩缩
networkpoliciesnetpol网络策略
customresourcedefinitionscrd, crds自定义资源定义
clusterroles集群角色(通常无简写)
roles角色
rolebindings角色绑定
clusterrolebindings集群角色绑定
mutatingwebhookconfigurations变更准入 Webhook
validatingwebhookconfigurations验证准入 Webhook
storageclassessc存储类
priorityclassespc优先级类
limitrangeslimits资源限制范围
resourcequotasquota资源配额

核心概念与架构

Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用,提供高可用性、弹性扩展和跨平台支持。其核心架构由控制平面(如 API Server、etcd、Controller Manager、Scheduler)和工作节点组件(如 Kubelet、Kube Proxy)组成。

核心组件

控制平面组件

  • API Server:集群统一入口,提供RESTful API接口

  • etcd:分布式键值存储数据库,保存集群状态和配置数据

  • Controller Manager:运行各种控制器,确保集群实际状态与期望状态一致

  • Scheduler:负责Pod调度,根据资源需求选择合适节点

  • kubelet:节点代理,管理Pod生命周期并与容器运行时交互

  • kube-proxy:实现Service的负载均衡和网络代理功能

工作节点组件

  • kubelet:管理本节点上的Pod生命周期

  • kube-proxy:实现Service的负载均衡和网络代理

扩展组件

  • CoreDNS: Kubernetes集群的默认DNS服务器,负责服务发现(将服务名称解析为ClusterIP或Pod IP)、Pod域名解析、外部域名解析、负载均衡(轮询策略)和反向DNS解析。

  • Calico: Kubernetes网络插件,采用纯三层网络模型,提供Pod IP分配、路由传播(通过BGP协议)、跨节点通信(支持BGP/IPIP/VXLAN模式)和网络策略实施(通过iptables/eBPF规则),无封装开销,性能更好;原生支持完整的 NetworkPolicy。

  • Flannel:纯 overlay 方案(默认 VXLAN/UDP 封装),配置简单,适合小规模测试或对性能要求不高的场景;但因封装解封装会有额外开销,且原生不支持 NetworkPolicy(需配合其他插件如 Calico 使用策略)。 简单说:Flannel 易上手但性能一般且需额外插件做策略;Calico 稍复杂但一站式解决网络+策略,性能更强。

  • Ingress Controller: Kubernetes组件,用于管理外部HTTP/HTTPS流量进入集群,提供路由规则(基于域名或路径)、负载均衡、SSL终止和高级功能(如路径重写、会话保持);常见实现包括Nginx、Traefik和HAProxy。

组件协作流程

1. 用户提交请求

  • 用户通过 kubectl 或API向API Server提交资源定义(如YAML文件),声明应用的期望状态。

2. 存储与协调

  • API Server验证请求后,将资源状态持久化到etcd(集群的分布式数据库)。

  • Controller Manager监听etcd中的资源变更,对比实际状态与期望状态,生成调整指令(如扩缩容Pod)。

3. 调度与执行

  • Scheduler选择符合条件的Node,将Pod绑定到目标节点(基于资源、亲和性等策略)。

  • kubelet在目标Node上调用容器运行时(如containerd)启动Pod,并持续上报状态至API Server。

4. 服务与网络

  • kube-proxy维护Service的负载均衡规则(iptables/IPVS),将流量路由到后端Pod。

  • CNI插件(如Calico)为Pod分配IP并管理跨节点网络通信。

5. 自愈与扩展

各组件持续监控集群状态(如Pod故障),自动触发重建、调度或扩缩容,确保系统收敛于期望状态

工作负载管理

Pod

  • 最小部署单元,代表一组共享网络和存储的容器
  • 支持单容器、Sidecar、适配器和大使等多种使用模式
  • 生命周期
    • Pending:Pod 已被系统接受,但容器尚未创建
    • Running:Pod 已绑定到节点,所有容器已创建
    • Succeeded:所有容器成功终止
    • Failed:至少一个容器异常终止
    • Unknown:无法获取 Pod 状态

Deployment

  • 用于管理无状态应用的核心工作负载控制器

  • 通过 ReplicaSet 实现 Pod 的声明式部署、自动扩缩容、滚动更新及版本回滚

  • 支持 Pod 模板定义、副本数量控制、多种更新策略和健康检查

StatefulSet

  • 专为管理有状态应用设计的控制器

  • 提供稳定的网络标识、有序部署、持久化存储及与 Headless Service 的紧密集成

  • 适用于数据库、消息队列等有状态服务

DaemonSet

  • 确保在集群中每个(或指定)节点上运行一个 Pod 副本

  • 常用于部署日志收集、监控代理、网络插件等系统级守护进程

Job/CronJob

  • Job 是专为管理一次性批处理任务设计的控制器

  • CronJob 在 Job 基础上增加了基于 cron 表达式的定时调度功能

网络与服务

Service

四层负载,适用于TCP/UDP协议。为动态变化的 Pod 提供稳定的访问入口,实现服务发现、负载均衡和网络抽象

类型

  • ClusterIP:集群内部的虚拟 IP(VIP),只能在 Kubernetes 集群内部访问
  • NodePort:它在 ClusterIP 基础上扩展了外部访问能力,在每个节点上开放一个静态端口(默认范围 30000-32767)
  • LoadBalancer:在 NodePort 基础上,集成云提供商的负载均衡器(如AWS ELB、GCP LB等)
  • ExternalName:将 Service 映射到外部 DNS 域名,而不是集群内部的 Pod

无头模式

  • 无选择器 Service:Service 对象中不定义 .spec.selector 字段
  • 手动创建 Endpoints:用户自行创建与 Service 同名的 Endpoints 对象,明确指定后端端点
  • 负载均衡机制:kube-proxy 仍然会为这种 Service 创建负载均衡规则,但后端由用户完全控制

Ingress

七层负载适用于HTTP(80)/HTTPS(443)协议。通过一个统一的入口暴露多个服务,支持基于域名、路径、HTTP 头部等条件的复杂路由规则,可以在集群边缘处理 SSL/TLS 加密解密,减轻后端服务负担。底层基于Nginx开发。

路由匹配类型

  1. Prefix:前缀匹配,路径以指定字符串开头
  2. Exact:精确匹配,路径必须完全一致
  3. ImplementationSpecific:由具体 Ingress 控制器实现决定

annotations注解

  • 负载均衡
    • 轮询(默认):nginx.ingress.kubernetes.io/load-balance: "round_robin"
    • 最少连接:nginx.ingress.kubernetes.io/load-balance: "least_conn"
    • IP 哈希:nginx.ingress.kubernetes.io/ip-hash: "true"
  • 重定向
  • 路径重写:通过正则匹配进行路径跳转
  • 跨域(CORS)
  • 流量控制:并发限制与令牌桶限制
  • 超时控制:连接超时、请求超时等

NetworkPolicy

基于标签的声明式网络安全机制,精细控制 Pod 之间的入站(Ingress)和出站(Egress)流量

选择器类型

  • podSelector:匹配当前命名空间中的特定 Pod
  • namespaceSelector:匹配特定命名空间中的所有 Pod
  • ipBlock:匹配特定的 CIDR 范围

存储管理

ConfigMap

  • 用于存储非敏感配置数据的键值对对象

  • 支持通过环境变量和卷挂载两种方式供 Pod 使用

Secret

  • 用于安全存储和管理敏感信息(如密码、令牌、密钥)

  • 支持通过环境变量或卷挂载方式注入到 Pod 中

PV/PVC

PV(持久卷)和 PVC(持久卷声明)共同实现容器数据的持久化存储,通过 StorageClass 支持动态存储供应

PV:PV 独立于 Pod 生命周期存在,支持多种存储类型包括本地存储(HostPath)、网络存储(NFS、iSCSI、Ceph)以及云存储(AWS EBS、Azure Disk 等)

PVC:是用户对存储资源的声明(申请),描述应用所需的存储特性(容量、访问模式等),不关心底层实现细节

StorageClass

  • 静态模式:管理员预先创建许多各种各样的PV,等待PVC申请使用。
  • 动态模式:管理员无须预先创建PV,而是通过StorageClass自动完成PV的创建以及与PVC的绑定。

生命周期

  • Provisioning(配置):静态或者动态配置
  • Binding(绑定):匹配 PVC 与符合条件的 PV,绑定后形成一对一独占关系,PV 状态变为 Bound
  • Using(使用):Pod 通过 volumes 字段引用 PVC,存储卷被挂载到容器指定路径
  • Releasing(释放):Pod 删除后,PVC 被释放,PV 根据回收策略进入 Released 或 Failed 状态
  • Recycling(回收)
    • Retain:保留 PV 和数据,需手动清理(生产环境推荐)

    • Delete:自动删除 PV 及底层存储(需存储插件支持)

    • Recycle(已弃用):删除数据后重置 PV 为 Available

临时存储

  • emptyDir:与 Pod 生命周期绑定的临时存储卷

  • hostPath:将节点本地文件系统挂载到 Pod 中

配置与资源管理

对象描述文件

  • YAML/JSON 格式定义集群中的各类资源

  • 常见资源类型包括 Pod、Deployment、Service、ConfigMap 等

资源管理

  • ResourceQuota:命名空间级别的资源配额

    • 计算资源配额:计算资源(CPU/内存)总和的限制

    • 存储资源配额:存储资源(PVC)总和限制

    • 对象数量配额:对象资源数量控制,如Pod(非停止状态)、Service、Secret 、ConfigMap、Deployment

  • LimitRange:约束命名空间内的资源限制

    • 设置默认值:为未指定资源需求的 Pod 或容器自动注入合理的资源请求(request)和限制(limit)值

    • 设置最大资源上限:约束 Pod 或容器能够使用的资源最大值

    • 设置最小请求值:约束 Pod 或容器能够使用的资源最小值

  • 节点亲和性控制 Pod 调度

    • NodeSelector:基于节点标签(Labels)实现,将Pod强制调度特定节点,将不同服务调度到不同节点
    • NodeAffinity:指定 Pod 应该(或不应该)调度到哪些节点上
      • 硬性要求:调度时必须满足的条件,不满足则处于Pending状态
      • 软性偏好:调度时优选考虑的条件,不满足时仍可调度
  • Pod亲和性:基于节点拓扑域和Pod标签,定义新Pod与现有Pod之间的部署关系

    • 亲和:使Pod倾向于与特定标签的Pod部署在同一拓扑域
    • 反亲和:使Pod避免与特定标签的Pod部署在同一拓扑域
  • 污点与容忍

    • 污点:污点是节点(Node)上的属性,用于排斥不符合条件的Pod被调度到该节点
    • 容忍:容忍是Pod上的配置,允许(但不强制)Pod被调度到带有特定污点的节点上

QoS资源分配策略

  • 根据 Pod 的资源请求和限制配置划分 QoS 等级
  • 评分范围-1000到+1000,分越大优先被删除
  • 分类:
    • Guaranteed (最高保障):Pod 中所有容器都必须设置Requests 和 Limits,且两者的值必须完全相同
    • Burstable (可突增资源):Requests 和 Limits 不一致,容器可获得最低保障但也能在资源充足时突发使用更多资源
    • BestEffort (尽力而为):未设置任何requests和limits,资源紧张时,优先被终止

运维与扩展

探针

  • 控制应用初始化、检测异常容器以及管理流量路由

  • 探针类型

    • Startup(启动):判断容器内应用程序是否启动,会先禁止其他的探针,直到它成功为止,成功后将不再进行探测
    • Liveness(存活):判断容器内的应用程序是否正常,若不正常,根据 Pod 的restartPolicy 重启策略操作,如果没有配置该探针,默认就是success
    • Readiness(就绪):判断容器是否已经就绪,若未就绪,容器将会处于未就绪,未就绪的容器,不会进行流量的调度。 Kubernetes 会把 Pod 从 service endpoints 中剔除。
  • 探针方法

    • exec:通过在容器内执行指定命令,来判断命令退出时返回的状态码,返回状态码是0表示正常。

    • httpGet:通过对容器的 IP 地址、端口和 URL 路径来发送 GET 请求;如果响应的状态码在 200 ~399 间,表示正常。

    • tcpSocket:通过对容器的 IP 地址和指定端口,进行 TCP 检查,如果端口打开,发起 TCPSocket 建立成功,表示正常。

  • 探针配置项

    • initialDelaySeconds:延迟多少秒开始探测
    • periodSeconds:检查间隔时间单位秒,默认10s最少1s
    • timeoutSeconds:超时时间单位秒
    • failureThreshold:连续失败次数,默认3最少1
    • successThreshold:连续成功次数,默认1,且只能是1

HPA

通过监控资源指标动态调整 Pod 副本数量,实现应用负载的自动扩缩容

  • 水平扩缩(Horizontal Scaling):通过增减Pod数量来应对负载变化,这是云原生应用更推荐的扩缩方式,因为它提供了更好的弹性和故障隔离能力
  • 垂直扩缩(Vertical Scaling):通过调整单个Pod的资源配额(CPU/内存)来应对负载变化,适用于无法水平扩展的应用
  • 工作原理
    1. 指标采集:通过Metrics API查询目标工作负载(如Deployment)的当前指标
    2. 决策计算:计算当前指标值与目标值的比率
    3. 执行扩缩容:根据比率调整Pod副本数量

RBAC

基于角色的访问控制,通过 Role/ClusterRole 定义权限,RoleBinding/ClusterRoleBinding 绑定角色

  • Subject(主体)User/ Group/ ServiceAccount
  • Role(角色):定义权限规则(rules
  • ClusterRole(集群角色):非命名空间作用域的Role
  • Binding(绑定):将角色与主体关联

Helm

  • Kubernetes 的包管理工具

  • 通过 Chart、Release 和 Repository 简化应用部署

基础命令

集群管理

bash
kubectl cluster-info     									# 查看集群信息 
kubectl api-resources    									# 列出集群支持的 API 资源 
kubectl config current-context     							# 查看当前上下文 
kubectl explain <资源类>									 # 资源字段说明文档

命名空间操作

bash
kubectl create namespace <name>    							# 创建命名空间 
kubectl get namespaces    			  						# 查看命名空间 (缩写  kubectl get ns )
kubectl config set-context --curre nt --namespace=<name>     # 切换默认命名空间

资源操作

bash
kubectl apply -f <file.yaml>     							# 声明式创建/更新资源 
kubectl create RESOURCE [NAME] [--flags]					# 创建资源
kubectl delete -f <file.yaml>    							# 删除资源 
kubectl get <resource>   		 							# 查看资源列表 (如  pods ,  deployments ) 
kubectl describe <resource>/<name>     						# 查看资源详情
kubectl edit <资源类> <资源名> [-n <命名空>]				# 直接编辑Kubernetes集群资源
kubectl patch -p PATCH [--type=<策略类型>]					  # 部分更新Kubernetes资源字段
kubectl rollout history (TYPE NAME | TYPE/NAME) [flags]		# 查看Kubernetes资源部署历史记录

Pod管理

bash
kubectl logs <pod-name> [-c contai ner]    					# 查看容器日志 
kubectl exec -it <pod-name> -- /bi n/sh    					# 进入容器交互终端 
kubectl port-forward <pod-name> <l ocal-port>:<pod-port>     # 端口转发 
kubectl run <POD_NAME> --image=<IMAGE> [其他参数]			# 创建pod

Deployment操作

bash
kubectl scale deployment/<name> -- replicas=<num>    		# 扩缩容 
kubectl rollout status deployment/ <name>    				# 查看更新状态 
kubectl rollout undo deployment/<n ame>    					# 回滚到上一版本

服务暴露

bash
kubectl expose deployment <name> - -port=<port> --type=NodePort    # 创建 Service
kubectl get services     									# 查看服务	(缩写  kubectl get svc )

调试与维护

bash
kubectl top pods     										# 查看资源使用情况(需 metrics-server) 
kubectl drain <node-name>    								# 优雅驱逐节点 Pod 
kubectl cordon/uncordon <node-name >     					# 标记节点不可调度/恢复调度

高级功能

bash
kubectl autoscale deployment <name > --cpu-percent=50 --min=1 --max=10     # 配置 HPA 自动扩缩容 
kubectl create secret generic <nam e> --from-literal=<key>=<value>     		# 创建 Secret