Skip to content

2)Kubernetes

🐣 第 1 题(基础架构)

Q1:简要说明 Kubernetes 的核心架构及其工作机制?

📝 标准答案:

Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩缩容和管理容器化应用。

核心组件:

组件作用说明
Master 节点控制中心,包含 API Server、Controller、Scheduler 等
Node 节点实际运行容器的主机,包含 kubelet、kube-proxy
PodK8s 中最小调度单元,封装一个或多个容器
Service提供服务发现与负载均衡
etcd分布式键值数据库,保存所有配置与状态

工作机制:

  • 用户通过 kubectl 或 CI 工具向 API Server 提交部署请求;
  • Scheduler 根据资源和策略安排 Pod 到合适的 Node;
  • kubelet 接收指令并在 Node 上启动容器;
  • Service 保证跨 Pod 通信与负载均衡;
  • 整个状态信息存储在 etcd 中,便于高可用和恢复。

🐥 第 2 题(Pod 与调度)

Q2:Pod 是什么?如何保证 Pod 的高可用与自动重启?

📝 标准答案:

Pod 是 Kubernetes 的最小调度和运行单元,封装一个或多个紧密相关的容器,它们共享网络和存储资源。

特点:

  • 同一 Pod 内容器共享 IP、端口空间、Volume;
  • 一般每个 Pod 运行一个主容器(主进程);

高可用机制:

  1. 控制器保障副本数
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: nginx
  1. 自动重启策略: 默认 RestartPolicyAlways,失败自动重启;
  2. Pod 分布式部署: 结合 Node AffinityPod Anti-Affinity
  3. 健康检查: readinessProbelivenessProbe

🛜 第 3 题(服务发现与负载均衡)

Q3:Kubernetes 如何实现服务发现?如何对外暴露服务?

📝 标准答案:

Kubernetes 提供三种主要方式暴露服务:

类型描述应用场景
ClusterIP默认类型,仅在集群内部访问内部服务间调用,如数据库
NodePort映射端口到宿主机,外部通过 <NodeIP>:Port 访问开发调试、简单对外服务
LoadBalancer通过云服务商创建外部 LB,暴露服务云环境中的正式对外服务

服务发现机制:

  1. 通过 Service 名称解析 DNS:

    Kubernetes 集成 CoreDNS,自动生成服务 DNS,如:

    bash
    curl http://my-service.my-namespace.svc.cluster.local
  2. kube-proxy:基于 iptablesipvs 转发流量至后端 Pod;

🧾 第 4 题(配置、存储与持久化)

Q4:如何在 Kubernetes 中挂载配置与数据卷?区别 ConfigMap、Secret、PVC?

📝 标准答案:

Kubernetes 提供灵活的配置注入与数据挂载机制:

类型用途说明
ConfigMap存放配置文本(非敏感)如环境变量、YAML 配置
Secret存放敏感数据(Base64 编码)如密码、token、证书
PVC(持久卷声明)将存储资源绑定到 Pod 中需要持久存储的数据,如数据库、上传文件目录

挂载方式示例:

yaml
volumes:
  - name: config-vol
    configMap:
      name: my-config
containers:
  - name: app
    volumeMounts:
      - name: config-vol
        mountPath: /etc/config

PVC 示例:

yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 1Gi

🚀 第 5 题(CI/CD 实践)

Q5:如何在 CI/CD 中集成 Kubernetes,实现自动部署?

📝 标准答案:

可通过 Jenkins、GitLab CI、GitHub Actions 等与 Kubernetes API 集成,实现自动部署。

基本流程:

  1. 构建并推送镜像到 Registry;
  2. 替换 Deployment 中的镜像 tag;
  3. 使用 kubectl apply 实现更新;
  4. 可加蓝绿部署、滚动发布、自动回滚等机制;

GitHub Actions 示例:

yaml
jobs:
  deploy:
    steps:
      - uses: actions/checkout@v2
      - name: Set Kubeconfig
        run: echo "$KUBE_CONFIG" > ~/.kube/config
      - name: Deploy to K8s
        run: |
          kubectl set image deployment/web-deploy web=nginx:1.23
          kubectl rollout status deployment/web-deploy

生产建议:

  • 使用 Helm 管理复杂部署;
  • 使用 Kustomize 区分环境;
  • 加入 CanaryArgo Rollouts 实现灰度发布;