笔记

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

 

转载于:https://www.cnblogs.com/deny/p/11495307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值