实战-terraform方式安装jenkins-20220625(测试成功)
实战:Terraform方式安装jenkins(博客分享-泽阳)-2022.6.25

实验环境
1win10笔记本
21台虚机 centos7.9 vmworkstation
3jenkins/jenkins:2.332.2-centos7-jdk8
4docker 20.10.11
5Terraform v1.1.8
实验软件
链接:https://pan.baidu.com/s/15VlZHrinn9kiy8kf9nZkDw?pwd=caih
提取码:caih
2022.4.13-实验软件-使用TF来起一个jenkins容器

前置条件
- docker环境已安装(本次版本:20.10.11)
0、安装jdk环境
⚠️ 我们测试环境,是在一台虚机上跑了一个jenkins容器。但后面添加一个jenkins agent时,是将这个虚机作为其agent使用,因此这个虚机也要安装java环境的!!!
1(1)下载jdk软件
2[root@devops ~]#wget https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz --no-check-certificate


1(2)配置jdk环境
2[root@devops ~]#tar zxf OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz -C /usr/local/
3[root@devops ~]#cd /usr/local/jdk8u322-b06/
4[root@devops jdk8u322-b06]#pwd
5/usr/local/jdk8u322-b06
6[root@devops jdk8u322-b06]#vim /etc/profile
7export JAVA_HOME=/usr/local/jdk8u322-b06
8export PATH=$JAVA_HOME/bin:$PATH
9[root@devops jdk8u322-b06]#source /etc/profile
10
11(3)验证
12[root@devops jdk8u322-b06]#java -version
13openjdk version "1.8.0_322"
14OpenJDK Runtime Environment (Temurin)(build 1.8.0_322-b06)
15OpenJDK 64-Bit Server VM (Temurin)(build 25.322-b06, mixed mode)
1、安装Terraform
1、下载二进制包
https://www.terraform.io/downloads

2、安装步骤
1(1)上传下载好的二进制包到服务器
2[root@devops ~]#ll -h terraform_1.1.8_linux_amd64.zip
3-rw-r--r-- 1 root root 18M Apr 12 19:59 terraform_1.1.8_linux_amd64.zip
4[root@devops ~]#unzip terraform_1.1.8_linux_amd64.zip
5Archive: terraform_1.1.8_linux_amd64.zip
6 inflating: terraform
7[root@devops ~]#ll -h terraform
8
9(2)移动二进制文件到PATH路径
10-rwxr-xr-x 1 root root 61M Apr 8 00:54 terraform
11[root@devops ~]#mv terraform /usr/local/bin/
12
13(3)验证
14[root@devops ~]#terraform version
15Terraform v1.1.8
16on linux_amd64
3、vscode想要对.tf文件语法的话,这里需要安装Terraform插件:


2、定义Jenkins容器的资源tf文件
1️⃣ 创建Jenkins数据目录
1[root@devops ~]#mkdir -p /data/devops4/jenkins_home
2[root@devops ~]#chmod -R 777 /data/devops4/jenkins_home/
2️⃣ 定义Jenkins容器的资源tf文件
在devops目录下创建如下2个文件:
jenkins.tf
1### 定义docker镜像(jenkins.tf)
2resource "docker_image" "jenkins" {
3 name = "jenkins/jenkins:2.332.2-centos7-jdk8"
4 keep_locally = true //资源销毁后不会删除本地镜像
5}
6
7resource "docker_container" "jenkins" {
8 image = docker_image.jenkins.name
9 name = "devops_tutorial"
10 ports {
11 internal = 8080
12 external = 8080
13 }
14 ports {
15 internal = 50000
16 external = 50000
17 }
18
19 volumes{
20 container_path = "/var/jenkins_home"
21 host_path = "/data/devops4/jenkins_home" //这个目录要提前在主机里进行创建
22 }
23}
main.tf:
1# 定义provider(main.tf)
2terraform {
3 required_providers {
4 docker = {
5 source = "kreuzwerker/docker"
6 version = "~> 2.13.0"
7 }
8 }
9}
10
11provider "docker" {}
3、terraform init 初始化
1[root@devops remote-vscode]#terraform init

4、terraform plan 预览
1[root@devops remote-vscode]#terraform plan

5、terraform apply 部署
1[root@devops remote-vscode]#terraform apply

6、验证
1[root@devops remote-vscode]#docker ps |grep jenkins

http://172.29.9.101:8080/

注意事项
📍 注意:trraform的目录结构(providers)


📍 什么是Terraform?
Teffraform:基础设施即代码!
IaC:基础设施即代码。
现在,基本什么都代码,配置即代码,基础设置即代码;
1管理docker容器
2 - docker命令
3 - docker-compose
4 - 本地用tf来管理docker环境: tf有一个provider,一个插件,它是支持管docker的。所以,我们后面一个tf模板就把整个实验环境就跑起来了,最终可以一键拉起来。
5
6但是TF比较厉害,它的插件支持k8s,就是你不想使用yaml来管理k8s里的资源,那么TF也是可以通过插件来管理k8s里的资源的。此时,就行就需要你来写Tf的provider插件来着,但是还是yaml好使。
7
8这个TF太牛了!!(tf:管理你的基础设施的。)
9但这个工具也存在一定的危险性,我可以一键去创建,也可以一键去销毁。
10老师大力推荐!
📍 ansible和terraform的区别?
答:ansible和TF他们不是一个级别的东西: TF它管理的是你的服务器,其实TF主要是针对这个云供应商的,创建这些机器、网络、vpc…… ansible是实现基础设置之上的,应用部署这块的; 他两之间可以结合去用;
📍 待提问:provider "docker" {……} 2375端口问题

如果是本机的话,provider "docker" {……}这里可以省略!
🍀 老师这里有监听到这个包2375端口,但是为什么我自己的没有呢?但是可以可以成功部署jenkins容器。
老师说是docker服务默认监听的端口。。。。;😥
老师现象:

自己现象:

📍 搁置问题:如何在terraform里添加env,老师当时添加时报错了。。。

📍 这个terraform网站是真的慢。。。

📍 terraform命令
1terraform init 初始化
2terraform plan 预览 //看下它的变更
3terraform apply 部署
🍀 初始化
1terraform init

插件下载后存放位置:

🍀 预览
1terraform plan


🍀 部署
1terraform apply


⚠️ 可以指定单个文件来来部署:

🍀 销毁资源命令
1terraform destroy

📍 terraform使用方法
registry.terraform.io是terraform的仓库

点击Browse Provider:

搜索docker:



使用文档:

📍 测试:测试使用terraform命令销毁容器后,宿主机上的数据还在吗?-2022.5.5
1terraform destroy
🍀 测试问题
- 使用terraform命令销毁容器后,宿主机上的数据还在吗
- 如果在的话,那么如果更新了gitlab.tf文件后,再次执行terraform apply后,需要提前删除宿主机上持久上的数据吗?–>猜测:应该是不需要的!
🍀 已经部署成功的gitlab实例



查看下宿主机上持久了gitlab容器的目录:

可以看到,当前是存在数据的!
🍀 此时,直接销毁刚才那个gitlab.tf那个资源


🍀 验证
可以看到之前创建的资源被删除了,但是持久到宿主机上的数据都还在;


📍 注意:如果镜像很大,可先用docker拉取下下来,再执行terraroem命令!


📍 测试:使用terradorm安装时应该不需要先在宿主机上创建相应目录把…?

- 开始测试:


- 总结:
奇怪,没有自动在宿主机上创建相应应用目录,也是可以把这个应用跑起来的!!!
这个就感觉有点奇怪了……
之前的应用都是有手动创建宿主机上目录的;


本次就先放这里吧,作为一个遗留问题,后续统一学习terradrom时再研究;
📍 方法:terraform里这种用法!

1locals {
2 volumes = [
3 {
4 container_path = "/data/devops4/sonarqube/sonarqube_conf"
5 host_path = "/opt/sonarqube/conf"
6 },
7 {
8 container_path = "/data/devops4/sonarqube/sonarqube_extensions"
9 host_path = "/opt/sonarqube/extension"
10 },
11 {
12 container_path = "/data/devops4/sonarqube/sonarqube_logs"
13 host_path = "/opt/sonarqube/logs"
14 },
15 {
16 container_path = "/data/devops4/sonarqube/sonarqube_data"
17 host_path = "/opt/sonarqube/data"
18 }
19 ]
20}
21
22resource "docker_image" "sonar" {
23 name = "sonarqube:8.9.8-community"
24 keep_locally = true //销毁时不删除本地镜像
25}
26
27resource "docker_container" "sonarqube" {
28 image = docker_image.sonar.name
29 name = "sonarqube"
30 ports {
31 internal = 9000
32 external = 9000
33 }
34
35 dynamic "volumes" {
36 for_each = local.volumes
37 content {
38 container_path = volumes.value["container_path"]
39 host_path = volumes.value["host_path"]
40 }
41 }
42}
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

🍀 微信公众号 《云原生架构师实战》

🍀 个人博客站点
http://47.97.48.237/ (即将上线域名:onedayxyy.cn)

🍀 语雀
https://www.yuque.com/xyy-onlyone

🍀 csdn https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

🍀 知乎 https://www.zhihu.com/people/foryouone

最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!


文档导航
本页导航
- 实战:Terraform方式安装jenkins(博客分享-泽阳)-2022.6.25
- 实验环境
- 实验软件
- 前置条件
- 0、安装jdk环境
- 1、安装Terraform
- 2、定义Jenkins容器的资源tf文件
- 3、terraform init 初始化
- 4、terraform plan 预览
- 5、terraform apply 部署
- 6、验证
- 注意事项
- 📍 注意:trraform的目录结构(providers)
- 📍 什么是Terraform?
- 📍 ansible和terraform的区别?
- 📍 待提问:
provider "docker" {……} 2375端口问题 - 📍 搁置问题:如何在terraform里添加
env,老师当时添加时报错了。。。 - 📍 这个terraform网站是真的慢。。。
- 📍 terraform命令
- 📍 terraform使用方法
- 📍 测试:测试使用terraform命令销毁容器后,宿主机上的数据还在吗?-2022.5.5
- 📍 注意:如果镜像很大,可先用docker拉取下下来,再执行terraroem命令!
- 📍 测试:使用terradorm安装时应该不需要先在宿主机上创建相应目录把…?
- 📍 方法:terraform里这种用法!
- 关于我
- 最后