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

打印 上一主题 下一主题

主题 1841|帖子 1841|积分 5523

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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
  1. # 安装依赖sudo apt install -y apt-transport-https ca-certificates software-properties-common
复制代码
  1. # 添加Docker官方GPG密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
复制代码
  1. # 添加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
复制代码
  1. # 安装Dockersudo apt updatesudo apt install -y docker-ce docker-ce-cli containerd.io
复制代码
  1. # 添加当前用户到docker组sudo usermod -aG docker $USERnewgrp docker
复制代码
  1. # 安装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
复制代码
  1. # 验证安装docker --versiondocker-compose --version
复制代码
2. 安装Kubernetes (可选)
  1. # 添加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
复制代码
  1. # 安装kubelet, kubeadm和kubectlsudo apt updatesudo apt install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl
复制代码
  1. # 初始化Kubernetes集群 (在主节点上执行)sudo kubeadm init --pod-network-cidr=10.244.0.0/16
复制代码
  1. # 配置kubectl (在主节点上执行)mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码
  1. # 安装网络插件 (在主节点上执行)kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
复制代码
3. 安装GitLab (代码仓库和CI/CD)
  1. # 安装依赖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
复制代码
  1. # 安装GitLab (替换your-domain.com为您的域名)sudo EXTERNAL_URL="http://your-domain.com" apt install gitlab-ce
复制代码
  1. # 初始配置完成后访问# http://your-server-ip
复制代码
  1. # 首次访问需要设置root密码
复制代码
4. 安装Jenkins (CI/CD)
  1. # 添加Jenkins仓库密钥curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
复制代码
  1. # 添加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
复制代码
  1. # 安装Jenkinssudo apt updatesudo apt install -y jenkins
复制代码
  1. # 启动Jenkinssudo systemctl enable jenkinssudo systemctl start jenkins
复制代码
  1. # 查看初始管理员密码sudo cat /var/lib/jenkins/secrets/initialAdminPassword
复制代码
  1. # 访问Jenkins# http://your-server-ip:8080
复制代码
5. 安装Prometheus + Grafana (监控)

使用Docker Compose安装:
  1. # 创建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:
  1. global:   scrape_interval: 15sscrape_configs:   - job_name: 'prometheus'     static_configs:       - targets: ['localhost:9090']      - job_name: 'node-exporter'     static_configs:       - targets: ['node-exporter:9100']
复制代码
启动监控服务:
  1. docker-compose -f docker-compose-monitoring.yml up -d
复制代码
6. 安装ELK Stack (日志管理)
  1. # 创建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:
  1. input {   tcp {     port => 5000     codec => json   } }  output {   elasticsearch {     hosts => ["elasticsearch:9200"]     index => "logstash-%{+YYYY.MM.dd}"   } }
复制代码
启动ELK服务:
  1. 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)
      • 或手动重启:




        1. # 通过命令行重启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)

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

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

    第二部分:GitLab Webhook 设置

    2. 在 GitLab 中添加 Webhook


    • 进入 GitLab 项目设置

      • 导航到你的 GitLab 项目
      • 点击左侧菜单 "Settings" → "Webhooks"

    • 填写 Webhook 详情

      • 在 Jenkins 项目设置的 GitLab 触发部分生成
      • 复制并粘贴到 GitLab 的 "Secret Token" 字段


      • URL: 粘贴从 Jenkins 复制的 Webhook URL
      • Secret Token(可选但推荐):

    • 选择触发事故
      markdown
      复制
      1. 推荐勾选:- 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)
    推荐环境


    1. # 验证 kubectl 配置kubectl cluster-info
    复制代码
    1. # 获取当前上下文kubectl config current-context
    复制代码
    二、安装 Kubernetes 插件

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

    • 登录 Jenkins 控制台

      • 使用管理员账号访问 http://:8080

    • 导航到插件管理

      • 左侧菜单 → "Manage Jenkins" → "Manage Plugins"

    • 安装插件

      • 切换到 "Available" 标签页
      • 搜索 "Kubernetes" 插件
      • 勾选以下核心插件:
        复制
        1. ✓ Kubernetes ✓ Kubernetes CLI ✓ Kubernetes Credentials
        复制代码

    • 下载并安装

      • 点击页面底部的 "Install without restart"
      • 或选择 "Download now and install after restart"

    • 重启 Jenkins(可选)


      1. # 通过命令行重启sudo systemctl restart jenkins
      复制代码
    方法2:通过 Jenkins CLI 安装


    1. # 使用 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"

    • 填写集群信息


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

      • "Kubernetes configuration (kubeconfig)":上传 kubeconfig 文件
      • "Secret text":直接粘贴 Service Account token


      • 点击 "Add" → "Jenkins"
      • 选择凭据类型:
      • 测试连接:"Test Connection" 应显示 "Connected to Kubernetes v1.x.x"

    高级设置项


    1. Namespace: jenkins  
    复制代码
    1. # 建议指定命名空间Jenkins URL: http://jenkins.jenkins.svc.cluster.local:8080  
    复制代码
    1. # 集群内访问地址Jenkins tunnel: jenkins-agent.jenkins.svc.cluster.local:50000  
    复制代码
    1. # 代理通信通道Pod Templates:  
    复制代码
    1. # 配置动态创建的代理Pod   - Name: jnlp    Containers:       - Name: jnlp        Image: jenkins/inbound-agent:latest        Resource Limits:           CPU: 500m          Memory: 512Mi
    复制代码
    四、验证安装

    1. 创建测试流水线
    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 创建
    1. # 在 Kubernetes 集群中查看kubectl get pods -n jenkins --watch
    复制代码
     
  • (2)设置Kubernetes云,连接到您的Kubernetes集群
  • (3)创建Kubernetes部署的Jenkins Pipeline
3. 设置监控告警


  • 在Grafana中设置Prometheus数据源
  • 导入Kubernetes和服务器监控仪表板
  • 设置告警规则和通知渠道
安全加固建议


  • 防火墙设置
  1. sudo ufw allow 22sudo ufw allow 80sudo ufw allow 443sudo ufw enable
复制代码

  • 定期备份

    • GitLab数据
    • Jenkins设置
    • 数据库数据

  • 使用HTTPS

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

  • 访问控制

    • 为所有服务设置强密码和双因素认证
    • 使用LDAP/AD集成举行统一认证

维护与管理


  • 定期更新
  1. sudo apt update && sudo apt upgrade -ydocker-compose pull
复制代码

  • 监控系统资源使用

    • 使用Grafana监控服务器资源
    • 设置资源使用告警

  • 日志分析

    • 定期检查Kibana中的系统日志
    • 设置关键错误告警

扩展建议


  • 高可用部署

    • 考虑多节点Kubernetes集群
    • 数据库主从复制

  • 多云支持

    • 设置Terraform实现多云部署
    • 使用Ansible举行跨云设置管理

  • 高级CI/CD功能

    • 蓝绿部署
    • 金丝雀发布
    • 主动化测试集成

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表