没腿的鸟 发表于 2025-4-11 22:34:06

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

系统架构概述

一个完备的企业级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 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 --version2. 安装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 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.yml3. 安装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  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:80805. 安装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 -d6. 安装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" → 选择 "Push 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 控制台

[*]使用管理员账号访问 http://:8080

[*]导航到插件管理

[*]左侧菜单 → "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:手动安装(离线环境)
[*]从 Jenkins 插件中心 下载 .hpi 文件
[*]在 "Advanced" 标签页上传插件
三、设置 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"

高级设置项


[*]Namespace: jenkins  
[*]# 建议指定命名空间Jenkins URL: http://jenkins.jenkins.svc.cluster.local:8080  
[*]# 集群内访问地址Jenkins tunnel: jenkins-agent.jenkins.svc.cluster.local:50000  
[*]# 代理通信通道Pod Templates:  
[*]# 配置动态创建的代理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
[*]定期备份:

[*]GitLab数据
[*]Jenkins设置
[*]数据库数据

[*]使用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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 企业级DevOps系统服务搭建(Ubuntu)