CI/CD Linux 自动部署功能(保姆级别教程)

##CI/CD自动化部署

Top

  1. 案例1:部署GitLab
  2. 案例2: 配置GitLab
  3. 案例3:部署Jenkins

1 案例1:部署GitLab

1.1 问题

本案例要求搭建一台GitLab服务器,要求如下:

  • 准备环境(容器环境)
  • 安装GitLab

1.2 方案

实验环境准备(沿用DAY01的实验环境):

1)准备两台RHEL8虚拟机,主机名分别为develop和git。

2)develop主机的IP地址为192.168.4.10,不需要配置网关和DNS。

3)git主机的IP地址为192.168.4.20,不需要配置网关和DNS。

4)给develop和git两台主机配置可用的YUM源。

备注:跨网段走路由,相同网段不需要配置网关就可以互联互通!

实验拓扑如图-1所示。

img

图-1

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:环境准备(在192.168.4.20主机操作)

1)防火墙、SELinux。

[root@git ~]# firewall-cmd --set-default-zone=trusted[root@git ~]# setenforce 0[root@git ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2)修改sshd默认端口。

因为Git是通过SSH协议形式访问,后面需要启动GitLab容器,该容器需要占用22端口,而电脑的sshd服务也需要占用22端口(端口冲突),所以需要提前修改sshd默认端口,将端口修改为2022。

注意:修改后需要重新登录一次虚拟机(重新登录需要指定端口)。

[root@git ~]# vim /etc/ssh/sshd_configPort 2022                                               #17行[root@git ~]# systemctl restart sshd[root@git ~]# exit真机# ssh -p 2022  192.168.4.20 

3)准备容器环境。

提示:gitlab_zh.tar在第二阶段素材目录中,需要先将该素材拷贝到192.168.4.20主机。(比如拷贝到/root目录)

[root@git ~]# dnf  -y   install   podman
[root@git ~]# podman load < ./gitlab_zh.tar    #这个包没有需要找找资源
[root@git ~]# podman imagesREPOSITORY               TAG      IMAGE ID          CREATED       SIZElocalhost/gitlab_zh   latest   1f71f185271a       2 years ago   1.73 GB

4)创建数据目录

容器无法持久保存数据,需要将真机目录和容器目录绑定,实现数据永久保存。

[root@git ~]# mkdir -p /srv/gitlab/{config,logs,data}

步骤二:启动GitLab容器(192.168.4.20操作)

1)启动容器

[root@git ~]# touch /etc/resolv.conf                       #如果没有该文件则创建文件,防止无法podman run启动容器[root@git ~]# podman run -d -h gitlab --name gitlab \-p 443:443 -p 80:80 -p 22:22 \--restart=always \-v /srv/gitlab/config:/etc/gitlab \-v /srv/gitlab/logs:/var/log/gitlab \-v /srv/gitlab/data:/var/opt/gitlab \gitlab_zh

注释:

-d将容器放入后台启动。

-h设置容器的主机名为gitlab。

–name设置容器名称为gitlab。

-p进行端口映射,将git主机的443、80、22端口和git上面运行的容器端口绑定

这样以后任何人访问git主机(192.168.4.20)的22端口也就是在访问容器里面的22端口,任何人访问git主机(192.168.4.20)的80端口也就是访问容器里面的80端口。

-v将git主机上面的目录和容器里面的目录绑定,git主机的/srv/gitlab/config目录对应容器里面的/etc/gitlab/目录,其他目录同理。

最后的gitlab_zh是镜像名称。

2)配置systemd,实现容器开机自启动(选做实验)

生成service文件,-n是容器的名称,给gitlab容器生成service文件

[root@git ~]# cd /usr/lib/systemd/system
[root@git ~]# podman generate systemd -n gitlab --files[root@git ~]# cd ~

设置开机自启动

[root@git ~]# systemctl enable container-gitlab.service

3)初始化登录密码(真机使用浏览器访问GitLab页面)

# firefox http://192.168.4.20

GitLab默认用户名为root,第一次访问需要设置密码,效果如图-2所示。

img

图-2

设置密码后即可使用新设置的密码登录(密码要8位,有字母符号数字组成),效果如图-3所示。

img

图-3

2 案例2: 配置GitLab

2.1 问题

沿用练习一,配置GitLab,具体要求如下:

  • 创建GitLab用户和组
  • 创建GitLab项目
  • 客户端管理GitLab项目
  • 上传代码

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:创建用户和组

1)创建用户,点击GitLab页面的小扳手图标,创建用户,效果如图-4所示。

img

图-4

创建jerry用户,点击《编辑》设置用户的密码,效果如图-5所示。

img

图-5

2)创建组

点击GitLab页面的小扳手图标,创建组,效果如图-6所示。

img

图-6

设置组名称(组名称为devops)以及可见等级(等级为公开),效果如图-7所示。

img

图-7

3)将用户加入到组(将jerry用户加入devops组),效果如图-8所示。

img

图-8

步骤二:创建GitLab项目

1)创建项目,效果如图-9所示。

img

图-9

2)设置项目名称、组、可见等级,效果如图-10所示。

img

图-10

步骤三:管理GitLab项目

1)客户端使用密码管理GitLab项目(在192.168.4.10主机操作)

[root@develop ~]# git config --global user.name "Administrator"
[root@develop ~]# git config --global user.email "admin@example.com"
[root@develop ~]# git clone http://192.168.4.20/devops/myproject.git
[root@develop ~]# cd myproject[root@develop myproject]# touch README.md
[root@develop myproject]# git add README.md
[root@develop myproject]# git commit -m "add README"[root@develop myproject]# git push -u origin masterUsername for 'http://192.168.4.20': jerry    #这里输入用户名Password for 'http://jerry@192.168.4.20':    #这里输入密码

2)客户端生成SSH密钥(在192.168.4.10主机操作)

[root@develop myproject]# rm -rf /root/.ssh/known_hosts  #删除之前的ssh远程记录[root@develop myproject]# ssh-keygen                   #生成ssh密钥文件[root@develop myproject]# cat ~/.ssh/id_rsa.pub       #查看密钥文件ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPVwP8E7TtKha9H8Ec+CU2n19aIPo9sUa/pdM7gRaf0yG+BcdyQ7Hgi6pI51IhX6tat46L5tLkAY7urVeEmnPtUk/TVIUc0smJPXYKIggOCr2dDd9s1S0

3)使用jerry用户登录GitLab页面

jerry用户第一次登录页面需要重置一次密码,密码可以与旧密码相同。效果如图-11所示。

img

图-11

4)上传密钥

将刚刚192.168.4.10上面创建的密钥文件内容上传到GitLab。

点击右上角账户图标,点击《设置》,点击展开按钮,点击《SSH密钥》,然后将develop主机生成的密钥文件内容复制到GitLab上面。效果如图-12、图-13所示。

img

图-12

img

图-13

5)使用密钥管理GitLab项目

首先要查看下基于SSH连接方式的链接,如图-14所示。

img

图-14

[root@develop myproject]# git remote remove origin
[root@develop myproject]# git remote add \origin git@192.168.4.20:devops/myproject.git

#重要备注:

前面的案例使用http协议访问clone了服务器的代码仓库,这里把之前的http服务器信息删除(remove:删除),然后在添加新的服务器信息(add:添加),使用ssh协议访问服务器。

[root@develop myproject]# echo hello word >> README.md[root@develop myproject]# git add .
[root@develop myproject]# git commit -m "modify readme"
[root@develop myproject]# git push -u origin master

\6) 上传静态页面代码(代码在第二阶段素材lnmp_soft.tar.gz中)

需要提前将真机的网页素材scp拷贝到develop虚拟机用户的家目录,解压lnmp_soft.tar.gz,在该压缩包里面有一个www_template.zip文件。

[root@develop ~]# dnf  -y  install   unzip tar[
root@develop ~]# unzip  www_template.zip[root@develop ~]# cp -r www_template/*   myproject/[root@develop ~]# cd  myproject/
[root@develop myproject]# git add 
.[root@develop myproject]# git commit -m  "web site"
[root@develop myproject]# git push -u origin master
[root@develop myproject]# git tag  v1
[root@develop myproject]# git push -u origin v1

通过tag可以给代码设置版本标签,如v1,v2,v3等等。

3 案例3:部署Jenkins

3.1 问题

沿用练习二,部署CI/CD环境,部署Jenkins,具体要求如下:

  • 准备实验环境
  • 部署Jenkins、初始化Jenkins
  • 管理Jenkins插件、调整系统配置

3.2 方案

实验环境准备:

1)5台RHEL8虚拟机,主机名分别为develop、git、jenkins、web1和web2。

2)develop主机的IP地址为192.168.4.10,不需要配置网关和DNS。

3)git主机的IP地址为192.168.4.20,不需要配置网关和DNS。

4)jenkins主机的IP地址为192.168.4.30,不需要配置网关和DNS。

5)web1和web2主机的IP地址分别为192.168.4.100和192.168.4.200,不需要配置网关和DNS。

6)所有主机都需要配置可用的系统YUM源,设置防火墙信任所有,SELinux放行所有。

备注:跨网段走路由,相同网段不需要配置网关就可以互联互通!实验拓扑如图-15所示。

img

图-15

步骤一:环境准备

1)设置防火墙和SELinux(仅以一台主机为例,其他所有主机都需要操作)

[root@git ~]# firewall-cmd --set-default-zone=trusted
[root@git ~]# setenforce 0
[root@git ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2)安装依赖软件(git、postfix、java JDK)。

注意:仅在jenkins主机操作!

[root@jenkins ~]# dnf -y install git
[root@jenkins ~]# dnf -y install postfix
[root@jenkins ~]# dnf -y install mailx
[root@jenkins ~]# dnf -y install java-11-openjdk
[root@jenkins ~]# systemctl enable postfix --now

备注:Git(版本控制软件)、postfix(邮件服务器软件)、mailx(邮件客户端软件)、openjdk(Java JDK工具)。

步骤二:部署、初始化Jenkins

1)安装、启动Jenkins。

[root@jenkins ~]# dnf -y install ./jenkins-2.263.1-1.1.noarch.rpm
[root@jenkins ~]# systemctl enable jenkins
[root@jenkins ~]# systemctl start jenkins#设置jenkins服务为开机自启动服务,并立刻启动该服务

2)初始化Jenkins

真机浏览器访问Jenkins页面(firefox http://192.168.4.30:8080)。

第一次访问会提示初始密码的位置(密码在/var/lib/Jenkins/secrets/initialAdminPassword文件中),效果如图-16所示。

img

图-16

初始化时选择不安装插件,效果如图-17和图-18所示。

img

图-17

img

图-18

使用默认的admin用户登录,完成初始化操作,效果如图-19,图-20,图-21所示。

img

图-19

img

图-20

img

图-21

步骤三:管理Jenkins插件、系统配置

1)重置管理员密码。

重置密码如图-22所示。

img

图-22

使用新密码重新登录,如图-23所示。

img

图-23

2)插件管理。

查看插件列表,效果如图-24、图-25所示。

img

图-24

img

图-25

拷贝插件文件到Jenkins目录,Jenkins插件目录为插件目录:/var/lib/jenkins/plugins/。

Jenkins插件文件在第二阶段素材目录:jenkins_plugins.tar.gz。

插件包含:中文插件、Git插件等。

需要提前将真机素材拷贝到Jenkins虚拟机。

警告:cp拷贝时需要-p选项保留权限!!!

[root@jenkins ~]# tar -xf  jenkins_plugins.tar.gz
[root@jenkins ~]# cp -rp jenkins_plugins/* /var/lib/jenkins/plugins/
[root@jenkins ~]# systemctl restart jenkins

重新登录Jenkins网页控制台,如图-26所示。

img

图-26

再次查看插件列表,效果如图-27、图-28所示。

img

图-27

img

图-28

3)调整系统设置,配置邮箱,效果如图-29、图-30所示。

img

图-29

img

图-30

附加思维导图,如图-31所示。

img

图-31

Top

NSD AUTOMATION DAY03

  1. 案例1:Jenkins项目管理
  2. 案例2: 构建分发服务器
  3. 案例3:自动化上线
  4. 案例1:部署Ansible

1 案例1:Jenkins项目管理

1.1 问题

本案例要求管理Jenkins项目,要求如下:

  • 创建Jenkins项目
  • 修改Jenkins项目配置

1.2 方案

实验环境准备(沿用DAY02的实验环境):

1)5台RHEL8虚拟机,主机名分别为develop、git、jenkins、web1和web2。

2)develop主机的IP地址为192.168.4.10,不需要配置网关和DNS。

3)git主机的IP地址为192.168.4.20,不需要配置网关和DNS。

4)jenkins主机的IP地址为192.168.4.30,不需要配置网关和DNS。

5)web1和web2主机的IP地址分别为192.168.4.100和192.168.4.200,不需要配置网关和DNS。

6)所有主机都需要配置可用的系统YUM源,设置防火墙信任所有,SELinux放行所有。

备注:跨网段走路由,相同网段不需要配置网关就可以互联互通!实验拓扑如图-1所示。

img

图-1

程序类型:编译型(如C、C++)和解释型(如Python、JavaScript)。

CI/CD流程:Jenkins下载代码、打包代码、编译代码、测试代码、上线服务器。

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:创建项目

1)浏览器访问Jenkins服务器8080端口。

firefox或google-chrome http://192.168.4.30:8080。

登录后,点击《新建任务》,创建jenkins项目,效果如图-2所示。

img

图-2

填写任务名称,选择任务风格,效果如图-3所示。

img

图-3

设置Git参数,效果如图-4所示。

默认Jenkins会拉取最新版本的代码,这里的设置可以让Jenkins拉取特定的分支或标签(tag)的代码。注意:这里的git参数名称后面会经常用到!

img

图-4

继续设置Git参数,定义Git仓库的URL路径,以及需要下载克隆的版本或分支,效果如图-5所示。注意这里的URL是前面课程GitLab创建的代码仓库的链接地址。

img

图-5

2)构建(build)Jenkins项目。

首先需要找到刚刚常见的项目,如图-6所示。

img

图-6

在项目菜单下选择《Build with Parameters》,效果如图-7所示。

img

图-7

此时Jenkins会自动连接GitLab服务器获取仓库数据,我们可以选择一个版本,点击《开始构建》,效果如图-8所示。

img

图-8

接下来可以在控制台中查看构建日志,查看构建过程,效果如图-9所示。

img

图-9

3)查看Jenkins拉取的代码数据。

在Jenkins服务器操作(192.168.4.30主机操作),默认Jenkins会加拉取的代码数据保存到/var/lib/Jenkins/workspace/目录。

[root@jenkins ~]# ls /var/lib/jenkins/
[root@jenkins ~]# ls /var/lib/jenkins/workspace/
[root@jenkins ~]# ls /var/lib/jenkins/workspace/myweb/
[root@jenkins ~]# rm -rf  /var/lib/jenkins/workspace/myweb/*

4)修改项目配置

如果代码有多个版本或分支,每次都将代码拉取到相同位置,会产生数据覆盖,我们可以修改项目配置,将不同的版本和分支数据保存到不同子目录下。

点击《配置》,重新修改Jenkins项目配置,如图-10所示。

img

图-10

为Jenkins项目添加附加动作行为,将代码拉取输出到子目录,效果如图-11所示。

注意:这里的子目录调用了前面Git参数的名称($web)。

img

图-11

设置邮件通知,在构建失败时可以给特定人员发送邮件,效果如图-12所示。

img

图-12

5)再次构建项目,并查看数据。

重新构建项目,效果如图-13所示。

img

图-13

在Jenkins服务器查看数据(在192.168.4.30主机操作)。

[root@jenkins ~]# # ls /var/lib/jenkins/workspace/myweb/

2 案例2: 构建分发服务器

2.1 问题

沿用练习一,构建分发服务器,具体要求如下:

  • 安装、配置vsftpd
  • 修改项目配置
  • 重新构建项目

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装、配置FTP共享服务器(仅在192.168.4.30主机操作)

1)设置防火墙、SELinux。

[root@jenkins ~]# firewall-cmd --set-default-zone=trusted
[root@jenkins ~]# setenforce 0
[root@jenkins ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

\2) 安装配置vsftpd、启动服务

[root@jenkins ~]# dnf  -y   install   vsftpd              #安装软件[root@jenkins ~]# vim /etc/vsftpd/vsftpd.conf            #修改vsftpd配置文件anonymous_enable=YES                       #12行          #允许匿名访问ftp[root@jenkins ~]# mkdir -p /var/ftp/deploy/packages#创建目录,未来jenkins将拉取的代码数据拷贝到该目录,共享给应用服务器#-p是创建多级子目录[root@jenkins ~]# chown -R :jenkins /var/ftp/deploy/#修改权限将目录所属组修改为jenkins[root@jenkins ~]# chmod -R 775 /var/ftp/deploy/#修改权限让jenkins组对该目录有读写权限[root@jenkins ~]# systemctl enable vsftpd --now#设置服务为开机自启动服务,并立刻启动该服务

步骤二:修改GitLab项目配置

1)修改项目配置,添加构建步骤。

添加构建步骤,效果如图-14所示。

img

图-14

2)编写构建脚本,脚本内容如下。

一定要注意自己的路径是对的。这里跟上面搭建的路径与文件不一样,这是思路不要照抄。

#ftp共享目录
pkg_dir=/var/ftp/deploy/packages;

#jenkins 服务器拉取目录(如果有子目录的话下面这个要替换,替换成跟你的‘仓库的本地子目录一样’)
sour_dir=jenkins-project-$web;

#当前的工作路径是jenkins的路径,即为 /var/lib/jenkins/workspace/'你的项目名称'/
#删除要构建的版本中的.git隐藏文件,然后打包,并将md5值存入变量md5;
rm -rf ${sour_dir}/.git;        tar czf ${sour_dir}.tar.gz ${sour_dir};         md5=$(md5sum ${sour_dir}.tar.gz | awk '{print $1}');

#打开共享目录的jenkins进程写入权限并将tar包移动至ftp共享目录下
#chown -R :jenkins $pkg_dir;    chmod -R 775 $pkg_dir;
mv ${sour_dir}.tar.gz $pkg_dir/;        rm -rf ${sour_dir}.tar.gz;

#md5值与版本信息写入同一个文件
echo "$md5  $web" > ${pkg_dir}/version.md;

注释说明:

第一行,定义变量pkg_dir,变量值为ftp共享目录。

第二行,将jenkins拉取到/var/lib/Jenkins/workspace/myweb-$web目录的数据拷贝的ftp共享目录。

第三行,上一步拷贝过来的数据目录下包含一个隐藏.git目录,删除该git仓库目录。

第四行,cd到ftp共享目录下。

第五行,将ftp共享目录下的代码数据打包。

第六行,将ftp共享目录下的代码数据目录删除(上一步已经打包数据)。

第七行,校验打包文件的HASH值(哈希值),并将结果写入到一个文件中。

第八行,返回上一级目录。

第九行,将当前Git版本信息写入ver.txt文件。

3)重新构建项目,查看数据。

重新构建项目,如图-15所示。

img

图-15

使用浏览器访问FTP服务,查看数据。

firefox 或者google-chrom 访问ftp://192.168.4.30/deploy/packages/

效果如图-16所示。

img

图-16

3 案例3:自动化上线

3.1 问题

沿用练习二,部署web服务器完成自动化上线,具体要求如下:

  • 安装配置httpd
  • 编写上线脚本
  • 完成整个工作流程

3.2 方案

实验拓扑如图-17所示。

img

图-17

步骤一:部署Web服务器

1)设置防火墙和SELinux

[root@web1 ~]# firewall-cmd --set-default-zone=trusted
[root@web1 ~]# setenforce 0
[root@web1 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
[root@web2 ~]# firewall-cmd --set-default-zone=trusted
[
root@web2 ~]# setenforce 0
[root@web2 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2)安装、配置httpd。

[root@web1 ~]# dnf  -y  install   httpd  wget   tar        #安装httpd、tar和wget[root@web1 ~]# systemctl  enable  httpd   --now     #设置开启自启,并立刻启动
[root@web2 ~]# dnf  -y  install   httpd  wget  tar          #安装httpd、tar和wget[root@web2 ~]# systemctl  enable  httpd   --now     #设置开启自启,并立刻启动

步骤二:编写自动化上线脚本

1)web1和web2自动从jenkins共享服务器下载代码实现持续部署。

这里仅以web1为例编写脚本,可以结合计划任务实现周期性自动上线持续部署。

注意:当前脚本的路径与以前的实验是不同的重在理解不要照抄

#当前web服务器访问路径(用来储存index.html以及版本信息的地方)
WebDir=/var/www/myweb;

#ftp共享服务器的版本目录
FtpUrl=ftp://192.168.4.30/deploy/packages;

#软链接用来指向当前web服务器的访问路径
WebLink=/var/www/html/WebLink;

#部署函数
function install(){

        #获取当前ftp服务器版本和md5值
        FtpVersion=$(curl -s ${FtpUrl}/version.md | awk '{print $2}');
        FtpHash=$(curl -s ${FtpUrl}/version.md | awk '{print $1}');

        #下载整个版本
        wget -q ${FtpUrl}/jenkins-project-${FtpVersion}.tar.gz -O ${WebDir}/jenkins-project-${FtpVersion}.tar.gz;
        wget -q ${FtpUrl}/version.md -O ${WebDir}/version.md;

        #获取md5值,并解压版本代码包
        WebVersion=$(awk '{print $2}' ${WebDir}/version.md);
        WebHash=$(md5sum ${WebDir}/jenkins-project-${WebVersion}.tar.gz | awk '{print $1}')
        [ $WebHash == $FtpHash ] && tar -xf ${WebDir}/jenkins-project-${WebVersion}.tar.gz -C ${WebDir}/;

        #更新软连接
        [ -e $WebLink ] && rm -f $WebLink;
        ln -s $WebDir $WebLink;

}

#如果当前web服务器的地址不存在的话,创建这个路径
[ ! -e $WebDir ] && mkdir $WebDir;

#如果软连接不存在那么表明是新的web服务器那么调用部署函数
[ ! -f $WebDir/version.md ] && install;

#如果软连接存在但是web服务器范文路径不存在那么调用部署函数
[ -e $WebLink ] && [ ! -f ${WebDir}/version.md ] && echo "已经重新安装" && install && exit;

#如果软连接存在且其指向的web服务器版本信息,低于ftp共享服务器版本信息,那么调用部署函数
if [ -e $WebLink ];then
         FtpVersion=$(curl -s ${FtpUrl}/version.md | awk '{print $2}');
         WebVersion=$(awk '{print $2}' ${WebLink}/version.md);
        [ $FtpVersion != $WebVersion ] && install || echo "已经是最新的版本";

fi

步骤三:完成整理工作流程。

1)工作流程。

开发人员编写代码,将代码上传到GitLab服务器,Jenkins从GitLab服务器上面拉取最新代码数据到本地,根据Jenkins项目配置,将代码拉取到本地后,可以进行编译、测试、打包等工作,最后将数据包写入到共享服务器,应用服务器最后从共享服务器拉取数据实现上线功能。

2)开发人员修改代码、上传代码(主机192.168.4.10操作)

[root@develop ~]# cd myproject                   #进入仓库目录
[root@develop myproject]# vim  index.html                #修改首页文件第4行内容修改前:<title>Home</title>修改后:<title>Tarena</title>
[root@develop myproject]# git add .                       #添加修改记录
[root@develop myproject]# git commit -m "modify index"      #提交修改 
 [root@develop myproject]# git tag  v2                         #添加代表版本标签
[root@develop myproject]# git push origin master             #推送数据到服务器
[root@develop myproject]# git push origin v2                 #推送数据到服务器

3)Jenkins重新构建项目,效果如图-18所示。

img

图-18

4)在web服务器执行上线脚本完成持续部署。

在192.168.4.100和192.168.4.200操作,这里仅以web1为例。

[root@web1 ~]# ./web.sh

4 案例1:部署Ansible

4.1 问题

本案例要求先快速搭建好一个Ansible平台,并测试环境,要求如下:

  • 创建实验主机(控制端和被控制端)
  • 配置SSH实验环境
  • 安装Ansible自动化软件
  • 修改Ansible配置

4.2 方案

准备如表-1所示的实验环境,操作系统为RHEL8,配置主机名称、IP地址、YUM源。

表-1 主机列表

img

ansible原理:

控制端主机自带很多模块(模块就是脚本);

ansible通过ssh远程被管理主机,将控制端的模块(脚本)或命令传输到被管理主机;

在被管理端主机执行模块(脚本)或命令,执行不同的模块或命令可以实现不同的功能;

最后ansible退出ssh远程。

绝大多数模块(脚本)都需要参数才能执行成功!!!类似于shell脚本的位置变量!

拓扑结构如图-19所示。

img

图-19

提醒:全天的实验不需要死记硬背每个模块的每个参数,所有参数都可以查看帮助!

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:准备基础环境

控制节点要求:

  • 域名解析(为了方便后期操作,可以不做)
  • 配置SSH密钥(ansible是基于ssh实现远程控制)
  • 安装Ansible软件

1)Control控制节点

修改/etc/hosts,在文件中手动添加如下内容,修改该文件的目的是做域名解析。

[root@control ~]# vim  /etc/hosts        #修改文件,手动添加如下内容(不要删除文件原来的内容)
192.168.4.253    control    192.168.4.11        node1    192.168.4.12        node2    192.168.4.13        node3    192.168.4.14        node4    192.168.4.15        node5

如何验证?

[root@control ~]# ping  node1               #可以使用ping命令依次ping所有域名    

配置SSH密钥实现免密码登录(非常重要)

Ansible是基于SSH远程的原理实现远程控制,如果控制端主机无法免密登录被管理端主机,后续的所有试验都会失败!!

[root@control ~]#  ssh-keygen         #生成ssh密钥
[root@control ~]#  for i in node1 node2 node3 node4 node5dossh-copy-id   $i done#拷贝密钥到远程主机#提示:拷贝密钥到远程主机时需要输入对方电脑的账户密码才可以!!#拷贝密钥到node1就需要输入node1对应账户的密码,拷贝密钥到node2就需要输入node2对应的密码

如何验证?

警告:如果有任何一台主机远程还需要密码,就不要往下继续操作,后面实验都会失败!!!

[root@control ~]# ssh  node1            #使用ssh命令依次远程所有主机都可以免密码登录[root@node1 ~]# exit                     #退出ssh远程登录

2)部署Ansible软件(仅Control主机操作,软件包在ansible_soft目录)。

安装软件方案1(提前直接将软件包拷贝到control安装):
[root@control ~]# tar -xf   ansible_soft.tar.gz[root@control ~]# cd ansible_soft
[root@control ansible_soft]# dnf  -y  install   *
安装软件方案2(配置YUM安装ansible软件):1)真机做YUM源服务器
[root@localhost ~]# tar -xf /linux-soft/2/ansible_soft.tar.gz -C /var/ftp/
[root@localhost ~]# dnf -y install createrepo
[root@localhost ~]# createrepo /var/ftp/ansible_soft/2)control虚拟机配置YUM,安装软件[root@control ~]# vim  /etc/yum.repos.d/ansible.repo[ansible]name=ansiblebaseurl=ftp://192.168.4.254/ansible_soft/gpgcheck=0[root@control ~]# dnf  -y  install   ansible

被控制节点要求:

  • Ansible默认通过SSH协议管理机器
  • 被管理主机要开启SSH服务,并允许控制主机登录
  • 被管理主机需要安装有Python

步骤二:修改配置文件

主配置文件说明:

主配置文件ansible.cfg(主配置文件的内容可以参考/etc/ansible/ansible.cfg)

ansible配置文件查找顺序

首先检测ANSIBLE_CONFIG变量定义的配置文件(默认没有这个变量)

其次检查当前目录下的./ansible.cfg文件

再次检查当前用户家目录下~/ansible.cfg文件

最后检查/etc/ansible/ansible.cfg文件

\1) 修改主配置文件。

[root@control ~]# mkdir  ~/ansible
[root@control ~]# vim  ~/ansible/ansible.cfg[defaults]inventory = ~/ansible/inventory            #主机清单配置文件(inventory可以是任意文件名),英语词汇:inventory(清单、财产清单)#forks = 5                                    #ssh并发数量#host_key_checking = False                  #是否校验密钥(第一次ssh时是否提示yes/no)

\2) 修改主机清单文件(清单文件名必须与主配置文件inventory定义的一致)。

[root@control ~]# vim  ~/ansible/inventory[test]                    #定义主机组(组名称任意)node1                    #定义组中的具体主机,组中包括一台主机node1[proxy]                    #定义主机组(组名称任意),英语词汇:proxy(代理人,委托人)node2                      #proxy组中包括一台主机node2
[webserver]node[3:4]                 #这里的node[3:4]等同于node3和node4[database]node5[cluster:children]        #嵌套组(children为关键字),不需要也可以不创建嵌套组webserver                  #嵌套组可以在组中包含其他组database

附加思维导图,如图-20所示。

img

图-20



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值