精华内容
下载资源
问答
  • ansible教程

    2019-02-27 17:46:58
    一本很好的ansible教程。从如何安装ansible,到如何部署ansible,还有实际使用场景下如何设计ansible架构
  • ansible 教程

    2017-10-11 10:20:49
    ansible 教程,此本书为入门学习教程,深入浅出介绍ansible的使用。
  • Ansible 教程

    2021-04-06 11:08:48
      本教程的主要内容包括: 学习如何编写 Ansible 剧本 学习 Ansible 不同模块间的差别 学习编写 Ansible Adhoc 命令 Ansible 动手实践 编写 Ansible 剧本   Ansible 中的剧本以 YAML 格式编写。它是一种人类可...

    【注】本文译自:https://www.edureka.co/blog/ansible-tutorial/
      在阅读本文之前,你应该已经知道,Ansible 构成了 DevOps 认证的关键部分,它是用于配置管理、部署和编排的工具。
      本教程的主要内容包括:

    • 学习如何编写 Ansible 剧本
    • 学习 Ansible 不同模块间的差别
    • 学习编写 Ansible Adhoc 命令
    • Ansible 动手实践

    编写 Ansible 剧本

      Ansible 中的剧本以 YAML 格式编写。它是一种人类可读的数据序列化语言。它通常用于配置文件。它也可以用于存储数据的许多应用程序中。
      对于Ansible,几乎每个 YAML 文件都以列表开头。列表中的每个项目都是键/值对的列表,通常称为“哈希”或“字典”。因此,我们需要知道如何在 YAML 中编写列表和字典。
      列表的所有成员都是以“-”(破折号和空格)开头的相同缩进级别的行。也可能有更复杂的数据结构,例如字典列表或混合字典,其值是列表或两者的混合。
      例如,有关edureka的部门列表:

    departments:
    - marketing
    - sales
    - solutions
    - content writing
    - support
    - product
    

      下面是一个字典的例子:

    -USA
    -continent: North America
    -capital: Washington DC
    -population: 319 million
    

    主机和用户:

      对于剧本中的每一项,您都可以选择基础设施中的哪个计算机作为目标,以及由哪个远程用户来完成任务。要将主机包含在 Ansible 清单中,我们将使用主机的 IP 地址。
      通常,主机是由冒号分隔的一个或多个组或主机模式的列表。远程用户只是用户帐户的名称。

    变量:

      Ansible 使用预先定义的变量来使剧本和角色具有更大的灵活性。它们可用于遍历一组给定的值,访问各种信息(例如系统的主机名),并用特定值替换模板中的某些字符串。
      Ansible 已经为每个系统定义了丰富的变量集。当 Ansible 在系统上运行时,就会收集有关该系统的所有 facts 和信息并将其设置为变量。
      但是有一个命名变量的规则。变量名称应为字母,数字和下划线。变量应始终以字母开头。例如。wamp_21,port5是有效的变量名,而01_port, _server无效。

    任务:

      任务允许您将配置策略分解为更小的文件。任务包括从其他文件提取。Ansible 的任务和它的英文意思差不多。
      例如: Install <package_name>, update <software_name> 等等。

    处理程序:

      处理程序就像 Ansible 剧本中的常规任务一样,但是仅在 Task 包含 notify 指令并且还指示它已更改某些内容时才运行。例如,如果更改了配置文件,则引用该配置文件的任务可能会通知服务重新启动处理程序。
      下面是一个剧本示例,它将启动 Apache httpd 服务器程序:

    ---
    - hosts: webservers
    vars:
    http_port: 80
    max_clients: 200
    remote_user: root
    tasks:
    - name: ensure apache is at the latest version
    yum: name=httpd state=latest
    - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - restart apache
    - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
    handlers:
    - name: restart apache
    service: name=httpd state=restarted
    

      我希望该示例将使您与我上面提到的剧本组件的描述关联根活佛。如果您仍然不清楚,请不要担心,这些疑问都会在本文后面的部分得到澄清。
      这都是剧本。你也将编写这样的剧本。但是 Ansible 也为您提供了各种各样的模块,您可以使用它们。
    模块
      Ansible 中的模块是幂等的。从 RESTful 服务的角度来看,要使操作(或服务调用)具有幂等性,客户端可以重复进行相同的调用,同时产生相同的结果。 换句话说,发出多个相同的请求与发出单个请求具有相同的效果。
      Ansible 中有不同类型的模块:

    • 核心模块
    • 附加模块

    核心模块

      这些是 Ansible 核心团队维护的模块,并将始终随 Ansible 一起提供。与“额外”回购中的请求相比,它们还将对所有请求获得更高的优先级。
      这些模块的源代码由 Ansible 托管在 GitHub 上的 Ansible-modules-core 中。

    附加模块

      这些模块当前随 Ansible 一起提供,但将来可能会单独提供。它们也主要由Ansible社区维护。 非核心模块仍然可以完全使用,但是对于问题和请求请求的响应率可能会略低。
      随着时间的流逝,流行的“附加”模块可能会升级为核心模块。
      这些模块的源代码由 Ansible 在 GitHub 上的 Ansible-modules-extras 中托管。
      例如:远程管理模块中的一个附加模块是 ipmi_power 模块,它是远程计算机的电源管理器。它需要 python 2.6 或更高版本以及 pyghmi 才能运行。
      您可以通过编写一个 adhoc 命令来使用此模块,就像我在下面编写的一样:

    ipmi_power : name ="test.domain.com" user="localhost" password="xyz" state="on"
    

    返回值

      Ansible 模块通常返回一个数据结构,该数据结构可以注册到变量中,或者在 Ansible 程序输出时直接看到。每个模块可以记录其自己唯一的返回值。
      返回值的一些例子有:

    • changed::每当任务进行任何更改时,都将返回一个布尔值。
    • failed:如果任务失败,返回一个布尔值。
    • msg:返回一个字符串,给用户一个能用消息。
      Adhoc 命令
        Adhoc 命令是执行某些操作的简单一行命令。 使用 Ansible 命令运行的模块是 adhoc 命令。
        如:
    ansible host -m netscaler -a "nsc_host=nsc.example.com user=apiuser password=apipass"
    

      上面的 adhoc 命令使用 netscaler 模块来禁用服务器。Ansible 中提供了数百个模块,您可以在其中引用和编写 adhoc 命令。
      好了,所有的理论解释都讲过了,让我们通过动手实践来学习 Ansible。
    动手实践
      我打算写一个剧本,在我的节点/主机上安装 Nginx。
      让我们开始吧 😃
    第 1 步: 使用 SSH 连接到主机。为此,您需要生成一个公共 SSH 密钥。
      使用以下命令:
    ssh-keygen

      如您在上面的快照中看到的,命令 ssh-keygen 生成了一个 SSH 公钥。

    **第 2 步:您的下一个任务是在主机上复制 SSH 公钥。为此,请使用以下命令:
    ssh-copy-id -i root@<IP address of your host>

      上面的快照显示了将 SSH 公钥复制到主机。

    **第 3 步:**列出清单中主机/节点的 IP 地址。
      使用以下命令:
    vi /etc/ansible/hosts

      这将打开一个 vi 编辑器,您可以在其中列出主机的IP地址。这是您现在的清单。
    **第 4 步:**让我们 ping 一下以确保已建立连接。

      上面的快照确认您的控制计算机和主机之间已建立连接。
    **第 5 步:**现在让我们编写一个在主机上安装 Nginx 的剧本。您可以在 vi 编辑器中编写剧本。为此,只需使用以下命令创建您的剧本:
    vi <name of your file>.yml
      下面的快照显示了我的剧本,以 YAML 格式编写的用于安装 Nginx 的剧本。

      剧本的任务在 YAML 中定义为字典列表,并自上而下执行。 如果我们有多个主机,则在继续进行下一个任务之前,将针对每个主机尝试每个任务。每个任务都定义为字典,可以具有多个键,例如“ name”或“ sudo”,它们表示任务的名称以及它是否需要 sudo 特权。
      设置一个变量 server_port 用于侦听 TCP 端口 8080 传入的用户请求。
      在这里,第一个任务是获取用于安装 Nginx 的必要软件包,然后进行安装。在内部,Ansible 将检查目录是否存在,如果不存在则创建该目录,否则将不执行任何操作。
      下一个任务是配置 Nginx。在 Nginx 中,上下文包含配置细节。
      在这里,模板是一个可以部署在主机上的文件。但是,模板文件还包含一些参考变量,这些参考变量是从定义为 Ansible 剧本的一部分的变量或从主机收集的 facts 中提取的。包含配置详细信息的 facts 将从源目录中提取,并复制到目标目录中。
      这里的处理程序定义了仅在通知任务或状态更改时才执行的动作。在这个剧本中,我们定义了以下通知:重启 Nginx 处理程序,一旦将文件和模板复制到主机,它将重新启动 Nginx。
      现在,保存文件并退出。
    **第 6 步:**现在,使用以下命令运行此剧本:
    ansible-playbook <name of your file>.yml

      我们可以在上面的屏幕截图中看到我们的任务正在执行;正在安装 Nginx。
    **第 7 步:**让我们检查一下我的主机上是否安装了 Nginx。使用以下命令:
    ps waux | grep nginx

      您可以在上面的屏幕截图中看到不同的进程 ID 3555 和 103316 正在运行,这确保 Nginx 在您的主机上运行。
      **恭喜!**您已经使用 Ansible 剧本在主机上成功部署了 Nginx。

    展开全文
  • Ansible教程

    2018-11-06 17:22:05
    安装方式 源码包安装 安装git yum - y install git 下载源码包并安装 git clone git://github....cd ./ansible source ./hacking/env-setup 安装pip easy_install pip 安装python模块...

    安装方式

    源码包安装

    安装git

    yum - y install git

    下载源码包并安装

    git clone git://github.com/ansible/ansible.git --recursive
    cd ./ansible
    source ./hacking/env-setup

    安装pip

    easy_install pip

    安装python模块

    pip install paramiko PyYAML Jinja2 httplib2

    复制配置文件

    cd /root/ansible/examples
    cp -rf playbooks/ scripts/ /etc/ansible/

    yum方式安装

    导入阿里云epel yum源

    wget http://mirrors.aliyun.com/repo/epel-6.repo

    安装repo

    yum install ansible

    客户端配置

    windwos客户端

    安装pywinrm

    pip install http://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm

    安装kerberos用来连接域账户

    apt-get install libkrb5-dev
    Apt-get install python-dev
     libexpat1-dev libpython-dev libpython2.7-dev python2.7-dev
    
    pip install kerberos

    添加hosts文件

    [win]
    192.168.1.40

    创建inventory环境变量文件

    mkdir /etc/ansible/group_vars
    touch win.yml
    ansible_ssh_user: administrator
    ansible_ssh_pass: 1a!
    ansible_ssh_port: 5986
    ansible_connection: winrm

    复制脚本ConfigureRemotingForAnsible.ps1在windows客户端执行启动windows系统winrm服务,并设置服务为自动启动

    net start winrm

    安装winrm模块依赖的两个模块

    wget https://pypi.python.org/packages/source/i/isodate/isodate-0.5.4.tar.gz
    wget https://pypi.python.org/packages/source/x/xmltodict/xmltodict-0.10.1.tar.gz

    解压后用python setpu.py install执行安装测试

    ansible win -m win_ping -vvvv

    windows模块

    win_feature : 安装和卸载功能
    win_get_url : 从给定的 url 下载文件
    win_group : 添加和删除本地组
    win_msi : 安装和卸载 MSI 文件
    win_ping : windows 版本的 ping 模块
    win_service : 管理 windows 服务
    win_stat : 返回关于 windows 文件的信息
    win_user : 管理本地账号

    案例

    创建用户acai,密码1a@

    ansible win -m win_user -a "name=acai password=1a@"

    Linux客户端

    ansible管理linux服务器可以使用两种方式:使用ssh双机互信和通过在配置文件中指定密码

    使用ssh互信的方式管理主机

    ssh-keygen
    scp id_rsa.pub root@client:/root/.ssh/authorized_keys

    使用变量的方式管理主机

    mkdir /etc/ansible/group_vars
    vi test
    ansible_ssh_user:root
    ansible_ssh_pass:123456
    ansible_ssh_port:22

    添加host

    [linux]
    192.168.1.1

    测试

    ansible linux -m ping -vvvv

    linux模块

    file模块

    参数

    group:定义文件/目录属组
    owner:定义文件目录属主
    mode:定义文件目录的权限
    path:定义文件目录的路径
    recurse:递归设置文件的属性,只对目录有效
    state:定义文件状态(state状态有三个选项directory:如果目录不存在则创建、touch:如果文件不存在则创建、absent:删除文件或目录)

    案例

    查看远程主机的文件权限
    ansible test -m command -a 'ls -al /root/aaa'
    192.168.1.16 | success | rc=0 >>
    -rw-r--r--. 1 root root 86 Mar  9 19:03 /root/aaa
    #将文件权限修改为777
    ansible test -m file -a 'dest=/root/aaa mode=777'

    copy模块

    参数

    src:源文件
    dest:目标路径
    backup:覆盖前是否备份原文件
    owner:设置文件目录的属主
    group:设置文件目录的属组
    mode:设置文件目录的权限

    案例

    复制/root/aaa文件到主机/root目录下 
    ansible test  -m -a  copy 'src=/root/aaa dest=/root/'
    查看复制文件
    ansible test -m command -a 'ls /root/'

    cron模块

    参数

    backup:对远程主机上原任务计划内容修改之前备份
    day:日
    hour:小时
    minute:分钟
    month:月
    weekday:周
    job:要执行的文件,依赖于state=present
    name:该任务的描述
    special_time:指定什么时候执行(参数:reboot、yearly、annually、monthly、weekly、daily、hourly)
    sate:确认该任务计划是创建还是删除
    user:以哪个用户的身份执行

    案例

    创建一个计划任务
     ansible test -m cron -a 'name="cron_test" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate cn.ntp.org.cn"'
    查看创建的任务计划
    ansible test -m command -a 'crontab -l'
    192.168.1.16 | success | rc=0 >>
    #Ansible: cron_test
    */3 * * * * /usr/sbin/ntpdate cn.ntp.org.cn

    group模块

    参数

    home:指定家目录,需要createhome为yes
    groups:用户组
    uid:用户uid
    password:用户密码
    name:用户名
    createhome:是否创建家目录
    system:是否创建为系统用户
    remove:sate=absent时,删除家目录
    state:创建或者删除
    shell:指定用户shell环境

    案例

    创建一个gid为2016,group名字为acai的组
    ansible test -m group -a 'gid=2016 name=acai'
    user模块
    
    创建用户test_user,并加入acai组
    ansible test -m user -a 'name=test_user groups=acai state=present'
    删除创建的用户
    ansible test -m user -a 'name=test_user state=absent remove=yes'

    template模块

    template使用了Jinjia2格式作为文件模版,进行文档内变量的替换的模块。它的每次使用都会被ansible标记为”changed”状态。
    使用template模块后,ansible会在当前role路径下templates目录中文件copy到相应目录,若该文件存在替换变量时,ansible会根据配置替换该变量。

    template参数

    参数可选项备注
    backupyes/no
    src文件源地址
    dest文件目的地址
    mode设置远程节点上的template文件权限。类似Linux中chmod的用法
    owner设置远程节点上的template文件所属用户
    group设置远程节点上的的template文件的所属用户组

    案例:

    在templates目录下创建chrony.conf.j2文件并替换以下变量
    allow {{ cluster_network }}
    {{ cluster_network }} 代表是由ansible引入的一个变量,该变量可在group_vars目录下文件中调用,eg:

    cat group_vars/all 
    ---
    #k8s cluster api network
    #eg: cluster_network : 192.168.1.0/24
    cluster_network : 192.168.1.0/24

    当ansible执行该任务后,被copy的配置文件会被替换为cluster_network变量的值。

    yum模块

    参数

    enablerepo:启动某个源
    name:要操作软件包的名字,也可以传递一个url和本地路径
    state:定义软件包的状态(present:安装、absent:删除、latest:安装最新的)

    案例

    安装httpd服务
    ansible test -m yum -a 'state=present name=httpd'

    service模块

    参数

    enabled:是否开机启动 yes|no
    name:服务名称
    runlevel:运行级别
    sleep:如果执行了restarted,在stop和start之间沉睡几秒
    state:对服务执行启动,停止,重启,重新加载等

    案例

    启动httpd服务,并设置开机自动启动
    ansible test -m service -a 'name=httpd state=started enabled=yes'

    script模块

    ansible test -m script -a '/root/aaa.sh'

    ping模块:(测试主机网络)

    ansible test -m ping 

    command模块

    参数

    creates:一个文件名,当该文件存在则命令不执行
    free_form:要执行的Linux指令
    chdir:在执行指令之前,先切换到该指定的目录
    removes:一个文件名,如果文件不存在,则该选项不执行
    ansible test -m command -a 'hostname'

    raw模块

    ansible test -m raw -a 'cat /root/aaa'

    get_url模块

    案例

    下载文件到本地/tmp
    ansible test -m get_url -a 'url=http://mirrors.aliyun.com/centos/timestamp.txt dest=/tmp'

    setup模块

    收集系统所有信息
    ansible test -m setup
    收集系统所有信息,以主机名为文件名分别保存
    ansible test -m setup --tree /tmp/host
    收集系统网卡信息
    ansible test -m setup -a 'filter=ansible_eth[0-2]' --tree host
    收集系统内存信息
    ansible test -m setup -a 'filter=ansible_*_mb'

    lineinfile模块

    该模块用于从一个文件中搜索一行,确保该行存在或删除该行。lineinfile模块主要用于改变一个文件的一行。如果想要改变文件中相似的多行,可以使用replace模块。如果想要插入/更新/删除一个行块,可以使用blockinfile模块。
    参数

    backup    用于创建一个包含时间戳信息的备份文件。以便在错误的修改了文件的时候,能够找回原始的文件。
    create    与state=present一起使用。如果指定了这个参数,当要修改的文件不存在的时候,会创建它。否则会报错。
    dest    要修改的文件
    insertbefore    当regexp不匹配文件中的任何行的时候,会将line参数所指定的行,插入到insertbefore所指定的正则表达式匹配的行中的最后一行的前面,当insertbefore所指定的正则表达式不匹配任何行时,会插入到文件的末尾
    insertafter    与insertbefore类似,不同的是,insertbefore会将新行插入到其所指定的正则表达式匹配的行中的最后一行的前面,而insertafter是插入到后面。
    line    要插入或者替换的行。如果设置了backrefs参数,那么line中可以包含 位置分组 或 命名分组,lineinfile模块会使用regexp捕获的分组填充它们。
    mode    用来指定文件的权限,比如mode=0644 或 mode='a+x'
    owner 和 group    用来指定文件的属主 和 属组。(可能需要使用-b提权)
    regexp    用于搜索文件中的每一行的正则表达式。对于state=present,这个正则表达式所匹配的行中的最后一行会被替换;对于state=present,会删除所有匹配的行。
    state    用于设置 新增或替换一行,还是删除行

    案例

    1.删除passwd文件开头为root的行
    ansible test -m lineinfile -a "dest=/root/passwd state=absent regexp='^root'"
    2.修改selinux配置文件SELINUX=disabled
    ansible test -m lineinfile -a "dest=/etc/selinux/config regexp='^SELINUX=.*' line='SELINUX=disabled' state=present"
    3.添加hosts解析
    ansible test -m lineinfile -a "dest=/etc/hosts line=172.16.1.10\ttest" state=present

    systemd模块

    systemd模块就是使用systemctl来管理centos7系统服务
    模块参数

    参数名称可选值备注
    nameyes/no服务名称
    enabledyes/no是否设置开机启动
    statestarted、stopped、restarted、reload对服务执行的动作

    docker_container模块

    参数

    参数可选项描述
    command容器启动时执行的命令可以是字符串,也可以是列表
    hostname容器hostname
    image容器镜像
    name容器名称
    env容器环境变量
    network_modebridge、host、none容器的网络模式
    pull下载镜像到本地
    read_only挂载容器根文件系统为只读
    restart重启容器
    restart_policyno、on-failure、always、unless-stopped重启容器策略
    stateabsent、present、stopped、started容器运行状态
    volume_drivervolume driver
    volumes容器共享宿主机的目录,例如:volumes: /opt:container:/opt

    创建容器

    - name: start docker registry
      docker_container:
        name: registry
        image: registry:2
        ports: 
          - 4000:5000
          - 80:80
        state: started
        restart_policy: always
        volumes: 
          - /opt/t2cp:/var/lib/registry
          - /etc/test:/etc/test

    重启容器

    - name: restart docker registry
      docker_container:
        name: registry
        image: registry:2
        state: started
        restart: yes
        ports: 4000:5000

    Playbooks

    playbooks定义

    Playboos:简单说就是定义一个配置文件,文件中写入你需要安装的服务,配置文件,变量等信息。可以安装事先定义好的机制完成一个任务

    yml脚本语法

    a、用“---”开始
    b、在冒号之后,必须存在一个空格
    c、name和service必须对齐
    d、hosts和tasks必须对齐
    e、在书写key和value的时候,不能存在空格

    playbooks组成部分

    target section:定义要执行playbook的远程主机组
    variable section:定义playbook运行时需要的变量
    task section:定义要在远程主机上执行任务列表
    handler section:定义task执行完成以后需要调用的任务
    target section参数
    hosts:远程主机组
    user:执行该任务的用户
    sudo:设置为yes的时候,执行任务的时候使用root权限
    sudo_user:如果设置为tshare365,执行的时候会使用tshare365用户权限
    connection:通过什么方式连接到远程主机,默认ssh
    gather_facks:是否启用在远程主机执行setup模块,默认会执行。可用同setup模块获取远程主机的信息,在定义变量的时候使用。
    variadble section参数
    vars:定义格式 变量名:变量值
    vars_files:指定变量文件
    vars_prompt:用户交互模式自定义变量
    setup:模块取远程主机的值
    task section参数
    name:输出到屏幕的信息
    action:定义执行的动作调用ansible的模块
    copy:复制本地文件到远程主机
    template:复制本地文件到远程主机也可以在本地文件中调用变量
    service:定义服务的状态

    案例

    #playbooks中定义变量
    ---
     - hosts: web
       vars: 
     http_port: 80
    
    
    #ping主机hadoop
    ---
    - hosts: hadoop
      tasks: 
      - name: ping host
    ping: 

    实例:判断nginx服务是否正常运行

    ---
    - hosts: hadoop
      tasks: 
      - name: 
    service: name=httpd state=running

    实例:判断selinux的状态

    ---
    - hosts: hadoop
      tasks: 
      - name: 
    command: /sbin/setenforce 0

    ansible-playbook 条件判断

    1. when条件判断:只条满足when的条件时才执行对应的tasks
    ---
    - hosts: master
      tasks:
      - name: test host IP address
        debug: 'msg="{{ ansible_default_ipv4.address }}"'
        when: ansible_default_ipv4.address == "192.168.1.11"
    代码介绍:
    当满足条件ansible_default_ipv4.address == "192.168.1.11"时,触发task

    案例: 判断chrony配置文件是否存在,如果存在则跳过;如果不存在则复制配置文件

    - name: chrony check is exits
      stat: path=/etc/chrony.conf.bak
      register: chrony_conf_status
      #先用register获取chrony.conf.bak文件的状态
    - name: backup chrony conf
      copy: src=/etc/chrony.conf dest=/etc/chrony.conf.bak
      when: chrony_conf_status.stat.exists == False
      #判断配置文件是否存在如果存在则不执行该task
    1. changed_when:先执行task,并对task返回的值进行判断,当满足changed_when指定的条件时说明是执行成功的
    ---
    - hosts: master
      tasks:
      - name: check hostname
        shell: "hostname"
        changed_when: ansible_hostname == "master01"

    ansible-playbook 循环控制

    with_items标准循环

    用于循环多个重复任务

    ---
    - hosts: master
      tasks:
      - name: create {{ item }} file
        shell: "touch /tmp/{{ item }}"
        with_items:
          - aaa
          - bbb
          - ccc
    代码解释:
    通过with_items变量中的值在shell命令中遍历循环

    ansible-playbook role

    Roles 可以降低 Playbooks 的复杂性,更可以增加 Playbooks 的可用性。

    role的目录结构
    ├── defaults
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── README.md
    ├── tasks
    │   └── main.yml
    ├── templates
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml
    使用role

    创建一个role

    ansible-galaxy init base
    备注:
    ansible-galaxy 是管理 Roles 的指令

    创建一个部署高可用k8s项目

    基础配置

    创建项目目录

    mkdir ansible_k8s

    创建项目目录

    ├── deploy.yml
    ├── group_vars
    │   └── all
    ├── inventory
    │   └── hosts
    ├── roles
    │  
    └── scripts

    编写hosts

    cat inventory/hosts 
    [master]
    master0[1:2]
    
    [node]
    node11[1:2]
    
    [master:vars]
    ansible_ssh_user=root
    ansible_ssh_pass=123

    创建一个base role

    ansible-galaxy init base

    编写deploy.yml

     cat deploy.yml 
    ---
    
    - hosts: master
      roles:
      - base

    在base role里编写一个测试节点网络连通性的task

     cat roles/base/tasks/main.yml 
    ---
    - name: ping test network
      ping:

    规划role

    服务所在节点
    haproxymaster
    keepalivedmaster
    etcdmaster
    flannelmaster、node
    kube-api、kube-scheduler、kube-controller-managermaster
    kube-proxy、kubeletnode

    k8s服务介绍

    etc 一个高可用K/V键值对存储和服务发现系统
    flannel 实现夸主机的容器网络通信
    kube-api 提供k8s集群API
    kube-controller-manager 管理集群服务
    kube-scheduler 调度容器,分配到node节点
    kubelet 在node节点根据配置文件中定义好的参数启动容器
    kube-proxy 提供网络代理服务

    根据规划创建role

    .
    ├── base
    │   ├── defaults
    │   │   └── main.yml
    │   ├── files
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   ├── tests
    │   │   ├── inventory
    │   │   └── test.yml
    │   └── vars
    │       └── main.yml
    ├── etcd
    │   ├── defaults
    │   │   └── main.yml
    │   ├── files
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   ├── tests
    │   │   ├── inventory
    │   │   └── test.yml
    │   └── vars
    │       └── main.yml
    ├── flannel
    │   ├── defaults
    │   │   └── main.yml
    │   ├── files
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   ├── tests
    │   │   ├── inventory
    │   │   └── test.yml
    │   └── vars
    │       └── main.yml
    ├── haproxy
    │   ├── defaults
    │   │   └── main.yml
    │   ├── files
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   ├── tests
    │   │   ├── inventory
    │   │   └── test.yml
    │   └── vars
    │       └── main.yml
    ├── keepalived
    │   ├── defaults
    │   │   └── main.yml
    │   ├── files
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   ├── tests
    │   │   ├── inventory
    │   │   └── test.yml
    │   └── vars
    │       └── main.yml
    ├── kube-api
    │   ├── defaults
    │   │   └── main.yml
    │   ├── files
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   ├── tests
    │   │   ├── inventory
    │   │   └── test.yml
    │   └── vars
    │       └── main.yml
    ├── kube-controller-manager
    │   ├── defaults
    │   │   └── main.yml
    │   ├── files
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   ├── tests
    │   │   ├── inventory
    │   │   └── test.yml
    │   └── vars
    │       └── main.yml
    ├── kubelet
    │   ├── defaults
    │   │   └── main.yml
    │   ├── files
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   ├── tests
    │   │   ├── inventory
    │   │   └── test.yml
    │   └── vars
    │       └── main.yml
    ├── kube-proxy
    │   ├── defaults
    │   │   └── main.yml
    │   ├── files
    │   ├── handlers
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   └── main.yml
    │   ├── templates
    │   ├── tests
    │   │   ├── inventory
    │   │   └── test.yml
    │   └── vars
    │       └── main.yml
    └── kube-scheduler
        ├── defaults
        │   └── main.yml
        ├── files
        ├── handlers
        │   └── main.yml
        ├── meta
        │   └── main.yml
        ├── README.md
        ├── tasks
        │   └── main.yml
        ├── templates
        ├── tests
        │   ├── inventory
        │   └── test.yml
        └── vars
            └── main.yml

    编写基础配置task

    cat roles/base/tasks/main.yml 
    ---
    - name: ping test network
      ping:
    
    - name: copy hosts configure files to nodes
      copy: src=/etc/hosts dest=/etc/hosts mode=600
    
    - name: setings selinux disabled
      shell: "sed -i '7s/enforcing/disabled/g' /etc/selinux/config"
    
    - name: backup repos
      file: path=/etc/yum.repos.d state=directory
    
    - name: download yum repo file
      get_url: url=http://mirrors.aliyun.com/repo/{{ item }} dest=/etc/yum.repos.d
      register: repos
      with_items:
        - Centos-7.repo
        - epel-7.repo
    
    - name: settings yum repo
      shell: "sed -i '/aliyuncs/d' /etc/yum.repos.d/{{ item }}"
      with_items:
        - Centos-7.repo
        - epel-7.repo
    
    - name: yum clean all
      shell: yum clean all
    
    - name: yum makecache
      shell: yum makecache

    master节点安装软件包

    ---
    - name: master node install packages
      yum: name={{ item }} state=latest
      with_items:
        - etcd
        - kubernetes-master 
        - ntp
        - flannel

    node节点安装软件包

    展开全文
  • ansible-tuto:Ansible教程
  • ansible-interactive-tutorial:通过Docker进行简单设置的交互式Ansible教程
  • 在这个 Ansible 教程中,我们将学习一些基本的 Ansible 命令的例子,我们将用它来管理基础设施。-- Shusain有用的原文链接请访问文末的“原文链接”获得可点击的文内链接、全尺寸原图和相关文章。致谢编译自 | ...
    在这个 Ansible 教程中,我们将学习一些基本的 Ansible 命令的例子,我们将用它来管理基础设施。
    -- Shusain

    致谢
    编译自 | http://linuxtechlab.com/ansible-tutorial-simple-commands/ 
     作者 | Shusain
     译者 | geekpi ? ? 共计翻译:689 篇 贡献时间:1626 天

    在我们之前的 Ansible 教程中,我们讨论了 Ansible 的安装和配置[1]。在这个 Ansible 教程中,我们将学习一些基本的 Ansible 命令的例子,我们将用它来管理基础设施。所以让我们先看看一个完整的 Ansible 命令的语法:

       
    1. $ ansible <group> -m <module> -a <arguments>

    在这里,我们可以用单个主机或用 <group> 代替一组主机,<arguments> 是可选的参数。现在我们来看看一些 Ansible 的基本命令。

    检查主机的连通性

    我们在之前的教程中也使用了这个命令。检查主机连接的命令是:

       
    1. $ ansible <group> -m ping

    重启主机

       
    1. $ ansible <group> -a "/sbin/reboot"

    检查主机的系统信息

    Ansible 收集所有连接到它主机的信息。要显示主机的信息,请运行:

       
    1. $ ansible <group> -m setup | less

    其次,通过传递参数来从收集的信息中检查特定的信息:

       
    1. $ ansible <group> -m setup -a "filter=ansible_distribution"

    传输文件

    对于传输文件,我们使用模块 copy ,完整的命令是这样的:

       
    1. $ ansible <group> -m copy -a "src=/home/dan dest=/tmp/home"

    管理用户

    要管理已连接主机上的用户,我们使用一个名为 user 的模块,并如下使用它。

    创建新用户

       
    1. $ ansible <group> -m user -a "name=testuser password=<encrypted password>"

    删除用户

       
    1. $ ansible <group> -m user -a "name=testuser state=absent"

    注意: 要创建加密密码,请使用 "mkpasswd -method=sha-512"

    更改权限和所有者

    要改变已连接主机文件的所有者,我们使用名为 file 的模块,使用如下。

    更改文件权限

       
    1. $ ansible <group> -m file -a "dest=/home/dan/file1.txt mode=777"

    更改文件的所有者

       
    1. $ ansible <group> -m file -a "dest=/home/dan/file1.txt mode=777 owner=dan group=dan"

    管理软件包

    我们可以通过使用 yum 和 apt 模块来管理所有已连接主机的软件包,完整的命令如下:

    检查包是否已安装并更新

       
    1. $ ansible <group> -m yum -a "name=ntp state=latest"

    检查包是否已安装,但不更新

       
    1. $ ansible <group> -m yum -a "name=ntp state=present"

    检查包是否是特定的版本

       
    1. $ ansible <group> -m yum -a "name= ntp-1.8 state=present"

    检查包是否没有安装

       
    1. $ ansible <group> -m yum -a "name=ntp state=absent"

    管理服务

    要管理服务,我们使用模块 service ,完整命令如下:

    启动服务

       
    1. $ansible <group> -m service -a "name=httpd state=started"

    停止服务

       
    1. $ ansible <group> -m service -a "name=httpd state=stopped"

    重启服务

       
    1. $ ansible <group> -m service -a "name=httpd state=restarted"

    这样我们简单的、单行 Ansible 命令的教程就完成了。此外,在未来的教程中,我们将学习创建 playbook,来帮助我们更轻松高效地管理主机。


    via: http://linuxtechlab.com/ansible-tutorial-simple-commands/

    作者:SHUSAIN[3] 译者:geekpi 校对:wxy

    本文由 LCTT 原创编译,Linux中国 荣誉推出


    展开全文
  • Jenkins 集成Ansible教程

    2019-03-07 16:36:00
    部署 Ansible Server 一、在Jenkins安装SSH插件 系统管理 -> 插件管理 二、在Jenkins 凭证中添加Ansible 账号 三、在Jenkins系统设置中添加SSH主机 四、在Jenkins freestyle job中添加构建...

    前提条件:

      1. 部署Jenkins Server

      2. 部署 Ansible Server

     

    一、在Jenkins安装SSH插件

    系统管理 -> 插件管理

     

    二、在Jenkins 凭证中添加Ansible 账号

     

     

    三、在Jenkins系统设置中添加SSH主机

     

     四、在Jenkins freestyle job中添加构建 -> 远程执行SSH

     

    说明:因为我的ansible是安装在 python-env环境下的,因此需要先启用python-env环境

    五、执行构建

     

    转载于:https://www.cnblogs.com/vincenshen/p/10490570.html

    展开全文
  • 教程 Ansible中文权威指南 遇到的问题 ubuntu使用pip下载,结果没有找到/etc/ansible文件(可能是因为同时存在python2 和 python3 。在下载目录下面也没有找到ansible.cfg文件(可以使用ansible --version查看),...
  • 流浪汉教程 该存储库与。 从长远来看,可能不会积极维护它。 如果您是PHP用户,请签出PHP分支,而master分支则以Python / Django设置为目标。 在对存储库进行任何操作之前,先阅读存储库中的许可也是明智的。 请...
  • ansible视频教程,马哥ansible视频教程下载,非常详细,共20个
  • Ansible使用教程

    2021-01-09 04:50:26
    ansible官方文档 ansbile官方文档中文版 一 安装使用 1.1 离线安装ansible 首先,在一台能联网的机器上,下载ansible的epel源以及createrepo rpm包 # yum install createrepo && yum install yum-utils #上rpm ...
  • ansible 简明教程

    2017-02-18 21:24:08
    本文对ansible及常用进行了介绍
  • ansible 简易教程

    2021-10-04 21:07:31
    安装命令 pip3 install ansible ...这时要在 /etc/ansible/ 目录下手动创建 ansible.cfg 和 hosts 文件。 在ansible.cfg中配置,跳过初次ssh时的客户端可信校验。 [defaults] host_key_checking = False 添加h

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,084
精华内容 1,233
关键字:

ansible教程