2)Kubernetes
🐣 第 1 题(基础架构)
Q1:简要说明 Kubernetes 的核心架构及其工作机制?
📝 标准答案:
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩缩容和管理容器化应用。
核心组件:
组件 | 作用说明 |
---|---|
Master 节点 | 控制中心,包含 API Server、Controller、Scheduler 等 |
Node 节点 | 实际运行容器的主机,包含 kubelet、kube-proxy |
Pod | K8s 中最小调度单元,封装一个或多个容器 |
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 运行一个主容器(主进程);
高可用机制:
- 控制器保障副本数:
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
- 自动重启策略: 默认
RestartPolicy
为Always
,失败自动重启; - Pod 分布式部署: 结合 Node Affinity 或 Pod Anti-Affinity;
- 健康检查:
readinessProbe
与livenessProbe
;
🛜 第 3 题(服务发现与负载均衡)
Q3:Kubernetes 如何实现服务发现?如何对外暴露服务?
📝 标准答案:
Kubernetes 提供三种主要方式暴露服务:
类型 | 描述 | 应用场景 |
---|---|---|
ClusterIP | 默认类型,仅在集群内部访问 | 内部服务间调用,如数据库 |
NodePort | 映射端口到宿主机,外部通过 <NodeIP>:Port 访问 | 开发调试、简单对外服务 |
LoadBalancer | 通过云服务商创建外部 LB,暴露服务 | 云环境中的正式对外服务 |
服务发现机制:
通过 Service 名称解析 DNS:
Kubernetes 集成
CoreDNS
,自动生成服务 DNS,如:bashcurl http://my-service.my-namespace.svc.cluster.local
kube-proxy:基于
iptables
或ipvs
转发流量至后端 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 集成,实现自动部署。
基本流程:
- 构建并推送镜像到 Registry;
- 替换
Deployment
中的镜像 tag; - 使用
kubectl apply
实现更新; - 可加蓝绿部署、滚动发布、自动回滚等机制;
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
区分环境; - 加入
Canary
或Argo Rollouts
实现灰度发布;