当前位置: 首页 > news >正文

K8S RD: Kubernetes核心技术之管理、高可用与配置详解

Helm 核心概念与 Kubernetes 对比


Helm 是 Kubernetes 的包管理工具,在 Kubernetes 原生能力基础上进一步简化应用程序的部署、管理和版本维护。其作用类比 Linux 系统中的 RPM 与 Yum 依赖管理机制:

  • 传统 Kubernetes 部署:类似 RPM 单包安装,需手动编写 YAML 文件逐个部署组件,且需独立解决依赖问题。
  • Helm 部署:类似 Yum 仓库机制,将应用程序及其所有依赖封装为 Chart 包,支持一键安装并自动解析依赖关系。
Helm Chart 结构示例 
myapp-chart/
├── Chart.yaml          # 应用元数据 
├── values.yaml         # 可配置参数 
├── templates/          # Kubernetes 资源模板 
│   ├── deployment.yaml 
│   ├── service.yaml 
└── charts/             # 子依赖 Chart 

通过将应用及其依赖封装为可复用的Chart,解决原生Kubernetes部署中的以下痛点:

  1. 依赖自动化管理:自动解析并安装应用所需的关联资源(如ConfigMap、Service),避免手动处理依赖链。
  2. 版本控制:内置版本历史记录,支持helm rollback一键回滚到指定版本。
  3. 模板化部署:通过values.yaml注入变量,实现一套Chart多环境复用(开发/测试/生产)。

代码示例:通过Helm部署WordPress

# 添加Helm仓库 
helm repo add bitnami https://charts.bitnami.com/bitnami # 安装WordPress(自动创建PVC、Service、Deployment等)
helm install my-wordpress bitnami/wordpress \--set persistence.size=20Gi \--set service.type=LoadBalancer 

核心优势对比:

  1. 部署效率
  • 原生 K8s:需为每套环境手动编写/复制 YAML 文件,耗时且易错。
  • Helm:通过模板化 YAML + 变量注入(如 values.yaml),快速复制多套环境。
    # Helm Chart 示例:通过变量动态生成资源 
    apiVersion: apps/v1
    kind: Deployment 
    metadata:name: {{ .Values.appName }}-deploy 
    spec:replicas: {{ .Values.replicaCount }}
    
  1. 版本管理
  • 原生 K8s:无内置版本控制,需手动回滚或升级。
  • Helm:自动维护版本历史,支持命令式回滚(如 helm rollback <release> <revision>)。
  1. 复用性与共享
  • Helm Charts 支持跨团队共享,复用标准化应用模板。

Kubernetes 高可用(HA)架构设计要点


组件高可用实现方案关键配置
控制平面多Master节点部署API Server/Controller Manager/Schedulerkubeadm init --control-plane-endpoint <VIP>
ETCD集群3节点或5节点奇数集群部署etcdctl member add --peer-urls=https://node2:2380
工作节点跨可用区分布Node节点kubectl drain <node> --ignore-daemonsets
网络插件Calico/IPVS启用BGP ECMP或IPIP隧道calico_backend: bird(BGP模式)
负载均衡器云厂商LB或Keepalived+HAProxyhaproxy.cfg配置TCP模式健康检查

Kubernetes 生产环境需保障四层高可用:

  1. 控制平面高可用:多 Master 节点部署 API Server、Controller Manager、Scheduler 组件,避免单点故障。
  2. etcd 集群高可用:部署 3 节点或 5 节点(奇数)集群,基于 Raft 协议实现数据一致性与选举容错。
  3. 工作节点高可用:多 Node 节点保障应用副本分散调度,单节点故障时自动迁移 Pod。
  4. 网络与负载均衡高可用:
    • 网络插件(如 Calico/Cilium)需支持多实例部署
    • 云厂商 LoadBalancer 或自建 Keepalived + HAProxy 实现入口流量冗余。

Kubernetes 配置管理工具分类


工具类型代表组件核心作用
集群初始化kubeadm快速搭建 Kubernetes 集群
命令行操作kubectl资源增删改查 (如 kubectl apply -f pod.yaml)
包管理Helm应用模板化部署
配置存储ConfigMap/Secret解耦环境配置与容器镜像
多集群管理kubeconfig上下文切换管理不同集群
  1. 集群管理
    • kubeadm:初始化集群(如kubeadm init --pod-network-cidr=10.244.0.0/16
    • kubectl:命令行操作资源(如kubectl apply -f deployment.yaml
  2. 应用打包
    • Helm:Chart模板化管理(核心命令:install/upgrade/rollback
  3. 配置存储
    • ConfigMap:存储非敏感配置(kubectl create configmap game-config --from-file=configs/
    • Secret:加密存储凭证(kubectl create secret tls ssl-cert --cert=./cert.pem --key=./key.pem
  4. 多集群管理
    • kubeconfig文件切换上下文(kubectl config use-context prod-cluster

Kubernetes 网络模型核心机制


1 ) 容器间通信

  • Pod 内容器:通过 localhost 直接通信
  • Pod IP直连:每个Pod分配唯一IP(如10.244.1.3),跨节点通信需CNI插件(Flannel/Calico)
  • Service抽象:通过ClusterIP实现负载均衡(代码示例):
    apiVersion: v1 
    kind: Service 
    metadata:name: web-service 
    spec:selector:app: web-app ports:- protocol: TCP port: 80 targetPort: 9376 type: ClusterIP  # 默认类型 
    

2 ) 外部访问

  • Service:通过 ClusterIP/NodePort 暴露服务
  • Ingress:提供 L7 路由与域名访问
  • Ingress Controller:基于域名路由(Nginx/Traefik实现)
    apiVersion: networking.k8s.io/v1 
    kind: Ingress 
    metadata:name: example-ingress 
    spec:rules:- host: app.example.com http:paths:- path: /pathType: Prefix backend:service:name: web-service port:number: 80 
    

3 )总结

  1. 容器间通信:
    • Pod 内容器通过 localhost 直接通信
    • Pod 间通信依赖 CNI 插件(如 Flannel)分配的集群唯一 IP。
  2. 服务暴露方式:
    • ClusterIP:集群内服务发现(默认)
    • NodePort:节点端口映射
    • LoadBalancer:云厂商负载均衡集成
    • Ingress:七层路由规则管理。

应用升级策略与热更新实现


1 )应用层升级

资源类型策略命令/配置
DeploymentRollingUpdate(默认)strategy.type: RollingUpdate(逐步替换旧Pod)
Recreatestrategy.type: Recreate(先删旧Pod再创新Pod,导致短暂中断)
StatefulSetRollingUpdate按序号顺序更新Pod(保障有状态应用顺序性)
OnDelete需手动删除Pod触发更新(kubectl delete pod web-0
DaemonSetRollingUpdate节点级滚动更新(如kubectl set image ds/fluentd fluentd=fluentd:v2.1.0

2 )集群组件升级

  1. 控制平面:

    • 备份ETCD → 升级ETCD集群 → 逐节点升级kube-apiserver/kube-controller-manager/kube-scheduler
  2. 工作节点:

    • 驱逐Pod(kubectl drain <node>)→ 升级kubelet/kube-proxy → 解除封锁(kubectl uncordon <node>
    kubectl drain <node> --ignore-daemonsets  # 排空节点 
    apt upgrade kubelet kubeadm               # 升级组件
    kubectl uncordon <node>                   # 重新启用节点
    

3 ) 总结

3.1 无状态服务(Deployment)

  • 滚动更新(RollingUpdate):
    strategy:type: RollingUpdate rollingUpdate:maxSurge: 1        # 最大额外 Pod 数 maxUnavailable: 0  # 最大不可用 Pod 数 
    
    • 流程:逐步创建新 Pod → 就绪后替换旧 Pod → 确保零中断。
  • 重建更新(Recreate):先删除全部旧 Pod 再创建新 Pod,适用于可容忍短暂中断的场景。

3.2. 有状态服务(StatefulSet)

  • 分区更新:通过 partition 参数控制灰度发布范围。
  • OnDelete 策略:需手动删除 Pod 触发更新,适用于需严格管控顺序的场景。
  • 热更新本质:通过渐进式替换容器实例实现业务不中断更新,依赖 Readiness Probe 状态检测机制。

监控与日志体系解决方案


1 )Prometheus监控体系

应用暴露/metrics
Prometheus抓取
存储至TSDB
Grafana可视化
AlertManager告警
邮件/钉钉通知
  • 数据采集:Prometheus 抓取 Exporter(如 node-exporter)指标。
  • 可视化:Grafana 展示 Dashboard。
  • 告警:Alertmanager 发送邮件/钉钉通知。

配置示例:抓取Node Exporter

# prometheus.yml 
scrape_configs:- job_name: 'node-exporter'static_configs:- targets: ['node1:9100', 'node2:9100', 'node3:9100']

2 )日志收集

  • EFK Stack:
    # Filebeat DaemonSet配置片段 
    containers:
    - name: filebeat image: docker.elastic.co/beats/filebeat:7.15.0 volumeMounts:- name: varlog mountPath: /var/log - name: filebeat-config mountPath: /usr/share/filebeat/filebeat.yml 
    

EFK 栈:Fluentd 采集日志 → Elasticsearch 存储 → Kibana 展示

3 )总结

监控栈

  • 数据采集:Prometheus + Node Exporter
  • 可视化:Grafana 仪表盘
  • 告警:AlertManager 集成邮件/钉钉
Prometheus 告警规则示例 
groups:
- name: node-alert rules:- alert: HighCPU expr: node_cpu_usage > 80%for: 5m 

日志栈

  • EFK 方案:
    Fluentd(采集) → Elasticsearch(存储) → Kibana(展示)

应用部署与运维操作指南


1 ) 部署类型选择

场景资源类型示例命令
无状态Web应用Deploymentkubectl create deploy nginx --image=nginx:1.21
有状态数据库StatefulSetkubectl apply -f mysql-statefulset.yaml
节点级守护进程(如日志采集)DaemonSetkubectl apply -f fluentd-daemonset.yaml

2 ) 水平扩展

扩容Deployment副本数至5 
kubectl scale deploy web-app --replicas=5 基于HPA自动扩缩容 
kubectl autoscale deploy web-app --min=3 --max=10 --cpu-percent=80 

3 ) 服务发现机制

服务发现三模式

  • 环境变量注入:
    • Pod启动时注入同Namespace的Service IP(如WEB_SERVICE_HOST=10.96.1.2
    • Pod 启动时自动注入同 Namespace 的 Service 环境变量。
  • DNS 解析
    • CoreDNS 为 Service 创建 [service-name].[namespace].svc.cluster.local 记录
    • 通过<service>.<namespace>.svc.cluster.local访问服务
  • Headless Service
    • 直接获取Pod IP列表(适用于StatefulSet)
    • 直接返回 Pod IP 列表,适用于需直连 Pod 的场景(如 StatefulSet)。

示例

apiVersion: v1 
kind: Service 
metadata:name: cassandra 
spec:clusterIP: None  # Headless模式 selector:app: cassandra 

容器通信路径

Service IP
负载均衡
负载均衡
Pod IP
PodA
Service
PodB1
PodB2
PodC
PodD

安全与热更新实践


1 ) RBAC权限控制

核心流程:

  1. 定义 Role(权限集合)
  2. 创建 ServiceAccount(身份标识)
  3. 通过 RoleBinding 关联账户与权限
# 创建角色(允许读取Pod)
apiVersion: rbac.authorization.k8s.io/v1 
kind: Role 
metadata:namespace: dev name: pod-reader 
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]# 绑定角色至用户 
apiVersion: rbac.authorization.k8s.io/v1 
kind: RoleBinding 
metadata:name: read-pods namespace: dev 
subjects:
- kind: User name: dev-user apiGroup: rbac.authorization.k8s.io 
roleRef:kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io 

2 ) 热更新实现

  • Deployment滚动更新:
    # 触发滚动更新
    kubectl set image deploy/web-app nginx=nginx:1.22.0 
    # 监控更新状态 
    kubectl rollout status deploy/web-app 
    
  • ConfigMap热加载:
    使用subPath挂载配置,通过kubectl rollout restart deploy/web-app触发Pod重启加载新配置

Prometheus高级配置


1 ) 存储与保留策略

prometheus.yml配置片段 
storage:tsdb:path: /data/prometheus retention: 15d  # 保留15天 max_bytes: 100GB # 存储上限wal_compression: true 

2 ) 服务发现机制对比

类型适用场景配置示例
静态配置固定目标监控static_configs: [{targets: ['host:port']}]
基于文件发现动态增减监控目标file_sd_configs: [files: ['targets.json']]
Kubernetes服务发现自动监控集群内资源kubernetes_sd_configs: [role: node]
Consul注册中心混合环境服务发现consul_sd_configs: [server: 'consul:8500']
scrape_configs:- job_name: 'k8s-nodes'kubernetes_sd_configs: # K8s 自动发现 - role: node 

3 ) 告警规则定义

# alert.rules.yml 
groups:
- name: node-alerts rules:- alert: HighNodeCPU expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80 for: 10m labels:severity: critical annotations:summary: "High CPU usage on {{ $labels.instance }}"

关键运维操作命令速查


操作场景命令示例
创建 Podkubectl run nginx --image=nginx:1.20
水平扩展 Deploymentkubectl scale deploy/nginx --replicas=5
滚动更新kubectl set image deploy/nginx nginx=1.21
节点维护kubectl drain node-01 --ignore-daemonsets

关键概念总结

  1. Helm核心价值:标准化应用交付流程,通过Chart模板化与依赖解析提升部署效率
    • Helm 标准化应用交付,解决 K8s 部署复杂度
  2. Kubernetes高可用本质:消除单点故障(ETCD/控制平面/工作节点) + 冗余设计
    • 高可用需覆盖 控制平面、etcd、工作节点、网络四层
  3. 网络模型核心:IP-per-Pod原则 + Service抽象层解耦访问
  4. 热更新实现路径:滚动更新(RollingUpdate)策略 + 配置与镜像分离管理
    • 滚动更新是保障服务连续性的核心策略
  5. Prometheus监控闭环:指标暴露 → 抓取存储 → 可视化 → 告警响应
    • Prometheus TSDB 存储 + 多维度服务发现构成监控基石
http://www.dtcms.com/a/596661.html

相关文章:

  • Rust:Trait 抽象接口 特征约束
  • 【Windows】tauri+rust运行打包工具链安装
  • 网站被人抄袭怎么办哪家做网站的公司
  • 在 Linux 上实现 Spring Boot 程序的自动启动与守护运行
  • 得物TiDB升级实践
  • uni-app微信小程序相机组件二次拍照白屏问题的排查与解决
  • 邯郸大名网站建设网站服务器类型查询
  • 远程在线诊疗|在线诊疗|基于java和小程序的在线诊疗系统小程序设计与实现(源码+数据库+文档)
  • Linux进程间通信(IPC)常用方法精要
  • 展望无人机的未来发展,技术趋势和应用前景
  • 黄页 网站模板什么是展示型网站
  • gov域名网站有哪些如何建一个免费试用网站
  • Vue中 class 和 style 属性的区别对比
  • 视频融合平台EasyCVR:构建智慧化城市/乡镇污水处理厂综合安防与运营监管方案
  • 【ZeroRange WebRTC】KVS WebRTC C SDK 崩溃分析报告
  • 库卡机器人编程语言 | 深入了解库卡机器人的编程方法与应用
  • 移动+协作+视觉=?复合型机器人重新定义智能产线
  • 【macOS 版】Android studio jdk 1.8 gradle 一键打包成 release 包的脚本
  • 网站关键词优化原理亳州做企业网站
  • 数据库知识整理——SQL数据定义
  • AAAI 2026|港科大等提出ReconVLA:利用视觉重构引导,刷新机器人操作精度!(含代码)
  • Java 进阶:IO 流与 Lambda 表达式深度解析
  • 集团公司网站推广方案怎么做十年网站建设
  • 张祥前统一场论视角下的托卡马克Z箍缩不稳定性解读
  • 【每天一个AI小知识】:什么是MCP协议?
  • 在 kubernetes 上使用 SMB 协议做存储的「即插即用」方案
  • 软件测试大赛Web测试赛道工程化ai提示词大全
  • 智慧团建官方网站登录入口优秀的网站建设价格
  • 静海做网站公司十一月新闻大事件摘抄
  • GJOI 11.6 题解