当前位置: 首页 > ops >正文

k8s容器入门(9)Kubernetes yaml常用配置

一、YAML 基础格式

apiVersion: apps/v1     # API 版本(核心资源多为 v1)
kind: Deployment         # 资源类型(Pod/Service/Deployment 等)
metadata:name: my-app           # 资源名称namespace: default    # 命名空间(可选,默认 default)labels:               # 标签(用于筛选资源)app: nginx
spec:                    # 规格定义(具体配置)replicas: 3           # 副本数(仅 Deployment/StatefulSet)selector:             # 标签选择器(匹配 Pod 标签)matchLabels:app: nginxtemplate:              # Pod 模板metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.21ports:- containerPort: 80

二、核心资源 YAML 配置

1. Pod
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: main-containerimage: nginx:latestports:- containerPort: 80env:- name: ENV_NAMEvalue: "test"volumeMounts:- name: data-volumemountPath: /datavolumes:- name: data-volumeemptyDir: {}        # 临时卷(生命周期与 Pod 同步)
2. Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploy
spec:replicas: 3strategy:type: RollingUpdate   # 滚动更新策略rollingUpdate:maxSurge: 1         # 最多新增副本数maxUnavailable: 1 # 允许不可用的副本数template:spec:containers:- name: nginximage: nginx:1.21resources:limits:memory: "512Mi"cpu: "500m"  # m 表示毫核(1 core = 1000m)requests:memory: "128Mi"cpu: "100m"
3. Service
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:type: ClusterIP       # 服务类型(ClusterIP/NodePort/LoadBalancer)selector:app: nginx           # 匹配 Pod 的标签ports:- protocol: TCPport: 80           # Service 暴露的端口targetPort: 80     # 容器监听的端口nodePort: 30000    # NodePort 类型时指定(需在 30000-32767 之间)
4. ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:name: app-config
data:config.properties: |key1=value1key2=value2
5. Secret
apiVersion: v1
kind: Secret
metadata:name: db-secret
type: Opaque
data:password: bXktc2VjcmV0    # Base64 编码后的值(可用 echo -n "my-secret" | base64 生成)
6. PersistentVolumeClaim (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: app-pvc
spec:storageClassName: standardaccessModes:- ReadWriteOnce      # 访问模式(RWO/RWX)resources:requests:storage: 10Gi      # 存储容量需求

三、常见配置字段详解

1. 镜像与拉取策略
image: nginx:1.21
imagePullPolicy: IfNotPresent  # Always/Never/IfNotPresent
2. 环境变量
env:- name: DEBUGvalue: "true"- name: LOG_LEVELvalueFrom:configMapKeyRef:name: app-configkey: logLevel
3. 健康检查(探针)
livenessProbe:          # 存活性探针httpGet:path: /healthport: 8080initialDelaySeconds: 10  # 初次检查延迟时间periodSeconds: 5       # 检查间隔readinessProbe:         # 就绪性探针tcpSocket:port: 3000timeoutSeconds: 3
4. 资源限制(CPU/内存)
resources:limits:memory: "1Gi"cpu: "1"requests:memory: "256Mi"cpu: "0.2"
5. 挂载存储卷
volumes:- name: data-volumepersistentVolumeClaim:claimName: app-pvc
volumeMounts:- name: data-volumemountPath: /var/data
6. 标签与选择器
# Pod 标签
metadata:labels:app: nginxtier: backend# Deployment 选择器
selector:matchLabels:app: nginx
7. 注解(Annotations)
annotations:prometheus.io/scrape: "true"  # 供监控系统识别kubernetes.io/ingress.class: nginx  # Ingress 使用

四、多容器 Pod 配置

spec:containers:- name: appimage: my-app:1.0- name: sidecarimage: envoy:latestports:- containerPort: 8000

五、Ingress 示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: my-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: example.comhttp:paths:- path: /apppathType: Prefixbackend:service:name: app-serviceport:number: 8080

六、常用 kubectl 操作

# 创建资源
kubectl apply -f deployment.yaml# 查看资源状态
kubectl get pods,deployments,services# 删除资源
kubectl delete -f deployment.yaml# 强制替换资源
kubectl replace --force -f deployment.yaml# 查看事件日志
kubectl describe pod <pod-name>

七、YAML 调试技巧

  1. 验证语法

    kube-linter lint deployment.yaml  # 检查潜在问题
    
  2. 查看 API 字段文档

    kubectl explain deployment.spec.template.spec.containers.resources
    
  3. 本地渲染模板

    helm template my-release ./chart --output-dir ./rendered
    
  4. Diff 实际差异

    kubectl diff -f deployment.yaml  # 对比当前集群与 YAML 的差异
    

八、最佳实践

  • 命名空间隔离namespace: staging 避免不同环境资源冲突。
  • 标签规范:如 app.kubernetes.io/name: my-app 提升可维护性。
  • ConfigMap/Secret 解耦:将配置与镜像分离,提升复用性。
  • 最小权限原则:通过 securityContext 限制容器权限(如非 root 用户运行)。
http://www.xdnf.cn/news/10002.html

相关文章:

  • DeepSeek-R1-0528-Qwen3-8B 本地ollama离线运行使用和llamafactory lora微调
  • 从零打造算法题刷题助手:Agent搭建保姆级攻略
  • Shopify 主题开发:页脚信息架构搭建技巧
  • 什么是内网ip证书
  • 网络安全基础--第九天
  • 核心机制:确认应答和超时重传
  • 5G 核心网中 AMF 的 NAS SM 信令路由详解
  • 动态报表筛选多项时的优化处理
  • 大模型-attention汇总解析之-MQA
  • (11)-java+ selenium->元素定位之By_tag_name
  • 编译器优化和实例
  • Haproxy搭建Web集群
  • 常见跨域问题解决
  • Flask项目进管理后台之后自动跳回登录页面,后台接口报错422,权限问题
  • Docker Compose使用自定义用户名密码启动Redis
  • 通过实时动作捕捉加速人形机器人训练
  • 力扣HOT100之动态规划:198. 打家劫舍
  • 循环神经网络(RNN):为什么它能处理时序数据?它真的能减轻过拟合吗?
  • Go语言defer关键字:延迟执行的精妙设计
  • 通用的防御框架,用于抵御(多模态)大型语言模型的越狱攻击
  • MQTT协议,EMQX部署,MQTTX安装学习
  • golang连接sm3认证加密(app)
  • BioID技术在宿主-病原体相互作用领域的应用
  • 《操作系统真相还原》——大战MBR
  • 数据结构——图
  • 大语言模型 24 - MCP 自动操作 提高模型上下文能力 Cursor + Sequential Thinking Server Memory
  • 云游戏混合架构
  • 【机械视觉】Halcon—【六、交集并集差集和仿射变换】
  • AI Agent开发入门笔记(1)
  • C++ 实现 std::move_only_function