【0723】自动化运维——saltstack

2023-05-16

24.1 自动化运维介绍

认识自动化运维:

  • 传统运维效率低,大多工作人为完成

  • 传统运维工作繁琐,容易出错

  • 传统运维每日重复做相同的事情

  • 传统运维没有标准化流程

  • 传统运维的脚本繁多,不能方便管理

  • 自动化运维就是要解决上面所有问题

常见自动化运维工具:

  • Puppet (www.puppetlabs.com)基于 rubby 开发,c/s 架构,支持多平台,可管理配置文件、用户、cron 任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。

  • Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )基于 python 开发,c/s 架构,支持多平台,比 puppet 轻量,在远程执行命令时非常快捷,配置和使用比 puppet 容易,能实现 puppet 几乎所有的功能。

  • Ansible (www.ansible.com )更加简洁的自动化运维工具,不需要在客户端上安装 agent,基于 python 开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。


24.2 saltstack安装

saltstack 介绍 https://docs.saltstack.com/en/latest/topics/index.html

——可以使用 salt-ssh 远程执行,类似 ansible

——也支持 c/s 模式,下面我们将讲述该种模式的使用,需要准备两台机器

——194.130为服务端,194.132为客户端

1、设置 hostname 以及hosts,arslinux-01,arslinux-02


[root@arslinux-01 ~]# vim /etc/hosts
192.168.194.130 arslinux-01
192.168.194.132 arslinux-02  

2、两台机器全部安装 saltstack yum 源


[root@arslinux-01 ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@arslinux-02 ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm  

3、130上安装 salt-master salt-minion,132上安装 salt-minion


[root@arslinux-01 ~]# yum install -y salt-master salt-minion
[root@arslinux-02 ~]# yum install -y salt-minion  

如果想哪台机器作为控制中心,那么就在该机器安装 salt-master,其他机器只安装 salt-minion


24.3 启动saltstack服务

1、130 上编辑配置文件


[root@arslinux-01 ~]# vim /etc/salt/minion
master: arslinux-01  

(冒号后的空格不能省略,否则会出错)

2、启动服务 salt-master,salt-minion


[root@arslinux-01 ~]# systemctl start salt-master
[root@arslinux-01 ~]# systemctl start salt-minion
[root@arslinux-01 ~]# ps aux|grep salt
root      44172  0.3  1.3 389376 40932 ?        Ss   22:23   0:03 /usr/bin/python /usr/bin/salt-master
root      44181  0.0  0.6 306024 20072 ?        S    22:23   0:00 /usr/bin/python /usr/bin/salt-master
root      44188  0.0  1.1 469972 34380 ?        Sl   22:23   0:00 /usr/bin/python /usr/bin/salt-master
root      44192  0.0  1.1 388464 34144 ?        S    22:23   0:00 /usr/bin/python /usr/bin/salt-master
root      44193  0.7  1.9 417660 60528 ?        S    22:23   0:08 /usr/bin/python /usr/bin/salt-master
root      44194  0.0  1.1 389120 34820 ?        S    22:23   0:00 /usr/bin/python /usr/bin/salt-master
root      44195  0.0  1.1 765976 35248 ?        Sl   22:23   0:00 /usr/bin/python /usr/bin/salt-master
root      44203  0.3  1.5 487824 49356 ?        Sl   22:23   0:04 /usr/bin/python /usr/bin/salt-master
root      44204  0.3  1.5 487804 49320 ?        Sl   22:23   0:04 /usr/bin/python /usr/bin/salt-master
root      44205  0.3  1.5 487796 49184 ?        Sl   22:23   0:04 /usr/bin/python /usr/bin/salt-master
root      44207  0.3  1.5 487808 49192 ?        Sl   22:23   0:04 /usr/bin/python /usr/bin/salt-master
root      44208  0.3  1.5 487792 49316 ?        Sl   22:23   0:04 /usr/bin/python /usr/bin/salt-master
root      44210  0.2  1.1 463108 35224 ?        Sl   22:23   0:02 /usr/bin/python /usr/bin/salt-master
root      47603 14.0  0.7 314132 21716 ?        Ss   22:43   0:00 /usr/bin/python /usr/bin/salt-minion
root      47606 56.0  1.3 567764 42856 ?        Sl   22:43   0:01 /usr/bin/python /usr/bin/salt-minion
root      47614  0.3  0.6 403864 20176 ?        S    22:43   0:00 /usr/bin/python /usr/bin/salt-minion
root      47685  0.0  0.0 112724   988 pts/0    R+   22:43   0:00 grep --color=auto salt  

3、132 上编辑配置文件


[root@arslinux-02 ~]# vim /etc/salt/minion
master: arslinux-01
[root@arslinux-02 ~]# systemctl start salt-minion  

4、启动服务 salt-minion


[root@arslinux-02 ~]# ps aux|grep salt
root      14221 33.0  2.1 314028 21740 ?        Ss   22:43   0:00 /usr/bin/python /usr/bin/salt-minion
root      14224 55.5  3.9 466532 39152 ?        Sl   22:43   0:01 /usr/bin/python /usr/bin/salt-minion
root      14232  0.0  2.0 403760 20180 ?        S    22:43   0:00 /usr/bin/python /usr/bin/salt-minion
root      14294  0.0  0.0 112724   988 pts/1    R+   22:43   0:00 grep --color=auto salt  

服务端监听 4505 和 4506 两个端口,4505 为消息发布的端口,4506 为和客户端通信的端口

客户端不需要监听端口

错误:

启动 satl-minion,查看不到进程,下面方法出现错误


[root@arslinux-01 ~]# /usr/bin/salt-minion start
/usr/lib/python2.7/site-packages/salt/scripts.py:198: DeprecationWarning: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date.  Salt will drop support for Python 2.7 in the Sodium release or later.
[ERROR   ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not <type 'unicode'>.
[ERROR   ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not <type 'unicode'>.  

最后发现是/etc/salt/minion 中 master: arslinux-01 中间的空格不能省略


24.4 saltstack配置认证

  • saltstack 配置认证的认识:

——master 端和 minion 端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,也是通过密钥对来加密解密的

——minion 在第一次启动时会在 /etc/salt/pki/minion/ 下生成 minion.pem 和 minion.pub,其中.pub为公钥,它会把公钥传输给 master

——master 第一次启动时也会在 /etc/salt/pki/master 下生成密钥对,当 master 接收到 minion 传过来的公钥后,通过 salt-key 工具接受这个公钥,一旦接受后就会在 /etc/salt/pki/master/minions/ 目录里存放刚刚接受的公钥,同时客户端也会接受 master 传过去的公钥,把它放在 /etc/salt/pki/minion 目录下,并命名为 minion_master.pub

  • 以上过程需要借助 salt-key 工具来实现


[root@arslinux-01 ~]# salt-key -a arslinux-02
The following keys are going to be accepted:
Unaccepted Keys:
arslinux-02
Proceed? [n/Y] y
Key for minion arslinux-02 accepted.
[root@arslinux-01 ~]# salt-key
Accepted Keys:
arslinux-02
Denied Keys:
Unaccepted Keys:
arslinux-01
Rejected Keys:
[root@arslinux-01 ~]# ls /etc/salt/pki/master/minions/
arslinux-02
[root@arslinux-01 ~]# cat /etc/salt/pki/master/minions/arslinux-02
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33bNZQ/cEK8v20hVFbb6
WGMROxv9kGImHyn6OYNfJHFFpiJblgZheeqct0nrUW4TugLv7LI7a3+DXs2JkzqH
Sh5Q06W1nj4Q0Qv9uGJqf75ZjCvapuCGRR8e79ETbXmhmAwXMmewK8UiWCRFe2/g
nc/w/2rwk6QIpUsNYLCwPF0FLrdJJJDEcWp93UW0SZXHllkqubsBdHdqo8SZVK0H
30n2e3dzwwbVqgIV3AE9kp8qevuwq5sJ1XJLV0BcLroTfft4BODttS4AcaVyWmKK
qNlal3oYYpjXRnJIcZzp5e5srQRjUzFzDKJfS1o6iFf76BuBRnp+eiIx37K05w3d
SQIDAQAB
-----END PUBLIC KEY-----[root@arslinux-01 ~]#  
  • salt-key命令用法:

    -a  后面跟主机名,认证指定主机

    -A 认证所有主机

    -r  跟主机名,拒绝指定主机

    -R  拒绝所有主机

    -d 跟主机名,删除指定主机认证

    -D 删除全部主机认证

    -y 省略掉交互,相当于直接按了y

  • 实际操作:


[root@arslinux-01 ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
arslinux-01
Proceed? [n/Y] y
Key for minion arslinux-01 accepted.
[root@arslinux-01 ~]# !ls
ls /etc/salt/pki/master/minions/
arslinux-01  arslinux-02
[root@arslinux-01 ~]# salt-key -D
The following keys are going to be deleted:
Accepted Keys:
arslinux-01
arslinux-02
Proceed? [N/y] y
Key for minion arslinux-01 deleted.
Key for minion arslinux-02 deleted.
[root@arslinux-01 ~]# ls /etc/salt/pki/master/minions/
[root@arslinux-01 ~]#  

——删除之后无法添加,需要重启 minion,让 master 去重新识别 minion


[root@arslinux-01 ~]# salt-key -A -y
The key glob '*' does not match any unaccepted keys.
[root@arslinux-01 ~]# systemctl restart salt-minion
[root@arslinux-02 ~]# systemctl restart salt-minion
[root@arslinux-01 ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
arslinux-01
arslinux-02
Rejected Keys:
[root@arslinux-01 ~]# salt-key -A -y
The following keys are going to be accepted:
Unaccepted Keys:
arslinux-01
arslinux-02
Key for minion arslinux-01 accepted.
Key for minion arslinux-02 accepted.  

——只有在 Unaccepted keys 下的 keys 才可以被 salt-key -r 或 salt-key -R 操作


[root@arslinux-01 ~]# salt-key -r arslinux-02
The key glob 'arslinux-02' does not match any unaccepted keys.
[root@arslinux-01 ~]# systemctl restart salt-minion
[root@arslinux-02 ~]# systemctl restart salt-minion
[root@arslinux-01 ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
arslinux-01
arslinux-02
Rejected Keys:
[root@arslinux-01 ~]# salt-key -r arslinux-02
The following keys are going to be rejected:
Unaccepted Keys:
arslinux-02
Proceed? [n/Y] y
Key for minion arslinux-02 rejected.  


24.5 saltstack远程执行命令


[root@arslinux-01 ~]# salt-key
Accepted Keys:
arslinux-01
arslinux-02
Denied Keys:
Unaccepted Keys:
Rejected Keys:  
  • salt '*' test.ping          测试对方机器是否存活


[root@arslinux-01 ~]# salt '*' test.ping
arslinux-02:
    True
arslinux-01:
    True
[root@arslinux-01 ~]# salt 'arslinux-02' test.ping
arslinux-02:
    True  

这里的 * 表示所有已经签名的 minion 端,也可以指定一个,rest.ping 测试对方机器是否存活

  • salt '*' cmd.run "命令"          在所有签名的 minion 端执行这个命令


[root@arslinux-01 ~]# salt '*' cmd.run 'ip addr'
arslinux-02:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
            valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
            valid_lft forever preferred_lft forever
        2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:14:4f:d9 brd ff:ff:ff:ff:ff:ff
        inet 192.168.194.132/24 brd 192.168.194.255 scope global noprefixroute ens33
            valid_lft forever preferred_lft forever
        inet6 fe80::4c99:ed43:5757:e772/64 scope link noprefixroute
            valid_lft forever preferred_lft forever
arslinux-01:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
            valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
            valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:24:ea:f2 brd ff:ff:ff:ff:ff:ff
        inet 192.168.194.130/24 brd 192.168.194.255 scope global noprefixroute ens33
            valid_lft forever preferred_lft forever
        inet 192.168.194.150/24 brd 192.168.194.255 scope global secondary noprefixroute ens33:0
            valid_lft forever preferred_lft forever
        inet6 fe80::c905:5e78:b916:41da/64 scope link noprefixroute
            valid_lft forever preferred_lft forever
    3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:24:ea:fc brd ff:ff:ff:ff:ff:ff
        inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens37
            valid_lft forever preferred_lft forever
        inet6 fe80::f41:9da7:d8e3:10ba/64 scope link noprefixroute
            valid_lft forever preferred_lft forever
[root@arslinux-01 ~]# salt 'arslinux-02' cmd.run 'tail -1 /etc/passwd'
arslinux-02:
git:x:1001:1001::/home/git:/usr/bin/git-shell  
  • 说明: 这里的*必须是在master上已经被接受过认证的客户端,可以通过salt-key查到,通常是我们已经设定的id值。

  • 关于这部分内容,它支持通配、列表以及正则。 比如两台客户端 aming-01,aming-02, 那我们可以写成 salt 'aming-*', salt 'aming-0[12]'  salt -L 'aming-01,aming-02'   salt -E 'aming-(01|02)' 等形式,使用列表,即多个机器用逗号分隔,而且需要加 -L,使用正则必须要带 -E 选项。 它还支持 grains,加 -G选项,pillar 加 -I 选项,下面会介绍到


[root@arslinux-01 ~]# salt 'arslinux-*' cmd.run 'hostname'
arslinux-01:
    arslinux-01
arslinux-02:
    arslinux-02
[root@arslinux-01 ~]# salt 'arslinux-0[12]' cmd.run 'hostname'
arslinux-02:
    arslinux-02
arslinux-01:
    arslinux-01
[root@arslinux-01 ~]# salt -L 'arslinux-01,arslinux-02' cmd.run 'hostname'
arslinux-02:
    arslinux-02
arslinux-01:
    arslinux-01
[root@arslinux-01 ~]# salt -E 'arslinux-[0-9]+' cmd.run 'hostname'
arslinux-02:
    arslinux-02
arslinux-01:
    arslinux-01
[root@arslinux-01 ~]# salt -E 'arslinux-(01|02)' cmd.run 'hostname'
arslinux-02:
    arslinux-02
arslinux-01:
    arslinux-01  


24.6 grains

grains 是在 minion 启动时收集到的一些信息,比如操作系统类型、网卡 ip、内核版本、cpu 架构等

  • salt '主机名' grains.ls          列出所有的grains项目名字


[root@arslinux-01 ~]# salt 'arslinux-01' grains.ls
arslinux-01:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - disks
    - dns
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
    - fqdns
    - gid
    - gpus
    - groupname
    - host
    - hwaddr_interfaces
    - id
    - init
    - ip4_gw
    - ip4_interfaces
    - ip6_gw
    - ip6_interfaces
    - ip_gw
    - ip_interfaces
    - ipv4
    - ipv6
    - kernel
    - kernelrelease
    - kernelversion
    - locale_info
    - localhost
    - lsb_distrib_codename
    - lsb_distrib_id
    - machine_id
    - manufacturer
    - master
    - mdadm
    - mem_total
    - nodename
    - num_cpus
    - num_gpus
    - os
    - os_family
    - osarch
    - oscodename
    - osfinger
    - osfullname
    - osmajorrelease
    - osrelease
    - osrelease_info
    - path
    - pid
    - productname
    - ps
    - pythonexecutable
    - pythonpath
    - pythonversion
    - saltpath
    - saltversion
    - saltversioninfo
    - selinux
    - serialnumber
    - server_id
    - shell
    - swap_total
    - systemd
    - uid
    - username
    - uuid
    - virtual
    - zfs_feature_flags
    - zfs_support
    - zmqversion  
  • salt 'arslinux-01' grains.items          列出所有grains项目以及值


[root@arslinux-01 ~]# salt 'arslinux-01' grains.items
arslinux-01:
    ----------
    SSDs:
    biosreleasedate:
        07/02/2015
    biosversion:
        6.00
    cpu_flags:
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8
        - apic
        - sep
        - mtrr
        - pge
        - mca
        - cmov
        - pat
        - pse36
        - clflush
        - dts
        - mmx
        - fxsr
        - sse
        - sse2
        - ss
        - syscall
        - nx
        - pdpe1gb
        - rdtscp
        - lm
        - constant_tsc
        - arch_perfmon
        - pebs
        - bts
        - nopl
        - xtopology
        - tsc_reliable
        - nonstop_tsc
        - aperfmperf
        - eagerfpu
        - pni
        - pclmulqdq
        - ssse3
        - fma
        - cx16
        - pcid
        - sse4_1
        - sse4_2
        - x2apic
        - movbe
        - popcnt
        - tsc_deadline_timer
        - aes
        - xsave
        - avx
        - f16c
        - rdrand
        - hypervisor
        - lahf_lm
        - abm
        - 3dnowprefetch
        - epb
        - fsgsbase
        - tsc_adjust
        - bmi1
        - avx2
        - smep
        - bmi2
        - invpcid
        - rdseed
        - adx
        - smap
        - xsaveopt
        - dtherm
        - arat
        - pln
        - pts
        - hwp
        - hwp_notify
        - hwp_act_window
        - hwp_epp
    cpu_model:
        Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
    cpuarch:
        x86_64
    disks:
        - sda
        - sdb
        - sr0
        - dm-0
    dns:
        ----------
        domain:
        ip4_nameservers:
            - 119.29.29.29
        ip6_nameservers:
        nameservers:
            - 119.29.29.29
        options:
        search:
        sortlist:
    domain:
    fqdn:
        arslinux-01
    fqdn_ip4:
        - 192.168.194.130
    fqdn_ip6:
        - fe80::c905:5e78:b916:41da
        - fe80::f41:9da7:d8e3:10ba
    fqdns:
    gid:
        0
    gpus:
        |_
        ----------
        model:
            SVGA II Adapter
        vendor:
            vmware
    groupname:
        root
    host:
        arslinux-01
    hwaddr_interfaces:
        ----------
        ens33:
            00:0c:29:24:ea:f2
        ens37:
            00:0c:29:24:ea:fc
        lo:
            00:00:00:00:00:00
    id:
        arslinux-01
    init:
        systemd
    ip4_gw:
        192.168.194.2
    ip4_interfaces:
        ----------
        ens33:
            - 192.168.194.130
            - 192.168.194.150
        ens37:
            - 192.168.100.1
        lo:
            - 127.0.0.1
        ip6_gw:
            False
        ip6_interfaces:
        ----------
        ens33:
            - fe80::c905:5e78:b916:41da
            - 192.168.194.150
        ens37:
            - fe80::f41:9da7:d8e3:10ba
        lo:
            - ::1
    ip_gw:
        True
    ip_interfaces:
        ----------
        ens33:
            - 192.168.194.130
            - fe80::c905:5e78:b916:41da
            - 192.168.194.150
        ens37:
            - 192.168.100.1
            - fe80::f41:9da7:d8e3:10ba
        lo:
            - 127.0.0.1
            - ::1
    ipv4:
        - 127.0.0.1
        - 192.168.100.1
        - 192.168.194.130
        - 192.168.194.150
    ipv6:
        - ::1
        - fe80::f41:9da7:d8e3:10ba
        - fe80::c905:5e78:b916:41da
    kernel:
        Linux
    kernelrelease:
        3.10.0-957.el7.x86_64
    kernelversion:
        #1 SMP Thu Nov 8 23:39:32 UTC 2018
    locale_info:
        ----------
        defaultencoding:
            UTF-8
        defaultlanguage:
            zh_CN
        detectedencoding:
            UTF-8
    localhost:
        arslinux-01
    lsb_distrib_codename:
        CentOS Linux 7 (Core)
    lsb_distrib_id:
        CentOS Linux
    machine_id:
        0b3b2aee4c754c669d6ca09336428b22
    manufacturer:
        VMware, Inc.
    master:
        arslinux-01
    mdadm:
    mem_total:
        2827
    nodename:
        arslinux-01
    num_cpus:
        1
    num_gpus:
        1
    os:
        CentOS
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        CentOS Linux 7 (Core)
    osfinger:
        CentOS Linux-7
    osfullname:
        CentOS Linux
    osmajorrelease:
        7
    osrelease:
        7.6.1810
    osrelease_info:
        - 7
        - 6
        - 1810
    path:
        /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
    pid:
        4817
    productname:
        VMware Virtual Platform
    ps:
        ps -efHww
    pythonexecutable:
        /usr/bin/python
    pythonpath:
        - /usr/bin
        - /usr/lib64/python27.zip
        - /usr/lib64/python2.7
        - /usr/lib64/python2.7/plat-linux2
        - /usr/lib64/python2.7/lib-tk
        - /usr/lib64/python2.7/lib-old
        - /usr/lib64/python2.7/lib-dynload
        - /usr/lib64/python2.7/site-packages
        - /usr/lib/python2.7/site-packages
    pythonversion:
        - 2
        - 7
        - 5
        - final
        - 0
    saltpath:
        /usr/lib/python2.7/site-packages/salt
    saltversion:
        2019.2.0
    saltversioninfo:
        - 2019
        - 2
        - 0
        - 0
    selinux:
    ----------
    enabled:
        False
    enforced:
        Disabled
    serialnumber:
        VMware-56 4d 2d 5f 36 b3 f6 de-b7 99 1d 0c 81 24 ea f2
    server_id:
        858362777
    shell:
        /bin/sh
    swap_total:
        1952
    systemd:
        ----------
        features:
            +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
        version:
            219
    uid:
        0
    username:
        root
    uuid:
        5f2d4d56-b336-def6-b799-1d0c8124eaf2
    virtual:
        VMware
    zfs_feature_flags:
        False
    zfs_support:
        False
    zmqversion:
        4.1.4  

——grains 的信息并不是动态的,并不会实时变更,它是在 minion 启动时收集到的。

——我们可以根据 grains 收集到的一些信息,做配置管理工作

  • 自定义 grains 信息

1、在 minion 端的 /etc/salt/grains 里添加两行,重启 salt-minion


[root@arslinux-02 ~]# vim /etc/salt/grains
env: test
role: nginx
[root@arslinux-02 ~]# systemctl restart salt-minion  

2、master 上获取 grains


[root@arslinux-01 ~]# salt '*' grains.item role env
arslinux-01:
    ----------
    env:
    role:
arslinux-02:
    ----------
    env:
        test
    role:
        nginx  

——可以借助 grains 的一些属性信息来执行

  • salt -G 键:值 具体操作          借助 grains 信息执行


[root@arslinux-01 ~]# salt '*' grains.item role env
arslinux-01:
    ----------
    env:
    role:
arslinux-02:
    ----------
    env:
        test
    role:
        nginx  

[root@arslinux-01 ~]# salt -G role:nginx cmd.run 'hostname'
arslinux-02:
    arslinux-02
[root@arslinux-01 ~]# salt -G role:nginx cmd.run 'ifconfig'
arslinux-02:
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.194.132  netmask 255.255.255.0  broadcast 192.168.194.255
        inet6 fe80::4c99:ed43:5757:e772  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:14:4f:d9  txqueuelen 1000  (Ethernet)
        RX packets 7957  bytes 1228538 (1.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7860  bytes 1432289 (1.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1019  bytes 89448 (87.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1019  bytes 89448 (87.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@arslinux-01 ~]# salt -G role:nginx test.ping
arslinux-02:
    True  

可以给同一类或同一组机器自定义 grains,然后通过 grains 对这些机器进行远程操作


24.7 pillar

pillar 和 grains不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等

配置自定义 pillar

1、在配置文件 /etc/salt/master,找到 pillar_roots: 和之后共三行,取消注释,重启 salt-master


[root@arslinux-01 ~]# vim /etc/salt/master
pillar_roots:
  base:
    - /srv/pillar
[root@arslinux-01 ~]# systemctl restart salt-master  

注意配置中的空格,base 前有2个空格,- 前有4个空格,不能省略

2、创建 /srv/pillar,并在目录下创建 test.sls,内容为 conf: /etc/123.conf,可以再创建个 test2.sls


[root@arslinux-01 ~]# mkdir /srv/pillar
[root@arslinux-01 ~]# vi /srv/pillar/test.sls
conf: /etc/123.conf
[root@arslinux-01 ~]# vi /srv/pillar/test2.sls
dir: /data/123
[root@arslinux-01 ~]# vi /srv/pillar/top.sls
base:
  'arslinux-02':
    - test
    - test2            //根据需要和实际可以定义多个  

3、当更改完 pillar 配置文件后,我们可以通过刷新 pillar 配置来获取新的 pillar 状态,无需重启 salt-master


[root@arslinux-01 ~]# salt '*' saltutil.refresh_pillar
arslinux-01:
    True
arslinux-02:
    True  

4、验证状态


[root@arslinux-01 ~]# salt '*' pillar.item conf
arslinux-01:
    ----------
    conf:
arslinux-02:
    ----------
    conf:
        /etc/123.conf  

[root@arslinux-01 ~]# salt '*' pillar.item conf dir
arslinux-01:
    ----------
    conf:
    dir:
arslinux-02:
    ----------
    conf:
        /etc/123.conf
    dir:
        /data/123  

——当然,也可以将不同机器的参数写到同一个 top.sls 中,例如:


base:
  'arslinux-02':
    - test
  'arslinux-01':
    - test2  

[root@arslinux-01 ~]# salt '*' saltutil.refresh_pillar
arslinux-02:
    True
arslinux-01:
    True  

[root@arslinux-01 ~]# salt '*' pillar.item conf dir
arslinux-01:
    ----------
    conf:
    dir:
        /data/123
arslinux-02:
    ----------
    conf:
        /etc/123.conf
    dir:  

可以看看和之前操作结果的差别

5、pillar 同样可以用来作为 salt 的匹配对象

salt  -I '参数'  test.ping


[root@arslinux-01 ~]# salt -I 'conf:/etc/123.conf' cmd.run 'w'
arslinux-02:
    23:21:44 up  1:16,  1 user,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.194.1    22:06   24.00s  0.17s  0.17s -bash
[root@arslinux-01 ~]# salt -I 'conf:/etc/123.conf' test.ping
arslinux-02:
    True  


24.8 安装配置httpd

1、master 配置文件中找到 file_roots: 启用其文件存放目录


[root@arslinux-01 ~]# vim /etc/salt/master
file_roots:
  base:
    - /srv/salt/  

2、创建 /srv/salt/ 目录并进入


[root@arslinux-01 ~]# mkdir /srv/salt/
[root@arslinux-01 ~]# cd !$
cd /srv/salt/  

3、创建 top.sls,重启 salt-master


[root@arslinux-01 salt]# vim top.sls
base:
  '*':
     - httpd
[root@arslinux-01 salt]# systemctl restart salt-master  

意思是,在所有的客户端上执行httpd模块

4、创建 httpd.sls


[root@arslinux-01 salt]# vim httpd.sls
httpd-service:
    pkg.installed:
        - names:
        - httpd
        - httpd-devel
    service.running:
        - name: httpd
        - enable: True  

说明: httpd-service 是 id 的名字,自定义的。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running 也是一个函数,来保证指定的服务启动,enable 表示开机启动

5、执行安装命令


[root@arslinux-01 salt]# salt 'arslinux-01' state.highstate  

执行命令后,会到 /srv/salt/ 下去找 top.sls,然后其中根据提到的相关模块,再去执行

整个过程静默安装

执行操作前,记得关闭占用 80 端口的服务,不然会报错,httpd 启动不了


24.9 配置管理文件

1、master 上创建 test.sls


[root@arslinux-01 salt]# vim test.sls
file_test:
    file.managed:
        - name: /tmp/arslinux
        - source: salt://test/123/ppp.txt
        - user: root
        - group: root
        - mode: 600  

说明:第一行的 file_test 为自定的名字,表示该配置段的名字,可以在别的配置段中引用它;file.managed 模块可以定义参数;name 指在minion 端上创建的文件路径、名称;source指定文件从哪里拷贝;这里的 salt://test/123/1.txt 相当于是 /srv/salt/test/123/1.txt

2、创建 ppp.txt 文件


[root@arslinux-01 salt]# mkdir test
[root@arslinux-01 salt]# mkdir test/123/
[root@arslinux-01 salt]# cp /etc/inittab test/123/ppp.txt  

3、更改 top.sls


[root@arslinux-01 salt]# vim top.sls
base:
  '*':
    - test  

4、执行操作


[root@arslinux-01 salt]# salt 'arslinux-02' state.highstate
arslinux-02:
----------
        ID: file_test
    Function: file.managed
        Name: /tmp/arslinux
        Result: True
        Comment: File /tmp/arslinux updated
        Started: 22:43:37.846500
        Duration: 167.482 ms
        Changes:
            ----------
            diff:
                New file
                
Summary for arslinux-02
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 167.482 ms  

5、minion 端查看是否成功创建文件


[root@arslinux-02 ~]# ll /tmp/arslinux
-rw------- 1 root root 511 8月   3 22:43 /tmp/arslinux  


24.10 配置管理目录

1、master 上创建 test_dir.sls


[root@arslinux-01 salt]# vim testdir.sls
file_dir:
    file.recurse:
        - name: /tmp/testdir
        - source: salt://test/123
        - user: root
        - file_mode: 640
        - dir_mode: 750
        - mkdir: True
        - clean: True  

说明:clean,加上它之后,源删除文件或目录,目标(minion端)也会跟着删除,否则不会删除;其他参数都和之前管理文件类似

2、改 top.sls,可以直接增加


[root@arslinux-01 salt]# echo '    - testdir' >> top.sls
[root@arslinux-01 salt]# cat top.sls
base:
  '*':
    - test
    - testdir  

3、执行操作


[root@arslinux-01 salt]# salt 'arslinux-02' state.highstate
arslinux-02:
----------
        ID: file_test
    Function: file.managed
        Name: /tmp/arslinux
        Result: True
        Comment: File /tmp/arslinux is in the correct state
        Started: 23:00:27.660586
        Duration: 95.354 ms
        Changes:
----------
            ID: file_dir
        Function: file.recurse
            Name: /tmp/testdir
            Result: True
            Comment: Recursively updated /tmp/testdir
            Started: 23:00:27.756271
            Duration: 325.589 ms
            Changes:
                ----------
            /tmp/testdir/ppp.txt:
                ----------
                diff:
                    New file
                mode:
                    0640
                    
Summary for arslinux-02
------------
Succeeded: 2 (changed=1)
Failed:    0
------------
Total states run:     2
Total run time: 420.943 ms  

4、查看 minion 端是否成功创建及权限是否正确


[root@arslinux-02 ~]# ll /tmp/testdir/
总用量 4
-rw-r----- 1 root root 511 8月   3 23:00 ppp.txt
[root@arslinux-02 ~]# ll -d /tmp/testdir/
drwxr-x--- 2 root root 21 8月   3 23:00 /tmp/testdir/  

5、如果在次执行 state.highstate 会报错,因为没有了 /test/123/


[root@arslinux-01 salt]# cd test/
[root@arslinux-01 test]# mkdir abc
[root@arslinux-01 test]# touch 123.txt
[root@arslinux-01 test]# rm -rf 123
[root@arslinux-01 test]# ls
123.txt  abc  

[root@arslinux-01 test]# salt 'arslinux-02' state.highstate
arslinux-02:
----------
        ID: file_test
    Function: file.managed
        Name: /tmp/arslinux
        Result: False
        Comment: Source file salt://test/123/ppp.txt not found in saltenv 'base'
        Started: 23:08:19.655224
        Duration: 140.84 ms
        Changes:
        ----------
            ID: file_dir
        Function: file.recurse
            Name: /tmp/testdir
            Result: False
            Comment: Recurse failed: none of the specified sources were found
            Started: 23:08:19.796420
            Duration: 32.291 ms
            Changes:
            
Summary for arslinux-02
------------
Succeeded: 0
Failed:    2
------------
Total states run:     2
Total run time: 173.131 ms  

因为删除了 /test/123/ 因此基于这个目录的操作会出错

6、解决问题,将 top.sls 中 test 去除,不再引用它


[root@arslinux-01 salt]# vim top.sls
base:
  '*':
    - testdir  

7、创建 /srv/salt/test/123/


[root@arslinux-01 salt]# mkdir test/123/
[root@arslinux-01 salt]# mv test/abc test/123.txt test/123/  

8、再操作


[root@arslinux-01 salt]# salt 'arslinux-02' state.highstate
arslinux-02:
----------
        ID: file_dir
    Function: file.recurse
        Name: /tmp/testdir
        Result: True
        Comment: Recursively updated /tmp/testdir
        Started: 23:16:26.961983
        Duration: 420.045 ms
        Changes:
            ----------
            /tmp/testdir/123.txt:
                ----------
                diff:
                    New file
                mode:
                    0640
                removed:
                    - /tmp/testdir/ppp.txt

Summary for arslinux-02
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 420.045 ms  

9、minion 端并没有同步 abc 目录,因为 abc 为空,如果想要同步,必须目录不为空


[root@arslinux-02 ~]# ll /tmp/testdir/
总用量 0
-rw-r----- 1 root root 0 8月   3 23:16 123.txt  


24.11 配置管理远程命令

1、编辑 top.sls


[root@arslinux-01 salt]# vim top.sls
base:
  '*':
     - shell_test  

2、创建 shell_test.sls


[root@arslinux-01 salt]# vim shell_test.sls
hell_test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root  

3、创建脚本 1.sh


[root@arslinux-01 salt]# vim test/1.sh
#!/bin/bash
touch /tmp/111.txt
if [ ! -d /tmp/1233 ]
then
    mkdir /tmp/1233
fi  

4、执行操作


[root@arslinux-01 salt]# salt 'arslinux-02' state.highstate
arslinux-02:
----------
        ID: hell_test
    Function: cmd.script
        Result: True
        Comment: Command 'hell_test' run
        Started: 16:54:25.741342
        Duration: 168.634 ms
        Changes:
            ----------
            pid:
                4413
            retcode:
                0
            stderr:
            stdout:
            
Summary for arslinux-02
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 168.634 ms  

5、minion 端查看


[root@arslinux-02 ~]# ll /tmp/
总用量 4
-rw-r--r-- 1 root   root     0 8月   4 16:54 111.txt
drwxr-xr-x 2 root   root     6 8月   4 16:54 1233
-rw------- 1 root   root   511 8月   3 22:43 arslinux  


24.12 配置管理计划任务

1、编辑 top.sls


[root@arslinux-01 salt]# vim top.sls
base:
  '*':
    - cron_test  

2、创建 cron_test


[root@arslinux-01 salt]# vim cron_test.sls
cron_test:
    cron.present:
        - name: /bin/touch /tmp/12121212.txt
        - user: root
        - minute: '20'
        - hour: 17
        - daymonth: '*'
        - month: '*'
        - dayweek: '*'  

注意:*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的

——想要删除该cron,需要增加:

cron.absent:

    - name: /bin/touch /tmp/111.txt

两者不能共存,要想删除一个 cron,那之前的 present 就得去掉

3、执行操作


[root@arslinux-01 salt]# salt 'arslinux-02' state.highstate
arslinux-02:
----------
        ID: cron_test
    Function: cron.present
        Name: /bin/touch /tmp/12121212.txt
        Result: True
        Comment: Cron /bin/touch /tmp/12121212.txt added to root's crontab
        Started: 17:16:36.800747
        Duration: 543.17 ms
        Changes:
            ----------
            root:
                /bin/touch /tmp/12121212.txt
                
Summary for arslinux-02
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 543.170 ms  

4、minion 端查看


[root@arslinux-02 ~]# date
2019年 08月 04日 星期日 17:18:11 CST
[root@arslinux-02 ~]# ll /tmp/
总用量 4
-rw-r--r-- 1 root   root     0 8月   4 16:54 111.txt
drwxr-xr-x 2 root   root     6 8月   4 16:54 1233
-rw------- 1 root   root   511 8月   3 22:43 arslinux
[root@arslinux-02 ~]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/12121212.txt
20 17 * * * /bin/touch /tmp/12121212.txt  

5、17点20之后再查看 minion 端


[root@arslinux-02 ~]# ll /tmp/
总用量 4
-rw-r--r-- 1 root   root     0 8月   4 16:54 111.txt
-rw-r--r-- 1 root   root     0 8月   4 17:20 12121212.txt
drwxr-xr-x 2 root   root     6 8月   4 16:54 1233
-rw------- 1 root   root   511 8月   3 22:43 arslinux  

已经成功

6、添加之后不能擅自改动 minion 端的 crontab,否则 master 再次执行 salt 时会再添加一次


[root@arslinux-02 ~]# crontab -e
crontab: installing new crontab
[root@arslinux-02 ~]# crontab -l
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/12121212.txt
20 17 * * * /bin/touch /tmp/12121212.txt
[root@arslinux-01 salt]# salt 'arslinux-02' state.highstate
arslinux-02:
----------
        ID: cron_test
    Function: cron.present
        Name: /bin/touch /tmp/12121212.txt
        Result: True
        Comment: Cron /bin/touch /tmp/12121212.txt added to root's crontab
        Started: 17:29:33.617502
        Duration: 491.19 ms
        Changes:
        ----------
        root:
            /bin/touch /tmp/12121212.txt
                    
Summary for arslinux-02
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 491.190 ms  

[root@arslinux-02 ~]# crontab -l
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/12121212.txt
20 17 * * * /bin/touch /tmp/12121212.txt
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/12121212.txt
20 17 * * * /bin/touch /tmp/12121212.txt  

——看到提示 # Lines below here are managed by Salt, do not edit

我们不能随意改动它,否则就没法删除或者修改这个cron

7、先修改 minion 端 crontab 到正确状态


[root@arslinux-02 ~]# crontab -e
crontab: installing new crontab
[root@arslinux-02 ~]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/12121212.txt
20 17 * * * /bin/touch /tmp/12121212.txt  

8、master 端执行删除 crontab,使用 cron.absent: 模块


[root@arslinux-01 salt]# vim cron_test.sls
cron_test:
cron.absent:
- name: /bin/touch /tmp/12121212.txt
[root@arslinux-01 salt]# salt 'arslinux-02' state.highstate
arslinux-02:
----------
        ID: cron_test
    Function: cron.absent
        Name: /bin/touch /tmp/12121212.txt
        Result: True
        Comment: Cron /bin/touch /tmp/12121212.txt removed from root's crontab
        Started: 17:34:42.720616
        Duration: 437.822 ms
        Changes:
            ----------
            root:
                /bin/touch /tmp/12121212.txt
                
Summary for arslinux-02
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 437.822 ms  

[root@arslinux-02 ~]# crontab -l
# Lines below here are managed by Salt, do not edit  


24.13 其他命令

  • cp.get_file          拷贝 master 上的文件到客户端

  • cp.get_dir          拷贝 master 上的目录到客户端


[root@arslinux-01 salt]# cp /etc/passwd test/1.txt  

[root@arslinux-01 salt]# salt '*' cp.get_file salt://test/1.txt /tmp/1234567.txt
arslinux-02:
    /tmp/1234567.txt
arslinux-01:
    /tmp/1234567.txt  

[root@arslinux-01 salt]# salt '*' cp.get_dir salt://test/123/ /tmp/
arslinux-01:
    - /tmp//123/123.txt
    - /tmp//123/abc
arslinux-02:
    - /tmp//123/123.txt
    - /tmp//123/abc  
  • salt-rum manage.up          显示存活的 minion

  • salt '*' cmd.script salt://脚本          命令行下执行 master 上的 shell 脚本


[root@arslinux-01 salt]# salt-run manage.up
- arslinux-01
- arslinux-02  

[root@arslinux-01 salt]# salt '*' cmd.script salt://test/1.sh
arslinux-01:
    ----------
    pid:
        21621
    retcode:
        0
    stderr:
    stdout:
arslinux-02:
    ----------
    pid:
        7289
    retcode:
        0
    stderr:
    stdout:  


24.14 salt-ssh使用

  • salt-ssh 不需要对客户端做认证,客户端也不用安装 salt-minion,它类似 pssh/expect

1、安装 salt-ssh


[root@arslinux-01 ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@arslinux-01 ~]# yum install -y salt-ssh  

2、编辑配置文件 roster


[root@arslinux-01 ~]# vim /etc/salt/roster
arslinux-01:
  host: 192.168.194.130
  user: root
  passwd: xxxxxxx
arslinux-02:
  host: 192.168.194.132
  user: root
  passwd: xxxxxxx  

3、测试能否登录


[root@arslinux-01 ~]# salt-ssh --key-deploy '*' -r 'w'
[ERROR   ] Failed collecting tops for Python binary python3.
arslinux-02:
----------
    retcode:
        0
    stderr:
    stdout:
        root@192.168.194.132's password:
        19:25:46 up  2:42,  1 user,  load average: 0.00, 0.06, 0.09
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/0    192.168.194.1    16:44    1:50m  0.09s  0.09s -bash
arslinux-01:
    ----------
    retcode:
        0
    stderr:
    stdout:
        root@192.168.194.130's password:
        19:25:46 up  2:42,  1 user,  load average: 0.45, 0.22, 0.17
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/0    192.168.194.1    16:44   10.00s  9.07s  0.04s /usr/bin/python /usr/bin/salt-ssh --key-deploy * -r w  

[root@arslinux-01 ~]# date
2019年 08月 04日 星期日 19:27:10 CST
[root@arslinux-01 ~]# ll /root/.ssh/authorized_keys
-rw-r--r--. 1 root root 1191 8月   4 19:25 /root/.ssh/authorized_keys
[root@arslinux-02 ~]# ll /root/.ssh/authorized_keys
-rw-r--r--. 1 root root 1199 8月   4 19:25 /root/.ssh/authorized_keys  

公钥已经传递了过去

4、删除 roster 中的密码,再执行,可以登录


[root@arslinux-01 ~]# salt-ssh --key-deploy '*' -r 'w'
arslinux-02:
    ----------
    retcode:
        0
    stderr:
    stdout:
        19:30:23 up  2:47,  1 user,  load average: 0.00, 0.03, 0.06
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/0    192.168.194.1    16:44    1:27   0.10s  0.10s -bash
arslinux-01:
    ----------
    retcode:
        0
    stderr:
    stdout:
        19:30:23 up  2:47,  1 user,  load average: 0.25, 0.18, 0.16
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/0    192.168.194.1    16:44    7.00s  1.49s  0.02s /usr/bin/python /usr/bin/salt-ssh --key-deploy * -r w  


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【0723】自动化运维——saltstack 的相关文章

  • 【0723】自动化运维——saltstack

    24 1 自动化运维介绍 认识自动化运维 xff1a 传统运维效率低 xff0c 大多工作人为完成传统运维工作繁琐 xff0c 容易出错传统运维每日重复做相同的事情传统运维没有标准化流程传统运维的脚本繁多 xff0c 不能方便管理自动化运维
  • SaltStack之salt-ssh

    salt ssh介绍 salt ssh可以让我们不需要在受控机上安装salt minion客户端也能够实现管理操作 salt ssh特点 1 远程系统需要Python支持 xff0c 除非使用 r选项发送原始ssh命令 2 salt ssh
  • SaltStack进阶

    masterless 应用场景 1 master 与 minion 网络不通或通信有延迟 xff0c 即网络不稳定 2 想在 minion 端直接执行状态 传统的 SaltStack 是需要通过 master 来执行状态控制 minion
  • saltstack部署OpenStack rocky版

    通过saltstack工具 xff0c 来自动部署OpenStack 基本的yaml 源码放在github上了 有兴趣可以查看 自行测试三台虚拟机安装没有问题 需要注意的是安装cinder slave xff08 从节点 xff09 的时候
  • 微服务讲堂--【5】系统自举

    这里的 系统自举 借用了操作系统的概念 在操作系统启动之前 计算机要先加载自举程序 再由自举程序加载操作系统的启动程序 整个详细过程不在这里描述 可以在网络查阅相关资料 为什么要在微服务系统中特别提及系统自举这个概念呢 因为这内容很重要 而
  • 实现ssh简便登录和利用Polysh实现多台服务器批量管理

    在集群管理中我们经常需要远程跳转到其他服务器ssh username remote host p port 这里我们编写一个简单的python脚本实现远程需求 config py usr bin env python coding utf
  • SaltStack部署

    目录 一 SaltStack简介 1 基本简介 2 通信方式 3 功能简介 二 资源获取 1 官网地址 2 阿里云地址 三 部署 1 配置环境说明 2 资源配置 一 SaltStack简介 1 基本简介 SaltStack是一种新型的基础设
  • SaltStack 企业级自动化运维实战

    一 SaltStack 概述 1 SaltStack 简介 SaltStack是一个服务器基础架构集中化管理平台 具备配置管理 远程执行 监控等功能 一般可以理解为简化版的puppet和加强版的func SaltStack基于Python语
  • zabbix详解(十一)——zabbix监控MySQL性能实战

    今天继续给大家介绍Linux运维相关知识 本文主要内容是zabbix监控MySQL性能 一 实战目的 通过在zabbix客户端编写脚本 实现对MySQL数据库的性能进行信息进行提取 并配置成zabbix的监控项 以实现zabbix对MySQ
  • Shell脚本——流量探测(自动化运维)

    目的 自动 捕获指定IP或端口的流量生成日志 实现流量探测功能 准备 Root用户权限下才能运行tcpdump脚本 优势 Liunx系统自带 无需安装其他组件 捕获准确度高 缺点 不能同时检测多个IP流量 效率低 重点 日志文件 touch
  • Kubernetes------YAML

    K8S YAML K8S 一 YAML语法格式 查看api 资源版本标签 二 写一个yaml文件demo 创建资源对象 deployment yaml文件详解 Pod yaml文件详解 Service yaml文件详解 Kubernetes
  • ELK详解(十七)——filebeat输出到Redis和Elasticsearch实战

    今天继续给大家介绍Linux运维相关知识 本文主要内容是使用filebeat将日志输出到Redis和Elasticsearch的实战配置 在ELK详解 十六 filebeat安装与使用一文中 我们介绍了filebeat的安装 部署和简单应用
  • saltstack架构拓展syndic

    架构 server1 master 写好httpd nginx 等salt server2 3 minion server4 top master server1 salt key d server4 server4 vim etc sal
  • 在Master上触发事件并在Salt Minion上等待“响应事件”

    我想要的是由 Minion 调用的类似 RPC 的行为 并将其放入某种脚本中 然后可以由任何 非 Salt 非 Python 应用程序和服务调用 在Master上触发一个事件 有效负载对应于命令行参数 the Reactor system
  • 跟踪 Salt Minion 上的命令失败

    我过去一个月一直在用盐 每当我运行命令时说sudo salt test ping 然后 master ping 所有 minion 响应是所有已启动并运行的 minion 的列表 输出看起来像这样 minion 1 true minion
  • 如何使用 Salt Stack 执行多个命令?

    我尝试添加 mypack pkg installed pkgs mercurial git cmd run name mkdir p opt mypack cmd run hg pull u R opt mypack hg clone R
  • 检查文件是否存在并创建符号链接

    我想做这样的事情 如果文件 A 存在或者没有符号链接 B 我想创建一个符号链接 B gt A 现在我有 B file symlink target A exists name A 但这很糟糕 它检查不到我想要的东西 我怎样才能用盐实现这个简
  • salt-stack highstate - 查找慢状态

    运行初始安装大约需要 20 分钟 运行salt call state highstate大约需要6分钟 这并非不合理 但我想加快速度 但我不知道如何找到最慢的状态 除了用秒表观看屏幕 6 分钟之外 还有什么方法可以找到每个状态运行需要多长时
  • 如何在支柱中拥有可以被覆盖的基础值?

    我想将所有 Salt 文件 支柱 状态 数据文件等 存储在 git 存储库中 以便可以在多个不同的部署上克隆该存储库 然后我希望能够更改某些支柱设置的值 例如路径名或密码 但无需编辑版本控制中的原始文件 即这些修改仅是本地的 不一定是版本化
  • Salt 和 Python 的 YAML 语法

    这之间有什么区别 dic1 subdict1 1 value11 1 subdict1 2 value1 2 cubdict1 3 value1 3 和这个 dict2 subdict2 1 value2 2 subdict2 1 valu

随机推荐

  • vs2022账户无法登录的解决

    因为昨天重做系统 xff0c 重装了vs2022 xff0c 又涉及到登录的问题 xff0c 一时想不起来之前怎么解决的了 xff0c 想起来以后决定还是记录下来 我遇到的问题是下面这样的 xff0c 提示脚本错误 xff0c 要求升级最新
  • 使用centos7+bind9构建内网私有dns

    有这样一种场景 xff0c 局域网内有一个为网内用户提供服务的机器 xff0c 我们希望像访问互联网站点一样去访问它 xff0c 而不用记忆ip地址和端口 xff0c 比如在web浏览器地址栏输入http www nx com就可以访问它
  • PowerBuilder制作纸牌游戏

    本文记录的是2001年我大三那年假期制作小游戏的思路 xff0c 希望给在读计算机专业的朋友们一些参考 xff0c 如果还没来得及动手尝试的同学 xff0c 一定要勇于动手 你们一定比我做得更好 制作动力 xff1a 我有一个好朋友 xff
  • 【Qt线程-1】this,volatile,exec(),moveToThread()

    背景 xff1a 个人学习多线程控制 xff0c 写了一些博文用于记录 xff1a Qt线程 2 事件循环 xff08 QCoreApplication processEvents xff0c exec xff09 的应用 Qt线程 3 使
  • 【Qt线程-2】事件循环(QCoreApplication::processEvents,exec)的应用

    背景 xff1a 个人学习多线程控制 xff0c 写了一些博文用于记录 Qt线程 1 this xff0c volatile xff0c exec xff0c moveToThread Qt线程 3 使用事件循环 xff0c 信号 xff0
  • 【Qt线程-4】事件循环嵌套,BlockingQueuedConnection与QWaitCondition比较

    背景 xff1a 个人学习多线程控制 xff0c 写了一些博文用于记录 xff1a Qt线程 1 this xff0c volatile xff0c exec xff0c moveToThread Qt线程 2 事件循环 xff08 QCo
  • 【Qt样式(qss)-3】几套配色方案

    背景 xff1a 之前写过有关qss的博客 xff0c 记录了如何使用qt手册 xff0c 以及在项目中如何使用qss的体验 经过实践 xff0c 我归纳了自己需要的qss使用方法 xff0c 使之尽量高效 xff0c 容易维护 Qt样式
  • 【Qt样式(qss)-4】应用到QMdiArea不生效的解决

    背景 xff1a 之前写记录过几篇qss相关内容 xff1a Qt样式 xff08 qss xff09 1 手册小结 xff08 附例 xff1a 软件深色模式 xff09 Qt样式 xff08 qss xff09 2 使用小结 xff08
  • Google play billing(Google play 内支付) 下篇

    开篇 xff1a 如billing开发文档所说 xff0c 要在你的应用中实现In app Billing只需要完成以下几步就可以了 第一 把你上篇下载的AIDL文件添加到你的工程里 xff0c 第二 把 lt uses permissio
  • Qt creator中操作QAction加入QToolBar

    背景 xff1a 个人笔记 我之前没有系统化学习过任何资料 xff0c 使用很多工具都是按需出发 xff0c 直接上手 xff0c 遇到问题再研究的 所以会有一些弯路 本文言语中难免有对个人情绪的生动描述 xff0c 希望不要影响读者心情
  • Java 通过map构造树形结构

    在开发中 xff0c 经常会有将 数据组装成为树形结构的场景 xff0c 除了可以通过递归实现 xff0c 还可以通过map 组装实现 一 xff0c 构造基本数据 import apple laf JRSUIUtils import co
  • 【无标题】es搜索基本操作

    一 xff0c 准备数据 1 创建索引 PUT lagou book 2 创建mapping PUT lagou book doc mapping 34 properties 34 34 description 34 34 type 34
  • 【ES】常用操作工具

    工欲善其事 xff0c 必先利于器 xff0c es使用过程中 xff0c 有些工具能帮助我们快速的上手和使用 一 es head es head 是一款专门针对 es的客户端工具elasticSearch配置包 是一个基于node js的
  • 【es】基本概念理解

    一 xff0c 初识es 1 是什么 xff1f ElasticSearch 简称es 开源的分布式的全文搜索引擎 xff0c 可以近乎实时的存储检索数据 xff0c es使用java开发 xff0c 并且使用Lucene作为核心实现搜索功
  • 无法安装net framework 3.5 的解决方法

    电脑刚重装了Windows8 1系统 xff0c 然后安装数据库的时候 xff0c 却出现了这样的问题 xff1a 您的电脑上的应用需要使用以下windows功能 问题原因是 xff1a 在安装系统的时候 xff0c NET Framewo
  • 【计算机网络原理】第四章 数据链路层

    今天主要梳理了一下数据链路层的内容 xff0c 如下 一 宏观规划 综合数据链路层的整体 xff0c 分为两大部分 xff0c 第一部分讲解数据链路层的功能 xff0c 第二部分讲解数据链路层的功能 这些协议 xff0c 其实还是为了实现数
  • 【redis】关系型数据库 VS 非关系型数据库

    一 关系型数据库 xff1f 1 概念 关系型数据库是指采用了关系模型来组织数据的数据库 简单来说 xff0c 关系模式就是二维表格模型 主要代表 xff1a SQL Server xff0c Oracle Mysql PostgreSQL
  • resultful风格接口

    一 产生背景 网络应用程序 xff0c 越来越流行前端和后端的分离设计 当前的发展趋势是前端的设计层出不穷 比如 xff1a 各种型号的手机 平板灯其他设计 因为必须要一种统一的机制方便不同的前端和后端进行通信 这就导致了API结构的流行
  • 【kafka】Exception thrown when sending a message with key='null' and payload='lizhenjuan;99' to topic

    今天碰到一个奇怪的问题 xff0c 如下图 xff1a 一 问题 1 问题截图 上午还可以发送消息成功的 xff0c 下午突然就发送不了消息了 我就检查我代码的问题 xff0c 是传递的格式不对 xff0c 还是数据要求不对 网上的资料显示
  • 【0723】自动化运维——saltstack

    24 1 自动化运维介绍 认识自动化运维 xff1a 传统运维效率低 xff0c 大多工作人为完成传统运维工作繁琐 xff0c 容易出错传统运维每日重复做相同的事情传统运维没有标准化流程传统运维的脚本繁多 xff0c 不能方便管理自动化运维