K8s工作流程与YAML实用指南

K8s 工作流程

K8s 采用声明式管理(用户说"要什么",K8s 负责"怎么做")方式,通过 YAML 文件描述期望的状态,K8s控制平面会自动确保实际状态与期望状态一致。

核心工作流程如下:
用户提交 YAML → API Server → etcd 存储 → 控制器监听 → 调度器分配 → Kubelet 执行 → 运行状态监控

  • 用户定义期望状态:通过 YAML 文件定义工作负载
  • API Server 接收:验证并存储到 etcd
  • 控制器工作:各种控制器监听资源变化
  • 调度决策:Scheduler 决定 Pod 运行在哪个节点
  • 节点执行:Kubelet 拉取镜像并启动容器
  • 持续监控:控制器持续确保实际状态符合期望

Kubernetes Yaml标准结构

实际上用户只用考虑怎么编写yaml文件布置任务。

YAML 基础语法结构
yaml 复制代码
#注释以 # 开头
key: value                    # 键值对
string_value: "Hello World"   # 字符串
number_value: 42              # 数字
boolean_value: true           # 布尔值
null_value: null              # 空值

#数据结构类型
#对象/映射(Object/Mapping)
person:
  name: "张三"
  age: 30
  city: "北京"
#数组/列表(Array/List)
fruits:
  - apple
  - banana
  - orange
#或者内联格式
fruits: [apple, banana, orange]

#嵌套结构
company:
  name: "科技公司"
  employees:
    - name: "李四"
      position: "工程师"
    - name: "王五"
      position: "设计师"
  locations:
    - "北京"
    - "上海"
Kubernetes YAML 文件标准结构

四大核心部分

yaml 复制代码
#1. API 版本
apiVersion: apps/v1
#e.g.
apiVersion: apps/v1        # Deployment, ReplicaSet, DaemonSet
apiVersion: v1             # Pod, Service, ConfigMap
apiVersion: batch/v1       # Job
apiVersion: batch/v1beta1  # CronJob

#2. 资源类型
kind: Deployment
#e.g.
kind: Deployment    # 部署
kind: Service       # 服务
kind: ConfigMap     # 配置映射
kind: Secret        # 密钥
kind: Pod           # Pod
#工作负载类型:
#Deployment:长期运行的无状态应用
#StatefulSet:有状态应用(如数据库)
#DaemonSet:每个节点运行一个实例(如日志收集)
#Job/CronJob:一次性任务或定时任务

#3. 元数据
metadata:
  name: my-app
  namespace: default
  labels:
    app: my-app
    version: v1.0
#e.g. 
metadata:
  name: my-application           # 必需:资源名称
  namespace: production          # 可选:命名空间
  labels:                        # 可选:标签
    app: web-server
    environment: production
    version: "1.0"
  annotations:                   # 可选:注解
    description: "主要的web服务器"
    created-by: "开发团队"
    
#4. 规格定义
spec:
	  # 具体配置内容
#e.g.
spec:
  replicas: 3                    # 副本数量
  selector:                      # 选择器
    matchLabels:
      app: web-server
  template:                      # Pod 模板
    metadata:
      labels:
        app: web-server
    spec:
      containers:                # 容器定义
      - name: web-container
        image: nginx:1.20
        ports:
        - containerPort: 80
        env:                     # 环境变量
        - name: ENV_VAR
          value: "production"
        resources:               # 资源限制
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
完整的 Deployment 示例
yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
  labels:
    app: nginx
    environment: production
  annotations:
    description: "Nginx web server deployment"
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.20
        ports:
        - containerPort: 80
          name: http
        env:
        - name: NGINX_PORT
          value: "80"
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
      restartPolicy: Always

实际工作示例

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3          # 安排:运行3个副本
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: nginx:1.20  # 安排:使用nginx镜像
        ports:
        - containerPort: 80
Kubernetes 收到这个"工作安排"后会:

工作内容是创建 3 个 nginx Pod,如果某个 Pod 失败,自动重新创建,确保始终有 3 个健康的 Pod 运行。

相关推荐
泯泷2 小时前
编写 Dockerfile:从入门到精通
后端·docker·容器
苏近之4 小时前
微服务版Hello World之k8s集群部署
运维·微服务·容器
阿里云云原生5 小时前
阿里云事件总线 EventBridge 正式商业化,构建智能化时代的企业级云上事件枢纽
云原生
阿里云云原生5 小时前
StoreView SQL,让数据分析不受地域限制
云原生
HalukiSan6 小时前
Docker_Desktop开启k8s
docker·容器
在未来等你6 小时前
互联网大厂Java求职面试:云原生架构下的微服务网关与可观测性设计
java·spring cloud·微服务·云原生·面试·分布式系统
❀͜͡傀儡师6 小时前
完成一个可交互的k8s管理平台的页面开发
容器·kubernetes·交互
not coder7 小时前
验证负载均衡与弹性伸缩
运维·jmeter·kubernetes·负载均衡
毒爪的小新8 小时前
Docker基础命令
linux·运维·docker·容器·centos
阿里云云原生9 小时前
【发布实录】云原生+AI,助力企业全球化业务创新
人工智能·云原生·可观测·通义灵码