首页 > 其他分享 >SaltStack部署应用

SaltStack部署应用

时间:2023-08-14 11:32:41浏览次数:25  
标签:grains 部署 root nginx master 应用 saltstack SaltStack salt

1.

rpm -ivh https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

yum clean all

yum install -y epel-release salt-master

vim /etc/salt/master

修改以下内容:

interface: 192.168.1.10

auto_accept: True


systemctl start salt-master

systemctl enable salt-master


2.

rpm -ivh https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

yum clean all

yum -y install salt-minion

vim /etc/salt/minion

修改以下内容:

master: 192.168.1.10

id: node1


末尾添加

schedule:

 highstate:

   function: state.highstate

   minutes: 10


systemctl start salt-minion

systemctl enable salt-minion


3.

rpm -ivh https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

yum clean all

yum -y install salt-minion

vim /etc/salt/minion

修改以下内容:

master: 192.168.1.10

id: node2


末尾添加

schedule:

 highstate:

   function: state.highstate

   minutes: 10


systemctl start salt-minion

systemctl enable salt-minion




SaltStack 批量部署并配置 Nginx

角色主机名IP地址组名Nginx根目录mastermaster.saltstack.com192.168.9.233minion1web01.saltstack.com192.168.9.234web01group/dataminion2web02.saltstack.com192.168.9.235web02group/www

master:

[root@localhost ~]# hostnamectl set-hostname master.saltstack.com

[root@localhost ~]# bash


minion1:

[root@localhost ~]# hostnamectl set-hostname web01.saltstack.com

[root@localhost ~]# bash


minion2:

[root@localhost ~]# hostnamectl set-hostname web02.saltstack.com

[root@localhost ~]# bash


全部主机:

cat << EOF >> /etc/hosts

192.168.9.233 master.saltstack.com

192.168.9.234 web01.saltstack.com

192.168.9.235 web02.saltstack.com

EOF


master:

[root@master ~]# yum install -y epel-release

[root@master ~]# yum install -y salt-master

[root@master ~]# vim /etc/salt/master

查找并修改以下内容:

interface: 192.168.9.233


auto_accept: True


file_roots:

 base:

  - /srv/salt/


nodegroups:

web01group: 'web01.saltstack.com'

web02group: 'web02.saltstack.com'


pillar_opts: True


pillar_roots:

 base:

  - /srv/pillar


主控端主要修改内容包括:

[root@master ~]# cat /etc/salt/master | grep -v "^$" | grep -v "^#"

interface: 192.168.9.233

auto_accept: True

file_roots:

 base:

   - /srv/salt

pillar_roots:

 base:

   - /srv/pillar

pillar_opts: True

nodegroups:

   web01group: 'web01.saltstack.com'

   web02group: 'web02.saltstack.com'


[root@master ~]# systemctl start salt-master

[root@master ~]# systemctl enable salt-master

Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.


创建 salt 文件根目录及 pillar 目录

[root@master ~]# mkdir /srv/salt

[root@master ~]# mkdir /srv/pillar





minion1:

yum install -y salt-minion


vim /etc/salt/minion

修改以下内容:

master: 192.168.9.233   #设置主控端 IP

id: web01.saltstack.com   #设置被控主机名,另一台是 web02.saltstack.com


systemctl start salt-minion

systemctl enable salt-minion


minion2:

yum install -y salt-minion


vim /etc/salt/minion

修改以下内容:

master: 192.168.9.233   #设置主控端 IP

id: web01.saltstack.com   #设置被控主机名,另一台是 web02.saltstack.com


systemctl start salt-minion

systemctl enable salt-minion


master:


[root@master ~]# salt '*' test.ping

web01.saltstack.com:

True

web02.saltstack.com:

True


SaltStack 批量部署 Nginx

通过下面的命令可以查看被控机 web01 主机的 grains 所有值

[root@master ~]# salt 'web01.saltstack.com' grains.items


创建 grains 目录,需要将目录下的定制文件同步到被控机上运行;然后,能正

常获取被控机打开文件句柄数

[root@master ~]# mkdir /srv/salt/_grains

[root@master ~]# vim /srv/salt/_grains/nginx_config.py

添加以下内容:

#!/usr/bin/python

import os,sys,commands

def NginxGrains():

  '''

   return Nginx config grains value

 '''

grains = {}

max_open_file=65535

  try:

getulimit = commands.getstatusoutput('source /etc/profile;ulimit -n')

except Exception,e:

pass

if getulimit[0]==0:

max_open_file = int(getulimit[1])

grains['max_open_file'] = max_open_file

return grains


[root@master ~]# chmod +x  nginx_config.py


确 认 在 主 控 端 是 否 能 获 取 被 控 端 的 max_open_file 值

[root@master ~]# salt '*' grains.item max_open_file


配置 pilllar

[root@master ~]# vim /srv/pillar/top.sls

添加以下内容:

base:

web01group:  

- match: nodegroup

- web01server

web02group:  

- match: nodegroup

- web02server


“web01group”和”web02group”是/etc/salt/master 中定义的不同的组,对每一个组编写

一个对应的文件指定配置,这里使用的是“web01server”和”web02server”,再分别定义不同

组主机的 Nginx 的根目录,如下所示:

[root@master ~]# vim /srv/pillar/web01server.sls

nginx:

root: /data

[root@master ~]# vim /srv/pillar/web02server.sls

nginx:

root: /www


使用以下命令查看 pillar 配置的情况

[root@master ~]# salt '*' pillar.data nginx


如果不显示结果;重启一下minion1和minion1的服务

systemctl restart salt-minion


定义 state 的入口 top.sls 文件

[root@master ~]# vim /srv/salt/top.sls

base:

  '*':

   - nginx


定义被控机执行的状态,安装 Nginx 软件、配置、启动

[root@master ~]# vim /srv/salt/nginx.sls

添加以下内容:

nginx:

 pkg:  

  - installed  

 file.managed:

   - source: salt://nginx/nginx.conf  

   - name: /etc/nginx/nginx.conf

   - user: root

   - group: root

   - mode: 644

   - template: jinja

 service.running:

   - enable: True

   - reload: True

   - watch:

     - file: /etc/nginx/nginx.conf

     - pkg: nginx


使用 jinja 模板定义 Nginx 配置文件 nginx.conf,首先创建一个 nginx 目录,因为上面定

义了 Nginx 配置文件的源路径

[root@master ~]# mkdir /srv/salt/nginx


然后在该路径下创建 Nginx 配置文件,nginx.conf 配置文件可以根据自己的需求进行编

[root@master ~]# vim /srv/salt/nginx/nginx.conf

添加以下内容:

user nginx;

worker_processes {{grains['num_cpus']}};

{% if grains['num_cpus'] ==1 %}

worker_cpu_affinity 10;

{% elif grains['num_cpus'] ==2 %}

worker_cpu_affinity 01 10;

{% elif grains['num_cpus'] == 4 %}

worker_cpu_affinity 0001 0010 0100 1000;

{% elif grains['num_cpus'] == 8 %}

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

{% else %}

worker_cpu_affinity 0001 0010 0100 1000;

{% endif %}

worker_rlimit_nofile {{ grains['max_open_file'] }};

error_log /var/log/nginx_error.log;

pid /var/run/nginx.pid;

events{

worker_connections {{ grains['max_open_file'] }};

}

 http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 60;  

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

 '"$http_user_agent" "$http_x_forwarded_for"' ;

server{

listen 80 default_server;

server_name _;

location / {

root {{ pillar['nginx']['root'] }};

index index.html index.htm;

}

error_page 404 /404.html;

location = /404.html {

root /usr/share/nginx/html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/share/nginx/html;

}

 }

 }


全部主机:

yum -y install epel-release.noarch


验证:


两台被控端执行安装 Nginx 并配置

[root@master ~]# salt '*' state.highstate


检查节点nginx的进程

[root@web01 ~]# ps -ef | grep nginx








标签:grains,部署,root,nginx,master,应用,saltstack,SaltStack,salt
From: https://blog.51cto.com/Rain/7074469

相关文章

  • 可独立创建应用的SaaS多租户低代码平台之租户的应用管理说明
    在IT系统中,“租户”(tenant)通常用于指代一种多租户架构(multi-tenancy),它是一种软件架构模式,允许多个用户或组织共享相同的应用程序或系统实例,但彼此之间的数据和配置被隔离开来,拥有自己的用户、数据、配置和权限,保证每个租户的数据隐私和安全性。JVS的多租户架构是通过逻辑隔离的方式......
  • 训练自己的图像分类模型部署在手机设备
    这里使用aidlux在手机上使用摄像头作为输入,利用aidlux提供的接口载入模型,实时推理使用代码模版,将模型替换为自己的,看看演示效果,我的手机比较卡,版本太老,所以效果差点,你也可以使用比较新的设备来运行......
  • Postgresql 在Ubuntuserver 22.04上部署
    安装与卸载系统环境:1.ubuntu22.04server安装1.检查是否已经安装#psql服务sudoservicepostgresqlstatus#版本查看psql--version2.安装命令#更新安装源内容sudoapt-getupdate#postgresql-contrib额外特性安装sudoaptinstallpostgresqlpostgresql......
  • 基于C#的消息处理的应用程序 - 开源研究系列文章
          今天讲讲基于C#里的基于消息处理的应用程序的一个例子。我们知道,Windows操作系统的程序是基于消息处理的。也就是说,程序接收到消息代码定义,然后根据消息代码定义去处理对应的操作。前面有一个博文例子(C#程序的启动显示方案(无窗口进程发送消息)-开源研究系列文......
  • PADS应用笔记:Layout中多块覆铜填充时个别不生效 ##
    PADS应用笔记:Layout中多块覆铜填充时个别不生效解决方法需要在覆铜的参数设置中修改优先级......
  • PADS应用笔记:如何提取其他人图纸中画好的元件符号和封装库 ## Logic中
    PADS应用笔记:如何提取其他人图纸中画好的元件符号和封装库Logic中选中要保存的符号,或者过滤器选择元器件,然后右键全选。全选后再右键,选择保存到库中Layout中与Logic同理,选好元件后,右键选择保存到库中。......
  • PADS应用笔记:如何手动导网表
    PADS应用笔记:如何手动导网表导出网表选择设置->网表生成.asc格式的网表文件导入网表直接在文件->导入中导入网表文件即可。......
  • 深入解析 Kafka 消息传递机制及其在 Spring Boot 中的应用
    Kafka作为一款高性能的分布式消息中间件,被广泛用于构建实时数据流处理和事件驱动的架构。在本篇博客中,我们将深入探讨Kafka的消息传递机制,并结合SpringBoot框架,演示如何在应用中使用Kafka进行消息传递。1.Kafka消息传递机制Kafka使用发布-订阅模型来实现消息传递。核心......
  • Kafka 消息传递原理及在 Spring Boot 中的应用实践
    Kafka作为一款强大的分布式消息中间件,在实时数据流处理和事件驱动架构中扮演着重要角色。在本篇博客中,我们将深入探讨Kafka的消息传递原理,并结合SpringBoot框架,演示如何在应用中使用Kafka进行消息传递。1.Kafka消息传递原理Kafka采用发布-订阅模型实现消息传递,核心概念......
  • “智慧踏板”应用程序技术支持
    智慧踏板,是一款应用于越野车,通过蓝牙对车辆电动踏板的状态进行查询,并实现近距离控制车辆电动踏板的手机应用。本app的功能特点1.可以控制电动踏板。2.可以查询电动踏板状态。3.可以推送踏板异常状态提醒。4.可以对设备进行远程升级。5.可以根据自己喜好,对电动踏板进行个性化......