centos k8s部署的容器编排策略
导读:CentOS 上 Kubernetes 的容器编排策略 一 编排策略总览 工作负载控制器选型:无状态应用优先使用 Deployment(支持滚动更新与回滚);有状态应用使用 StatefulSet(稳定网络标识、有序部署/扩缩);节点级守...
CentOS 上 Kubernetes 的容器编排策略
一 编排策略总览
- 工作负载控制器选型:无状态应用优先使用 Deployment(支持滚动更新与回滚);有状态应用使用 StatefulSet(稳定网络标识、有序部署/扩缩);节点级守护进程用 DaemonSet;批处理/定时任务用 Job/CronJob。
- 发布策略:默认采用 RollingUpdate(零停机),可按需配置 Recreate(先删后建);通过 maxSurge 与 maxUnavailable 控制并发度与可用性。
- 扩缩容策略:手动 kubectl scale 或基于指标的水平扩缩 HPA(如 CPU/内存利用率),实现弹性与成本平衡。
- 调度策略:利用 亲和/反亲和、污点/容忍、拓扑分散 保证高可用与资源隔离。
- 配置与密钥:使用 ConfigMap 管理配置、Secret 管理敏感信息,结合 RollingUpdate 实现配置热更新。
- 服务与流量:通过 Service 暴露服务,结合 readinessProbe 控制流量接入时机,必要时使用 Ingress 做七层路由与灰度。
- 可观测性:日志(如 EFK/Loki)、指标(Prometheus/Grafana)、事件与审计共同支撑排障与容量规划。
- 安全基线:镜像安全扫描、RBAC 最小权限、NetworkPolicy 网络隔离、关闭 Swap、内核与容器运行时调优。
二 发布与回滚策略
- 策略选择
- RollingUpdate:逐步替换旧 Pod,适合大多数在线业务,保证服务连续性。
- Recreate:先终止全部旧实例再创建新实例,适合需要强一致或无法共存版本的变更。
- 关键参数(Deployment.spec.strategy)
- maxSurge:可超出期望副本数的最大 Pod 数量或百分比(如 25%)。
- maxUnavailable:滚动期间允许不可用的最大 Pod 数量或百分比(如 25%)。
- 操作流程
- 更新镜像:
kubectl set image deployment/< name> < container> =< image:vX> - 查看状态:
kubectl rollout status deployment/< name> - 回滚版本:
kubectl rollout undo deployment/< name>(可指定--to-revision)
- 更新镜像:
- 适用场景
- 常规发布与快速回滚(RollingUpdate);数据库迁移/破坏性变更(Recreate)。
三 扩缩容与弹性策略
- 手动扩缩:
kubectl scale deployment/< name> --replicas=< N>
- 自动扩缩 HPA(以 autoscaling/v2 为例):
- 指标类型:资源(CPU/内存)、自定义指标、外部指标。
- 示例(CPU 平均利用率 50%,副本 1–10):
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: app-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: app minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 - 建议为 HPA 目标设置合理的 requests.cpu,避免调度偏差。
四 调度与高可用策略
- 亲和与反亲和
- 反亲和提升容灾:
podAntiAffinity将同一应用的副本分散到不同节点(按 kubernetes.io/hostname 拓扑)。
- 反亲和提升容灾:
- 污点与容忍
- 专用节点:
kubectl taint nodes < node> key=value:NoSchedule;关键业务 Pod 配置相应 tolerations 以准入。
- 专用节点:
- 拓扑分散与打散
- 通过 topologyKey 控制分散粒度(如节点、机架),避免单点故障域。
- 资源与 QoS
- 设置 requests/limits,避免资源争抢与 OOM;为关键负载预留资源或使用节点亲和保障。
- 示例(反亲和 + 资源):
affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: [myapp] topologyKey: "kubernetes.io/hostname" resources: requests: cpu: "250m" memory: "128Mi" limits: cpu: "500m" memory: "256Mi"
五 在 CentOS 上的落地要点
- 系统与安全基线
- 关闭 Swap:
swapoff -a并注释 /etc/fstab 中的 swap 行;禁用 SELinux 或设为 permissive;内核开启桥接流量到 iptables:modprobe br_netfilter echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
- 关闭 Swap:
- 容器运行时与驱动
- Containerd(推荐):
/etc/containerd/config.toml中设置SystemdCgroup = true,systemctl enable --now containerd。 - Docker(可选):
/etc/docker/daemon.json设置"exec-opts": ["native.cgroupdriver=systemd"]。
- Containerd(推荐):
- 集群初始化与网络
- 安装 kubelet/kubeadm/kubectl;
kubeadm init --pod-network-cidr=10.244.0.0/16; - 安装 Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml; - 节点加入:
kubeadm join ...;验证kubectl get nodes与kubectl get pods -A。
- 安装 kubelet/kubeadm/kubectl;
- 可观测与安全加固
- 日志:集中式 EFK/Loki+Grafana;节点 logrotate 防止磁盘占满。
- 监控:Prometheus/Grafana 看板与告警。
- 网络与合规:NetworkPolicy 隔离;RBAC 最小权限;镜像漏洞扫描。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos k8s部署的容器编排策略
本文地址: https://pptw.com/jishu/783553.html
