文章目录
一、安装
环境
[root@bogon ~]# cat /etc/kylin-release
Kylin Linux Advanced Server release V10 (Sword)
1、yum安装
yum install -y ansible
麒麟系统自身的yum仓库就有ansible,如果是centos,需要执行yum install -y yum-utils epel-release
注意:本人在2024-3-28
安装ansible
时报错,一直找不到ansible
,建议采用国内的epel
我使用阿里
的
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
2、离线安装
2.1、下载软件包上传到离线的服务器
mkdir -p /app/local/ansible
yum install -y --downloadonly --downloaddir=/app/local/ansible ansible
2.2、安装
[root@bogon ~]# cd /app/local/ansible/
[root@bogon ansible]# ll
总用量 15952
-rw-r--r-- 1 root root 15321140 2月 27 10:35 ansible-2.8.8-1.p01.ky10.noarch.rpm
-rw-r--r-- 1 root root 149100 2月 27 10:34 libsodium-1.0.16-7.ky10.x86_64.rpm
-rw-r--r-- 1 root root 39968 2月 27 10:34 python3-bcrypt-3.1.4-8.ky10.x86_64.rpm
-rw-r--r-- 1 root root 287484 2月 27 10:34 python3-paramiko-2.4.3-1.ky10.ky10.noarch.rpm
-rw-r--r-- 1 root root 220644 2月 27 10:34 python3-pyasn1-0.3.7-8.ky10.noarch.rpm
-rw-r--r-- 1 root root 78364 2月 27 10:34 python3-pynacl-1.2.1-5.ky10.x86_64.rpm
-rw-r--r-- 1 root root 193516 2月 27 10:34 python3-pyyaml-5.3.1-4.ky10.x86_64.rpm
-rw-r--r-- 1 root root 25088 2月 27 10:34 sshpass-1.06-8.ky10.x86_64.rpm
[root@bogon ansible]# rpm -ivh *
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:sshpass-1.06-8.ky10 ################################# [ 13%]
2:python3-pyyaml-5.3.1-4.ky10 ################################# [ 25%]
3:python3-pyasn1-0.3.7-8.ky10 ################################# [ 38%]
4:python3-bcrypt-3.1.4-8.ky10 ################################# [ 50%]
5:libsodium-1.0.16-7.ky10 ################################# [ 63%]
6:python3-pynacl-1.2.1-5.ky10 ################################# [ 75%]
7:python3-paramiko-2.4.3-1.ky10.ky1################################# [ 88%]
8:ansible-2.8.8-1.p01.ky10 ################################# [100%]
/sbin/ldconfig: /usr/lib64/libLLVM-7.so 不是符号链接
[root@bogon ansible]#
二、介绍
Ansible是一种开源的自动化工具用于配置管理应用程序部署、编排和协。它基于语言开发,使用SSH协议进行通信,并且不需要在被管理的主机上安装任何客户端软件。
Ansible的主要特点包括
-
简单易用:Ansible使用简洁的YAML语法来描述任务和配置,使得编写和维护Playbooks(任务剧本)变得非常容易。
-
基于SSH:Ansible使用SSH协议来与被管理的主机进行通信,无需在被管理的主机上安装任何额外的软件。
-
基于模块化:Ansible提供了丰富的模块库,可以用于执行各种任务,如文件操作、软件包管理、服务管理等。
-
基于剧本:Ansible使用Playbooks来定义一系列任务的执行顺序和条件,可以实现复杂的配置和部署流程。
-
可扩展性:Ansible支持插件机制,可以通过编写自定义插件来扩展其功能。
-
平台无关性:Ansible可以在各种操作系统和云平台上运行,包括Linux、Windows、VMware、AWS等。
-
社区活跃:Ansible拥有庞大的用户社区和开发者社区,提供了丰富的文档、示例和插件,方便用户学习和使用。
Ansible可以用于自动化各种任务,如服务器配置管理、应用程序部署、集群管理、持续集成等。它的设计理念是简单易用、可读性强,适合于各种规模的环境和项目。
三、SSH 验证和配置环境
1、ssh验证
[root@bogon ansible]# ssh-keygen
[root@bogon ansible]# ssh-copy-id 192.168.48.180
2、主机连接
mkdir -p /app/local/ansible/
图中3个是必要的,其他是我自己写的,这3个可以在安装完成后的服务器里面找。
2.1、ansible.cfg
[defaults]
inventory = /app/localt/ansible/inventory
remote_root = testa
roles_path = /app/local/ansible/roles
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
在这段配置中,[defaults]
是一个配置段,表示默认配置选项。下面是对每个配置选项的解释:
inventory
:指定 Ansible 的主机清单文件的路径,该文件包含了要管理的主机列表。remote_root
:指定远程主机的 root 用户名。roles_path
:指定 Ansible 角色的路径,Ansible 角色是一种组织和复用任务和变量的方式。
另外,还有一个名为 [privilege_escalation]
的配置段,用于特权升级(privilege escalation)相关的配置选项。在这里,配置了以下选项:
become
:指定是否启用特权升级,默认为 True。become_method
:指定特权升级的方法,这里使用 sudo。become_user
:指定特权升级后要切换到的用户,默认为 root。become_ask_pass
:指定是否在特权升级时询问密码,默认为 False,即不询问密码。
2.2、inventory
[root@node192 ansible]# cat inventory
[master]
192.168.48.128 ansible_ssh_user='root' ansible_ssh_pass='123456'
[node191]
192.168.48.191 ansible_ssh_user='root' ansible_ssh_pass='123456'
192.168.48.192 ansible_ssh_user='root' ansible_ssh_pass='123456'
192.168.48.189 ansible_ssh_user='root' ansible_ssh_pass='123456'
2.3、roles(用于放角色,可以执创建文件夹,不写内容)
四、模块
1、copy
1.1、将管理节点文件复制到到管理节点的一个地方
格式:ansible 管理节点 -m copy -a "src=文件位置 dest=移动到的位置"
ansible node188 -m copy -a "src=/root/motd dest=/app/local/ansible/mot"
1.2、管理节点master的/root/test.tar.gz复制到管理组node的/root/test.tar.gz
---
- name: master copy node
hosts: node
tasks:
- name: Copy test.tar.gz
copy:
src: /root/test.tar.gz
dest: /root/test.tar.gz
2、fetch
2.1、ansible把受管节点(node)192.168.48.192的/root/ansible.tar.gz复制到管理组master的/app/local/ansible/ansible.tar.gz
---
---
- name: node copy master copy master
hosts: node188
tasks:
- name: node copy master
fetch:
src: /root/ansible.tar.gz
dest: /app/local/ansible/ansible.tar.gz
flat: yes
fail_on_missing: yes
delegate_to: 192.168.48.192
flat: yes
:如果设置为yes,则将文件复制到目标主机上的目录中,而不是创建与源文件相同的目录结构。fail_on_missing: yes
:如果源文件不存在,则任务失败。delegate_to: 192.168.48.192
:指定任务在哪个主机上执行。
3、firewalld
3.1、开启防火墙,开放13306端口
[root@master188 ansible]# cat firewal.yml
---
- name: enable and start firewall open 13306
hosts: node192
become: yes
tasks:
- name: Ensure firewalld is installed
package:
name: firewalld
state: present
- name: Start firewalld service
service:
name: firewalld
state: started
enabled: yes
- name: Open port 13306 in firewall
firewalld:
port: 13306/tcp
permanent: yes
state: enabled
immediate: yes
3.2、关闭防火墙
[root@master188 ansible]# cat firestop.yml
---
- name: Disable firewalld on remote host
hosts: node192
become: yes
tasks:
- name: Stop firewalld service
systemd:
name: firewalld
state: stopped
- name: Disable firewalld service on boot
systemd:
name: firewalld
enabled: no
- name: Reload systemd manager configuration
systemd:
daemon_reload: yes
4、hostname
4.1、获取所有受管节点和管理节点的hostname
cat hosts.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for host in groups['all'] %}
{{ hostvars[host]['ansible_facts']['default_ipv4']['address'] }} {{ hostvars[host]['ansible_facts']['hostname'] }}
{% endfor %}
cat hosts.yml
- name: deploy myhosts
hosts: all
tasks:
- name: generate host file
template:
src: hosts.j2
dest: /etc/hosts
when: inventory_hostname in groups['all']
获取到的成果
[root@ansible]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.48.191 node191
192.168.48.135 containerwarehouse
192.168.48.192 node192
5、file用于管理文件系统的文件和目录
5.1、创建目录,给文件夹设置权限,设置用户和组
cat file.yml
---
- name: Create a directory
hosts: node192
tasks:
- name: Create the directory
file:
path: /app/local/test #目录地址
state: directory #创建类型 目录
owner: test # 用户
group: test #组
mode: '0755' #权限
5.2、创建空文件,给文件设置权限,设置用户和组
cat filetxt.yml
---
- name: Create touch
hosts: node192
become: yes
tasks:
- name: Create test
file:
path: /app/local/test/test
state: touch
owner: test
group: test
mode: '0644'
6、yum
6.1安装软件
(1)安装
ansible web -m yum -a 'name=nginx state=present'
name= #包的名称
state= #present安装, latest安装最新的, absent卸载软件。
update_cache #强制更新yum的缓存
conf_file #指定远程yum安装时所依赖的配置文件(安装本地已有的包)。
disable_pgp_check #是否禁止GPG checking,只用于presentor latest。
disablerepo #临时禁止使用yum库。 只用于安装或更新时。
enablerepo #临时使用的yum库。只用于安装或更新时。
(2)安装并启动
---
- name: Install nginx
hosts: webservers
become: yes
tasks:
- name: nginx is installed
yum:
name: nginx
state: present
- name: Start and enable nginx service
service:
name: nginx
state: started
enabled: yes
6.2 安装yum源
ansible all -m yum_repository -a 'name="EX294_STREAM"
description="EX294 stream software"
baseurl="http://content.example.com/rhel8.0/x86_64/dvd
/AppStream" gpgcheck=yes
gpgkey="http://content.example.com/rhel8.0/x86_64/dvd
/RPM-GPG-KEY-redhat-release" enabled=yes'
7、user 管理用户
Ansible的user模块用于在远程主机上管理用户账户。
ansible web -m user -a 'name=test uid=12345'
name: 必须参数,指定要操作的用户名称。
uid: 指定用户的UID号。
gid: 指定用户的主组ID。
groups: 指定用户所属的附加组,可以是组名或GID的列表。
append: 当使用groups参数时,设置为yes会将用户追加到附加组,而不是替换现有的附加组。
shell: 指定用户的默认shell。
state: 指定用户的状态,可以是present(创建或确保用户存在)或absent(删除用户)。
remove: 当state为absent时,设置为yes会同时删除用户的宿主目录。
password: 为用户设置或更新密码。注意,密码需要以加密形式提供,或者使用generate让Ansible自动生成。
system: 设置为yes会创建系统用户。
在playbook中使用user模块创建新用户。例如,创建一个名为test的用户,并指定其UID、默认shell和附加组:
yaml
---
- name: Create a new user
hosts: all
tasks:
- name: test exists
user:
name: test
uid: 12345
shell: /bin/bash
groups: sudo,wheel
append: yes
state: present
删除用户
使用state: absent删除用户。例如,删除名为test的用户,并同时删除其宿主目录:
yaml
---
- name: Delete a user
hosts: all
tasks:
- name: test is absent
user:
name: test
state: absent
remove: yes
更新用户信息
使用user模块可以更新现有用户的信息。例如,为用户test添加一个新的附加组docker:
yaml
---
- name: Update user groups
hosts: all
become: yes
tasks:
- name: Add test to docker group
user:
name: test
groups: docker
append: yes
注意事项
在使用user模块时,通常需要具有适当的权限(如sudo),因此become: yes或become_method: sudo通常会被使用。
密码管理需要谨慎处理,避免在playbook中明文存储密码。
根据您的Ansible版本和远程主机的操作系统,某些选项可能不受支持或行为可能有所不同。