企业级DevOps系统服务搭建(Ubuntu)

系统架构概述

一个完整的企业级DevOps系统通常包含以下核心组件:

  1. 版本控制:GitLab/Gitea

  2. 持续集成/持续部署(CI/CD):Jenkins/GitLab CI

  3. 容器编排:Docker + Kubernetes

  4. 配置管理:Ansible

  5. 监控告警:Prometheus + Grafana

  6. 日志管理:ELK Stack (Elasticsearch, Logstash, Kibana)

  7. 项目管理: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
# 首次访问需要设置root密码

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. (1)在GitLab中创建项目

  2. (2)在Jenkins中安装GitLab插件

  3. 通过Jenkins管理界面安装(推荐)

    1. 登录Jenkins

      • 打开浏览器,访问您的Jenkins地址(如:http://your-jenkins-server:8080

      • 使用管理员账号登录

    2. 进入插件管理页面

      • 点击左侧导航栏的”Manage Jenkins”(管理Jenkins)

      • 选择”Manage Plugins”(管理插件)

    3. 切换到可用插件标签页

      • 点击”Available plugins”(可用插件)标签

      • 在搜索框中输入”GitLab”进行过滤

    4. 选择并安装插件

      • GitLab Plugin(核心插件,必须安装)

      • GitLab API Plugin(提供API支持)

      • GitLab Authentication Plugin(如需GitLab认证)

      • 找到以下核心插件(建议全部安装):

      • 勾选所需插件旁边的复选框

      • 点击页面底部的”Install without restart”(不重启安装)或”Download now and install after restart”(下载并重启后安装)

    5. 等待安装完成

      • 页面会显示安装进度条

      • 安装完成后可能会提示需要重启Jenkins

    6. 重启Jenkins(如需要)

      • 安装完成后,勾选”Restart Jenkins when installation is complete and no jobs are running”(当安装完成且没有任务运行时重启Jenkins)

      • 或手动重启:

      • # 通过命令行重启sudo systemctl restart jenkins
  4. (3)配置Jenkins与GitLab的Webhook

  5. 前置条件

    • 已完成 Jenkins 和 GitLab 的安装

    • 已在 Jenkins 中安装 GitLab 插件

    • 拥有 GitLab 项目的管理员权限

    • Jenkins 服务器可被 GitLab 访问(考虑防火墙/NAT设置)

    第一部分:Jenkins 项目配置

    1. 创建或配置 Jenkins 项目

    1. 新建项目 或 进入现有项目配置

      • 点击 Jenkins 首页的 “新建项目” 或

      • 选择现有项目 → 点击 “配置”

    2. 配置源码管理

      • 选择 “Git”

      • 填写 GitLab 仓库地址 (如 http://gitlab.example.com/group/project.git)

      • 添加凭据(GitLab 用户名/密码或 SSH 密钥)

    3. 启用 GitLab 触发

      • 找到 “构建触发器(Build Triggers)” 部分

      • 勾选 “Build when a change is pushed to GitLab”

      • 记录显示的 Webhook URL(如 http://jenkins.example.com/project/my-project

    4. 高级设置(可选)

      复制

      [可选] 在 "高级" 设置中可以: - 设置允许的分支(白名单) - 配置合并请求(Merge Request)的构建策略 - 设置忽略的提交信息模式
    5. 保存配置

      • 点击页面底部的 “保存” 按钮

    第二部分:GitLab Webhook 配置

    2. 在 GitLab 中添加 Webhook

    1. 进入 GitLab 项目设置

      • 导航到你的 GitLab 项目

      • 点击左侧菜单 “Settings” → “Webhooks”

    2. 填写 Webhook 详情

      • 在 Jenkins 项目配置的 GitLab 触发部分生成

      • 复制并粘贴到 GitLab 的 “Secret Token” 字段

      • URL: 粘贴从 Jenkins 复制的 Webhook URL

      • Secret Token(可选但推荐):

    3. 选择触发事件

      markdown

      复制

      推荐勾选:- Push events- Merge request events- Tag push events- Comments (可选,用于通过评论触发)
    4. SSL 验证(生产环境重要)

      • 如果 Jenkins 使用 HTTPS,建议勾选 “Enable SSL verification”

      • 确保 Jenkins 使用有效证书

    5. 测试 Webhook

      • 点击 “Add webhook” 保存

      • 添加后点击 “Test” → 选择 “Push events”

      • 观察 Jenkins 是否触发构建

  6. (4)创建Jenkins Pipeline项目,使用Jenkinsfile定义CI/CD流程

2. 配置Kubernetes与Jenkins集成

  1. (1)在Jenkins中安装Kubernetes插件

  2. 一、安装前准备

    系统要求

    • 运行中的 Jenkins 实例(版本 2.60.3 或更高)

    • 访问 Kubernetes 集群的权限(kubeconfig 文件)

    • Jenkins 管理员权限

    • 网络连通性(Jenkins 能访问 Kubernetes API Server)

    推荐环境

  3. # 验证 kubectl 配置kubectl cluster-info
  4. # 获取当前上下文kubectl config current-context

    二、安装 Kubernetes 插件

    方法1:通过 Jenkins 管理界面安装(推荐)

    1. 登录 Jenkins 控制台

      • 使用管理员账号访问 http://<jenkins-server>:8080

    2. 导航到插件管理

      • 左侧菜单 → “Manage Jenkins” → “Manage Plugins”

    3. 安装插件

      • 切换到 “Available” 标签页

      • 搜索 “Kubernetes” 插件

      • 勾选以下核心插件:

        复制

         Kubernetes  Kubernetes CLI  Kubernetes Credentials
    4. 下载并安装

      • 点击页面底部的 “Install without restart”

      • 或选择 “Download now and install after restart”

    5. 重启 Jenkins(可选)

    1. # 通过命令行重启sudo systemctl restart jenkins

    方法2:通过 Jenkins CLI 安装

  5. # 使用 Jenkins CLI 安装(需替换 JENKINS_URL)java -jar jenkins-cli.jar -s http://localhost:8080/ install-plugin kubernetes -deploy

    方法3:手动安装(离线环境)

    1. 从 Jenkins 插件中心 下载 .hpi 文件

    2. 在 “Advanced” 标签页上传插件

    三、配置 Kubernetes 插件

    基础配置步骤

    1. 进入系统配置

      • Manage Jenkins → Configure System

    2. 找到 Cloud 配置

      • 滚动到 “Cloud” 部分 → 点击 “Add a new cloud” → 选择 “Kubernetes”

    3. 填写集群信息

    1. Name: kubernetes  # 连接名称Kubernetes URL: https://kubernetes.default.svc.cluster.local  # 如果是集群内部署,使用上述内部地址
    2.  # 外部访问使用 https://<external-ip>:6443
    3. 配置凭据

      • “Kubernetes configuration (kubeconfig)”:上传 kubeconfig 文件

      • “Secret text”:直接粘贴 Service Account token

      • 点击 “Add” → “Jenkins”

      • 选择凭据类型:

      • 测试连接:”Test Connection” 应显示 “Connected to Kubernetes v1.x.x”

    高级配置项

  6. Namespace: jenkins  
  7. # 建议指定命名空间Jenkins URL: http://jenkins.jenkins.svc.cluster.local:8080  
  8. # 集群内访问地址Jenkins tunnel: jenkins-agent.jenkins.svc.cluster.local:50000  
  9. # 代理通信通道Pod Templates:  
  10. # 配置动态创建的代理Pod  - Name: jnlp    Containers:      - Name: jnlp        Image: jenkins/inbound-agent:latest        Resource Limits:          CPU: 500m          Memory: 512Mi

    四、验证安装

    1. 创建测试流水线

  11. // 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 创建

  12. # 在 Kubernetes 集群中查看kubectl get pods -n jenkins --watch

     

  13. (2)配置Kubernetes云,连接到您的Kubernetes集群

  14. (3)创建Kubernetes部署的Jenkins Pipeline

3. 配置监控告警

  1. 在Grafana中配置Prometheus数据源

  2. 导入Kubernetes和服务器监控仪表板

  3. 配置告警规则和通知渠道

安全加固建议

  1. 防火墙配置

sudo ufw allow 22sudo ufw allow 80sudo ufw allow 443sudo ufw enable
  1. 定期备份

    • GitLab数据

    • Jenkins配置

    • 数据库数据

  2. 使用HTTPS

    • 为所有Web服务配置SSL证书(可以使用Let’s Encrypt)

  3. 访问控制

    • 为所有服务配置强密码和双因素认证

    • 使用LDAP/AD集成进行统一认证

维护与管理

  1. 定期更新

sudo apt update && sudo apt upgrade -ydocker-compose pull
  1. 监控系统资源使用

    • 使用Grafana监控服务器资源

    • 设置资源使用告警

  2. 日志分析

    • 定期检查Kibana中的系统日志

    • 设置关键错误告警

扩展建议

  1. 高可用部署

    • 考虑多节点Kubernetes集群

    • 数据库主从复制

  2. 多云支持

    • 配置Terraform实现多云部署

    • 使用Ansible进行跨云配置管理

  3. 高级CI/CD功能

    • 蓝绿部署

    • 金丝雀发布

    • 自动化测试集成

通过以上步骤,在Ubuntu系统上搭建一个功能完善的企业级DevOps系统,满足代码管理、持续集成、持续部署、监控告警等核心需求。

来源链接:https://www.cnblogs.com/Johny-zhao/p/18821494

请登录后发表评论

    没有回复内容