暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Ansible自动化:系统服务之sysctl/selinux/mount实战指南

Linux运维智行录 2024-11-25
206

在现代IT运维中,自动化管理工具如Ansible极大地提高了系统的部署和维护效率。Ansible通过简单的命令行即可实现复杂的配置管理任务。本文将详细介绍如何使用Ansible自动化配置sysctl参数、SELinux策略和文件系统挂载点,帮助您简化运维工作,提升系统稳定性。

自动化是提升效率的关键,别再手动操作了!


01
sysctl模块

sysctl 是用于修改Linux内核运行时参数的工具。通过Ansible,我们可以轻松地批量配置这些参数。

模块名称模块说明
name(required)指定 sysctl 变量的点分隔路径(也称为键)
value/valsysctl 键的所需值
reload是否生效参数,默认是yes
sysctl_filesysctl文件绝对路径
statepresent 和 absent

示例配置:

# 将net.ipv4.ip_forward=1写入到/etc/sysctl.conf文件中
$ ansible -i hosts ansible -m sysctl -a "name=net.ipv4.ip_forward value=1 state=present"
$ tail -1 /etc/sysctl.conf 
net.ipv4.ip_forward=1

# 将net.ipv4.ip_forward=1写入到/etc/sysctl.d/test.conf中
$ ansible -i hosts ansible -m sysctl -a "name=net.ipv4.ip_forward value=1 sysctl_file=/etc/sysctl.d/test.conf state=present"
$ cat /etc/sysctl.d/test.conf 
net.ipv4.ip_forward=1

# 删除net.ipv4.ip_forward参数
$ ansible -i hosts ansible -m sysctl -a "name=net.ipv4.ip_forward state=absent"

02
selinux模块

SELinux(Security-Enhanced Linux)是Linux内核的一个安全模块,提供了强制访问控制机制。通过Ansible,我们可以管理和配置SELinux策略。

模块名称模块说明
configfile selinux配置文件路径,默认/etc/selinux/config
state(required)selinux状态
  • disabled

  • enforcing

  • permissive

示例配置:

$ grep ^SELINUX= /etc/selinux/config
SELINUX=enforcing

# selinux设置为disabled状态
$ ansible -i hosts ansible -m selinux -a "state=disabled"
[WARNING]: SELinux state temporarily changed from 'enforcing' to 'permissive'. State change will take effect next reboot.
172.139.20.56 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "configfile": "/etc/selinux/config", 
    "msg": "Config SELinux state changed from 'enforcing' to 'disabled'", 
    "policy": "targeted", 
    "reboot_required": true, 
    "state": "disabled"
}

$ grep ^SELINUX= /etc/selinux/config    
SELINUX=disabled


03
mount模块

文件系统挂载点的配置是系统管理中的一个重要部分。通过Ansible,我们可以自动化地管理和配置挂载点。

模块名称模块说明
src要挂载的设备路径
path(required)挂载点的路径
opts挂载参数
fstype文件系统类型
state(required)

执行影响状态。

  • mounted:指定设备将在 fstab 中配置并触发挂载

  • present:指定设备将在 fstab 中配置,但不会触发挂载

  • unmounted:仅取消挂载

  • absent:取消挂载并从 fstab 中删除设备挂载的条目

示例配置:

1、初始化磁盘并挂载

$ ansible -i hosts ansible -m shell -a " mkfs.xfs -f /dev/vdb " -b
172.139.20.56 | CHANGED | rc=0 >>
meta-data=/dev/vdb               isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

$ ansible -i hosts ansible -m mount -a " src=/dev/vdb path=/data fstype=xfs state=mounted"
172.139.20.56 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "xfs", 
    "name": "/data", 
    "opts": "defaults", 
    "passno": "0", 
    "src": "/dev/vdb"
}

$ df -h /data/
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb         10G   33M   10G   1% /data

$ tail -1 /etc/fstab 
/dev/vdb /data xfs defaults 0 0


2、挂载nfs存储

$ ansible -i hosts ansible -m mount -a " src=172.139.20.170:/data/nfs path=/data fstype=nfs opts=defaults,_netdev state=mounted "
172.139.20.56 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dump": "0", 
    "fstab": "/etc/fstab", 
    "fstype": "nfs", 
    "name": "/data", 
    "opts": "defaults,_netdev", 
    "passno": "0", 
    "src": "172.139.20.170:/data/nfs"
}

$ df -h /data/
Filesystem                Size  Used Avail Use% Mounted on
172.139.20.170:/data/nfs   62G   31G   31G  50% /data
$ tail -1 /etc/fstab
172.139.20.170:/data/nfs /data nfs defaults,_netdev 0 0


3、取消挂载并删除/etc/fstab文件中相关配置

ansible -i hosts ansible -m mount -a " src=172.139.20.170:/data/nfs path=/data fstype=nfs opts=defaults,_netdev state=absent " 
172.139.20.56 | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "msg": "Error rmdir /data: [Errno 39] Directory not empty: '/data'"
}


04
结语

通过上述示例,您可以轻松地使用Ansible自动化配置sysctl参数、SELinux策略和文件系统挂载点。这不仅简化了运维工作,还提高了系统的稳定性和安全性。希望本文的内容对您有所帮助,如果您有任何疑问或建议,欢迎在评论区留言讨论!


别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!

END

文章转载自Linux运维智行录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论