首页 > 编程语言 >写一个给集群中的node大label

写一个给集群中的node大label

时间:2024-03-10 23:23:00浏览次数:21  
标签:node log err nil cmd label 集群 os string

背景:

集群中的ds相关的服务,需要指定label的部署

package main

import (
	"bytes"
	"log"
	"os"
	"os/exec"
	"path/filepath"
	"strings"
	"time"
)

const logFilePath = "test.log"

func GetTargetIP(config string) []string {
	cmd := exec.Command("kubectl", "--kubeconfig", config, "get", "nodes", "--selector=!container-runtime=containerd", "--selector=!ds-schedulable")
	var outBuffer bytes.Buffer
	cmd.Stdout = &outBuffer
	cmd.Stderr = os.Stderr

	err := cmd.Run()
	if err != nil {
		log.Fatalf("Error executing kubectl command: %v", err)
		return []string{} // 返回一个空切片表示错误
	}

	dataips := []string{}
	// 命令成功执行,继续处理输出
	out := strings.TrimSpace(outBuffer.String())
	ips := strings.Split(out, "\n")
	for _, data := range ips {
		if !strings.Contains(data, "NAME") {
			lines := strings.Split(data, "\n")
			for _, line := range lines {
				fileds := strings.Fields(line)
				if len(fileds) > 0 {
					dataips = append(dataips, fileds[0])
				}
			}
		}
	}
	return dataips
}

func LabelsIp(config string, ip string) {
	cmd := exec.Command("kubectl", "--kubeconfig", config, "label", "node", ip, "ds-schedulable=", "container-runtime=containerd", "--overwrite")
	var outBuffer bytes.Buffer
	cmd.Stdout = &outBuffer
	cmd.Stderr = os.Stderr
	err := cmd.Run()
	if err != nil {
		log.Fatalf("Error executing kubectl command: %v", err)
	} else {
		log.Printf("lable success ip: %s", ip)
	}
}

// 获取目录下的所有文件名
func getFilesInDirectory(directoryPath string) ([]string, error) {
	var fileNames []string

	// 使用 filepath.Walk 遍历目录
	err := filepath.Walk(directoryPath, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		// 忽略目录本身
		if path != directoryPath {
			// 获取文件或目录的相对路径
			relativePath, _ := filepath.Rel(directoryPath, path)
			fileNames = append(fileNames, relativePath)
		}

		return nil
	})

	if err != nil {
		return nil, err
	}

	return fileNames, nil
}

func crontab() {
	logFile, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		log.Fatalf("Error opening log file: %v", err)
	}
	defer logFile.Close()

	directoryPath := "/home/sunlixin/go/feed-node/config"
	fileNames, err := getFilesInDirectory(directoryPath)
	log.Println(fileNames)
	// fmt.Println(fileNames)
	if err != nil {
		log.Fatalf("Error getting files in directory: %v", err)
	}
	for _, fileName := range fileNames {
        // fmt.Println(fileName)
		configpath := directoryPath + "/" + fileName
		targetIPs := GetTargetIP(configpath)
		// fmt.Println(len(targetIPs))
		log.Printf("cluster:%s,num:%d", fileName, len(targetIPs))
		for _, ip := range targetIPs {
			LabelsIp(configpath, ip)
		}
	}
}

func main(){
	interval := 10 * time.Minute
	ticker := time.NewTicker(interval)
	defer ticker.Stop()
	for {
		select {
		case <-ticker.C:
			crontab()
		}
	}
}

 

标签:node,log,err,nil,cmd,label,集群,os,string
From: https://www.cnblogs.com/Direction-of-efforts/p/18065085

相关文章

  • Java登陆第三十四天——Node.js安装、npm配置、npm命令
    Nodejs是JS的运行环境,使JS可以运行在服务端,可以夸平台,可以运行在浏览器之外,成为一款全栈编程语言。Node.js安装Nodejs官网,进入......
  • Redis 架构深入:主从复制、哨兵到集群
    大家好,我是小康,今天我们来聊下Redis的几种架构模式,包括主从复制、哨兵和集群模式。前言:设想一下,你的咖啡馆在城市中太受欢迎,导致每天都人满为患。为了缓解这种压力,你决定在其他地方开设分店,这样顾客就可以在附近的分店享受咖啡,而不必涌向一个地方,这就好比Redis的主从复制,让......
  • 多节点oceanbase 集群部署
    安装前准备硬件要求CPU最少2核磁盘最少19G文件系统EXT4戓XFS关闭透明大页echonever>/sys/kernel/mm/redhat_transparent_hugepage/enabled确认操作系统版本是否支持[root@innodb-cluster01~]#cat/etc/redhat-releaseRedHatEnterpriseLinuxServerrelease7.9......
  • k8s中port-forward 与service的nodeport区别
    在Kubernetes中,port-forward和Service的NodePort是两种将外部流量引入集群内部Pod的方法,但它们在实现方式、使用场景和安全性等方面有所不同。port-forward:实现方式:kubectlport-forward命令允许你将本地机器上的一个端口转发到Kubernetes集群中的一个Pod上的端口。这是一种......
  • Linux Centos7安装node环境
    1、下载nodeNode.js中文网https://nodejs.cn/download/2、解压tar-xvf****.tar.xz3、配置环境变量vim/etc/profile文件最后增加exportPATH=$PATH:你的目录/binsource/etc/profile让环境变量配置生效4、配置淘宝镜像npmconfigsetregistryhttps://reg......
  • linux安装nvm和node
    linux安装nvm和node一、环境debian10nodejs二、安装2.1安装NVM运行以下命令下载并运行NVM安装脚本:curlhttps://raw.githubusercontent.com/creationix/nvm/master/install.sh|bash上面的命令将安装NVM并在.bashrc文件中进行所有必需的环境设置。激活所有设......
  • unbutn 安装最新nodejs LTS
    默认情况下直接执行aptupdateaptinstallnodejs会发现安装的距离最新的LTS简直差了十万八千里。同时npm也还需要另外手动安装。当前的LTS已经到了20.11.1LTS,结果 aptinstallnodejs之后node-v发现还是v12.22.9。。。 我晕菜。。本来通过下载源码包的方式一步......
  • node和浏览器发送请求的方式
    浏览器请求接口运行在客户端的浏览器环境中,而Node请求接口运行在服务器端的Node.js环境中。浏览器提供了特定的API(如FetchAPI或XMLHttpRequest)来发送HTTP请求fetch:FetchAPI是一种现代、基于Promise的JavaScriptAPI,用于在浏览器环境中执行网络请求fetch(url,{m......
  • Docker搭建Mysql集群
    一、新建主服务器示例3307dockerrun-p3307:3306--namemysql-master\-v/docker-volume/mysql-master/log:/var/log/mysql\-v/docker-volume/mysql-master/data:/var/lib/mysql\-v/docker-volume/mysql-master/conf:/etc/mysql\-eMYSQL_ROOT_PASSWORD=root\-d......
  • MongoDB 7.0集群部署
    环境描述:OS:openEuler22.03LTS-SP3mongoDB:7.0.6mongodb-database-tools:100.9.0mongosh:2.1.5GCC:12.3.1Python:3.9.9Clang:12.0.1服务器规划:主机名IP地址MongosServer组件端口ConfigServer组件端口ShardServer组件端口mongo-01192.168.83.102701727018主节......