马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
系统架构概述
一个完备的企业级DevOps系统通常包含以下核心组件:
- 版本控制:GitLab/Gitea
- 持续集成/持续部署(CI/CD):Jenkins/GitLab CI
- 容器编排:Docker + Kubernetes
- 设置管理:Ansible
- 监控告警:Prometheus + Grafana
- 日志管理:ELK Stack (Elasticsearch, Logstash, Kibana)
- 项目管理:Jira/禅道 (可选)
环境预备
1. 系统要求
- Ubuntu Server 20.04/22.04 LTS
- 建议设置:4核CPU,8GB内存,100GB存储(根据企业规模调解)
- 稳定的网络连接
2. 基础环境设置
# 更新系统sudo apt update && sudo apt upgrade -y
# 安装常用工具sudo apt install -y curl wget vim git net-tools
# 设置时区sudo timedatectl set-timezone Asia/Shanghai
# 关闭swap (Kubernetes需要)sudo swapoff -asudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
核心组件安装
1. 安装Docker和Docker Compose
- # 安装依赖sudo apt install -y apt-transport-https ca-certificates software-properties-common
复制代码- # 添加Docker官方GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
复制代码- # 添加Docker仓库echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
复制代码- # 安装Dockersudo apt updatesudo apt install -y docker-ce docker-ce-cli containerd.io
复制代码- # 添加当前用户到docker组sudo usermod -aG docker $USERnewgrp docker
复制代码- # 安装Docker Composesudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
复制代码- # 验证安装docker --versiondocker-compose --version
复制代码 2. 安装Kubernetes (可选)
- # 添加Kubernetes仓库sudo apt install -y apt-transport-https ca-certificates curlsudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpgecho "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
复制代码- # 安装kubelet, kubeadm和kubectlsudo apt updatesudo apt install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl
复制代码- # 初始化Kubernetes集群 (在主节点上执行)sudo kubeadm init --pod-network-cidr=10.244.0.0/16
复制代码- # 配置kubectl (在主节点上执行)mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码- # 安装网络插件 (在主节点上执行)kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
复制代码 3. 安装GitLab (代码仓库和CI/CD)
- # 安装依赖sudo apt install -y curl openssh-server ca-certificates postfix# 添加GitLab仓库curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
复制代码- # 安装GitLab (替换your-domain.com为您的域名)sudo EXTERNAL_URL="http://your-domain.com" apt install gitlab-ce
复制代码- # 初始配置完成后访问# http://your-server-ip
复制代码 4. 安装Jenkins (CI/CD)
- # 添加Jenkins仓库密钥curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
复制代码- # 添加Jenkins仓库echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
复制代码- # 安装Jenkinssudo apt updatesudo apt install -y jenkins
复制代码- # 启动Jenkinssudo systemctl enable jenkinssudo systemctl start jenkins
复制代码- # 查看初始管理员密码sudo cat /var/lib/jenkins/secrets/initialAdminPassword
复制代码- # 访问Jenkins# http://your-server-ip:8080
复制代码 5. 安装Prometheus + Grafana (监控)
使用Docker Compose安装:- # 创建docker-compose-monitoring.yml文件version: '3'services: prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' grafana: image: grafana/grafana ports: - "3000:3000" volumes: - grafana-storage:/var/lib/grafana depends_on: - prometheus node-exporter: image: prom/node-exporter ports: - "9100:9100" restart: unless-stoppedvolumes: grafana-storage:
复制代码 创建Prometheus设置文件 prometheus.yml:- global: scrape_interval: 15sscrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node-exporter' static_configs: - targets: ['node-exporter:9100']
复制代码 启动监控服务:- docker-compose -f docker-compose-monitoring.yml up -d
复制代码 6. 安装ELK Stack (日志管理)
- # 创建docker-compose-elk.yml文件version: '3'services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0 environment: - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata:/usr/share/elasticsearch/data ports: - "9200:9200" logstash: image: docker.elastic.co/logstash/logstash:7.17.0 volumes: - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf ports: - "5000:5000" depends_on: - elasticsearch kibana: image: docker.elastic.co/kibana/kibana:7.17.0 ports: - "5601:5601" depends_on: - elasticsearchvolumes: esdata:
复制代码 创建Logstash设置文件 logstash.conf:- input { tcp { port => 5000 codec => json } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "logstash-%{+YYYY.MM.dd}" } }
复制代码 启动ELK服务:- docker-compose -f docker-compose-elk.yml up -d
复制代码 系统集成与设置
1. 集成GitLab与Jenkins
- (1)在GitLab中创建项目
- (2)在Jenkins中安装GitLab插件
- 通过Jenkins管理界面安装(推荐)
- 登录Jenkins
- 打开浏览器,访问您的Jenkins地址(如:http://your-jenkins-server:8080)
- 使用管理员账号登录
- 进入插件管理页面
- 点击左侧导航栏的"Manage Jenkins"(管理Jenkins)
- 选择"Manage Plugins"(管理插件)
- 切换到可用插件标签页
- 点击"Available plugins"(可用插件)标签
- 在搜索框中输入"GitLab"举行过滤
- 选择并安装插件
- GitLab Plugin(核心插件,必须安装)
- GitLab API Plugin(提供API支持)
- GitLab Authentication Plugin(如需GitLab认证)
- 找到以下核心插件(建议全部安装):
- 勾选所需插件旁边的复选框
- 点击页面底部的"Install without restart"(不重启安装)或"Download now and install after restart"(下载并重启后安装)
- 等待安装完成
- 页面会显示安装进度条
- 安装完成后可能会提示需要重启Jenkins
- 重启Jenkins(如需要)
- 安装完成后,勾选"Restart Jenkins when installation is complete and no jobs are running"(当安装完成且没有任务运行时重启Jenkins)
- 或手动重启:
- # 通过命令行重启sudo systemctl restart jenkins
复制代码
- (3)设置Jenkins与GitLab的Webhook
- 前置条件
- 已完成 Jenkins 和 GitLab 的安装
- 已在 Jenkins 中安装 GitLab 插件
- 拥有 GitLab 项目的管理员权限
- Jenkins 服务器可被 GitLab 访问(考虑防火墙/NAT设置)
第一部分:Jenkins 项目设置
1. 创建或设置 Jenkins 项目
- 新建项目 或 进入现有项目设置:
- 点击 Jenkins 首页的 "新建项目" 或
- 选择现有项目 → 点击 "设置"
- 设置源码管理:
- 选择 "Git"
- 填写 GitLab 仓库地址 (如 http://gitlab.example.com/group/project.git)
- 添加凭据(GitLab 用户名/密码或 SSH 密钥)
- 启用 GitLab 触发:
- 找到 "构建触发器(Build Triggers)" 部分
- 勾选 "Build when a change is pushed to GitLab"
- 记载显示的 Webhook URL(如 http://jenkins.example.com/project/my-project)
- 高级设置(可选):
复制- [可选] 在 "高级" 设置中可以: - 设置允许的分支(白名单) - 配置合并请求(Merge Request)的构建策略 - 设置忽略的提交信息模式
复制代码 - 保存设置:
第二部分:GitLab Webhook 设置
2. 在 GitLab 中添加 Webhook
- 进入 GitLab 项目设置:
- 导航到你的 GitLab 项目
- 点击左侧菜单 "Settings" → "Webhooks"
- 填写 Webhook 详情:
- 在 Jenkins 项目设置的 GitLab 触发部分生成
- 复制并粘贴到 GitLab 的 "Secret Token" 字段
- URL: 粘贴从 Jenkins 复制的 Webhook URL
- Secret Token(可选但推荐):
- 选择触发事故:
markdown
复制- 推荐勾选:- Push events- Merge request events- Tag push events- Comments (可选,用于通过评论触发)
复制代码 - SSL 验证(生产环境重要):
- 如果 Jenkins 使用 HTTPS,建议勾选 "Enable SSL verification"
- 确保 Jenkins 使用有效证书
- 测试 Webhook:
- 点击 "Add webhook" 保存
- 添加后点击 "Test" → 选择 "
ush events"
- 观察 Jenkins 是否触发构建
- (4)创建Jenkins Pipeline项目,使用Jenkinsfile定义CI/CD流程
2. 设置Kubernetes与Jenkins集成
- (1)在Jenkins中安装Kubernetes插件
- 一、安装前预备
系统要求
- 运行中的 Jenkins 实例(版本 2.60.3 或更高)
- 访问 Kubernetes 集群的权限(kubeconfig 文件)
- Jenkins 管理员权限
- 网络连通性(Jenkins 能访问 Kubernetes API Server)
推荐环境
- # 验证 kubectl 配置kubectl cluster-info
复制代码- # 获取当前上下文kubectl config current-context
复制代码 二、安装 Kubernetes 插件
方法1:通过 Jenkins 管理界面安装(推荐)
- 登录 Jenkins 控制台
- 导航到插件管理
- 左侧菜单 → "Manage Jenkins" → "Manage Plugins"
- 安装插件
- 切换到 "Available" 标签页
- 搜索 "Kubernetes" 插件
- 勾选以下核心插件:
复制- ✓ Kubernetes ✓ Kubernetes CLI ✓ Kubernetes Credentials
复制代码
- 下载并安装
- 点击页面底部的 "Install without restart"
- 或选择 "Download now and install after restart"
- 重启 Jenkins(可选)
- # 通过命令行重启sudo systemctl restart jenkins
复制代码 方法2:通过 Jenkins CLI 安装
- # 使用 Jenkins CLI 安装(需替换 JENKINS_URL)java -jar jenkins-cli.jar -s http://localhost:8080/ install-plugin kubernetes -deploy
复制代码 方法3:手动安装(离线环境)三、设置 Kubernetes 插件
基础设置步骤
- 进入系统设置
- Manage Jenkins → Configure System
- 找到 Cloud 设置
- 滚动到 "Cloud" 部分 → 点击 "Add a new cloud" → 选择 "Kubernetes"
- 填写集群信息
- Name: kubernetes # 连接名称Kubernetes URL: https://kubernetes.default.svc.cluster.local # 如果是集群内部署,使用上述内部地址
复制代码- # 外部访问使用 https://<external-ip>:6443
复制代码- 设置凭据
- "Kubernetes configuration (kubeconfig)":上传 kubeconfig 文件
- "Secret text":直接粘贴 Service Account token
- 点击 "Add" → "Jenkins"
- 选择凭据类型:
- 测试连接:"Test Connection" 应显示 "Connected to Kubernetes v1.x.x"
高级设置项
- # 建议指定命名空间Jenkins URL: http://jenkins.jenkins.svc.cluster.local:8080
复制代码- # 集群内访问地址Jenkins tunnel: jenkins-agent.jenkins.svc.cluster.local:50000
复制代码- # 配置动态创建的代理Pod - Name: jnlp Containers: - Name: jnlp Image: jenkins/inbound-agent:latest Resource Limits: CPU: 500m Memory: 512Mi
复制代码 四、验证安装
1. 创建测试流水线
- // Jenkinsfile 示例pipeline { agent { kubernetes { label 'my-k8s-agent' yaml """ apiVersion: v1 kind: Pod metadata: labels: some-label: some-value spec: containers: - name: maven image: maven:3.8.6-jdk-11 command: ['cat'] tty: true - name: busybox image: busybox command: ['cat'] tty: true """ } } stages { stage('Run shell') { steps { container('maven') { sh 'mvn --version' } container('busybox') { sh 'echo "Hello from busybox"' } } } }}
复制代码 2. 观察 Pod 创建
- # 在 Kubernetes 集群中查看kubectl get pods -n jenkins --watch
复制代码
- (2)设置Kubernetes云,连接到您的Kubernetes集群
- (3)创建Kubernetes部署的Jenkins Pipeline
3. 设置监控告警
- 在Grafana中设置Prometheus数据源
- 导入Kubernetes和服务器监控仪表板
- 设置告警规则和通知渠道
安全加固建议
- sudo ufw allow 22sudo ufw allow 80sudo ufw allow 443sudo ufw enable
复制代码
- 定期备份:
- 使用HTTPS:
- 为所有Web服务设置SSL证书(可以使用Let's Encrypt)
- 访问控制:
- 为所有服务设置强密码和双因素认证
- 使用LDAP/AD集成举行统一认证
维护与管理
- sudo apt update && sudo apt upgrade -ydocker-compose pull
复制代码
- 监控系统资源使用:
- 使用Grafana监控服务器资源
- 设置资源使用告警
- 日志分析:
- 定期检查Kibana中的系统日志
- 设置关键错误告警
扩展建议
- 高可用部署:
- 考虑多节点Kubernetes集群
- 数据库主从复制
- 多云支持:
- 设置Terraform实现多云部署
- 使用Ansible举行跨云设置管理
- 高级CI/CD功能:
通过以上步骤,在Ubuntu系统上搭建一个功能美满的企业级DevOps系统,满足代码管理、持续集成、持续部署、监控告警等核心需求。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |