最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用golang腳本基于kubeadm創(chuàng)建新的token(問題分析)

 更新時間:2023年10月20日 15:29:59   作者:llody_55  
這篇文章主要介紹了使用golang腳本基于kubeadm創(chuàng)建新的token(問題分析),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

說明

1、這個腳本主要用于解決兩個問題:

第一:其實使用python腳本也可以實現(xiàn),但是python要面對centos7的python2和openeuler的python3不一樣的問題

第二:就是多架構(gòu)的問題和離線的問題。

第三:學習go腳本的實踐。

以上問題都有可能導致這個python腳本可能不那么通用。

2、適用場景:

暫時用于配合我前面部署高可用K8S集群時用于過濾出token信息或者token過期時直接生成新的token。

其他擴展還在考慮

腳本用到的邏輯

解析命令行參數(shù)

// 定義命令行參數(shù)
tokenFlag := flag.Bool("token", false, "重新生成與 kubeadm token create --print-join-command 相同的 token 信息")
flag.Parse()

Go

腳本使用Go語言的flag包來解析命令行參數(shù)。它定義了一個名為tokenFlag的命令行標志,用于確定是否重新生成加入命令。

cmd命令行函數(shù)

func generateToken() {
	// 調(diào)用 kubeadm token create --print-join-command 命令來生成與 kubeadm token create --print-join-command 相同的 token 信息
	cmd := exec.Command("kubeadm", "token", "create", "--print-join-command")
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	err := cmd.Run()
	if err != nil {
		fmt.Println("生成 token 信息時發(fā)生錯誤:", err)
	}
}

Go

generateToken函數(shù)的目的是重新生成加入集群的命令。它調(diào)用外部命令kubeadm token create --print-join-command來生成新的token和加入命令。

這個命令與python的`subprocess.run`有異曲同工之妙

讀取文件和處理文件內(nèi)容的邏輯

// 打開日志文件
		file, err := os.Open("./k8s_init.log")
		if err != nil {
			fmt.Println("無法打開日志文件:", err)
			return
		}
		defer file.Close()
		// 創(chuàng)建一個帶緩沖的文件讀取器
		scanner := bufio.NewScanner(file)
		// 設(shè)置標志來跟蹤是否找到了控制平面和默認行
		inControlPlane := false
		inDefaultLine := false
		// 逐行讀取文件內(nèi)容
		for scanner.Scan() {
			line := scanner.Text()
			// 如果找到包含 "--control-plane" 的行
			if strings.Contains(line, "--control-plane") {
				inControlPlane = true
				fmt.Println(line) // 打印控制平面行
			} else if inControlPlane && strings.Contains(line, "--discovery-token-ca-cert-hash") {
				fmt.Println(line) // 打印相關(guān)控制平面行
				inControlPlane = false
			} else if strings.Contains(line, "kubeadm join") {
				fmt.Println(line) // 打印默認行
				inDefaultLine = true
			} else if inDefaultLine && strings.Contains(line, "--discovery-token-ca-cert-hash") {
				fmt.Println(line) // 打印相關(guān)默認行
				inDefaultLine = false
			}
		}
		if err := scanner.Err(); err != nil {
			fmt.Println("讀取文件時發(fā)生錯誤:", err)
		}

Go

這部分邏輯在主函數(shù)的else分支中。它打開名為k8s_init.log的文件,然后逐行讀取文件內(nèi)容,查找控制平面和默認行的標識,并打印相應(yīng)的行。這部分邏輯根據(jù)文件內(nèi)容的不同來區(qū)分并輸出控制平面和默認行。

腳本的主要功能是在根據(jù)命令行參數(shù)來決定是否生成與kubeadm token create --print-join-command相同的token信息。如果-token命令行參數(shù)被提供,腳本會調(diào)用generateToken函數(shù)生成新的token信息;否則,它會讀取文件并處理文件內(nèi)容以區(qū)分控制平面和默認行,并輸出相應(yīng)的信息。這使腳本可以用于生成Kubernetes集群的加入命令或分析日志文件中的內(nèi)容。

完整腳本

package main
import (
	"bufio"
	"flag"
	"fmt"
	"os"
	"os/exec"
	"strings"
)
func main() {
	// 定義命令行參數(shù)
	tokenFlag := flag.Bool("token", false, "重新生成與 kubeadm token create --print-join-command 相同的 token 信息")
	flag.Parse()
	if *tokenFlag {
		generateToken()
	} else {
		// 打開日志文件
		file, err := os.Open("./k8s_init.log")
		if err != nil {
			fmt.Println("無法打開日志文件:", err)
			return
		}
		defer file.Close()
		// 創(chuàng)建一個帶緩沖的文件讀取器
		scanner := bufio.NewScanner(file)
		// 設(shè)置標志來跟蹤是否找到了控制平面和默認行
		inControlPlane := false
		inDefaultLine := false
		// 逐行讀取文件內(nèi)容
		for scanner.Scan() {
			line := scanner.Text()
			// 如果找到包含 "--control-plane" 的行
			if strings.Contains(line, "--control-plane") {
				inControlPlane = true
				fmt.Println(line) // 打印控制平面行
			} else if inControlPlane && strings.Contains(line, "--discovery-token-ca-cert-hash") {
				fmt.Println(line) // 打印相關(guān)控制平面行
				inControlPlane = false
			} else if strings.Contains(line, "kubeadm join") {
				fmt.Println(line) // 打印默認行
				inDefaultLine = true
			} else if inDefaultLine && strings.Contains(line, "--discovery-token-ca-cert-hash") {
				fmt.Println(line) // 打印相關(guān)默認行
				inDefaultLine = false
			}
		}
		if err := scanner.Err(); err != nil {
			fmt.Println("讀取文件時發(fā)生錯誤:", err)
		}
	}
}
func generateToken() {
	// 調(diào)用 kubeadm token create --print-join-command 命令來生成與 kubeadm token create --print-join-command 相同的 token 信息
	cmd := exec.Command("kubeadm", "token", "create", "--print-join-command")
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	err := cmd.Run()
	if err != nil {
		fmt.Println("生成 token 信息時發(fā)生錯誤:", err)
	}
}

Go

使用方法

[root@node1 ~]# ./go_join_amd64 
  kubeadm join apiserver.cluster.local:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:13ddf570d3d11c5c0cda814e823610dae3922d825b60957c1ea288a666fd8f00 \
        --control-plane 
kubeadm join apiserver.cluster.local:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:13ddf570d3d11c5c0cda814e823610dae3922d825b60957c1ea288a666fd8f00 
[root@node1 ~]# ./go_join_amd64 -token
kubeadm join apiserver.cluster.local:6443 --token 5hygoq.z57dqi3bf2jlk61f --discovery-token-ca-cert-hash sha256:13ddf570d3d11c5c0cda814e823610dae3922d825b60957c1ea288a666fd8f00 

Bash

總結(jié)

功能只是加了一個token參數(shù)用于刷新token而已,主要在于學習golang的文本處理,cmd命令執(zhí)行,這些都是運維在使用go寫腳本最先遇到的問題。

后面想到功能會再增加,寫的很爛,如果有問題或者吐槽,歡迎留言。

到此這篇關(guān)于使用golang腳本基于kubeadm創(chuàng)建新的token的文章就介紹到這了,更多相關(guān)golang kubeadm創(chuàng)建token內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

秀山| 保康县| 凯里市| 郧西县| 博罗县| 临夏市| 郑州市| 福鼎市| 济南市| 万荣县| 罗甸县| 平度市| 云龙县| 霍州市| 丰顺县| 洛隆县| 永安市| 昌宁县| 柏乡县| 卫辉市| 海门市| 宁波市| 会理县| 贞丰县| 麻城市| 巫溪县| 江北区| 雷州市| 汉寿县| 垫江县| 淳安县| 彩票| 高阳县| 南充市| 阿坝县| 道真| 鹤峰县| 通榆县| 四川省| 津南区| 万载县|