【学习笔记】安锐思布尔

总结

最近,Y公司的自己的项目开始进行转型,因为在公司内部,Chef的管理问题相当严重,所以考虑将项目迁移到其他平台上。之前我们使用过Ansible,现在打算重新学习一下,购买一个课程来温习。

以下是一些相关信息:
– 学习Terraform:https://qiita.com/yaoluffy/items/9db0cc7eeabbd321e9b5
– 可以在Udemy上找到有关教材:https://www.udemy.com/course/learn-ansible/learn/lecture/11060794

本文

库存

一般来说,保存主机信息的文件通常是这样的样式。

# Sample Inventory File

# Web Servers
web1 ansible_host=server1.company.com ansible_connection=ssh ansible_user=root ansible_ssh_pass=Password123!
web2 ansible_host=server2.company.com ansible_connection=ssh ansible_user=root ansible_ssh_pass=Password123!
web3 ansible_host=server3.company.com ansible_connection=ssh ansible_user=root ansible_ssh_pass=Password123!

# Database Servers
db1 ansible_host=server4.company.com ansible_connection=winrm ansible_user=administrator ansible_password=Password123!


[web_servers]
web1
web2
web3

[db_servers]
db1

[all_servers:children]
web_servers
db_servers

执行手册

将安装、配置、启动、关闭等一系列操作写入一个YAML文件,形式如下。

-
    name: 'Execute two commands on localhost'
    hosts: localhost
    tasks:
        -
            name: 'Execute a date command'
            command: date
        -
            name: 'Execute a command to display hosts file'
            command: 'cat /etc/hosts'

    • 相当于Chef的cookbook

FYI: https://www.simplilearn.com/ansible-vs-chef-differences-article

用ansible-playbook启动(而非ansible命令)
task的执行顺序很重要,所以用队列来写(不能用map)

Jinja2 俊佳二

手册中使用了{{}}作为vars,在这里使用的是jinja2。
FYI: https://www.jianshu.com/p/f04dae701361

条件

在Ansible中,还有条件语句(when)和循环语句(loop)。当需要调用循环语句中的值时,可以使用item变量作为例子。

tasks:
 - user: name='{{ item }}' status=present
   loop: 
     - joe
     - george

可以使用register将结果暂时保存起来,例如。

-
    name: 'Add name server entry if not already entered'
    hosts: localhost
    tasks:
        -
            shell: 'cat /etc/resolv.conf'
            register: command_output
        -
            shell: 'echo "nameserver 10.0.250.10" >> /etc/resolv.conf'
            when: 'command_output.stdout.find("10.0.250.10") == -1'

角色 (jué sè)

在中文中概括地说,Role就像是共享的包,类似于引入(import)。
它方便地允许我们引用他人的内容,然后根据需要自定义具体使用哪些功能或对哪些功能进行修改。

我的感受

    • 如果真的打算将postgresql移植到k8s上,ansible也没有必要使用了

想象一下,如果要用ansible又不想维护,那ansible在k8s的deployment将成为必要
直接写postgresql的deployment岂不是更加省事
因为容量之类的问题,导致无法在k8s上装postgres,那还是建议保持现状(因为ansible和chef的差别就不大了)

ansible的应用场景是建立在架构需要从实力开始的情形,即IaaS

换句话说,PaaS,CaaS都不需要ansible这项工具
IaaS的话,感觉和Terraform一起食用更佳

Katacoda

一个免费的一次性建立环境的在线工具

广告
将在 10 秒后关闭
bannerAds