1.
概述与前提
说明:此文针对希望将堡垒机功能与AI本地模型整合并通过容器化及CI/CD部署到内部集群的运维/开发者。
小分段:准备一台Linux宿主机(Ubuntu 20.04+或CentOS 7/8)、具备root或sudo权限、网络能访问私有镜像仓库或可通过代理访问外网;若使用GPU,需NVIDIA驱动与CUDA环境。
2.
环境准备(宿主机与依赖安装)
步骤:
- 更新系统并安装基础工具:sudo apt update && sudo apt install -y curl git vim ca-certificates
- 安装Docker(Ubuntu示例):curl -fsSL https://get.docker.com | sh && sudo usermod -aG docker $USER && newgrp docker
- 若需GPU:安装NVIDIA驱动+nvidia-container-toolkit:参照官方步骤 apt install -y nvidia-driver-XXX && sudo apt install -y nvidia-container-toolkit && sudo systemctl restart docker
小分段:验证 docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi(无GPU可跳过)
3.
构建堡垒机AI镜像:Dockerfile示例与说明
步骤:在项目目录创建 Dockerfile,包含SSH
堡垒机基础、AI推理组件与监控。示例主要步骤:
- FROM ubuntu:20.04
- 安装openssh-server、python3、pip、必要库(libssl、libffi)和Supervisor来管理进程
- 复制堡垒机服务代码(或开源堡垒机如Jumpserver轻化版)以及AI推理脚本(如使用Local LLM或微服务推理API)
- 暴露端口(22,HTTP管理端口如8080)并设置ENTRYPOINT为supervisord
小分段:构建并打标签 docker build -t registry.local/bastion-ai:1.0 . 然后推送 docker push registry.local/bastion-ai:1.0
4.
容器运行与卷挂载(本地测试)
步骤:先在单机验证容器运行和数据持久化:
- 创建数据卷:docker volume create bastion_data
- 运行命令示例(无GPU):docker run -d --name bastion-ai -p 2222:22 -p 8080:8080 -v bastion_data:/var/lib/bastion registry.local/bastion-ai:1.0
- 若使用GPU:docker run -d --gpus '"device=0"' --name bastion-ai ...
小分段:进入容器查看日志 docker logs -f bastion-ai;用ssh -p2222 user@host 测试堡垒机登录与审计功能
5.
Kubernetes 部署设计(推荐生产方案)
步骤:使用Deployment+Service+PVC实现高可用与持久化,若需高可用考虑ReplicaSet与PodDisruptionBudget。关键点:
- 创建PersistentVolume(PV)与PersistentVolumeClaim(PVC)用于审计日志与模型缓存
- Deployment示例要设置资源requests/limits,若GPU需nvidia.com/gpu资源挂载
- Service类型可用ClusterIP并通过Ingress或LoadBalancer暴露管理界面,内部仅允许管理网段访问
小分段:示例部署命令 kubectl apply -f bastion-deployment.yaml,检查 kubectl get pods -n bastion
6.
存储、模型管理与本地AI推理
步骤:为本地AI模型创建模块化目录并通过PVC挂载:/models 存放onnx、ggml或torchscript模型;/cache 存tokenizer缓存。
- 启动容器时把模型目录映射到镜像内的推理服务配置路径
- 若模型较大,建议使用NodeSelector将Pod调度到存储性能高的节点,并开启Liveness/Readiness探针监控推理服务状态
小分段:模型更新时只需替换PVC中的文件并重启Deployment的Pod以加载新模型(kubectl rollout restart deployment/bastion-ai)
7.
持续交付流水线设计(以GitLab CI为例)
步骤:设计三阶段:build -> push -> deploy。关键文件 .gitlab-ci.yml 示例逻辑:
- build: 使用docker-in-docker构建镜像并打标签,artifact可选
- push: 登录私有registry并推送镜像
- deploy: 触发Kubernetes的更新(kubectl set image 或 Helm upgrade)并等待就绪
小分段:示例命令片段:docker build -t registry.local/bastion-ai:$CI_COMMIT_SHORT_SHA . && docker push ...;kubectl set image deploy/bastion-ai bastion-ai=registry.local/bastion-ai:$CI_COMMIT_SHORT_SHA --namespace=bastion
8.
安全与运维要点
步骤与建议:
- 网络层:仅允许管理出口IP或VPN访问管理端口,使用NetworkPolicy限制Pod间访问;
- 身份鉴权:堡垒机使用SSH公钥、双因素或LDAP/AD集成;AI模型接口使用mTLS或内部Token;
- 日志与审计:将审计日志推送到集中式ELK/EFK或内部S3,用Prometheus+Grafana监控容器与推理延迟;
小分段:定期做镜像扫描(Clair/Trivy)与依赖漏洞修复,CI阶段加入镜像扫描步骤
9.
常见问题 Q1
问题:如何在容器中高效使用GPU并保证性能稳定?
回答:首先宿主机安装官方NVIDIA驱动并启用nvidia-container-toolkit;Docker运行时使用--gpus参数或K8s中声明nvidia.com/gpu资源。为避免共享冲突,给每个推理Pod限定GPU数量并设置资源requests/limits,使用CUDA_VISIBLE_DEVICES控制可见设备。若多模型并发,考虑模型分片或水平扩容并在Inference层加请求队列(如GPU队列器)降低OOM风险。
10.
常见问题 Q2
问题:如何在不影响在线业务的前提下更新AI模型?
回答:把模型存放在PVC或网络文件系统,采用滚动更新:将新模型推到临时路径并在Deployment中先增加新版本副本(蓝绿/金丝雀),验证无误后逐步切换流量。也可通过在应用内实现热加载接口,监听模型文件变化并热重载,从而避免Pod重启。
11.
常见问题 Q3
问题:如何将CI/CD流水线与安全合规结合?
回答:在CI阶段加入自动化扫描(静态代码扫描、依赖漏洞扫描、镜像漏洞扫描),合格后才允许推送镜像并触发部署。部署阶段通过审计、变更记录(如GitOps)和RBAC控制谁能触发上线。流水线中对敏感变量使用CI/CD的Secret管理(如GitLab CI变量、K8s Secret加密)并启用审批流程以满足合规性需求。
来源:堡垒机AI本地部署容器化实践与持续交付流水线设计