Copy模块:
#查看copy模块详细参数信息
ansible-doc -s copy
#查看目的机器上是否有hello.sh文件
ansible Devops-client –m command –a /tmp/hello.sh
#将管理机上的ttt.sh文件拷贝到客户机上hello.sh
ansible Devops-client –m copy –a “src=/tmp/ttt.sh dest=/tmp/hello.sh mode=0750
#运行客户机上的hello.sh
ansible Devops-client –m command –a “/tmp/hello.sh”
#force参数演示
#查看客户机上的hello.sh文件详细信息
ansible Devops-client –m raw –a “ls –l /tmp/hello.sh”
#修改管理机上的ttt.sh,增加几行内容
#使用copy模块拷贝到客户机
ansible Devops-client –m copy –a “src=/tmp/ttt.sh dest=/tmp/hello.sh”
#查看客户机上的hello.sh文件是否被覆盖
ansible Devops-client –m raw –a “ls –l /tmp/hello.sh”
#添加force=no,将不会覆盖原始文件
#更新下ttt.sh文件
ansible Devops-client –m copy –a “src=/tmp/ttt.sh dest=/tmp/hello.sh force=no”
#查看客户机上的hello.sh文件是否被覆盖
ansible Devops-client –m raw –a “ls –l /tmp/hello.sh”
#backup参数演练
ansible Devops-client –m copy –a “src=/tmp/ttt.sh dest=/tmp/hello.sh backup=yes”
ad-hoc是什么?
如果我们敲一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来,这样的命令就叫做ad-hoc命令。
Ad-hoc 内比为shell命令
Playbook 内比为shell scripts
Ad-hoc使用场景?
一些简单的任务,简单的shell操作,简单场景
File模块
#查看模块信息
ansible-doc -s file
ansible Devops-client -m command -a "ls -l /tmp/hello.sh"
useradd admin
ansible Devops-client -m file -a "path=/tmp/hello.sh owner=admin group=admin mod=0777”
setup模块
ansible Devops-client -m setup
ansible Devops-client -m setup -a "filter=ansible_env"
user/group
#查看admin用户的详细信息
ansible Devops-client -m command -a "id admin"
#添加用户
ansible Devops-client -m user -a "name=test01 group=root"
#删除用户
ansible Devops-client -m user -a "name=test01 state=absent remove=yes"
#能够查看远程机上是否存在指定的用户组
ansible Devops-client -m shell -a "cat /etc/group | grep testgrp01"
#创建用户组
ansible Devops-client -m group -a "name=testgrp01"
#删除用户组
ansible Devops-client -m group -a "name=testgrp01 state=absent"
yum/service
#在远程机上安装httpd服务
ansible Devops-client -m yum -a "name=httpd"
#确认客户机上是否安装了httpd服务
ansible Devops-client -m shell -a "rpm -qa| grep httpd"
#查看客户机上的httpd服务的状态
ansible Devops-client -m shell -a "systemctl status httpd"
#service模块启动客户机上httpd服务
ansible Devops-client -m service -a "name=httpd state=started"
#service模块停止客户机上httpd服务
ansible Devops-client -m service -a "name=httpd state=stopped"
#设置httpd服务开机自启动
ansible Devops-client -m service -a "name=httpd enabled=yes state=restarted"
#卸载远程机上httpd服务
ansible Devops-client -m yum -a "name=httpd state=absent"
Ansible运行的返回值?
1、 facts 比如setup模块、docker模块
2、 status 模块是否运行成功 service模块、ping等大部分模块
3、 模块自己的输出信息stderror stdout 以msg输出
Script模块
#script模块执行的是ansibe管理机上脚本,不是远程机上的脚本
ansible Devops-client -m script -a "/tmp/hello.sh" –vvv
#到指定目录执行对应的脚本
ansible Devops-client -m script -a "chdir=/tmp hello.sh" –vvv
get_url/cron/synchronize模块
get_url:类似于wget和curl功能,可以进行下载以及webapi交互操作
cron:用于管理客户机上的cron任务
synchronize:使用rsync来控制客户机和管理机之间的内容同步操作
#列出客户机上所有的定时任务
ansible Devops-client -m shell -a "crontab -l"
#在客户机上添加定时任务
ansible Devops-client -m cron -a 'name=sayhellojob minute=*/1 hour=* day=* month=* weekday=* job="echo hello `date` >> /tmp/cronlog.log"'
#get_url模块能够从指定地址下载所需文件然后存到指定的目录
ansible Devops-client -m get_url -a "url=http://www.baidu.com dest=/tmp"
# synchronize模块实现管理机与客户机之间的同步,前提需两边都装了rsync
ansible Devops-client -m synchronize -a "src=/tmp/tst-syn dest=/opt/dst-syn"
docker模块
前提条件:
1、 python >2.6
2、 docker-py >0.3.0
3、 docker-server >0.10.0
#安装docker-py
pip install docker-py
#shell模块来查看当前机器上的镜像和所有容器
ansible Devops-mgr -m shell -a "docker images && docker ps -a"
#docker模块启动jenkins容器,指定端口映射
ansible Devops-mgr -m docker -a "image=docker.io/jenkins ports=8088:8080"
#停止Jenkins容器
ansible Devops-mgr -m docker -a "image=docker.io/jenkins state=stopped"
#删除容器操作
ansible Devops-mgr -m docker -a "image=docker.io/jenkins state=absent"
playbook模块
1、 yaml文件以---开头,表面这是一个yaml文件;xml文件的头<?xml version=”1.0” encoding=”utf-8”?>,不写”---”头也是可以,不会有什么影响;
2、 yaml文件中使用”#”作为注释符;
3、 引号的使用,一般key:value对可以不需要加引号,但是在引用变量的时候要加引号,是为了区分常量字符串;
4、 布尔类型的变量的值得书写有多种格式:true/false、yes/no、1/0;
5、 列表用-来表示数组的某一个元数,按照顺序执行;
6、 数组还可以用[]来表示,比如[ip1,ip2,ip3]
7、 Task有三类:pre_tasks、tasks、post_tasks
SSH不打通ansible连接:
ansible_ssh_user 要远程连接的用户名
ansible_ssh_pass 要远程连接的用户名密码
使用sudo需添加一行变量:
ansible2.5版本之前变量
ansible_sudo_pass 要切换到root的sudo的密码
ansible_su_pass
ansible2.5之后版本
ansible_become_pass
1、 直接在ansible的hosts文件里指定
2、 Yaml或者ansible命令参数里指定这两个变量
PLAYBOOK
1、 操作系统变量可以使用${变量名}这种方式使用,用户临时变量不能通过这种方式使用,ansible是不认;
2、 用户临时环境变量要通过{{lookup(‘env’,’变量名’)}}来使用;
3、 Gather_fact打开,用户临时环境变量一样是不能使用${变量名}
4、 用户定义的变量如果用{{变量名}}方式使用,需要在playbook的yaml中指定才能用
Vars:
- 变量名:变量值
5、 Playbook里的条件判断,task里用when关键字
要打开gather_facts
gather_facts: true
6、 Playbook循环可以用with_items
Playbook 使用yum和service模块来安装启动服务
卸载httpd和php软件
添加用户、修改密码、安装多个服务
带有特殊结构的with_items的使用:
修改httpd服务的端口,需先执行
setenforce 0
Playbook的yml文件
大型playbook通用目录结构
Hosts
inventory à指定我们要控制的主机
group_vars à存放所有控制主机的公共变量
all.yml
roles à存放一些任务的角色
role1
defaults ->存放的是role1要用到的局部变量
main.yml
meta ->存放的是role1需要依赖的其他role
main.yml
tasks ->role1需要完成的任务
main.yml ->role1所有完成任务的详细定义
handlers
main.yml
templates ->role1所有任务需要用到的模板
files ->存放的是要复制到客户端的文件
role2
tasks ->role2需要完成的任务
main.yml
handlers
main.yml
templates
files
role3
tasks ->role2需要完成的任务
main.yml
handlers
main.yml
templates
files
4.20
Include
应用场景:
1、 notify 引用handlers
2、 playbook1要引用另外一个playbook2中的task
3、 task1要引用task2中的任务
playbook1 :
main1.yml内容
- name: task1
command: /bin/bash
- name: task2
command: df –h
playbook2:
main2.yml
tasks:
- include: tasks/main1.yml
wordpress.yml
tasks:
- include: wordpress.yml wp_user=tom
- include: wordpress.yml wp_user=tom2
- include: wordpress.yml wp_user=tom3
-----------
Tasks:
- {include: wordpress.yml , wp_user=tom3,ssh_keys:[]}
新版本的ansible把原来的include换成了Include_tasks
Playbook工程目录:
Site.yml
- Hosts: all
Roles:
-webserver
-dbserver
Webserver.yml
- Hosts: all
Roles:
- webserver
Dbserver.yml
- Hosts: all
Roles:
- dbserver
Roles目录格式:
Roles/
Webserver/
Files/
Templates/
Tasks/
Main.yml
Handlers/
Vars/
Defaults/
Meta/
Dbserver/
Files/
Templates/
Tasks/
Main.yml
Handlers/
Vars/
Defaults/
Meta/
- Hosts: all
Roles:
-{role: role1,port:5000}
-{role:role2, when:”ansible_os_family == ‘RedHat’’
-{role:role3,tags:[“web”,”db”]}
- Hosts: all
pre_tasks:
-name: task1
Shell: echo”hello”
Roles:
-{role:role1, port:8080,when:….}
- role2
Tasks:
-name:tsk2
-shell: echo “nice’
Post_tasks:
-name: TS3
-command: echo”ok”
Roles下面的变量的优先级:
Yml里面的变量>vars下面的变量>defaults下的变量
如果要兼容多个操作系统的类型,我们可以通过when来过滤我们tasks
- name: Ensure that firewalld is installed
yum:
name: firewalld
state: present
when: ansible_distribution_major_version == "7"
- name: Ensure that firewalld is started
service:
name: firewalld
state: started
when: ansible_distribution_major_version == "7"
jboss-standalone例子jboss服务启动问题解决:
跟踪错误日志发现
Xml解析的问题,解决办法:
cd /usr/share/jboss-as/
wget -O jboss-modules.jar http://repo1.maven.org/maven2/org/jboss/modules/jboss-modules/1.1.5.GA/jboss-modules-1.1.5.GA.jar
重启jboss服务
/etc/init.d/jboss start
修改jboss的playbook,添加一个解决bug的任务
0511
Seboolean:
Name:(必须)selinux规则的名字
State: (必须) true/false
Persistent:设置开机永久有效
Firewalld:
State: 设置是否启用或者禁用,enabled/disabled
Port: 端口号/网络协议,比如3306/tcp
Permanent: 设置开机规则是否有效true/false
Immediate:设置是否立即生效,一般跟Permanent 一起使用yes/no
mysql_db:
name: 定义需要创建/删除mysql的库名
state: 创建present 删除是absent
mysql_user:
name:需要创建/删除的用户名
password: 创建用户的密码
priv: 给用户赋权限,格式`db.table:priv1,priv2'
host:
state: 创建present 删除是absent
local_action: ansible默认只会对控制机器进行操作,但如果在这个过程中需要在ansible管理机上执行操作了?有两种方式:
1> 使用delegate_to(任务委派)功能
2> 使用connection:local
3> 使用local_action
Register:当我们需要判断对执行了某个操作或者命令后,如何做相应的响应处理(执行其他ansible语句),则一般会用到register。
Become: 有些任务使用普通权限无法完成时,可以使用sudo来提升执行的权限。设置yes激活权限提升。一起使用的become_user、become_method、become_flags
K8s:
>开源的
>进行容器管理
>能够进行监控容器
>docker 里容器叫做container
K8s 里叫做pod,是容器组的概念,一个pod可以包含多个container
某个pod只能运行在某一个宿主机上
K8s里对这些pod、namespace、role、deployment、service等叫
Resource(资源)
K8s架构:
Master-slave
Slave机器就是宿主机,存放pod的机器,k8s里叫node
Master机器上主要组件:
Apiserver:所有一些资源操作都是经过这个组件来实现
Controller manager:维护k8s集群的状态,故障检测、自动扩展、滚动更新等操作;
Scheduler: 进行资源调度
Etcd:保存k8s集群的状态数据
Node机器上主要组件:
Kubelet: 负责容器的生命周期管理、volume、网络的管理
Kube-proxy: service服务的发现和负载均衡;
Image-registry: 宿主机的本地docker镜像,存放宿主机上的pod里容器运行所需的镜像,每个宿主机上要装docker客户端
Fluentd:收集k8s集群日志、存储于查询
Flannel: 保证k8s宿主机上容器里的虚拟ip的唯一性
K8S api设计理念跟REST服务接口方式差不多,层级方式,声明式(命令方式)
Post /v2/catalog/namespace
/v2/catalog/namespace/pods
Kubectl:k8s控制台工具,实现也是调用具体的k8s api
Pod/RC/RS/deployment/service/job/volume/pv、pvc/namespace/
secret