开始介绍
那就着手开始干吧。先介绍一下我们的工具链。
主要工具:github、jenkins、kubernetes、ansible、prometheus和jmeter
着手动
1. 设置github作为源代码仓库
-
登录github: 打开浏览器并访问 https://github.com,使用您的github账户登录。
-
创建新的仓库: 登录后,您应该能看到github的主页。点击页面右上角的 "+" 符号,然后选择 "new repository" 或直接在导航栏中找到 "repositories" 并点击 "new"。
-
填写仓库信息: 在新弹出的页面中,您会被要求填写一些关于仓库的基本信息:
- repository name: 输入仓库的名称。这将是您的项目在github上的标识。
- description: 可选地,您可以为仓库添加一个描述,解释其用途或内容。
- visibility: 选择仓库的可见性。您可以选择 "public"(公开)或 "private"(私有)。私有仓库需要付费订阅。
- add a readme file: 选中此选项将自动为您的仓库添加一个readme文件,这是仓库的默认说明文件。
- add .gitignore: 如果适用,可以选择添加一个.gitignore文件,这将帮助您忽略特定类型的文件或目录,例如编译后的文件或操作系统特定的缓存文件。
- add a license: 如果您的项目遵循某种开源许可证,这里可以选择添加一个许可证模板。
-
创建仓库: 填写完所有必要的信息后,点击页面底部的 "create repository" 按钮。
-
初始化本地仓库: 创建仓库后,github会显示初始化本地仓库的命令。您需要在本地机器上安装git,并在您希望存放项目代码的目录中运行以下命令:
git init初始化完成后,使用以下命令将本地仓库与github仓库关联:
git remote add origin https://github.com/yourusername/your-reponame.git -
推送代码到github: 将您的代码添加到本地仓库中,然后使用以下命令将代码推送到github:
git add . git commit -m "initial commit" git push -u origin main
2. 配置jenkins作为持续集成/持续交付服务器
步骤1: 安装jenkins
- 下载jenkins: 访问jenkins官方网站 download and deploy 下载适合您操作系统的jenkins安装包。
- 安装jenkins:
- linux: 使用rpm或deb包安装,或通过docker容器运行。
- windows: 下载windows安装程序并运行。
- macos: 可以通过homebrew安装。
- 启动jenkins: 根据您的操作系统,使用相应的命令或服务管理工具启动jenkins。
- 初始化jenkins: 第一次启动时,jenkins会引导您完成初始化过程,包括解锁jenkins和设置管理员密码。
步骤2: 配置jenkins
a. 解锁jenkins
- 获取初始管理员密码: jenkins会提示您从
/var/lib/jenkins/目录下的密钥文件中获取初始密码。 - 输入密码解锁: 在浏览器中输入密码解锁jenkins。
b. 安装插件
- 安装推荐插件: jenkins会推荐一组插件,选择 “install” 安装它们。
- 安装额外插件: 根据项目需求,可能需要安装额外的插件,如 github plugin, git plugin, kubernetes plugin, docker pipeline plugin 等。
c. 创建第一个管理员用户
- 设置用户名和密码: 创建一个新的管理员账户。
- 保存设置: 完成后,保存并完成初始化过程。
步骤3: 创建jenkins job
- 新建job: 在jenkins主页点击 “new item”。
- 选择job类型: 选择适合的类型,如 “freestyle project” 或者 “pipeline”。
- 配置job:
- general: 给job命名,添加描述。
- source code management: 配置源代码管理,如 git,指定仓库url、分支等。
- build triggers: 设置触发构建的条件,如代码提交、定时任务等。
- build environment: 可以在这里设置环境变量或脚本。
- build steps: 添加构建步骤,如执行shell命令、调用maven或gradle命令等。
- post-build actions: 配置构建后的动作,如发送邮件通知、部署到kubernetes等。
- save: 保存配置。
步骤4: 集成github
- 安装github plugin: 如果还未安装,确保已经安装了github plugin。
- 配置github credentials: 在jenkins的全局配置中添加github的访问令牌。
- 配置job: 在job配置中,选择github作为源代码管理,并使用前面创建的credentials。
步骤5: 测试和优化
- 手动触发构建: 开始手动触发构建,检查是否一切正常。
- 自动化构建: 设置自动化触发,如通过github webhook来自动触发构建。
- 监控和日志: 查看构建日志,监控构建状态,确保没有错误发生。
步骤6: 部署至kubernetes
- 配置kubernetes plugin: 安装kubernetes plugin,如果还未安装的话。
- 添加kubernetes credentials: 在jenkins中添加kubernetes集群的凭证。
- 配置部署步骤: 在job的构建步骤中添加kubernetes部署命令。
通过以上步骤,就可以配置好jenkins作为持续集成和持续交付的服务器了。确保在实际操作中,根据您的具体需求和环境进行适当的调整。
3. 部署kubernetes集群
配置kubernetes集群,对于一个普通的团队而言,最划算的是直接使用云服务商提供的云服务器,这样也不用麻烦自己搭建。但是如果想要自己搭建的话,也是可以的,这边介绍使用kubeadm来搭建kubernetes集群。
准备工作
-
服务器准备:
- 确保每台服务器或虚拟机都满足kubernetes的系统要求。
- 每台机器上都需要安装linux操作系统(如centos、ubuntu等)。
-
关闭防火墙和selinux: 这是为了简化安装过程,但在生产环境中,你可能需要配置防火墙规则而不是完全禁用它。
sudo systemctl stop firewalld sudo systemctl disable firewalld sudo setenforce 0 sudo sed -i 's/^selinux=enforcing$/selinux=disabled/' /etc/selinux/config -
禁用swap: kubernetes不支持在有活跃swap的系统上运行。
sudo swapoff -a
安装kubernetes
-
安装必要的软件包:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl -
添加kubernetes的gpg密钥:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - -
添加kubernetes的apt仓库:
cat <<eof | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main eof -
安装kubernetes的组件:
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
配置和初始化主节点
-
初始化master节点:
sudo kubeadm init --pod-network-cidr=<cidr><cidr>应替换为你的pod网络cidr,例如10.244.0.0/16。 -
设置kubeconfig: 初始化完成后,
kubeadm init会输出一些信息,包括一个kubectl配置文件的位置。你需要把这个配置文件复制到你的用户主目录下。mkdir -p $home/.kube sudo cp -i /etc/kubernetes/admin.conf $home/.kube/config sudo chown $(id -u):$(id -g) $home/.kube/config
加入worker节点
- 运行
kubeadm join命令: 在初始化master节点后,kubeadm init会输出一个kubeadm join命令。在每个worker节点上运行这个命令以加入集群。
配置网络插件
- 安装网络插件: 通常使用像flannel、calico或weave net这样的网络插件。以flannel为例:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/documentation/kube-flannel.yml
验证集群状态
-
检查节点状态:
kubectl get nodes -
检查集群状态:
1kubectl cluster-info
以上步骤提供了搭建kubernetes集群的基本流程。在生产环境中,你可能还需要考虑更多因素,如高可用性、安全性和性能优化等。另外,许多云服务商如aws、google cloud和azure都提供了托管的kubernetes服务,可以大大简化部署和维护的复杂度。
4. 使用ansible自动化部署
配置ansible用于自动化部署通常涉及到以下几个关键步骤:
-
安装ansible 首先确保ansible已经安装在你的控制节点(即运行ansible命令的机器)上。如果你还没有安装,可以在linux系统上使用如下命令进行安装:
sudo apt update sudo apt install ansible -
配置ansible ansible的配置文件通常位于
/etc/ansible/ansible.cfg,你可以在此文件中修改一些默认配置,例如ssh超时时间、重试次数等。 -
创建inventory文件 inventory文件是用来定义目标主机列表以及它们的变量的地方。可以使用ini格式或yaml格式。例如:
[webservers] host1.example.com host2.example.com [dbservers] db1.example.com db2.example.com或者使用动态inventory脚本。
-
编写playbooks playbooks是ansible的核心,使用yaml语法编写,用来定义要执行的任务序列。例如,一个简单的playbook可能看起来像这样:
- name: deploy web application hosts: webservers become: yes tasks: - name: update apt cache apt: update_cache: yes - name: install apache apt: name: apache2 state: latest - name: copy html files copy: src: ./html_files/ dest: /var/www/html/ owner: www-data group: www-data mode: 0644 - name: restart apache service: name: apache2 state: restarted enabled: yes -
执行playbook 使用
ansible-playbook命令来执行playbook:1ansible-playbook -i inventory.ini deploy_webapp.yml -
使用role和modules ansible的role提供了一种组织playbook的方式,使得代码更加模块化和可重用。modules则是ansible执行特定任务的小型程序。
-
测试和调试 使用
--check选项来测试playbook是否会按预期工作,而不做任何更改:1ansible-playbook -i inventory.ini deploy_webapp.yml --check -
优化和维护 随着ansible playbooks的增加,你可能需要优化它们以适应不断变化的需求,比如添加错误处理、使用变量、模板化配置文件等。
-
集成ci/cd 将ansible集成到持续集成/持续交付(ci/cd)管道中,例如与jenkins、gitlab ci/cd或circleci配合使用,以便在代码变更时自动执行部署。
-
安全和权限 确保ansible操作的安全性,例如使用
become关键字来提升权限,使用vault加密敏感信息,以及限制谁可以执行ansible操作。
5. 配置prometheus和grafana进行监控
1. 安装prometheus
首先,你需要在一台服务器上安装prometheus。prometheus可以从其官方网站下载适用于不同操作系统的二进制文件。以下是在linux上安装prometheus的简要步骤:
下载prometheus
wget https://github.com/prometheus/prometheus/releases/download/v<version>/prometheus-<version>.linux-amd64.tar.gz
tar xvfz prometheus-<version>.linux-amd64.tar.gz
移动文件到适当位置
sudo mv prometheus-<version>.linux-amd64/prometheus /usr/local/bin/prometheus
sudo mv prometheus-<version>.linux-amd64/promtool /usr/local/bin/promtool
sudo rm -rf prometheus-<version>.linux-amd64
创建配置文件
sudo nano /etc/prometheus/prometheus.yml
然后在配置文件中添加目标监控的job和scrape配置。
2. 启动prometheus
启动prometheus,通常使用systemd或作为docker容器运行。
使用systemd
sudo nano /etc/systemd/system/prometheus.service
在文件中添加prometheus服务的定义,保存并重新加载systemd配置,然后启动prometheus。
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
3. 安装grafana
grafana可以从其官方网站下载或通过包管理器安装。
使用apt安装
1sudo apt-get install -y adduser libfontconfig1
2wget https://dl.grafana.com/oss/release/grafana_8.0.0_amd64.deb
3sudo dpkg -i grafana_8.0.0_amd64.deb
启动grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
4. 配置grafana
打开浏览器,访问grafana的web界面,默认地址是 http://localhost:3000,使用默认的用户名和密码登录(admin/admin)。
添加数据源
在grafana中添加prometheus作为数据源。
创建仪表板
使用grafana创建新的仪表板,并添加图表来展示prometheus收集的数据。
5. 配置exporter和target
如果需要监控特定的应用或服务,可能需要安装相应的exporter。例如,对于node exporter、blackbox exporter或其他特定的服务exporter。
6. 配置alerting(可选)
如果需要配置警报,可以使用prometheus的alertmanager,配置规则并设定警报条件。
请注意,实际配置可能会因具体需求和环境而异,上述步骤提供了基础框架。在生产环境中,你可能需要更详细的规划,如安全性、持久存储、高可用性和扩展性等方面的考虑。
6. 使用jmeter进行性能测试
6. 运行测试计划
完成配置后,点击工具栏上的绿色三角形图标(运行按钮)或选择 "run -> start" 来运行测试计划。
7. 分析结果
测试运行完成后,使用 "view results tree" 或 "aggregate report" 等监听器来查看和分析测试结果。
-
1. 安装 java
jmeter 是基于 java 构建的,因此首先需要在你的计算机上安装 java development kit (jdk)。你可以从 oracle 的官方网站下载最新版本的 jdk,并按照指示进行安装。安装完成后,确保设置好环境变量,使
java命令可以在命令行中全局调用。2. 下载和安装 jmeter
访问 apache jmeter 的官方网站下载最新版本的 jmeter zip 包。解压缩下载的 zip 文件到你希望存放 jmeter 的目录。
3. 配置 jmeter 属性
在 jmeter 目录下的
bin文件夹中,找到jmeter.properties文件。使用文本编辑器打开它,你可以在这里配置各种 jmeter 的行为。例如,如果你想将界面语言更改为中文,可以取消注释language=zh_cn这一行。4. 运行 jmeter
打开命令行或终端,导航到 jmeter 的
bin目录,并运行jmeter.sh(unix/linux)或jmeter.bat(windows)。这将启动 jmeter 的图形界面。5. 创建测试计划
一旦 jmeter 运行起来,你可以开始创建测试计划。测试计划是所有测试元素的容器,包括线程组、采样器、监听器等。
步骤如下:
-
新建测试计划:
- 选择 "test plan" 并从上下文菜单中选择 "add -> logic controller -> simple controller" 来添加逻辑控制器(如果需要)。
-
添加线程组:
- 在测试计划或逻辑控制器下添加 "thread group",这将定义测试的并发用户数和循环次数。
-
添加采样器:
- 在线程组下添加 "sampler",如 "http request default",用于向目标服务器发送请求。
- 配置请求的 url、方法、参数等。
-
添加监听器:
- 添加 "listener" 如 "view results tree" 或 "summary report",以便观察和分析测试结果。
-
配置其他元素:
- 根据需要添加断言、定时器、配置元件等。
7. 整合所有组件
使用jenkins pipeline as code功能,可以将构建、测试和部署的步骤整合成一个自动化流水线。下面是一个示例,展示了如何使用declarative pipeline语法来实现这一过程,该流水线包括构建、单元测试、集成测试、静态代码分析、打包、部署以及使用prometheus和grafana进行监控。
jenkinsfile 示例
在项目根目录中创建一个名为 jenkinsfile 的文件,然后输入以下内容:
pipeline {
agent any
environment {
docker_registry = "your-docker-registry-url"
image_name = "your-image-name"
tag = "${env.build_number}"
}
stages {
stage('build') {
steps {
script {
sh 'mvn clean package'
}
}
}
stage('test') {
steps {
script {
sh 'mvn test'
}
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
stage('static analysis') {
steps {
script {
sh 'mvn checkstyle:checkstyle'
}
}
post {
always {
archiveartifacts 'target/checkstyle-result.xml'
publishhtml target: [
allowmissing: true,
alwayslinktolastbuild: false,
keepall: true,
reportdir: 'target/site/checkstyle',
reportfiles: 'index.html',
reportname: 'checkstyle report',
reporttitles: ''
]
}
}
}
stage('package') {
steps {
script {
sh 'docker build -t ${image_name}:${tag} .'
sh 'docker tag ${image_name}:${tag} ${docker_registry}/${image_name}:${tag}'
sh 'docker push ${docker_registry}/${image_name}:${tag}'
}
}
}
stage('deploy') {
steps {
script {
sh 'kubectl apply -f kubernetes/deployment.yaml'
sh 'kubectl apply -f kubernetes/service.yaml'
}
}
}
stage('prometheus & grafana setup') {
steps {
script {
sh 'kubectl apply -f monitoring/prometheus.yml'
sh 'kubectl apply -f monitoring/grafana.yml'
}
}
}
}
options {
timeout(time: 30, unit: 'minutes')
}
triggers {
pollscm('*/30 * * * *')
}
}
- agent:指定流水线应该在哪个节点上运行。
- environment:定义流水线中使用的环境变量。
- stages:流水线中的各个阶段。
- steps:每个阶段执行的具体操作。
- post:阶段结束后执行的操作,例如收集测试报告、静态分析报告等。
- options:定义流水线的额外选项,例如超时时间。
- triggers:触发流水线执行的条件,例如定期执行或代码提交时。
这样,整条流水线就可以转起来了。当然,中间的细节,需要依照实际的情况进行调整,不过这边整个devops平台基本就是 完整了。
发表评论