目录

kubenetes资源管理

一、Kubernetes 资源管理方法

二、基础信息查看命令

1. 集群与工具基础信息

2. 资源通用查询(kubectl get)

3. 资源详情查看(kubectl describe)

三、项目生命周期操作(完整流程)

1. 1. 创建(陈述式 / 声明式)

陈述式创建(快速创建)

声明式创建(基于 YAML)

2. 发布(暴露 Service 供访问)

陈述式发布(kubectl expose)

Service 类型说明

验证发布结果

3. 更新(升级应用版本)

陈述式更新(kubectl set)

声明式更新(修改 YAML)

4. 回滚(版本回退)

5. 删除(清理资源)

陈述式删除

声明式删除(基于 YAML)

强制删除(处理卡住的 Pod)

四、主流发布策略(金丝雀 / 蓝绿 / 滚动)

1. 滚动发布(Rolling Update)

2. 金丝雀发布(Canary Release)

3. 蓝绿发布(Blue-Green Deployment)

Kubernetes YAML 配置与端口详解

1. 查看 Kubernetes 版本信息

查看 kubectl 与集群版本

查看 API 资源版本标签

2. YAML 格式语法规则

3. 资源清单(YAML)编写详解

示例 1:Deployment 资源清单

示例 2:Service 资源清单

资源清单核心组成

4. 端口概念详解(port/nodePort/targetPort/containerPort)

端口映射流程

5. 快速编写 YAML 文件的方法

方法 1:使用 --dry-run 生成模板

方法 2:导出已有资源的配置

方法 3:使用 kubectl edit 复制配置

方法 4:查询字段帮助

简化模板技巧

kind的资源类型有:

一、核心资源(Core Resources)

二、工作负载资源(Workload Resources)

三、服务发现与负载均衡(Service Discovery & Load Balancing)

四、配置与存储(Configuration & Storage)

五、集群资源(Cluster Resources)

六、其他常用资源

查看所有资源类型


kubenetes资源管理

一、Kubernetes 资源管理方法

K8s 资源管理分为陈述式声明式两大类,核心差异在于操作逻辑与适用场景:

维度 陈述式管理(Imperative) 声明式管理(Declarative)
核心逻辑 直接执行 “做什么” 的命令(如创建、删除) 通过配置文件定义 “要什么状态”,K8s 自动实现
适用场景 简单操作(查、临时创建、删除) 复杂操作(修改、批量管理、长期维护)
依赖载体 命令行参数 YAML/JSON 配置清单
典型命令 kubectl create/delete/get kubectl apply/edit/delete -f
优势 操作直观、无需写配置,适合新手 可版本控制、支持批量操作、修改追溯性强
劣势 修改复杂(需先删后改)、无配置记录 需熟悉 YAML 语法、初期学习成本高

二、基础信息查看命令

1. 集群与工具基础信息

操作目标 命令 说明
查看 kubectl 版本 kubectl version 显示客户端(kubectl)与服务端(APIServer)版本
查看资源对象简写 kubectl api-resources 快速了解资源别名(如 pod 简写 po
查看集群整体信息 kubectl cluster-info 显示 APIServer、etcd 等核心组件地址
配置 kubectl 自动补全 source <(kubectl completion bash) 需重启终端生效,支持命令 / 资源名补全
查看 Node 节点日志 journalctl -u kubelet -f 实时查看 kubelet 运行日志(定位节点故障)

2. 资源通用查询(kubectl get

通用语法:kubectl get <资源类型> [-o 格式] [-n 命名空间] [参数]

操作目标 命令 说明
查看 Master 组件状态 kubectl get cs 简写 cs = componentstatuses,查 etcd、scheduler 等
查看命名空间 kubectl get ns 简写 ns = namespace,显示所有命名空间
查看指定命名空间资源 kubectl get pods -n kube-public 仅显示 kube-public 命名空间的 Pod
查看所有命名空间资源 kubectl get pods -A -A = --all-namespaces,全局资源查询
显示资源标签 kubectl get pods --show-labels 查看 Pod 关联的所有标签(用于筛选)
按标签筛选资源 kubectl get pods -l app=nginx 仅显示标签 app=nginx 的 Pod
查看资源详细信息 kubectl get pods -o wide 显示 Pod IP、所在 Node、镜像版本等额外信息
查看资源 YAML 配置 kubectl get deployment nginx -o yaml 导出资源的完整配置(用于声明式管理)

3. 资源详情查看(kubectl describe

语法:kubectl describe <资源类型>/<资源名> [-n 命名空间]

# 查看 Deployment 详情(含事件、Pod 模板)
kubectl describe deployment nginx-wl -n kube-public

# 查看 Pod 详情(含容器日志、事件、挂载信息)
kubectl describe pod nginx-wl-d47f99cb6-hv6gz -n kube-public

三、项目生命周期操作(完整流程)

项目生命周期:创建 → 发布 → 更新 → 回滚 → 删除,以下以 Nginx 为例演示完整操作。

1. 1. 创建(陈述式 / 声明式)

陈述式创建(快速创建)
# 1. 创建命名空间(可选,默认用 default)
kubectl create ns app

# 2. 创建 Deployment(管理 Pod 副本)
# --image:指定容器镜像;--replicas:指定副本数;-n:指定命名空间
kubectl create deployment nginx --image=nginx:1.14 --replicas=3 -n app

# 3. 查看创建结果
kubectl get deployment,pods -n app
声明式创建(基于 YAML)
  1. 编写 YAML 文件(如 nginx-deploy.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14
        ports:
        - containerPort: 80
  1. 应用 YAML 创建资源:
kubectl apply -f nginx-deploy.yaml

2. 发布(暴露 Service 供访问)

发布核心是创建 Service,实现 Pod 访问入口(解决 Pod IP 动态变化问题)。

陈述式发布(kubectl expose
# 为 Deployment nginx 创建 Service
# --port:Service 集群内端口;--targetPort:Pod 容器端口;--type:Service 类型
kubectl expose deployment nginx \
  --port=80 \
  --targetPort=80 \
  --name=nginx-service \
  --type=NodePort \
  -n app

# 查看发布结果(获取 NodePort 端口,如 30080)
kubectl get svc -n app -o wide
Service 类型说明
类型 作用 访问方式 适用场景
ClusterIP 集群内访问(默认类型) ClusterIP:port 集群内部服务间通信
NodePort 外部访问(节点端口映射) NodeIP:NodePort 测试环境、小型服务
LoadBalancer 公有云负载均衡(依赖云厂商) 云厂商提供的公网 IP:port 生产环境外部访问
ExternalName 映射到外部 DNS(无 Pod 关联) 域名访问(如 mysql.xxx.com 访问集群外服务(如数据库)
验证发布结果
# 1. 查看 Service 后端关联的 Pod(Endpoints)
kubectl get endpoints nginx-service -n app

# 2. 外部访问测试(NodeIP:NodePort)
curl http://192.168.80.11:30080  # 192.168.80.11 为 Node 节点 IP

# 3. 查看负载均衡规则(Node 节点上执行)
yum install -y ipvsadm
ipvsadm -Ln  # 查看 Service 端口转发规则

3. 更新(升级应用版本)

陈述式更新(kubectl set
# 1. 查看当前版本(外部访问测试)
curl -I http://192.168.80.11:30080  # 响应头含 nginx/1.14.0

# 2. 更新 Nginx 版本到 1.15
kubectl set image deployment/nginx nginx=nginx:1.15 -n app

# 3. 实时监控更新过程(滚动更新:先增新 Pod,再删旧 Pod)
kubectl get pods -n app -w

# 4. 验证更新结果
curl -I http://192.168.80.11:30080  # 响应头变为 nginx/1.15.0
声明式更新(修改 YAML)
  1. 编辑 YAML 文件(修改 image: nginx:1.15);
  2. 应用更新:kubectl apply -f nginx-deploy.yaml -n app
  3. 在线编辑(无需 YAML 文件):kubectl edit deployment nginx -n app(实时生效,不修改本地文件)。

4. 回滚(版本回退)

# 1. 查看更新历史(每个版本有 revision 编号)
kubectl rollout history deployment/nginx -n app

# 2. 回滚到上一个版本
kubectl rollout undo deployment/nginx -n app

# 3. 回滚到指定版本(如 revision=1)
kubectl rollout undo deployment/nginx --to-revision=1 -n app

# 4. 查看回滚状态(确认回滚完成)
kubectl rollout status deployment/nginx -n app

# 5. 验证回滚结果
curl -I http://192.168.80.11:30080  # 恢复为 nginx/1.14.0

5. 删除(清理资源)

陈述式删除
# 1. 删除 Service
kubectl delete svc nginx-service -n app

# 2. 删除 Deployment(关联的 Pod 会自动删除)
kubectl delete deployment nginx -n app

# 3. 删除命名空间(会删除命名空间内所有资源)
kubectl delete ns app
声明式删除(基于 YAML)
# 删除 YAML 文件中定义的所有资源
kubectl delete -f nginx-deploy.yaml
强制删除(处理卡住的 Pod)

当 Pod 处于 Terminating 状态无法删除时:

kubectl delete pod <pod-name> -n app --force --grace-period=0
# --grace-period=0:立即终止,不等待容器优雅退出

四、主流发布策略(金丝雀 / 蓝绿 / 滚动)

K8s 支持多种发布策略,核心目标是降低更新风险,以下为三种常用策略的操作实现:

1. 滚动发布(Rolling Update)

  • 原理:逐步替换旧 Pod(先创建新 Pod → 确认健康 → 删除旧 Pod),默认无停机。
  • 适用场景:无状态服务(如 Web 应用),对可用性要求高。
  • 操作实现:Deployment 默认采用滚动发布,无需额外配置:
    # 更新时自动触发滚动发布
    kubectl set image deployment/nginx nginx=nginx:1.15 -n app
    # 实时查看滚动过程
    kubectl get pods -n app -w
    
  • 优势:无停机、资源占用低;劣势:新旧版本共存期可能有兼容性问题。

2. 金丝雀发布(Canary Release)

  • 原理:先发布少量新版本 Pod(如 1/10 副本),仅让部分用户访问,验证无问题后全量更新。
  • 适用场景:新版本风险高(如重大功能迭代),需灰度验证。
  • 操作实现
    # 1. 更新版本并暂停发布(仅创建少量新 Pod)
    kubectl set image deployment/nginx nginx=nginx:1.15 -n app && \
    kubectl rollout pause deployment/nginx -n app
    
    # 2. 查看状态(新 Pod 已创建,旧 Pod 未删除)
    kubectl get pods -n app -w
    # 此时仅少量用户访问新版本,验证功能/性能
    
    # 3. 验证无问题,继续发布(完成剩余 Pod 替换)
    kubectl rollout resume deployment/nginx -n app
    
    # 4. 若验证失败,立即回滚
    kubectl rollout undo deployment/nginx -n app
    
  • 优势:风险可控;劣势:需手动控制节奏,验证周期长。

3. 蓝绿发布(Blue-Green Deployment)

  • 原理:同时部署 “蓝环境”(旧版本)和 “绿环境”(新版本),验证通过后切换流量。
  • 适用场景:对稳定性要求极高(如金融服务),需秒级切换。
  • 操作实现(基于两个 Deployment + 一个 Service):
    1. 部署蓝环境(旧版本):
      kubectl create deployment nginx-blue --image=nginx:1.14 -n app
      kubectl expose deployment nginx-blue --port=80 --name=nginx-service --type=NodePort -n app
      
    2. 部署绿环境(新版本):
      kubectl create deployment nginx-green --image=nginx:1.15 -n app
      
    3. 验证绿环境(直接访问绿环境 Pod IP):
      GREEN_POD_IP=$(kubectl get pod -l app=nginx-green -n app -o jsonpath='{.items[0].status.podIP}')
      curl http://$GREEN_POD_IP
      
    4. 切换流量(修改 Service 标签选择器,指向绿环境):
      kubectl edit svc nginx-service -n app
      # 将 selector 从 app: nginx-blue 改为 app: nginx-green
      
    5. 回滚(若绿环境异常,将 Service 切回蓝环境):
      kubectl edit svc nginx-service -n app  # 改回 app: nginx-blue
      
  • 优势:切换无停机、回滚简单;劣势:需双倍资源,成本高。

Kubernetes YAML 配置与端口详解

1. 查看 Kubernetes 版本信息

查看 kubectl 与集群版本

kubectl version
  • 输出包含客户端(kubectl)和服务端(APIServer)版本信息
  • 客户端版本是本地 kubectl 工具版本
  • 服务端版本是 Kubernetes 集群的版本

查看 API 资源版本标签

kubectl api-versions
  • 显示集群支持的所有 API 版本
  • 生产环境建议使用稳定版本(如 apps/v1),避免使用带 beta 标记的测试版本
  • 不同资源类型可能对应不同的 API 版本(如 Deployment 使用 apps/v1,Service 使用 v1

2. YAML 格式语法规则

YAML 是 Kubernetes 主要的配置文件格式,语法规则如下:

  1. 大小写敏感
  2. 使用空格缩进表示层级关系(不支持 Tab 键)
  3. 缩进空格数不固定,但相同层级元素必须左对齐(通常使用 2 个空格)
  4. 特殊符号后需空格,如冒号 :、逗号 ,、短横线 - 等
  5. --- 表示文件开始,可用于分隔多个 YAML 文档
  6. # 表示注释,从 # 到行尾均为注释内容

示例:

---
# 这是一个注释
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  labels:
    app: demo
spec:
  containers:
  - name: web
    image: nginx

3. 资源清单(YAML)编写详解

资源清单是 Kubernetes 声明式管理的核心,以 Deployment 和 Service 为例说明:

示例 1:Deployment 资源清单

apiVersion: apps/v1          # API 版本(Deployment 常用 apps/v1)
kind: Deployment             # 资源类型
metadata:                    # 元数据
  name: nginx-deployment     # 资源名称(命名空间内唯一)
  labels:                    # 资源标签
    app: nginx
spec:                        # 规格配置
  replicas: 3                # 期望副本数
  selector:                  # 标签选择器(匹配 Pod 标签)
    matchLabels:
      app: nginx
  template:                  # Pod 模板
    metadata:
      labels:                # Pod 标签(需与 selector.matchLabels 一致)
        app: nginx
    spec:
      containers:            # 容器配置
      - name: nginx          # 容器名称
        image: nginx:1.15.4  # 容器镜像
        ports:
        - containerPort: 80  # 容器暴露端口

示例 2:Service 资源清单

apiVersion: v1               # API 版本(Service 常用 v1)
kind: Service                # 资源类型
metadata:
  name: nginx-service        # Service 名称
  labels:
    app: nginx
spec:
  type: NodePort             # Service 类型(NodePort 允许外部访问)
  ports:
  - port: 80                 # Service 集群内部端口
    targetPort: 80           # 映射到 Pod 的端口
  selector:                  # 关联 Pod 的标签选择器
    app: nginx

资源清单核心组成

  • apiVersion:指定 API 版本,不同资源对应不同版本
  • kind:指定资源类型(如 Pod、Deployment、Service 等)
  • metadata:资源元数据(名称、标签、命名空间等)
  • spec:资源规格(核心配置,不同资源有不同字段)

4. 端口概念详解(port/nodePort/targetPort/containerPort)

Kubernetes 中的端口各司其职,形成完整的端口映射链:

端口类型 作用说明 示例值
containerPort 容器内部监听的端口(容器内应用实际运行的端口) 80
targetPort Pod 上的端口,映射到容器的 containerPort(Service 转发的目标端口) 80
port Service 暴露的集群内部端口(集群内通过 ClusterIP:port 访问) 80
nodePort 节点上开放的端口(外部通过 NodeIP:nodePort 访问,范围 30000-32767) 30080

端口映射流程

外部访问 → NodeIP:nodePort → Service → ClusterIP:port → 转发到 → PodIP:targetPort → 容器 → containerPort

5. 快速编写 YAML 文件的方法

方法 1:使用 --dry-run 生成模板

# 生成 Pod 模板
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-pod.yaml

# 生成 Deployment 模板
kubectl create deployment nginx-deploy --image=nginx --replicas=3 --dry-run=client -o yaml > nginx-deploy.yaml

方法 2:导出已有资源的配置

# 导出现有 Service 的配置
kubectl get svc nginx-service -o yaml > my-svc.yaml

# 导出后可修改该文件,用于创建新资源

方法 3:使用 kubectl edit 复制配置

# 编辑现有资源,复制配置后粘贴到新文件
kubectl edit deployment nginx-deployment

方法 4:查询字段帮助

# 查看资源字段说明(可逐层查询)
kubectl explain pods.spec.containers        # 查看 Pod 容器配置字段
kubectl explain deployments.spec.replicas   # 查看 Deployment 副本数字段

简化模板技巧

生成模板后,可删除不必要的字段:

  • creationTimestamp: null
  • status: {}
  • 空的 resources: {}

通过以上方法,可快速编写和理解 Kubernetes YAML 配置,掌握资源声明式管理的核心技能。实际使用中,建议结合官方示例和 kubectl explain 命令,逐步熟悉各类资源的配置规范。

在 Kubernetes 中,kind 字段用于指定资源类型,Kubernetes 提供了丰富的资源类型,可大致分为核心资源工作负载资源服务发现与负载均衡资源配置与存储资源集群资源等类别。以下是常见的资源类型分类及说明:

kind的资源类型有:

一、核心资源(Core Resources)

属于 v1 API 组,是 Kubernetes 最基础的资源:

  • Pod:最小部署单元,包含一个或多个容器。
  • Service:定义 Pod 的访问方式,提供固定访问点(如 ClusterIPNodePort 等)。
  • Namespace:用于资源隔离,实现多环境(如开发、测试)资源分离。
  • Node:表示集群中的节点(物理机或虚拟机)。
  • ConfigMap:存储非敏感配置数据,供 Pod 挂载使用。
  • Secret:存储敏感信息(如密码、Token),以加密方式存储。
  • PersistentVolume(PV):集群级别的持久化存储资源。
  • PersistentVolumeClaim(PVC):用户对 PV 的请求(声明需要的存储资源)。
  • ServiceAccount:为 Pod 提供访问集群 API 的身份凭证。
二、工作负载资源(Workload Resources)

用于管理 Pod 的生命周期和运行方式,主要属于 apps/v1 API 组:

  • Deployment:最常用的工作负载,管理无状态应用,支持滚动更新、回滚。
  • StatefulSet:管理有状态应用(如数据库),确保 Pod 名称、网络标识稳定。
  • DaemonSet:在集群所有节点(或匹配标签的节点)上运行一个 Pod 副本(如日志收集、监控代理)。
  • Job:管理一次性任务(如批处理),任务完成后 Pod 终止。
  • CronJob:定时执行的 Job(如定时备份、定时任务)。
  • ReplicaSet:维护指定数量的 Pod 副本(通常由 Deployment 自动管理,无需手动创建)。
三、服务发现与负载均衡(Service Discovery & Load Balancing)
  • Ingress:管理外部访问集群内服务的规则(如域名路由、SSL 终结),属于 networking.k8s.io/v1
  • EndpointSlice:跟踪 Service 关联的 Pod 端点信息(IP + 端口),优化服务发现性能。
  • IngressClass:定义 Ingress 控制器的配置(如不同环境使用不同控制器)。
四、配置与存储(Configuration & Storage)
  • ConfigMap / Secret:(见核心资源,用于配置管理)。
  • PersistentVolume(PV) / PersistentVolumeClaim(PVC):(见核心资源,用于持久化存储)。
  • StorageClass:动态创建 PV 的模板,定义存储类型(如 SSD、HDD)和供应方式。
五、集群资源(Cluster Resources)
  • Namespace:(见核心资源,用于集群内资源隔离)。
  • Node:(见核心资源,集群节点)。
  • CustomResourceDefinition(CRD):允许用户定义自定义资源(扩展 Kubernetes API)。
  • ClusterRole / ClusterRoleBinding:集群级别的 RBAC 权限配置(跨命名空间)。
  • Role / RoleBinding:命名空间内的 RBAC 权限配置。
六、其他常用资源
  • LimitRange:限制命名空间内资源的默认请求和限制(如 CPU、内存)。
  • ResourceQuota:限制命名空间内资源的总使用量(如最大 Pod 数量、总内存)。
  • NetworkPolicy:定义 Pod 间的网络访问规则(允许 / 禁止特定流量)。
  • PodDisruptionBudget(PDB):确保集群扰动(如节点维护)时,最少可用的 Pod 数量。

查看所有资源类型

通过以下命令可查看集群支持的所有资源类型及对应 kind

kubectl api-resources

输出结果包含资源名称、简称、API 组、是否命名空间隔离等信息,例如:

NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
pods                              po           v1                                     true         Pod
services                          svc          v1                                     true         Service
deployments                       deploy       apps/v1                                true         Deployment
statefulsets                      sts          apps/v1                                true         StatefulSet
ingresses                         ing          networking.k8s.io/v1                  true         Ingress
configmaps                        cm           v1                                     true         ConfigMap
secrets                           sec          v1                                     true         Secret
nodes                             no           v1                                     false        Node
namespaces                        ns           v1                                     false        Namespace

不同 Kubernetes 版本支持的资源类型可能略有差异,核心资源保持稳定,扩展资源会随版本迭代更新。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐