第二章 Docker及Kubernetes基础 重难点详解
一、Docker基础核心知识点
1. Docker架构原理
容器运行时 cgroups namespaces 资源限制 容器实例 隔离环境 宿主机 Docker Daemon 镜像仓库 网络/存储
- 关键点 :
- 镜像分层存储:镜像由只读层叠加,容器运行时添加可写层
- 联合文件系统:AUFS/Overlay2实现文件系统分层
- 资源隔离:通过cgroups限制CPU/内存,namespaces隔离进程/网络
2. Dockerfile最佳实践
dockerfile
# 多阶段构建示例(减少镜像体积)
FROM maven:3.6-jdk-11 AS builder
WORKDIR /app
COPY . .
RUN mvn package -DskipTests
FROM openjdk:11-jre-slim
COPY --from=builder /app/target/*.jar /app.jar
CMD ["java", "-jar", "/app.jar"]
- 重点技巧 :
- 使用
.dockerignore
排除无关文件 - 合并RUN指令减少镜像层数
- 固定基础镜像版本(避免使用latest)
- 使用
3. 容器生命周期管理
常用命令流程图
docker pull docker run docker exec docker logs docker stop docker rm
二、Kubernetes核心架构
1. Master节点组件交互
User API Server etcd Controller Manager Scheduler Node kubectl命令 存储集群状态 触发控制循环 调度新Pod 绑定节点 通过kubelet管理Pod User API Server etcd Controller Manager Scheduler Node
- 核心组件 :
- API Server:唯一与etcd通信的组件
- Controller Manager:节点/副本/端点等控制器
- Scheduler:根据资源请求调度Pod
2. Node节点关键服务
CRI CNI CSI iptables/IPVS kubelet Docker 网络插件 存储插件 Kube-Proxy Service流量转发
三、核心资源对象详解
1. Pod生命周期
调度成功 容器退出 容器异常 调度失败 Pending Running Succeeded Failed Unknown
2. Deployment滚动更新机制
Deployment ReplicaSet v1 ReplicaSet v2 Pod1-v1 Pod2-v1 Pod1-v2 Pod2-v2
- 更新策略 :
- RollingUpdate(默认):逐步替换旧Pod
- Recreate:先删除全部旧Pod再创建新
四、关键概念对比分析
1. Service类型对比
类型 | 访问方式 | 典型场景 |
---|---|---|
ClusterIP | 内部集群IP | 微服务间通信 |
NodePort | 节点IP+端口 | 开发测试环境 |
LoadBalancer | 云厂商LB | 生产环境公网暴露 |
ExternalName | CNAME记录 | 集成外部服务 |
2. ConfigMap vs Secret

五、常见问题排查思路
1. Pod启动故障排查流程
ImagePullBackOff CrashLoopBackOff Pending ContainerCreating Pod状态异常 查看Events 检查镜像名称/权限 查看容器日志 检查资源配额 检查存储卷挂载
2. Service无法访问检查步骤
- 确认Endpoints是否正常生成
- 检查kube-proxy是否生成iptables规则
- 验证CoreDNS解析是否正常
- 测试直接访问Pod IP+Port
- 检查网络策略(NetworkPolicy)
通过结合架构图、流程图和对比表格,可以帮助深入理解Kubernetes的核心机制。建议在学习时:
- 使用
kubectl explain
命令查看字段定义 - 通过
--v=9
参数查看API调用详情 - 定期使用kube-bench进行安全检查
- 使用k9s等可视化工具观察资源状态
Docker及Kubernetes基础多选题
-
关于Dockerfile指令,以下哪些描述是正确的?
A. COPY指令可以复制宿主机目录到镜像中
B. ENV指令设置的变量只能在构建阶段使用
C. EXPOSE指令会实际发布容器的端口
D. RUN指令会在构建镜像时执行命令
E. CMD指令可以被docker run的参数覆盖
-
Kubernetes中关于Pod的描述,哪些是正确的?
A. Pod是Kubernetes中最小的部署单元
B. 一个Pod可以包含多个容器
C. Pod中的容器共享网络命名空间
D. Pod一旦创建就无法被更新
E. Pod的IP地址在生命周期内始终不变
-
关于Kubernetes的Label和Selector,正确的描述是?
A. Label用于资源分类
B. Selector用于过滤资源
C. 同一个资源只能有一个Label
D. MatchLabels要求所有标签精确匹配
E. Label的键最长不能超过32字符
-
哪些是Kubernetes支持的Service类型?
A. ClusterIP
B. NodePort
C. ExternalName
D. HostNetwork
E. LoadBalancer
-
关于PersistentVolume(PV)的描述,正确的有:
A. PV是集群范围的资源
B. PV必须手动创建
C. StorageClass可以动态创建PV
D. PV只能通过NFS实现
E. PVC是命名空间级别的资源
-
Kubernetes中关于RBAC的组成,正确的选项是?
A. Role定义命名空间权限
B. ClusterRoleBinding用于集群范围授权
C. ServiceAccount需要绑定到Pod
D. RoleBinding可以跨命名空间授权
E. Secret用于存储认证信息
-
哪些是HPA(Horizontal Pod Autoscaler)支持的指标类型?
A. CPU使用率
B. 内存使用量
C. 网络吞吐量
D. 自定义指标
E. 磁盘IOPS
-
关于Kubernetes Ingress控制器的正确描述是:
A. Ingress需要配合Service使用
B. Nginx Ingress支持金丝雀发布
C. Ingress可以替代Service
D. 默认需要安装第三方控制器
E. Ingress只能处理HTTP流量
-
哪些是StatefulSet的特性?
A. 稳定的网络标识
B. 自动滚动更新
C. 无序的部署顺序
D. 动态存储卷声明
E. 适用于无状态应用
-
关于CronJob的描述,正确的有:
A. 使用.spec.schedule定义时间
B. 每个Job必须成功才会创建下一个
C. concurrencyPolicy控制并发
D. 只能运行一次性的任务
E. 需要手动清理已完成的任务
答案与解析
-
ADE
解析:B错误,ENV设置的变量在容器运行时可用;C错误,EXPOSE只是声明端口,实际发布需要-p参数;A正确,COPY复制文件;D正确,RUN在构建时执行;E正确,CMD可被覆盖。
-
BC
解析:A错误,最小部署单元是ReplicaSet;D错误,Pod可以通过替换更新;E错误,Pod重启可能改变IP。
-
ABD
解析:C错误,资源可以有多个Label;E错误,Label键最长63字符。
-
ABCE
解析:D错误,HostNetwork是Pod网络模式,非Service类型。
-
ACE
解析:B错误,StorageClass可以自动创建PV;D错误,PV支持多种存储类型。
-
ABCE
解析:D错误,RoleBinding只在当前命名空间生效。
-
ABD
解析:HPA默认支持CPU/内存,自定义指标需要额外配置。
-
ABD
解析:C错误,Ingress需要Service;E错误,支持TCP/UDP。
-
ABD
解析:C错误,StatefulSet按顺序部署;E错误,适用于有状态应用。
-
AC
解析:B错误,失败也会创建新Job;D错误,CronJob是周期性任务;E错误,支持自动清理。