Last active
January 14, 2025 00:25
-
-
Save preinpost/b7e8e52afef2797e8aa878cf8487d828 to your computer and use it in GitHub Desktop.
kubeadm install
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"os/exec" | |
"os" | |
) | |
func writeAndRunScript(filename, content string) error { | |
// 스크립트를 파일로 작성합니다. | |
err := os.WriteFile(filename, []byte(content), 0755) | |
if err != nil { | |
return fmt.Errorf("파일 작성 오류: %v", err) | |
} | |
// 작성된 스크립트를 실행합니다. | |
cmd := exec.Command("bash", filename) | |
cmd.Stdout = os.Stdout | |
cmd.Stderr = os.Stderr | |
return cmd.Run() | |
} | |
func main() { | |
if len(os.Args) < 3 { | |
fmt.Println("사용법: go run main.go <인터페이스 ID> <master/worker>") | |
return | |
} | |
interfaceID := os.Args[1] | |
var isMaster bool | |
if os.Args[2] == "master" { | |
isMaster = true | |
} else { | |
isMaster = false | |
} | |
// 각 스크립트를 문자열로 정의합니다. | |
vmEnvEditScript := `#!/bin/bash | |
swapoff -a | |
sed -i '/swap/s/^/#/' /etc/fstab | |
ufw disable | |
` | |
resolvedEditScript := `#!/bin/bash | |
sudo sed -i'.orig' -e 's/^#DNS=$/DNS=1.1.1.1/' /etc/systemd/resolved.conf | |
sudo systemctl restart systemd-resolved | |
` | |
dockerInstallScript := `#!/bin/bash | |
sudo apt-get update && | |
sudo apt-get install -y ca-certificates curl && | |
sudo install -m 0755 -d /etc/apt/keyrings && | |
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc && | |
sudo chmod a+r /etc/apt/keyrings/docker.asc && | |
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | | |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && | |
sudo apt-get update && | |
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && | |
sudo docker run --rm hello-world | |
` | |
containerdEditScript := `#!/bin/bash | |
cat <<EOL | sudo tee /etc/containerd/config.toml | |
version = 2 | |
[plugins] | |
[plugins."io.containerd.grpc.v1.cri"] | |
[plugins."io.containerd.grpc.v1.cri".containerd] | |
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes] | |
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] | |
runtime_type = "io.containerd.runc.v2" | |
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] | |
SystemdCgroup = true | |
EOL | |
sudo systemctl restart containerd | |
` | |
iptablesSetupScript := `#!/bin/bash | |
modprobe br_netfilter | |
echo "br_netfilter" | sudo tee /etc/modules-load.d/k8s.conf | |
cat <<EOL | sudo tee /etc/sysctl.d/k8s.conf | |
net.bridge.bridge-nf-call-ip6tables = 1 | |
net.bridge.bridge-nf-call-iptables = 1 | |
EOL | |
sudo sed -i'.orig' -e '/^#net\.ipv4\.ip_forward=1/s/^#//' /etc/sysctl.conf | |
sudo sysctl --system | |
` | |
kubeadmInstallScript := `#!/bin/bash | |
sudo apt-get update && | |
sudo apt-get install -y apt-transport-https ca-certificates curl gpg && | |
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg && | |
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list && | |
sudo apt-get update && | |
sudo apt-get install -y kubelet kubeadm kubectl && | |
sudo apt-mark hold kubelet kubeadm kubectl && | |
sudo systemctl enable --now kubelet | |
` | |
kubeadmInitScript := fmt.Sprintf(`#!/bin/bash | |
INTERFACE_ID=%s | |
IP_ADDRESS=$(ip addr show "$INTERFACE_ID" | grep 'inet ' | awk '{print $2}' | cut -d/ -f1) | |
if [ -z "$IP_ADDRESS" ]; then | |
echo "인터페이스 $INTERFACE_ID에 IP 주소가 없습니다." | |
exit 1 | |
fi | |
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address="$IP_ADDRESS" --pod-network-cidr=10.244.0.0/16 | |
`, interfaceID) | |
// 각 스크립트를 파일로 작성하고 실행합니다. | |
if err := writeAndRunScript("vm-env-edit.sh", vmEnvEditScript); err != nil { | |
fmt.Printf("Error executing vm-env-edit.sh: %v\n", err) | |
return | |
} | |
if err := writeAndRunScript("resolved-edit.sh", resolvedEditScript); err != nil { | |
fmt.Printf("Error executing resolved-edit.sh: %v\n", err) | |
return | |
} | |
if err := writeAndRunScript("docker-install.sh", dockerInstallScript); err != nil { | |
fmt.Printf("Error executing docker-install.sh: %v\n", err) | |
return | |
} | |
if err := writeAndRunScript("containerd-edit.sh", containerdEditScript); err != nil { | |
fmt.Printf("Error executing containerd-edit.sh: %v\n", err) | |
return | |
} | |
if err := writeAndRunScript("iptables-setup.sh", iptablesSetupScript); err != nil { | |
fmt.Printf("Error executing iptables-setup.sh: %v\n", err) | |
return | |
} | |
if err := writeAndRunScript("kubeadm-install.sh", kubeadmInstallScript); err != nil { | |
fmt.Printf("Error executing kubeadm-install.sh: %v\n", err) | |
return | |
} | |
if isMaster { | |
if err := writeAndRunScript("kubeadm-init.sh", kubeadmInitScript); err != nil { | |
fmt.Printf("Error executing kubeadm-init.sh: %v\n", err) | |
return | |
} | |
} | |
// 모든 스크립트가 성공적으로 실행된 후 *.sh 파일 삭제 | |
cmd := exec.Command("bash", "-c", "rm -rf *.sh") | |
cmd.Stdout = os.Stdout | |
cmd.Stderr = os.Stderr | |
if err := cmd.Run(); err != nil { | |
fmt.Printf("Error deleting script files: %v\n", err) | |
return | |
} | |
fmt.Println("모든 스크립트가 성공적으로 실행되었습니다.") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment