系统架构概述
一个完整的企业级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
# 首次访问需要设置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)在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://<jenkins-server>: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系统,满足代码管理、持续集成、持续部署、监控告警等核心需求。
来源链接:https://www.cnblogs.com/Johny-zhao/p/18821494
没有回复内容