镜像构建优化
- 具体实施步骤:
- 精简基础镜像:选择最小化的基础镜像,例如从Alpine Linux镜像构建,而非完整的Ubuntu或CentOS镜像。例如,原本使用CentOS 8镜像构建Java应用镜像,大小可能为几百MB,切换到Alpine Linux镜像后,基础镜像可缩小至几十MB。
- 分层构建:在Dockerfile中,将不变的依赖安装步骤放在靠前的层,变化频繁的代码复制等操作放在靠后的层。如构建Python项目镜像时,先
RUN pip install -r requirements.txt
安装依赖,再COPY. /app
复制项目代码。这样当代码更新时,仅需重新构建最后一层,而依赖层可复用缓存,加快构建速度。
- 多阶段构建:对于编译型语言,如Go语言。可以在一个Dockerfile中使用多个
FROM
指令,先使用含有编译工具的镜像进行编译,然后使用最小化运行时镜像,将编译后的二进制文件复制进去。例如:
FROM golang:1.18 AS builder
WORKDIR /app
COPY. /app
RUN go build -o myapp
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp.
CMD ["./myapp"]
- 效果评估方法:
- 镜像大小:使用
docker images
命令查看镜像大小,对比优化前后镜像大小变化。如优化前镜像大小为500MB,优化后变为100MB,说明镜像体积显著减小。
- 构建时间:在构建脚本中记录开始和结束时间,计算构建总时长。例如优化前构建一次需10分钟,优化后缩短至3分钟,表明构建效率提升。
调度算法优化
- 具体实施步骤:
- 节点亲和性(Node Affinity):根据节点标签和Pod需求进行调度。比如,有一组节点专门配备了GPU,为需要GPU资源的Pod设置节点亲和性,使其优先调度到这些节点上。在Pod的YAML文件中配置如下:
apiVersion: v1
kind: Pod
metadata:
name: gpu - pod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: nvidia.com/gpu
operator: In
values:
- "true"
containers:
- name: gpu - container
image: your - gpu - enabled - image
- 污点和容忍(Taints and Tolerations):可以将某些节点标记为不可随意调度(污点),然后让特定的Pod可以容忍这些污点从而调度到该节点。例如,标记一个节点为维护状态的污点
kubectl taint nodes node1 maintenance=true:NoSchedule
,然后在需要调度到该节点的Pod的YAML文件中添加容忍:
apiVersion: v1
kind: Pod
metadata:
name: maintenance - pod
spec:
tolerations:
- key: "maintenance"
operator: "Equal"
value: "true"
effect: "NoSchedule"
containers:
- name: maintenance - container
image: your - image
- 资源请求与限制优化:合理设置Pod的CPU和内存请求与限制。例如,一个Web应用Pod,根据其过往负载情况,设置CPU请求为200m(0.2核),限制为500m,内存请求为512Mi,限制为1Gi。这样Kubernetes调度器可以更准确地将Pod调度到资源合适的节点上。
- 效果评估方法:
- 调度成功率:通过
kubectl get pods
查看Pod的调度状态,统计调度成功的Pod数量与总Pod数量的比例。如原本10个Pod有2个调度失败,优化后10个Pod全部调度成功,调度成功率从80%提升到100%。
- 资源利用率:使用Kubernetes自带的监控工具(如Metrics Server结合Dashboard)或第三方监控工具(如Prometheus + Grafana)查看节点资源利用率。优化后节点CPU利用率从30%提升到60%,内存利用率从40%提升到70%,表明资源得到更充分利用。
网络配置优化
- 具体实施步骤:
- 使用CNI插件优化:选择性能较好的CNI插件,如Calico。Calico采用BGP路由模式,相比Flannel的VXLAN模式,在大规模集群中网络性能更优。安装Calico:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 优化网络策略:通过Kubernetes网络策略限制Pod间不必要的网络流量。例如,仅允许Web服务器Pod与数据库Pod之间特定端口(如MySQL的3306端口)的通信。定义网络策略YAML文件:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web - to - db - policy
spec:
podSelector:
matchLabels:
app: db
ingress:
- from:
- podSelector:
matchLabels:
app: web
ports:
- protocol: TCP
port: 3306
- 优化DNS配置:在Kubernetes集群中,合理配置CoreDNS。可以调整CoreDNS的缓存时间,增加缓存命中率,加快域名解析速度。编辑CoreDNS的ConfigMap,例如增加
cache: 30
配置,表示DNS缓存时间为30秒。
- 效果评估方法:
- 网络延迟:使用工具如
ping
、traceroute
在Pod间测试网络延迟。例如优化前Pod间网络延迟为50ms,优化后降低至20ms,表明网络延迟得到改善。
- 带宽利用率:通过
iftop
等工具在节点上查看网络带宽使用情况。优化后带宽利用率从50%提升到80%,说明网络资源得到更充分利用。
- DNS解析时间:在Pod内使用
time nslookup
命令测试DNS解析时间,对比优化前后解析时间变化。如优化前解析时间为1秒,优化后缩短至0.5秒,表明DNS解析效率提升。