dbaplus社群 05月21日 07:47
别被云原生忽悠了:接地气的 K8s 生产落地长这样
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入拆解如何从零开始搭建一个高可用、高安全、可自愈的Kubernetes生产环境。文章从架构设计、集群部署、安全加固、可观测性、灾备演练以及升级维护六个方面,结合实际踩坑经验,详细阐述了每个环节的关键细节和注意事项。例如,在架构设计上,强调根据业务需求选择合适的架构形态,避免负载均衡器的隐藏陷阱;在集群部署上,对比了kubeadm和二进制部署的优缺点,并给出了证书过期问题的解决方案。通过阅读本文,运维人员可以系统地了解Kubernetes生产集群的落地方法,避免常见错误,提升集群的稳定性和安全性。

🏗️架构设计需根据业务需求选择形态,如计算型业务优先考虑横向扩展,IO密集型业务选择本地SSD存储。同时,高可用设计需注意负载均衡器应使用TCP层负载均衡,且健康检查配置为/readyz端点,etcd集群需跨机房部署并隔离磁盘。

🛠️集群部署工具选型需谨慎,kubeadm适合中小规模标准化环境,但需注意证书过期问题,可手动续期或使用cert-manager自动管理。二进制部署适用于超大规模集群和内核定制,但操作复杂。网络插件如Calico和Cilium的选择会影响网络延迟,应进行真实压测。

🛡️安全加固是关键,要禁用匿名访问,进行RBAC精细化控制,并记录所有敏感操作的审计日志。同时,利用Pod Security Admission替代Pod安全策略,在命名空间级别强制隔离,并使用cosign验证镜像签名,确保运行时安全。

🔍可观测性方面,需监控Prometheus的黄金指标,并优化EFK架构,如Fluent Bit启用多线程Pipeline,Elasticsearch进行冷热数据分层。灾备与演练需遵循“三二一原则”备份,并定期进行混沌工程的破坏性测试,模拟真实故障场景。

🔄升级维护时,跨大版本升级需谨慎,先检查废弃API,再升级Master节点和Worker节点,禁止跳过次要版本。日常运维中,使用kube-score检测资源配置问题,并配置垃圾回收,防止资源泄露。

Jacob 2025-05-21 07:15 广东

集群突然宕机,这可能是每个运维人最不愿面对的噩梦。

导语:深夜收到报警短信,集群突然宕机——这可能是每个运维人最不愿面对的噩梦。生产级Kubernetes集群的部署,远不是几条命令就能搞定的事情。本文将结合真实踩坑经验,从零拆解一个高可用、高安全、可自愈的Kubernetes生产环境该如何落地。

一、架构设计:你的集群能扛住“双11”吗?

1、 业务需求决定架构形态

    场景案例:某电商公司大促期间API调用量暴增10倍,因未预留足够控制平面资源,导致API Server过载崩溃。

    设计原则:

①计算型业务(如Web服务)优先考虑横向扩展,使用HPA(水平扩缩容)+ Cluster Autoscaler。

②IO密集型业(如日志处理):选择本地SSD存储+Local PersistentVolume。

③混合负载:划分节点池(Node Pool),如gpu-worker、high-mem等。

2、高可用设计的三个致命细节

    负载均衡器的隐藏陷阱:

    # HAProxy配置片段示例

    backend k8s-api

      mode tcp

      balance roundrobin

      option tcp-check

      tcp-check connect port 6443

      tcp-check send GET /readyz HTTP/1.0\r\nHost:\ k8s-api\r\n\r\n

      tcp-check expect string ok

      server master1 10.0.0.1:6443 check

      server master2 10.0.0.2:6443 check

      server master3 10.0.0.3:6443 check

    ①误区直接使用云厂商的HTTP(S)负载均衡器。

    ②真相:API Server需要TCP层负载均衡(如HAProxy + Keepalived),且健康检查必须配置为/readyz端点。

      etcd集群的“黄金法则”:

    ①跨机房部署:若跨3个机房,选择5节点(机房A:2节点,机房B:2节点,机房C:1节点)避免脑裂。

    ②磁盘隔离:etcd节点禁止与其他服务共享磁盘,避免IO竞争导致心跳超时。

      Worker节点的“冷热分区”:

    ①热区:运行核心服务,禁用自动伸缩,确保资源充足。

    ②冷区:运行批处理任务,启用Spot实例(云环境)或低优先级节点。

    二、集群部署:别让工具链成为“定时炸弹”

    1、 工具选型的血泪教训

      kubeadm的“甜区”与“毒点”:

    ①适合场景:中小规模(<200节点)、标准化环境。

    ②致命缺陷:默认证书有效期仅1年,过期会导致集群瘫痪(某公司曾因此停机8小时)。

      拯救方案:

      # 证书到期前手动续期

      kubeadm certs renew all

      # 或使用cert-manager自动管理

      helm upgrade cert-manager jetstack/cert-manager --set installCRDs=true

        二进制部署的“外科手术”:

      ①适用场景:超大规模集群、内核定制(如调整cgroup v2参数)。

      ②操作示例(手动签发API Server证书):

        # 使用cfssl生成CA证书

        cfssl gencert -initca ca-csr.json | cfssljson -bare ca

        # 生成API Server证书(必须包含LB IP和DNS)

        cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json \

          -hostname=10.0.0.100,k8s-api.example.com,kubernetes.default.svc \

          apiserver-csr.json | cfssljson -bare apiserver

        2、网络插件的“性能暗战”

          Calico vs Cilium真实压测:

        ①场景:某游戏公司从Calico迁移至Cilium后,网络延迟降低40%。

        ②选型建议:

        ③避坑指南:

        避免在同一个集群混用多个CNI插件。

        使用Cilium时需关闭kube-proxy:

          helm install cilium cilium/cilium --namespace=kube-system \

            --set kubeProxyReplacement=strict

          三、安全加固:黑客就在你身边

          1、 认证体系的“三道锁”

            锁1:禁用匿名访问

            /etc/kubernetes/manifests/kube-apiserver.yaml

            - --anonymous-auth=false

              锁2:RBAC精细化控制

            ①反例:某公司开发人员误用cluster-admin角色,导致数据库被误删。

            ②正解:按命名空间分配权限(示例):

              apiVersion: rbac.authorization.k8s.io/v1

              kind: Role

              metadata:

                namespace: payment

                name: payment-service-role

              rules:

              - apiGroups: [""]

                resources: ["pods""services"]

                verbs: ["get""list"]

                锁3:审计日志追踪

              记录所有敏感操作(如delete、patch):

                # audit-policy.yaml

                rules:

                - level: Metadata

                  resources:

                  - group""

                    resources: ["secrets"]

                  verbs: ["delete""patch"]

                2、运行时安全的“最后防线”

                  Pod安全策略(替代方案):

                Kubernetes 1.25+已弃用PSP,改用内置的Pod Security Admission:

                  # 命名空间级别强制隔离

                  apiVersion: v1

                  kind: Namespace

                  metadata:

                    name: untrusted

                    labels:

                      pod-security.kubernetes.io/enforce: restricted

                    镜像签名验证:

                  使用cosign验证镜像签名:

                    cosign verify --key cosign.pub your-registry/app:v1

                    四、可观测性:让故障无处藏身

                    1、 监控体系的“黄金指标”

                      必监控项清单:

                      Prometheus配置技巧:

                    使用Recording Rules预计算复杂指标:

                      groups:

                      - name: k8s.rules

                        rules:

                        - record: cluster:apiserver_request_latency:percentile99

                          expr: histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket[5m])) by (le))

                      2、日志收集的“性能杀手”

                        EFK架构优化:

                      Fluent Bit:启用多线程Pipeline,避免日志堆积:

                        [SERVICE]

                            Flush        5

                            Daemon       Off

                            Log_Level    info

                            HTTP_Server  On

                            HTTP_Listen  0.0.0.0

                            HTTP_Port    2020

                            storage.path /var/log/flb-storage/

                          Elasticsearch冷热数据分层,将旧索引迁移至低成本存储。

                        五、灾备与演练:宁可备而无用

                        1、 备份策略的“三二一原则”

                          3份副本:本地、跨区、离线(如磁带)。

                          2种形式:

                        ①Velero:备份Kubernetes资源+PV快照。

                        ②etcd快照:直接备份底层数据。

                          1小时恢复:定期演练恢复流程,确保RTO(恢复时间目标)达标。

                        2、 混沌工程的“破坏性测试”

                          模拟真实故障场景:

                        ①案例:某公司未测试节点宕机,导致DNS服务单点故障引发全集群瘫痪。

                        ②Chaos Mesh实验模板:

                          apiVersion: chaos-mesh.org/v1alpha1

                          kind: PodChaos

                          metadata:

                            name: kill-core-dns

                          spec:

                            action: pod-kill

                            mode: one

                            selector:

                              labelSelectors:

                                "k8s-app""kube-dns"

                            gracePeriod: 0 # 立即杀死Pod

                          六、升级维护:稳定压倒一切

                          1、 滚动升级的“禁忌之舞”

                            跨大版本升级(如1.24→1.26):

                          步骤:

                          ①检查废弃API(如kubectl convert)。

                          ②先升级Master节点,再升级Worker节点。

                          ③绝对禁止跳过次要版本(如1.24→1.26需先升级到1.25)。

                            回滚预案:

                          ①保留旧版本etcd快照及二进制文件。

                          ②使用Velero备份关键命名空间。

                          2、日常运维的“隐形战场”

                            资源泄露排查:

                          使用kube-score检测资源配置问题:

                            kube-score score deployment.yaml

                              垃圾回收配置:

                              # /var/lib/kubelet/config.yaml

                              apiVersion: kubelet.config.k8s.io/v1beta1

                              kind: KubeletConfiguration

                              imageGCHighThresholdPercent: 85

                              imageGCLowThresholdPercent: 80

                              七、总结:没有完美的架构,只有进化的系统

                              生产级Kubernetes集群的搭建,就像打造一艘远洋巨轮——设计时需考虑风浪,航行中需警惕暗礁。记住,真正的稳定性不是来自某个工具,而是来自对细节的极致把控和持续的迭代优化。

                              作者丨Jacob

                              来源丨公众号:云原生运维圈(ID:cloudnativeopscircle)

                              dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

                              阅读原文

                              跳转微信打开

                              Fish AI Reader

                              Fish AI Reader

                              AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

                              FishAI

                              FishAI

                              鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

                              联系邮箱 441953276@qq.com

                              相关标签

                              Kubernetes 集群运维 高可用 安全加固 灾备
                              相关文章