Ansible自动化运维工具之主机管理与自定义配置文件(2)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Ansible自动化运维工具之主机管理与自定义配置文件(2)

设置ansible.cfg配置文件参数


Ansible有很多配置参数,以下是⼏个默认的配置参数:


inventory:该参数表⽰inventory⽂件的位置,资源清单(inventory)就是Ansible需要连接管理的⼀些主机列表。


library :Ansible的所有操作都使⽤模块来执⾏实现,这个library参数就是指向存放Ansible模块的⽬录。


forks:设置默认情况下Ansible最多能有多少个进程同时⼯作,默认5个进程并⾏处理。具体需要设置多少个,可


以根据控制端性能和被管理节点的数量来确定。


sudo_user:设置默认执⾏命令的⽤户,也可以在playbook中重新设置这个参数。


remote_port:指定连接被管理节点的管理端⼝,默认是22,除⾮设置了特殊的SSH端⼝,否则不需要修改此参数。


host_key_checking :设置是否检查SSH主机的密钥。可以设置为True或False。即ssh的主机再次验证。如果为False,则不需要输入yes;如果为True,则等待输入yes。


timeout:设置SSH连接的超时间隔,单位是秒。


log_path:Ansible默认不记录⽇志,如果想把Ansible系统的输出记录到⽇志⽂件中,需要设置log_path。需要注意,模块将会调⽤被管节点的(r)syslog来记录,执⾏Ansible的⽤户需要有写⼊⽇志的权限。

[root@k8s_master1 ~]# vim /etc/ansible/ansible.cfg  //以下配置中的参数都是默认的,如果不需要修改某项参数的话,就不需要管(不需要取消注释),默认就好。
 14 inventory      = /etc/ansible/hosts
 15 library        = /usr/share/my_modules/
 20 forks          = 5
 22 sudo_user      = root
 26 remote_port    = 22
 71 host_key_checking = False
 103 timeout = 20
 111 log_path = /var/log/ansible.log

注意:可以指定多个inventory配置⽂件,只需在ansible的配置⽂件如/etc/ansible/ansible.cf g中将inventory指令设置为对应的⽂件或⽬录即可,如果是⽬录,那么此⽬录下的所有⽂件都是inventory⽂件。


主机定义与分组:

[root@k8s_master1 ~]# cat /etc/ansible/ansible.cfg
 ...
 14 inventory      = /etc/ansible/hosts
 ...

inventory:指定的配置文件,写入远程主机的地址。定义被托管主机地址配置文件路径名。


格式:       -  # 表示注释            [组名称]           主机名称或IP地址,其他参数

10.png

[root@k8s_master1 ~]# vim /etc/ansible/hosts
...
[k8s_node]
192.168.1.19
192.168.1.20

由于之前我们在所有主机上都配置好了/etc/hosts,所以以上配置也可以直接写成:

[root@k8s_master1 ~]# vim /etc/ansible/hosts
...
[k8s_node]
k8s_node1
k8s_node2

ansible基础命令

11.png


列出所有主机组的主机 :ansible all --list-hosts    


列出xx主机组的主机 :ansible ‘主机组名’ --list-hosts    


批量检测主机并使用交互式登录密码:ansible all -m ping -k

[root@k8s_master1 ~]# ansible all --list-hosts
  hosts (2):
    k8s_node1
    k8s_node2
[root@k8s_master1 ~]# ansible all -m ping -k
SSH password:     ---》需要交互式输入密码
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[root@k8s_master1 ~]# ansible all -m ping      //不需要输入密码
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
--列出k8s_node主机组的所有主机--
[root@k8s_master1 ~]# ansible k8s_node --list-hosts
  hosts (2):
    k8s_node1
    k8s_node2

自定义ansible.cfg配置文件:


1.创建自定义文件夹myansible

[root@k8s_master1 ~]# mkdir myansible

2.创建自定义配置文件ansible.cfg

[root@k8s_master1 ~]# cd myansible/
[root@k8s_master1 myansible]# cp -r /etc/ansible/ansible.cfg .
[root@k8s_master1 myansible]# ll
总用量 20
-rw-r--r-- 1 root root 19978 8月  10 18:32 ansible.cfg
[root@k8s_master1 myansible]# vim ansible.cfg    //以下配置中的参数都是默认的,如果不需要修改某项参数的话,就不需要管(不需要取消注释),默认就好。
[defaults]
inventory      = /etc/ansible/hosts      
#library        = /usr/share/my_modules/
#module_utils   = /usr/share/my_module_utils/
#remote_tmp     = ~/.ansible/tmp
#local_tmp      = ~/.ansible/tmp
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks          = 5
#poll_interval  = 15
#sudo_user      = root
#ask_sudo_pass = True
#ask_pass      = True
#transport      = smart
#remote_port    = 22
#module_lang    = C
#module_set_locale = False

 3.指定inventory配置自定义的hosts⽂件


注意:在ansible.cfg配置文件中指定inventory的hosts文件时,可以指定为相对路径(当前路径下),也可以指定为绝对路径,因为在使用自定义的ansible配置文件运行ansible时,都只能在自定义的文件夹中使用才可以识别。

[root@k8s_master1 myansible]# vim ansible.cfg    //以下配置中的参数都是默认的,如果不需要修改某项参数的话,就不需要管(不需要取消注释),默认就好。
[defaults]
inventory      = myhosts 或者 /root/myansible/myhosts    //取消注释,修改成相对路径或者绝对路径都不影响,因为都只能在当前文件夹/myansible中执行
#library        = /usr/share/my_modules/
......
[root@k8s_master1 myansible]# cat >> myhosts << EOF
> [k8s]     ---》这里为了与默认的ansible配置文件/etc/ansible/hosts中的主机组k8s_node区别,我们这里用k8s主机组
> k8s_node1
> k8s_node2
> EOF
[root@k8s_master1 myansible]# ls
ansible.cfg  myhosts
[root@k8s_master1 myansible]# pwd     //查看当前路径
/root/myansible
[root@k8s_master1 myansible]# cat myhosts
[k8s]      ---》这里为了与默认的ansible配置文件/etc/ansible/hosts中的主机组k8s_node区别,我们这里用k8s主机组
k8s_node1
k8s_node2

4.自定义配置文件测试:


4.1主机组k8s

---在自定义的ansible.cfg配置文件夹/root/myansible中执行ping主机组k8s---
[root@k8s_master1 myansible]# ansible k8s -m ping  
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
---退出自定义的ansible.cfg配置文件夹/root/myansible时执行ping主机组k8s---
[root@k8s_master1 myansible]# cd ..    //退出自定义配置文件夹
[root@k8s_master1 ~]# ansible k8s -m ping
[WARNING]: Could not match supplied host pattern, ignoring: k8s
[WARNING]: No hosts matched, nothing to do

 可以看到在我们退出自定义配置文件夹myansible后,再使用ansible命令ping我们myhosts文件中的k8s主机组时,就无法正常识别了。


当然,在我们自定义的ansible.cfg配置文件夹/root/myansible中执行ping主机组k8s_node(ansible安装完默认的inventory配置⽂件/etc/ansible/hosts中的主机组)时,肯定也是无法识别的。

[root@k8s_master1 ~]# cat /etc/ansible/hosts
[k8s_node]
k8s_node1
k8s_node2
[root@k8s_master1 ~]# cd myansible/
[root@k8s_master1 myansible]# ansible k8s_node -m ping
[WARNING]: Could not match supplied host pattern, ignoring: k8s_node
[WARNING]: No hosts matched, nothing to do

4.2主机组all


注意:在有自定义的配置文件时使用ansible操作主机组all时有两种情况,一是在自定义的配置文件夹中使用ansible控制主机组all时,就默认读取的是自定义配置文件夹中ansible.cfg定义的inventory的hosts文件,二是在其他路径下使用ansible控制主机组all时,则会默认读取ansible默认配置文件ansible.cfg中inventory的hosts文件。


- 验证 -:


 1.先修改ansible默认的/etc/ansible/hosts配置文件

[root@k8s_master1 ~]# vim /etc/ansible/hosts
[k8s_node]
k8s_node1
k8s_node2
k8s_node3    //加入一个新的配置,用于验证

 2.退出自定义配置文件夹/root/myansible时执行ping所有主机组all

[root@k8s_master1 ~]# ansible all -m ping
k8s_node3 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname k8s_node3: Name or service not known",
    "unreachable": true
}
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

 从上面返回的结果我们可以看出,当我们在退出自定义配置文件夹/root/myansible后执行ping所有主机组all时,ansible默认是读取的ansible.cfg配置文件中指定inventory的hosts文件/etc/ansible/hosts中的配置。


 3.进入自定义配置文件夹/root/myansible时执行ping所有主机组all

[root@k8s_master1 ~]# cd myansible/
[root@k8s_master1 myansible]# ansible all -m ping
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

 可以看到在进入自定义的配置文件夹/root/myansible中使用ansible的ping模块操作所有主机组all时,就会默认读取自定义配置文件夹中ansible.cfg定义的inventory的hosts文件。

最终解决方案:


使用 -i 指定使用的配置文件

[root@k8s_master1 ~]# ansible all -m ping -i /root/myansible/myhosts
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[root@k8s_master1 ~]# ansible all -m ping -i /etc/ansible/hosts
k8s_node3 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname k8s_node3: Name or service not known",
    "unreachable": true
}
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[root@k8s_master1 myansible]# ansible all -m ping -i /root/myansible/myhosts
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[root@k8s_master1 myansible]# ansible all -m ping -i /etc/ansible/hosts
k8s_node3 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname k8s_node3: Name or service not known",
    "unreachable": true
}
k8s_node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
k8s_node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

可以看到在我们使用了-i选项来指定这一次ansible控制时使用的hosts配置文件时,无论我们当前在哪个文件夹中,都不影响此次ansible正确读取指定的配置文件。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
18天前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
40 3
|
6天前
|
缓存 运维 应用服务中间件
自动化运维的新篇章:使用Ansible进行配置管理
【10月更文挑战第23天】随着云计算和微服务架构的兴起,传统的手动运维方式已经无法满足现代IT基础设施的需求。自动化运维成为提升效率、减少错误的关键。本文将介绍如何使用Ansible,一个流行的开源自动化工具,来简化配置管理和部署流程。我们将从基础概念出发,逐步深入到实战应用,展示如何通过编写Playbook来实现服务器的自动化配置和管理。
|
3天前
|
运维 应用服务中间件 调度
自动化运维:使用Ansible实现服务器批量管理
【10月更文挑战第26天】在当今快速发展的IT领域,自动化运维已成为提升效率、降低人为错误的关键技术手段。本文通过介绍如何使用Ansible这一强大的自动化工具,来简化和加速服务器的批量管理工作,旨在帮助读者理解自动化运维的核心概念和实践方法。文章将围绕Ansible的基础使用、配置管理、任务调度等方面展开,通过实际案例引导读者深入理解自动化运维的实现过程,最终达到提高运维效率和质量的目的。
|
8天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【10月更文挑战第21天】在现代IT基础设施的管理中,自动化运维已成为提升效率、降低错误率的关键。Ansible,作为一种简单而强大的自动化工具,正被广泛应用于配置管理、应用部署和任务自动化等领域。本文将引导你了解Ansible的基本概念,通过实际案例展示如何利用Ansible简化日常运维工作,并探讨其在现代IT运维中的应用价值。无论你是新手还是有经验的系统管理员,这篇文章都将为你开启Ansible的高效之旅提供指导。
|
14天前
|
运维 负载均衡 安全
自动化运维:使用Ansible进行服务器配置管理
【10月更文挑战第15天】在本文中,我们将探讨如何利用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。通过实际案例和代码示例,我们将展示Ansible如何帮助运维人员高效地进行软件部署、系统更新和日常维护任务,从而提升工作效率并减少人为错误。
|
20天前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
16天前
|
JavaScript 前端开发 搜索推荐
Gulp:构建自动化与任务管理的强大工具
【10月更文挑战第13天】Gulp:构建自动化与任务管理的强大工具
45 0
|
1月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
145 64
|
1月前
|
运维 负载均衡 应用服务中间件
自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第34天】在现代IT运维工作中,自动化已成为提升效率、减少错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。我们将通过实际案例展示如何利用Ansible的Playbooks来自动化常见任务,并讨论其对提高运维团队工作效率的影响。
|
1月前
|
运维 应用服务中间件 网络安全
自动化运维:使用Ansible进行批量服务器配置
【9月更文挑战第35天】在现代IT基础设施管理中,高效、可扩展的自动化工具是提升工作效率的关键。本文将引导您了解如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置过程,确保一致性和可靠性的同时减少人为错误。通过实际案例,我们将展示如何编写Ansible Playbook以实现批量服务器配置,从而让您能够更加轻松地管理和维护您的服务器群。