云原生监控与 CI/CD 基础实践

发布时间:2026/9/25 20:08:27

云原生监控与 CI/CD 基础实践 课程范围19-云原生监控系统 Prometheus 告警和高级管理 | 20-代码私有仓库 Git 和 GitLab | 21-代码私有仓库 GitLab 管理和 Jenkins 基础实验环境Ubuntu2404最小化安装2 台虚拟机可按课程要求扩展为 1 主 2 从国内源说明本实验所有软件源、镜像源、插件源均使用国内源阿里云 / 清华 / DaoCloud 等无需科学上网。角色主机名IP配置Master控制节点k8s-master10.0.0.2002C/4GNode1工作节点k8s-node110.0.0.812C/8GGitLab 较吃内存第一部分K8s 集群创建第 19 课前置环境1.1 基础环境配置【所有节点执行】1.设置主机名2.配置hosts解析3.关闭防火墙、swap4.时间同步5.加载内核模块、开启转发Ubuntu用modules-load持久化6.安装ipvs依赖7.修复 systemd-resolvedUbuntu 24.04 的 /etc/resolv.conf 指向 127.0.0.53会导致 kubelet 解析异常改为指向真实 DNS1.2 配置阿里云 apt 源【所有节点执行】1.3 安装 containerd 容器运行时并配置国内镜像加速【所有节点执行】K8s 1.24 已移除 dockershim此处安装 containerd来自阿里云 docker-ce 仓库并配置 DaoCloud 国内镜像加速后续 Prometheus / GitLab / Jenkins 官方镜像均可直接拉取无需修改任何镜像名。1.4 安装 kubeadm / kubelet / kubectl阿里云 kubernetes-new 源apt 版【所有节点执行】注意阿里云 Kubernetes apt 仓库的密钥和包都在v1.30/deb/目录下密钥为deb/Release.key仓库地址以/结尾flat 仓库格式不要写成 stable/main 普通仓库格式。1.5 初始化集群【Master 执行】1.5.1 故障排查API server is not healthy / kubelet 未运行【Master 执行】若 init 报The API server is not healthy after 4m0s按以下顺序定位# 1. 看控制面容器状态哪个在 CrashLoopBackOff / Exitedcrictl --runtime-endpoint unix:///var/run/containerd/containerd.sock ps -a | grep -E kube|etcd|pause# 2. 看 kubelet 报错最关键systemctl status kubelet --no-pager -ljournalctl -u kubelet --no-pager | tail -50# 3. 看失败容器日志crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock logs CONTAINERID常见原因 Acgroup 驱动不一致journalctl 出现cgroup driver字样grep -n SystemdCgroup /etc/containerd/config.toml # 必须为 truesed -i s/SystemdCgroup false/SystemdCgroup true/ /etc/containerd/config.tomlsystemctl restart containerd kubelet常见原因 Bcontainerd 启动失败mirrors 旧写法不兼容改用官方certs.d目录方式配置镜像加速sed -i /registry.mirrors/,$d /etc/containerd/config.tomlsed -i s#config_path #config_path /etc/containerd/certs.d# /etc/containerd/config.tomlmkdir -p /etc/containerd/certs.d/{docker.io,registry.k8s.io,quay.io,ghcr.io,gcr.io}cat /etc/containerd/certs.d/docker.io/hosts.toml EOFserver https://registry-1.docker.io[host.https://docker.m.daocloud.io]capabilities [pull, resolve]EOFcat /etc/containerd/certs.d/registry.k8s.io/hosts.toml EOFserver https://registry.k8s.io[host.https://k8s.m.daocloud.io]capabilities [pull, resolve]EOFcat /etc/containerd/certs.d/quay.io/hosts.toml EOFserver https://quay.io[host.https://quay.m.daocloud.io]capabilities [pull, resolve]EOFcat /etc/containerd/certs.d/ghcr.io/hosts.toml EOFserver https://ghcr.io[host.https://ghcr.m.daocloud.io]capabilities [pull, resolve]EOFcat /etc/containerd/certs.d/gcr.io/hosts.toml EOFserver https://gcr.io[host.https://gcr.m.daocloud.io]capabilities [pull, resolve]EOFsystemctl restart containerd kubelet常见原因 Csandbox 沙箱镜像拉取超时containerd 日志出现failed to resolve registry.k8s.io/pause:xxx ... i/o timeoutkubelet 报CreatePodSandbox ... connection refused# 1. config_path 必须已指向 certs.d否则加速不生效sed -i s#config_path #config_path /etc/containerd/certs.d#g /etc/containerd/config.toml# 2. sandbox_image 只替换前缀、保留版本号兼容不同 containerd 默认的 pause 版本sed -i s#sandbox_image registry.k8s.io#sandbox_image registry.aliyuncs.com/google_containers# /etc/containerd/config.toml# 3. certs.d 目录和 hosts.toml 必须存在config_path 指向的目录不存在会导致 containerd 直接起不来ls /etc/containerd/certs.d/*/hosts.toml # 应列出 5 个文件缺失就按 1.3 节第 4 步补建# 4. 重启并实测拉取成功输出镜像摘要才继续systemctl restart containerdsystemctl status containerd --no-pager # 必须 active (running)crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock pull registry.k8s.io/pause:3.10.2常见原因 DDNS 解析异常拉取报dial tcp 10.255.x.x:443: connect: connection refused之类的内网地址错误或时好时坏# 1. 检查解析结果若返回 10.x/192.168.x 等内网地址说明 DNS 被污染或配置错误getent hosts registry.aliyuncs.comcat /etc/resolv.conf# 2. 写死阿里公共 DNS覆盖 systemd-resolved 符号链接rm -f /etc/resolv.confcat /etc/resolv.conf EOFnameserver 223.5.5.5nameserver 223.6.6.6EOFgetent hosts registry.aliyuncs.com # 确认已解析到公网 IP常见原因 Econtainerd 反复挂掉 / 预检报 CRI connection refusedkubeadm init预检直接报[ERROR CRI]: container runtime is not running ... dial unix /var/run/containerd/containerd.sock: connect: connection refused说明 init 根本没开始跑# 1. 先看 containerd 为什么没起来systemctl status containerd --no-pagerjournalctl -u containerd --no-pager -n 30 # 若见 failed to load TOML 等说明 config.toml 被多轮修改改坏了# 2. 配置文件被反复 sed 改坏时最干净的办法是重建镜像已缓存、DNS 已修复重建只需 2 分钟systemctl stop containerdmv /etc/containerd/config.toml /etc/containerd/config.toml.bak.$(date %s)containerd config default /etc/containerd/config.tomlsed -i s#sandbox_image registry.k8s.io#sandbox_image registry.aliyuncs.com/google_containers# /etc/containerd/config.tomlsed -i s/SystemdCgroup false/SystemdCgroup true/ /etc/containerd/config.tomlsed -i s#config_path #config_path /etc/containerd/certs.d# /etc/containerd/config.toml# 3. certs.d 目录和 5 个 hosts.toml 按 1.3 节第 4 步重建必须先建目录再启用 config_pathmkdir -p /etc/containerd/certs.d/{docker.io,registry.k8s.io,quay.io,ghcr.io,gcr.io}# ...写入各 hosts.toml内容见 1.3 节# 4. 启动并验证grep -nE SystemdCgroup|config_path|sandbox_image /etc/containerd/config.tomlsystemctl restart containerdsystemctl status containerd --no-pager # 必须 active (running)crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock images | grep pause# 确认沙箱镜像版本与本地缓存一致后重新执行 1.5 的 kubeadm init技巧预拉控制面镜像让 init 不依赖网络还能顺带确认 pause 实际版本号kubeadm config images pull \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version $(kubeadm version -o short)# 预拉完成后把沙箱镜像版本改成与本地缓存一致如 pause:3.10避免沙箱去拉另一个版本crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock images | grep pausesed -i s#pause:3.10.2#pause:3.10# /etc/containerd/config.tomlsystemctl restart containerd重置后重新初始化失败的 init 必须清理否则重跑会撞 6443 端口注意若 init 报 API server not healthy 但 kubelet 已 healthy先别急着重置——等 2~3 分钟后用cp -i /etc/kubernetes/admin.conf $HOME/.kube/config kubectl get nodes试一次。慢速虚拟机上 etcd 初始化常超过 kubeadm 的 4 分钟超时API Server 随后正常启动集群实际可用。kubeadm reset -frm -rf $HOME/.kube /etc/cni/net.dsystemctl restart containerd kubelet# 重新执行 1.5 的 kubeadm init1.6 工作节点加入集群【Node 执行】join 报 already exists / Port 10250 in use 怎么办说明该 Node 之前加入过或有残留的 kubelet 占着 10250 端口。清理后重新 joinkubeadm reset -frm -rf /etc/cni/net.d /var/lib/kubelet/pkisystemctl restart containerd kubelet然后重新执行 join 命令token 过期报 token invalidtoken 有效期 24 小时在 Master 上重新生成 join 命令即可kubeadm token create --print-join-command1.7 部署 Flannel 网络插件【Master 执行】1.8 验证集群【Master 执行】第二部分实验一 —— 部署 Prometheus 完成对 K8s 集群的监控任务目标部署 Prometheus 并完成对 k8s 集群的监控包括 node 监控、pod 监控建立使用率大盘 node 和 pod并配置告警。2.1 创建监控命名空间【Master 执行】2.2 部署 node-exporterNode 监控数据采集【Master 执行】说明node-exporter 以 DaemonSet 方式运行Master 与 Node1 上各一个 Pod采集主机指标端口 9100。2.3 部署 kube-state-metricsPod/K8s 对象监控【Master 执行】2.4 部署 Prometheus 并配置告警规则【Master 执行】2.5 部署 Alertmanager接收告警【Master 执行】2.6 部署 Grafana 并建立使用率大盘【Master 执行】2.7 建立 Node 和 Pod 使用率大盘【Master 执行后浏览器操作】浏览器访问http://10.0.0.200:30300账号admin密码admin123。添加数据源Connections → Data sources → Add data source → PrometheusURL 填http://prometheus.monitoring.svc.cluster.local:9090保存并测试。导入 Node 使用率大盘Dashboards → New → Import输入社区大盘 ID1860Node Exporter Full含 CPU/内存/磁盘/网络使用率数据源选 Prometheus导入。 - 若 grafana.com 访问慢可将大盘 JSON 从国内镜像站如https://gitee.com搜索 node-exporter-full下载后选择 Upload JSON file 本地导入。导入 Pod 使用率大盘同样方式导入大盘 ID6417Kubernetes Pods展示 Pod 的 CPU/内存使用率排行。截图保存Node 大盘、Pod 大盘、http://10.0.0.200:30900Prometheus的 Targets 页面应看到全部节点和 Pod 目标为 UP 状态。2.8 验证监控与告警【Master 执行】第三部分实验二 —— 部署 GitLab 并完成课程实验练习第 20、21 课任务目标在 K8s 上部署 GitLab完成创建用户/群组/项目、配置 SSH 密钥、推送代码、分支与 Merge Request、Issue 管理等课程实验练习。3.1 部署 GitLab社区版【Master 执行】注意PVC 声明在 default 命名空间但 PV 绑定的是 hostPathGitLab 数据实际落在 k8s-node1 的/data/gitlab下。GitLab 启动需要 3~5 分钟可用kubectl logs -f gitlab-xxxx观察。3.2 获取初始 root 密码并登录【Master 执行】浏览器访问http://10.0.0.81:30081用户名root粘贴上述密码登录。3.3 GitLab 课程实验练习1设置中文界面头像 →Preferences → Language选简体中文保存刷新。2修改 root 密码头像 →Edit profile → Password设置新密码。3创建用户并管理权限管理中心Admin Area→ 用户 → 新建用户创建dev1、dev2两个普通用户为 dev1 设置密码通过 dev1 登录验证。4创建群组和项目管理中心 → 新建群组命名devops在群组下新建项目demo-web可见级别私有。5配置 SSH 密钥并推送代码【本机或 Node 执行】将公钥粘贴到 GitLabdev1 头像 → Preferences → SSH Keys → Add key克隆并首次提交端口 300816分支与 Merge Request 练习在 GitLab 页面创建 Merge Requestfeature/add-readme → main指定 dev2 为审核人审核合并。7Issue 管理练习项目计划Plan→ Issues → 新建 Issue标题如首页样式优化指派给 dev1并在 MR 中引用#1关联该 Issue合并后观察 Issue 自动关闭。8保护分支设置项目设置 → 仓库 → 受保护分支将main设为仅 Maintainer 可推送、所有人可合并验证 dev1 无法直接向 main 推送。dev1 换到功能分支再推第四部分实验三 —— 部署 Jenkins 并完成课程实验练习第 21 课任务目标在 K8s 上部署 Jenkins使用国内插件源完成插件安装创建 Freestyle 任务和 Pipeline 任务并打通 GitLab 拉取代码。4.1 部署 Jenkins【Master 执行】先在 node1 上准备数据目录Node 执行4.2 获取初始管理员密码【Master 执行】浏览器访问http://10.0.0.81:30080粘贴密码解锁。4.4 安装课程所需插件在Manage Jenkins → Plugins → Available plugins中安装国内源秒装Localization: Chinese (Simplified)中文界面Git/GitLab代码拉取与集成Pipeline流水线若初始未装Blue Ocean可视化流水线可选安装完成后重启kubectl rollout restart deployment jenkins。4.5 Jenkins 课程实验练习1Freestyle 自由风格任务新建任务 → Freestyle project命名demo-web-build。源码管理选Git仓库地址填 GitLab 项目 HTTP 地址http://10.0.0.81:30081/devops/demo-web.git凭据添加 → Jenkins → 用户名/密码填 GitLab 账号 dev1。构建步骤选执行 shell内容echo 构建开始 ls -lcat index.htmlecho 构建完成 点击立即构建查看Console Output确认能成功从 GitLab 拉取代码并执行脚本。2Pipeline 流水线任务新建任务 → Pipeline命名demo-web-pipeline。Pipeline 脚本groovy pipeline { agent any stages { stage(拉取代码) { steps { git branch: main, credentialsId: gitlab-dev1, url: http://10.0.0.81:30081/devops/demo-web.git } } stage(编译测试) { steps { sh echo Pipeline 构建$(date) sh ls -l } } stage(部署模拟) { steps { sh echo 模拟部署到 K8s 集群 } } } post { always { echo 流水线结束无论成败都会执行 } success { echo 构建成功 } failure { echo 构建失败请检查日志 } } }3.构建并查看 Stage View。3定时构建CI 触发方式练习在 Freestyle 任务构建触发器中勾选Build periodically填写H/5 * * * *每 5 分钟一次观察自动构建历史。第五部分作业总结实验内容访问入口K8s 集群kubeadm containerd阿里云源-Prometheus 监控node 监控 pod 监控 告警 Grafana 大盘http://10.0.0.200:30900/:30903/:30300GitLab部署 用户/群组/项目/MR/Issue 练习http://10.0.0.81:30081Jenkins部署 国内插件源 Freestyle/Pipeline 练习http://10.0.0.81:30080国内源汇总用途国内源地址系统软件源mirrors.aliyun.comUbuntu aptdeb822 格式kubeadm/kubeletmirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/apt密钥deb/Release.keyK8s 控制面镜像registry.aliyuncs.com/google_containers容器镜像加速docker.m.daocloud.io/k8s.m.daocloud.io/quay.m.daocloud.io/ghcr.m.daocloud.ioFlannel 清单下载ghfast.topGitHub 加速NTP 时间同步ntp.aliyun.comJenkins 插件源mirrors.tuna.tsinghua.edu.cn/jenkins/updates/Grafana 大盘备用大盘 JSON 国内镜像站本地导入
延伸阅读

更多相关文章

2026/9/25 20:08:27

InterBase 6.0数据库实战:安装部署、对象设计与备份恢复指南

简介:InterBase6.0是Borland公司推出的关系型数据库管理系统,面向使用Delphi或CBuilder构建客户端/服务器应用的开发者,用于解决数据存储、事务处理及多用户并发访问等问题。该zip压缩包共含130个文件,涵盖C语言源码、可执行程序、…

2026/9/25 20:08:27

中国高校前100 · 代表专业就业、薪资与升学全景分析榜单口径:2025校友会中国大学排名(主榜/综合总榜)前100;专业口径:就业与薪酬最强的代表性专业或方向,而非“每一所学校唯一最好的专业”。薪

中国高校前100 代表专业就业、薪资与升学全景分析榜单口径:2025校友会中国大学排名(主榜/综合总榜)前100;专业口径:就业与薪酬最强的代表性专业或方向,而非“每一所学校唯一最好的专业”。薪资仅采用统一全…

2026/9/25 20:58:30

AVFoundation视频开发核心:CMTime坐标系与AVPlayerItem状态机

1. 为什么AVFoundation不是“另一个播放器SDK”,而是iOS/macOS视频能力的底层操作系统很多人第一次接触AVFoundation,是在Xcode里拖一个AVPlayerViewController进Storyboard,调用几行代码就播出了MP4——然后理所当然地认为:“哦&…

2026/9/25 20:58:30

UE5 GeometryCore 实战:FDynamicMesh3 动态网格操作与性能优化指南

1. 从“能跑就行”到“几何可控”:GeometryCore 到底在解决什么问题如果你在 UE5 里做过程序化建模、动态切割、地形雕刻或者运行时网格变形,大概率经历过这样的场景:蓝图里拖了一堆 ProceduralMeshComponent 节点,跑起来帧率直接…

2026/9/25 20:58:29

原生PHP论坛开发实战:从登录到部署的完整安全指南

简介:这是一套基于PHP构建的简单Web论坛源码包,面向PHP初学者与教学场景,以论坛这一交互性较强的应用为载体,演示动态网站的开发思路。压缩包共28个文件、约266KB,包含10个PHP核心脚本、11个GIF界面元素、3张JPG设计图…

2026/9/25 20:58:29

PHP在线生成查询产品防伪证书系统:防伪码生成与查询链路详解

简介:PHP在线生成查询产品防伪证书系统源码.zip是一套面向企业及开发者的防伪证书生成与查询解决方案,适用于搭建产品防伪验证平台。源码基于PHPMYSQL开发,需使用PHP5.1~5.3环境,压缩包内自带90套授权证书模板及PSD公章源文件&…

2026/9/25 20:58:29

HTTP 实操手册:状态码排查、连接复用与嵌入式客户端

这篇文章写在旧站归档之际。熟悉我的朋友应该已经注意到,原来那个站点已经有一阵子没动静了。这段时间我在做一件听起来枯燥但很必要的事:把过去几年分散在各处的文章、代码片段和笔记重新整理一遍,后续新内容会统一放到 www.52brt.com 持续更…

2026/9/25 21:00:17

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/25 20:59:52

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/25 18:41:36

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑