ansible概念和基本操作

我们首先在自己的本本上面安装一个操作环境,体验一下ansible操作,然后再去挖掘ansible的概念和各个模块的操作。其实windows上面不能使用ansible,具体可见:,不过可以通过wsl来执行ansible。

首先在wsl上面安装ansible:aptinstallsoftware-properties-commonapt-add-repository--yes--updateppa:ansible/ansibleaptinstallansible。

如果在本机测试,可通过virtualbox安装一个linux操作,我这边安装的版本是centosminimal版本。具体安装可自行百度,这里提下静态ip的配置方法。首先在虚拟机的网卡配置界面,将网卡1的连接方式设置为nat,这样虚拟机便可通过主机联网;其次设置网卡2为桥接方式,并在centos中生成网卡2的配置文件,配置文件的位置:/etc/sysconf/network-scripts/。如nat网卡的配置文件为ifcfg-enp0s3,则可以复制该文件并进行修改,如复制nat网卡配置文件为ifcfg-enp0s8,具体需要修改的内容如下,其中uuid需要使用uuidgen命令生成,HWADDR为虚拟机网卡2配置界面的硬件地址,IPADDR和GATEWAY需要根据宿主机上面的网络配置获取:

BOOTPROTO=staticNAME=enp0s8UUID=XXXXXDEVICE=enp0s8HWADDR=xx:xx:xx:xx:xx:xxIPADDR=172.30.8.177NETMARK=255.255.255.0GATEWAY=172.30.8.1ONBOOT=yes

然后wsl中配置/etc/ansible/hosts文件,在文件最后增加:

172.30.8.177ansible_ssh_user=rootansible_ssh_pass=xxxxxxx

保存并执行:,如果出现错误:UsingaSSHpasswordinsteadofakeyisnotposs'sfingerprinttoyourknown_hostsfiletomanagethishost.则需要修改/etc/ansible/文件,增加:host_key_checking=False,修改保存重新执行,显示成功:172.30.8.177|SUCCESS={.。

ansible的本机环境已经ok,下面我们梳理一下ansible的概念和原理。

host分组,host很多的时候,方便对其中的某一组ip进行操作,可以在hosts文件中做如下配置:

[k8s-master]172.30.8.177172.30.8.178172.30.8.179

通过:ansiblek8s-master-mping就可以对k8s的所有master进行操作。

ansible是模块化设计的,如上面的:-mping就是调用ping模块测试本机和远程机器网络是否通。ansible-doc-l可列出所有模块。ansible-docping可查看某个模块的具体用法。下面简单介绍下常见模块的用法。

command模块,可以在被管理的机器上面执行命令,如:ansiblek8s-mcommand-a'ls/root'当命令中包含重定向、管道操作时会报错,如:,,|,,可使用下面的shell模块。

shell模块同样是在被管理的机器上执行命令,但是通过远程主机上面的/bin/sh来处理的,如:ansiblek8s-mshell-a'ls/root|wc-l'。

script模块在远程主机上执行shell脚本。如:ansiblek8s-mscript-a'/root/'。

user模块,对远程机器上面的用户进行管理。参数有,name:要操作的用户名称;group:用户所在的组;shell用户默认登陆的shell;uid:指定用户的uid;comment:用户的注释信息;state:指定用户是否在远程主机,默认present,用户存在远程主机,absent删除远程主机的用户;remove:当删除用户的时候,state的为absent,默认不删除home目录,也就是remove为no,如需删除用户的home目录,则设置remove为yes;password:用于设置用户密码,密码必须为加密后的,可使用:importcrypt;('123456')。具体使用如:ansiblek8s-muser-a'name=k8s'。删除刚创建的目录:ansiblek8s-muser-a'name=k8sstate=absentremvoe=yes'。

file模块创建删除文件或文件夹,修改文件权限。参数有,path:指定文件或文件夹路径;state:touch创建文件,absent删除文件,directory创建目录,link创建软连接,hard硬连接;src:做软连接或硬链接时指定的源文件。

copy模块把本机的文件copy到远程机器,类似scp。参数有,src:本地文件路径;dest:远程文件路径;backup:是否备份,默认为no,远程机器的同名文件会被覆盖;mode:复制后的文件权限,如:0755;remote_src:表示所有的操作在远程机器上面,此时src的路径是远程机器上面的,而不是本地的。

fetch模块则copy远程机器文件到本地,参数有,src:远程机器上的文件;dest:保存到本地的目录。

cron模块用于管理crontab,包括添加、删除、更新等,参数有,name:计划任务名称;job:计划任务中需要执行的命令或脚本;user:任务属于哪个用户,默认root;state:修改删除对应的任务;backup:对已有任务修改或删除时,是否保存;disabled:是否关闭对应的任务;minute:设置计划任务分钟取值范围;hour:小时取值范围;day:天取值范围;month:月份;weekday:周取值范围。

apt模块对软件包进行管理,service模块对远程机器上面的服务进行管理。

playbook由单个ad-hoc编排而成,并加入逻辑判断,变量,引用等,适合部署复杂应用。采用yaml格式表示。playbook由下面字段组成,hosts:远程主机或机组;user:执行任务的用户;sudo:root权限;gather_facts:获取远程主机的facts信息;task:任务开始;name:任务名称;如:

----hosts:k8sremote_user:rootsudo:yesfather_facts:notasks:-name:copyycopy:src:/root/adest:/root/b

具体执行:

handlers和notify,handlers的触发机制是,只有notify的任务执行返回状态是changed的时候才会触发,否则不执行,如下面,ng配置文件没有修改,则不执行restart。

----hosts:k8sremote_user:roottasks:-name:modifyngreplace:path:/etc/nginx/regexp:'listen80'replace:'listen88'notify:restarthandlers:-name:restartservice:name:nginxstate:restarted

tags负责给任务打标签,这样就可以执行指定标签的任务了,如:ansible-playbook--tag=。也可跳过某个任务,如:ansible-playbook--skip-tag=。

文件也可定义变量并引用,也可以使用ansible自己的变量,具体可通过下面查看:ansiblek8s-msetup。可以通过register注册变量,还可以交互式输入变量的值,如下:

----hosts:k8sremote_user:rootvars_promt:-name:unameprompt:"inputusername:"private:no-name:passwdprompt:"passwd:"vars:file:ttvar_files:-/root/:-name:modifyngreplace:path:/etc/nginx/regexp:'listen80'replace:{{nginx_port}}notify:restarttags:t1-name:freeshell:free-mregister:freetags:t2-name:debugdebug:msg:unameis:{{uname}},passwdis:{{passwd}}-name:debugdebug:var:freehandlers:-name:restartservice:name:nginxstate:restarted

还有循环,条件判断,include,template,role等,可以使用的时候具体查询。

免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系