shell自动化部署集群

news/2024/12/23 15:57:44/文章来源:https://www.cnblogs.com/yxh168/p/18620793

expect语法

      1.自动和远程主机建立ssh免密连接

#!/bin/bash#sh new_deploy.sh 192.168.30.164 admin 2323 yxh-test
#sh new_deploy.sh 192.168.30.164 admin Caosoc@345 yxh-test#1.先接收传递过来的参数
hostip=$1
hostuser=$2
hostpasswd=$3
clusternamespace=$4#2.先和远程机器建立免密登录
expectres=0
function_set_nopasswd(){expect <<EOFset timeout 3spawn ssh-copy-id -i /root/.ssh/id_rsa.pub  $hostuser@$hostip;expect {"*yes/no*" { send "yes\n"; exp_continue }"*password:*" { send $hostpasswd\n; exp_continue }"*Permission*" { exit 2 }}
EOFexpectres=$?
}function_set_nopasswd
echo $expectresif [ $expectres -eq 0 ]; thenecho "免密建立成功,开始下一步流程"
elseecho "免密建立失败,退出执行"
fi
View Code
#2.先和远程机器建立免密登录
expectres=0
function_set_nopasswd(){expect <<EOFset timeout 60spawn ssh-copy-id -i /root/.ssh/id_rsa.pub  $hostuser@$hostip;expect {"*yes/no*" { send "yes\n"; exp_continue }"*password:*" { send $hostpasswd\n; exp_continue }"*Permission*" { exit 2 }}set timeout 60spawn ssh $hostuser@$hostip;expect {"*password*" { exit 2 }}
EOFexpectres=$?
}
多条命令
#! /bin/bash#1.先接收传递过来的参数
hostip=$1
hostuser=$2
hostpasswd=$3
clusternamespace=$4#2.先和远程机器建立免密登录
expectres=0
function_set_nopasswd(){expect <<EOFset timeout 70spawn ssh-copy-id -i /root/.ssh/id_rsa.pub  $hostuser@$hostip;expect {"*yes/no*" { send "yes\n"; exp_continue }"*password:*" { send $hostpasswd\n; exp_continue }"*Permission*" { exit 2 }}
EOFexpectres=$?
}function_set_nopasswd
echo $expectresif [ $expectres -eq 0 ]; thenecho "$hostip 免密建立成功,开始下一步流程"
elseecho "$hostip 免密建立失败,退出执行"
fi
命令超时优化

     

      

    2.远程拷贝数据包到远程主机并且修改配置文件数据

#3.拷贝并且解压数据包
function_cp_data(){scp -r ./persistence-data.tar $hostuser@$hostip:/data/ssh $hostuser@$hostip 'tar -xzvf /data/persistence-data.tar -C /data/'function_update_ip
}#4.修改persistence-data目录下的ip地址
function_update_ip(){ssh $hostuser@$hostip "echo $hostip  instance | sudo tee -a /etc/hosts"ssh $hostuser@$hostip 'echo "vm.max_map_count = 262144" | sudo tee -a /etc/sysctl.conf'ssh $hostuser@$hostip 'sudo sysctl -p'ssh $hostuser@$hostip 'echo "*  hard    nofile  65536"  | sudo tee -a /etc/security/limits.conf'ssh $hostuser@$hostip 'echo "*  soft    nofile  65536"  | sudo tee -a /etc/security/limits.conf'ssh $hostuser@$hostip "sed -i 's/192.168.30.123/$hostip/g' /data/persistence-data/mysql/data1/initdata.sh"#ssh $hostuser@$hostip "sed -i 's/:1688/$hostip:1688/g' /data/persistence-data/mysql/data1/initdata.sh"ssh $hostuser@$hostip "sed -i 's/network.host: .*/network.host: $hostip/'  /data/persistence-data/elastic/config/elasticsearch.yml"ssh $hostuser@$hostip "sed -i 's/discovery.seed_hosts: .*/discovery.seed_hosts: [\"$hostip\"]/'  /data/persistence-data/elastic/config/elasticsearch.yml"ssh $hostuser@$hostip "sed -i 's/ip=.*/ip=$hostip/'  /data/persistence-data/elastic/shell/initsh/es/es_template_input.sh"echo "修改persistence-data目录中的配置结束"}
脚本修改配置

   3.创建k8s名空间和节点标签

function_create_k8stag(){echo $clusternamespaceecho $clusternodenamessh admin@192.168.30.174 "sudo /usr/local/bin/kubectl create namespace $clusternamespace"ssh admin@192.168.30.174 "sudo /usr/local/bin/kubectl label nodes $clusternodename $clusternamespace=true"
}
View Code

   

 4.加载所有的configmap资源

function_create_configyaml(){yqdir="/home/jenkins/docker-pipeline/soc-cluster"configsdir="/home/jenkins/docker-pipeline/soc-cluster/configmap"k8s_config_dir="/home/admin/cfgs"ls $configsdir/* | xargs -I '{}'  $yqdir/yq -i eval 'del(.status,.metadata.creationTimestamp, .metadata.resourceVersion, .metadata.uid, .metadata.annotations)' {}ls $configsdir/* | xargs -I '{}' sed -i "s/192.168.30.75/$hostip/g"  {}ls $configsdir/* | xargs -I '{}' sed -i "s/namespace: .*/namespace: $clusternamespace/"  {}
#远程拷贝到k8s中控主机上ssh admin@192.168.30.174 "rm -fr /home/admin/cfgs/* && mkdir -p /home/admin/cfgs"scp -r $configsdir/* admin@192.168.30.174:/home/admin/cfgs/ssh admin@192.168.30.174 "ls $k8s_config_dir/* | xargs -I '{}' sudo /usr/local/bin/kubectl apply -f {}"}
View Code

     

    

 5.创建所有的daemonset服务

function_create_deamonsets(){yqdir="/home/jenkins/docker-pipeline/soc-cluster"configsdir="/home/jenkins/docker-pipeline/soc-cluster/daemonsets"k8s_config_dir="/home/admin/cfgs"ls $configsdir/* | xargs -I '{}' sed -i "s/- key: soc-base-dev/- key: $clusternamespace/" {}ls $configsdir/* | xargs -I '{}' sed -i "s/192.168.30.75/$hostip/g"  {}ls $configsdir/* | xargs -I '{}' sed -i "s/namespace: .*/namespace: $clusternamespace/"  {}
#远程拷贝到k8s中控主机上ssh admin@192.168.30.174 "rm -fr /home/admin/cfgs/* && mkdir -p /home/admin/cfgs"scp -r $configsdir/* admin@192.168.30.174:/home/admin/cfgs/ssh admin@192.168.30.174 "ls $k8s_config_dir/* | xargs -I '{}' sudo /usr/local/bin/kubectl apply -f {}"
}
View Code

 

6.创建所有的deployment服务

function_create_deployments(){yqdir="/home/jenkins/docker-pipeline/soc-cluster"configsdir="/home/jenkins/docker-pipeline/soc-cluster/deployments"k8s_config_dir="/home/admin/cfgs"ls $configsdir/* | xargs -I '{}'  $yqdir/yq -i eval 'del(.status,.metadata.creationTimestamp, .metadata.resourceVersion, .metadata.uid, .metadata.annotations)' {}#ls $configsdir/* | xargs -I '{}'  $yqdir/yq -i '.spec.template.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key[0]=$clusternamespace' {}ls $configsdir/* | xargs -I '{}' sed -i "s/- key: soc-base-dev/- key: $clusternamespace/" {}ls $configsdir/* | xargs -I '{}' sed -i "s/192.168.30.75/$hostip/g"  {}ls $configsdir/* | xargs -I '{}' sed -i "s/namespace: .*/namespace: $clusternamespace/"  {}
#远程拷贝到k8s中控主机上ssh admin@192.168.30.174 "rm -fr /home/admin/cfgs/* && mkdir -p /home/admin/cfgs"scp -r $configsdir/* admin@192.168.30.174:/home/admin/cfgs/ssh admin@192.168.30.174 "ls $k8s_config_dir/* | xargs -I '{}' sudo /usr/local/bin/kubectl apply -f {}"
}
View Code

 

7.启动前的初始化脚本

function_post_deploy(){mysqlbindir="/home/jenkins/docker-pipeline/soc-cluster"$mysqlbindir/mysql -utaishi -pTransfar@2024 -h$hostip --execute="UPDATE siem.sys_config SET vals='https://$hostip:1688' WHERE id= '2wsyhjki765555544556c564rf8ui9'"ssh admin@192.168.30.174 "sudo /usr/local/bin/kubectl rollout restart deployment gateway -n $clusternamespace"
}
View Code
function_post_deploy(){mysqlbindir="/home/jenkins/docker-pipeline/soc-cluster"$mysqlbindir/mysql -utaishi -pTransfar@2024 -h$hostip --execute="UPDATE siem.sys_config SET vals='https://$hostip:1688' WHERE id= '2wsyhjki765555544556c564rf8ui9'"$mysqlbindir/mysql -utaishi -pTransfar@2024 -h$hostip siem < $mysqlbindir/sql/sys_user.sqlssh admin@192.168.30.174 "sudo /usr/local/bin/kubectl rollout restart deployment gateway -n $clusternamespace"
}
执行数据库升级脚本

     

完整实例脚本

 

configmap使用方式

      1.环境变量方式

        

         2.文件挂载方式

          

          

        

         

       容器中成功挂载了configmap文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/857501.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这家语音 AI 公司新融资 2700 万美元,并预测了 2025 年语音技术趋势

12 月 13 日,语音 AI 初创公司 Cartesia 宣布完成了新一轮 2700 万美元的融资,由知名风投机构 Index Ventures 领投。Cartesia 由 Karan Goel 和 Albert Gu 联合创立,专注于开发基于状态空间模型 (SSM) 的创新架构,该架构以其卓越的计算效率和实时处理能力而著称。Cartes…

常见bug - list.addAll()

@Test public void test2(){List list = new ArrayList<String>();list.addAll(null); }本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/18624219

PCIe基础篇——Switch Bridge Root Complex EndPoint

先上一张图PCIe拓扑特征:图的顶部是一个CPU。这里要说明的一点是,CPU被认为是PCle层次结构的顶层。PCle只允许简单的树结构,这意味着不允许循环或其他复杂的拓扑结构。这样做是为了保持与PCI软件的向后兼容性,PCI软件使用一个简单的配置方案来跟踪拓扑,不支持复杂的环境。…

centos7从源码安装python

1.更换yum源 备份(官方停止维护,无所谓了),更改配置文件,清除缓存,建立缓存 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backupCentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the clien…

数据到行动:电商复盘文化的深度剖析

电商团队如何用协同工具优化活动复盘效率 在电商行业中,团队复盘是每次活动后提升战斗力的重要环节。但由于活动节奏快、涉及面广,传统的复盘流程往往效率低下。近年来,越来越多的电商团队开始依赖在线文档编辑与协同工具,极大地提升了复盘的效率和质量。 高效复盘的痛点:…

在eclipse中创建JavaWeb项目

第一步:启动软件选择工作空间第二步:创建项目第三步:选择配置第一次配Tomcat会这样然后接着,next这里其实也可以不用改成这样,直接next也行 最后是然后就创建成功了 简单写一个三层架构:entity代码: ` package com.zuxia.entity; public class CakeEntity { //甜品编号 …

【POC开发系列】Pocsuite3框架的使用与poc的编写

一、Pocsuite3的介绍二、功能特性介绍2.1 漏洞测试框架2.2 PoC/Exp 开发包2.3 可被集成模块2.4 集成多个安全服务的API2.5 一些特性三、安装方法3.1 使用 Python3 pip 安装3.2 通过Github的源码下载四、架构简析五、运行方式5.1 命令行运行5.2 控制台运行5.3 集成调用六、Pocsu…

Java的HTTP接口测试框架Gatling

之前讲过的《JHM》是一个java的基准测试框架,一般用于测试jdk里的API。如果要测试http接口,可以使用Gatling。你可能用过JMeter,也是可以的原生的Gatling是基于代码测试的,没有UI。你需要创建一个maven项目,或者下载官方的例子:https://github.com/gatling/gatling-js-de…

Codeforces Round 993 (Div. 4)(补题)

只选择对自己有意义的题目Codeforces Round 993 (Div. 4)只选择对我有价值的题目记录E. Insane Problem 题目描述 给定五个整数 \(k\),\(l_1\),\(r_1\),\(l_2\) 和 \(r_2\),Wave 希望你帮助她计算满足以下所有条件的有序对 \((x, y)\) 的数量:\(l_1 \leq x \leq r_1\)。 \…

函数是什么

建设 邮政 中国工商银行

【多线程】原子类

JDK原子类基于CAS轻量级原子操作实现,使得程序运行效率变得更高。 (1)基本原子类基本原子类的功能是通过原子方式更新Java基础类型变量的值。基本原子类主要包括以下三个: AtomicInteger:整型原子类。 AtomicLong:长整型原子类。 AtomicBoolean:布尔型原子类。 (…

我的世界服务端插件安装 AuthMe用户登录插件安装

Minecraft服务端插件安装-AuthMe用户登录插件安装 需要准备AuthMe插件AuthMe-5.6.0.jar用户登录插件例如使用/register <密码> <确认密码>进行注册,使用/login <密码>进登录 AuthMe插件AuthMe 是一个广泛用于 Minecraft 服务器的插件,主要用于账户验证和注…