经过不断的调试与漫长的等待,终于完成了shell脚本容器云的安装,非常感谢王师兄的指导!
总结一下今天的学习过程
1,简化hostname与IP-hostname映射配置,去除前天使用的 ansible-playbook changehostname.yml 方式
2,重新创建基础镜像:yum源更新,关闭防火墙,关闭SELINIX,设置开机时间等待1秒,桥接模式
安装deltarpm并执行yum provides '*/applydeltarpm',也是一个软件,不知道是干啥的,只知道是解决这个问题的
js文件
function caculate(formulation){ var result = eval(formulation); WScript.Echo(formulation + " = " + result); return result; } var cloud = (function (){ /*如何收集结点信息是个问题.*/ //第一个默认为主节点的IP var machines = [ ]; //注意:这里的hostname list要与machines数组中的IP顺序对应一致 //第一个默认为主节点的主机名 var hostnames = [ {} ]; //定义配置过程需要的变量名称 var machineName = []; //开机密码 var pwd = "******"; //将machines写入到本机的hosts文件中 function localHOSTS(){ var ForReading = 1, ForWriting = 2; var fso = new ActiveXObject("Scripting.FileSystemObject"); var tmp = fso.OpenTextFile("c:\\Windows\\System32\\drivers\\etc\\hosts", ForWriting, true); tmp.Write("127.0.0.1 localhost\n::1 localhost\n" + dns2(machines)); tmp.Close(); } function dns2(machines){ var d = []; var ss = hostnames[0].hostname; var hostname = ss.split(" "); for(var i=0; i<machines.length; i++) d.push(machines[i].IP + " " + hostname[i]); return d.join("\n"); } //设置机器的主机名和IP地址 function setupIPhostname(){ WScript.Echo("setupIPhostname"); //注意:这里默认的yum源是最新的,这里不更新 var ss = hostnames[0].hostname; var hostname = ss.split(" "); var iphostname = ""; for(var a=0;a<hostname.length;a++){ if(a==hostname.length-1){ iphostname += machines[a].IP+" "+hostname[a]+"\"\n" }else{ iphostname += machines[a].IP+" "+hostname[a]+"\n" } } for(var i =0;i<hostname.length;i++){ //文件替换 var ForReading = 1, ForWriting = 2; var fso = new ActiveXObject("Scripting.FileSystemObject"); var template = fso.OpenTextFile("setupIPhostname.sh", ForReading); var tmp = fso.OpenTextFile("setupIPhostname.tmp"+i+".sh", ForWriting, true); var contentTemplate = template.ReadAll(); tmp.Write(contentTemplate.replace(/hostname=\sIP_hostname=/g,"hostname="+hostname[i]+"\n"+"IP_hostname=\""+iphostname)); template.Close(); tmp .Close(); //将替换的文件通过putty进行远程执行 var shell = WScript.CreateObject("WScript.Shell"); //默认root用户权限直接启动 shell.run("putty -m setupIPhostname.tmp"+i+".sh -pw " +pwd+ " root@" +machines[i].IP, 1, true); } } //主节点与从节点共同的配置 function common_init_MsaterSalve(){ WScript.Echo("common_init_MsaterSalve"); //注意:这里默认的yum源是最新的,这里不更新 var ss = hostnames[0].hostname; var hostname = ss.split(" "); for(var i =0;i<hostname.length;i++){ //文件替换 var ForReading = 1, ForWriting = 2; var fso = new ActiveXObject("Scripting.FileSystemObject"); var template = fso.OpenTextFile("common_init_MsaterSalve.sh", ForReading); var tmp = fso.OpenTextFile("common_init_MsaterSalve.tmp"+i+".sh", ForWriting, true); var contentTemplate = template.ReadAll(); tmp.Write(contentTemplate.replace(/hostname=\sregistryHostname=\sapiserverHostname=\setcdHostname=/g,"hostname="+hostname[i]+"\n"+"registryHostname="+machineName[0].registryHostname+"\n"+"apiserverHostname="+machineName[0].apiserverHostname+"\n"+"etcdHostname="+machineName[0].etcdHostname+"\n")); template.Close(); tmp .Close(); //将替换的文件通过putty进行远程执行 var shell = WScript.CreateObject("WScript.Shell"); //默认root用户权限直接启动 shell.run("putty -m common_init_MsaterSalve.tmp"+i+".sh -pw " +pwd+ " root@" +machines[i].IP, 1, true); //WScript.Echo("445554"+machines[i].IP); } } //单独配置主节点 function only_init_master(){ WScript.Echo("only_init_master"); var ss = hostnames[0].hostname; var hostname = ss.split(" "); //文件替换 var ForReading = 1, ForWriting = 2; var fso = new ActiveXObject("Scripting.FileSystemObject"); var template = fso.OpenTextFile("only_init_master.sh", ForReading); var tmp = fso.OpenTextFile("only_init_master.tmp.sh", ForWriting, true); var contentTemplate = template.ReadAll(); tmp.Write(contentTemplate.replace(/master_hostname=/g,"master_hostname="+machineName[0].master_hostname+"\n")); template.Close(); tmp .Close(); //将替换的文件通过putty进行远程执行 var shell = WScript.CreateObject("WScript.Shell"); //默认root用户权限直接启动 shell.run("putty -m only_init_master.tmp.sh -pw " +pwd+ " root@" +machines[0].IP, 1, true); //WScript.Echo("445554"+machines[i].IP); } //单独配置从节点 function only_init_salve(){ WScript.Echo("only_init_salve"); for(var i =1;i<machines.length;i++){ //文件替换 var ForReading = 1, ForWriting = 2; var fso = new ActiveXObject("Scripting.FileSystemObject"); var template = fso.OpenTextFile("only_init_salve.sh", ForReading); var tmp = fso.OpenTextFile("only_init_salve.tmp"+i+".sh", ForWriting, true); var contentTemplate = template.ReadAll(); tmp.Write(contentTemplate.replace(/KUBE_master_hostname=/g,"KUBE_master_hostname="+machineName[0].KUBE_master_hostname+"\n")); template.Close(); tmp .Close(); //将替换的文件通过putty进行远程执行 var shell = WScript.CreateObject("WScript.Shell"); //默认root用户权限直接启动 shell.run("putty -m only_init_salve.tmp"+i+".sh -pw " +pwd+ " root@" +machines[i].IP, 1, true); //WScript.Echo("445554"+machines[i].IP); } } //主节点与从节点启动 function start_docker_cloud(){ WScript.Echo("start_docker_cloud"); var shell = WScript.CreateObject("WScript.Shell"); //默认root用户权限直接启动 shell.run("putty -m setupMaster.sh -pw " +pwd+ " root@" +machines[0].IP, 1, true); for(var i =1;i<machines.length;i++){ //将文件通过putty进行远程执行 var shell = WScript.CreateObject("WScript.Shell"); //默认root用户权限直接启动 shell.run("putty -m setupSalve.sh -pw " +pwd+ " root@" +machines[i].IP, 1, true); } } //配给registry镜像本地库 function registry_init_update(){ //将替换的文件通过putty进行远程执行 var shell = WScript.CreateObject("WScript.Shell"); //默认root用户权限直接启动 shell.run("putty -m registry_init_update.sh -pw " +pwd+ " root@" +machineName[0].registryHostIP, 1, true); start_docker_cloud(); } //配置dashboard skydns kubedns 三个yaml文件 function dashboard_skydns_kubedns(){ WScript.Echo("dashboard_skydns_kube-dns"); //文件替换 var ForReading = 1, ForWriting = 2; var fso = new ActiveXObject("Scripting.FileSystemObject"); var template = fso.OpenTextFile("dashboard_skydns_kubedns.sh", ForReading); var tmp = fso.OpenTextFile("dashboard_skydns_kubedns.tmp.sh", ForWriting, true); var contentTemplate = template.ReadAll(); tmp.Write(contentTemplate.replace(/registryHostname=\sapiserver_host=\skube_master_url=/g,"registryHostname="+machineName[0].registryHostname+"\n"+"apiserver_host="+machineName[0].apiserver_host+"\n"+"kube_master_url="+machineName[0].kube_master_url+"\n")); template.Close(); tmp .Close(); //将替换的文件通过putty进行远程执行 var shell = WScript.CreateObject("WScript.Shell"); //默认root用户权限直接启动 shell.run("putty -m dashboard_skydns_kubedns.tmp.sh -pw " +pwd+ " root@" +machines[0].IP, 1, true); start_docker_cloud(); } function IPandHostnameSetup(){ localHOSTS(); setupIPhostname(); WScript.Echo("请重启所有电脑,完成主机名以及IP映射配置生效,再执行One_button_loader功能函数,一键装机"); } //配置好后一键式装机 function One_button_loader(){ common_init_MsaterSalve(); only_init_master(); only_init_salve(); start_docker_cloud(); registry_init_update(); dashboard_skydns_kubedns(); WScript.Echo("如果失败,或许是registry.access.redhat.com/rhel7/pod-infrastructure不能顺利下载!"); WScript.Echo("请执行registry_init_update,再执行dashboard_skydns_kubedns!"); } //函数对应 return { //脚本初次执行时,必须要先执行localHOSTS,我也不知为什么?(这样执行putty外时会减少一些麻烦?测试所得,不可确信) localHOSTS:localHOSTS, setupIPhostname:setupIPhostname, common_init_MsaterSalve:common_init_MsaterSalve, only_init_master:only_init_master, only_init_salve:only_init_salve, start_docker_cloud:start_docker_cloud, registry_init_update:registry_init_update, dashboard_skydns_kubedns:dashboard_skydns_kubedns, One_button_loader:One_button_loader, abc:null }; })(); 文件概览
5,自己又梳理了一下shell安装的步骤,是自身更加理解了安装过程,不过各个组件的理解以及相互的通信原理还是不太明白
6,晚上着手准备了在docker中的hadoop集群安装的shell脚本,未成形,希望明天能完成
有些啰嗦,希望csdn不会怪我把它当成了日记本,哈哈,明天加油!
