程序员必备的十大技能(进阶版)之云原生与容器化(四)

简介: 教程来源 https://xcfsr.cn/ Kubernetes配置与密钥管理核心实践:ConfigMap用于解耦非敏感配置(支持字面值、文件、目录创建及环境变量/卷挂载注入);Secret专存敏感数据(Base64编码,支持Opaque/TLS等类型),保障密码、证书安全。

五、配置与密钥管理

5.1 ConfigMap —— 非敏感配置

# 从字面值创建ConfigMap
kubectl create configmap app-config \
  --from-literal=db.host=mysql-service \
  --from-literal=db.port=3306

# 从文件创建
kubectl create configmap app-config --from-file=./config/application.yml

# 从目录创建
kubectl create configmap app-config --from-file=./config/

# ConfigMap YAML示例
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  application.yml: |
    server:
      port: 8080
    spring:
      datasource:
        url: jdbc:mysql://mysql-service:3306/app
  log.level: INFO
---
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
  - name: myapp
    image: myapp:v1
    env:
    # 1. 环境变量方式
    - name: DB_HOST
      valueFrom:
        configMapKeyRef:
          name: app-config
          key: db.host
    # 2. 全部环境变量注入
    envFrom:
    - configMapRef:
        name: app-config
    # 3. Volume挂载方式
    volumeMounts:
    - name: config
      mountPath: /app/config
  volumes:
  - name: config
    configMap:
      name: app-config

5.2 Secret —— 敏感信息

# 创建Secret(数据Base64编码)
kubectl create secret generic db-secret \
  --from-literal=username=admin \
  --from-literal=password=SecurePass123

# 从文件创建
kubectl create secret tls myapp-tls \
  --cert=path/to/cert.pem \
  --key=path/to/key.pem

# 查看Secret内容(需base64解码)
kubectl get secret db-secret -o yaml
echo "YWRtaW4=" | base64 -d  # 输出: admin
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque  # Opaque/kubernetes.io/tls/docker-registry
data:
  username: YWRtaW4=        # base64('admin')
  password: U2VjdXJlUGFzcw==  # base64('SecurePass123')
---
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
  - name: myapp
    image: myapp:v1
    env:
    - name: DB_USER
      valueFrom:
        secretKeyRef:
          name: db-secret
          key: username
    - name: DB_PASS
      valueFrom:
        secretKeyRef:
          name: db-secret
          key: password

六、可观测性建设

6.1 监控体系(Prometheus + Grafana)

# ServiceMonitor定义(Prometheus Operator)
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: myapp-monitor
spec:
  selector:
    matchLabels:
      app: myapp
  endpoints:
  - port: metrics
    path: /actuator/prometheus
    interval: 30s
    scrapeTimeout: 10s

6.2 日志收集(EFK/Loki)

# Loki日志收集配置(DaemonSet方式)
apiVersion: v1
kind: ConfigMap
metadata:
  name: promtail-config
data:
  promtail.yaml: |
    scrape_configs:
    - job_name: kubernetes-pods
      kubernetes_sd_configs:
      - role: pod
      pipeline_stages:
      - docker: {}
      - cri: {}
      - match:
          selector: '{namespace="production"}'
          stages:
          - regex:
              expression: '.*'
      relabel_configs:
      - source_labels:
        - __meta_kubernetes_pod_label_app
        target_label: app
      - source_labels:
        - __meta_kubernetes_pod_namespace
        target_label: namespace
      - source_labels:
        - __meta_kubernetes_pod_node_name
        target_label: node

6.3 分布式追踪(Jaeger集成)

// 应用代码中添加追踪
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.trace.Span;

@RestController
public class OrderController {

    @Autowired
    private Tracer tracer;

    @GetMapping("/api/order/{id}")
    public Order getOrder(@PathVariable String id) {
        Span span = tracer.spanBuilder("getOrder")
            .setAttribute("order.id", id)
            .startSpan();

        try (Scope scope = span.makeCurrent()) {
            // 业务逻辑
            Order order = orderService.findById(id);
            span.setStatus(StatusCode.OK);
            return order;
        } catch (Exception e) {
            span.setStatus(StatusCode.ERROR, e.getMessage());
            span.recordException(e);
            throw e;
        } finally {
            span.end();
        }
    }
}

6.4 常用kubectl命令速查

# 基础操作
kubectl get pods -A                              # 查看所有命名空间的Pod
kubectl describe pod <pod-name>                  # 查看Pod详细信息
kubectl logs <pod-name> -c <container> -f        # 查看日志并跟随
kubectl exec -it <pod-name> -- /bin/sh           # 进入容器终端
kubectl port-forward pod/<pod-name> 8080:80      # 端口转发本地访问

# 调试技巧
kubectl run -it --rm debug --image=busybox -- /bin/sh  # 临时调试Pod
kubectl get events --sort-by='.lastTimestamp'          # 查看集群事件
kubectl top pods                                        # 查看Pod资源使用
kubectl api-resources                                   # 列出所有API资源

# 资源操作
kubectl apply -f manifest.yaml                    # 应用配置
kubectl delete -f manifest.yaml                   # 删除资源
kubectl edit deployment/<name>                    # 在线编辑
kubectl set image deployment/<name> myapp=v2      # 更新镜像

# 故障排查
kubectl cordon <node>                             # 标记节点不可调度
kubectl drain <node> --ignore-daemonsets          # 排空节点Pod
kubectl uncordon <node>                           # 恢复节点调度

来源:
https://htnus.cn/

相关文章
|
8天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
2970 7
|
10天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3071 20
|
23天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23567 15
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
1956 3
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
10天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
2464 3
|
8天前
|
人工智能 安全 开发工具
Claude Code 官方工作原理与使用指南
Claude Code 不是传统代码补全工具,而是 Anthropic 推出的终端 AI 代理,具备代理循环、双驱动架构(模型+工具)、全局项目感知、6 种权限模式等核心能力,本文基于官方文档系统解析其工作原理与高效使用技巧。
1342 0
|
8天前
|
存储 Linux iOS开发
【2026最新】MarkText中文版Markdown编辑器使用图解(附安装包)
MarkText是一款免费开源、跨平台的Markdown编辑器,主打所见即所得实时预览,支持Windows/macOS/Linux。内置数学公式、流程图、代码高亮、多主题及PDF/HTML导出,是Typora的轻量免费替代首选。(239字)