Files
shellscripts/k8s/install_script.sh
Your Name b00f025742 update
2024-11-12 00:07:46 +08:00

158 lines
5.6 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 获取版本号从环境变量
CONTAINERD_VERSION=${CONTAINERD_VERSION:-1.6.8}
NERDCTL_VERSION=${NERDCTL_VERSION:-1.7.6}
CNI_VERSION=${CNI_VERSION:-1.1.1}
BUILDKIT_VERSION=${BUILDKIT_VERSION:-0.14.1}
# Docker Compose 安装路径
DOCKER_COMPOSE_PATH="/usr/local/bin/docker-compose"
LOGFILE="$(pwd)/install_log.txt"
install_docker() {
echo "正在检查 Docker 是否已安装..." | tee -a $LOGFILE
if ! [ -x "$(command -v docker)" ]; then
echo "Docker 未安装。正在安装 Docker..." | tee -a $LOGFILE
curl -fsSL https://get.docker.com -o get-docker.sh | tee -a $LOGFILE
sh get-docker.sh | tee -a $LOGFILE
echo "Docker 已安装。" | tee -a $LOGFILE
else
echo "Docker 已安装。" | tee -a $LOGFILE
fi
}
install_docker_compose() {
install_docker
echo "正在安装 Docker Compose..." | tee -a $LOGFILE
# 检查并安装 jq
if ! [ -x "$(command -v jq)" ]; then
echo "安装 jq..." | tee -a $LOGFILE
sudo apt-get update && sudo apt-get install -y jq | tee -a $LOGFILE
fi
# 检查并安装 curl
if ! [ -x "$(command -v curl)" ]; then
echo "安装 curl..." | tee -a $LOGFILE
sudo apt-get update && sudo apt-get install -y curl | tee -a $LOGFILE
fi
# 使用 GitHub API 获取最新版本
LATEST_RELEASE=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)
if [ -z "$LATEST_RELEASE" ]; then
echo "无法获取 Docker Compose 的最新版本。" | tee -a $LOGFILE
exit 1
fi
# 更新 Docker Compose 安装 URL 以使用最新版本
DOCKER_COMPOSE_URL="https://github.com/docker/compose/releases/download/${LATEST_RELEASE}/docker-compose-$(uname -s)-$(uname -m)"
sudo curl -L $DOCKER_COMPOSE_URL -o $DOCKER_COMPOSE_PATH | tee -a $LOGFILE
sudo chmod +x $DOCKER_COMPOSE_PATH | tee -a $LOGFILE
echo "Docker Compose ${LATEST_RELEASE} 已安装。" | tee -a $LOGFILE
}
uninstall_docker_compose() {
echo "正在卸载 Docker Compose..." | tee -a $LOGFILE
sudo rm -f $DOCKER_COMPOSE_PATH | tee -a $LOGFILE
echo "Docker Compose 已卸载。" | tee -a $LOGFILE
}
install_containerd() {
echo "正在安装 containerd..." | tee -a $LOGFILE
sudo apt-get update | tee -a $LOGFILE
sudo apt-get install -y containerd | tee -a $LOGFILE
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml | tee -a $LOGFILE
sudo systemctl restart containerd | tee -a $LOGFILE
}
configure_containerd() {
echo "正在配置 containerd 使用 nvidia-container-runtime..." | tee -a $LOGFILE
sudo tee -a /etc/containerd/config.toml > /dev/null <<EOT
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
BinaryName = "/usr/bin/nvidia-container-runtime"
EOT
sudo systemctl restart containerd | tee -a $LOGFILE
}
install_nerdctl() {
echo "正在安装 nerdctl..." | tee -a $LOGFILE
curl -LO https://github.com/containerd/nerdctl/releases/download/v${NERDCTL_VERSION}/nerdctl-${NERDCTL_VERSION}-linux-amd64.tar.gz | tee -a $LOGFILE
sudo tar xzvf nerdctl-${NERDCTL_VERSION}-linux-amd64.tar.gz -C /usr/local/bin | tee -a $LOGFILE
nerdctl version | tee -a $LOGFILE
}
install_cni_plugins() {
echo "正在安装 CNI 插件..." | tee -a $LOGFILE
mkdir -p /opt/cni/bin
curl -L "https://github.com/containernetworking/plugins/releases/download/v${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz" | sudo tar -xz -C /opt/cni/bin | tee -a $LOGFILE
ls /opt/cni/bin | tee -a $LOGFILE
nerdctl network ls | tee -a $LOGFILE
}
install_buildkit() {
echo "正在安装 BuildKit..." | tee -a $LOGFILE
curl -LO https://github.com/moby/buildkit/releases/download/v${BUILDKIT_VERSION}/buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz | tee -a $LOGFILE
sudo tar -C /usr/local/bin --strip-components=1 -xzf buildkit-${BUILDKIT_VERSION}.linux-amd64.tar.gz | tee -a $LOGFILE
}
configure_buildkit_service() {
echo "正在配置 BuildKit 守护进程..." | tee -a $LOGFILE
sudo tee /etc/systemd/system/buildkitd.service > /dev/null <<EOT
[Unit]
Description=BuildKit Daemon
Documentation=https://github.com/moby/buildkit
After=network.target
[Service]
ExecStart=/usr/local/bin/buildkitd
Restart=always
RestartSec=10s
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
EOT
sudo systemctl daemon-reload | tee -a $LOGFILE
sudo systemctl start buildkitd | tee -a $LOGFILE
sudo systemctl enable buildkitd | tee -a $LOGFILE
sudo systemctl status buildkitd | tee -a $LOGFILE
}
install_all() {
install_docker_compose
install_containerd
configure_containerd
install_nerdctl
install_cni_plugins
install_buildkit
configure_buildkit_service
}
echo "选择操作:" | tee -a $LOGFILE
echo "1) 安装 Docker Compose" | tee -a $LOGFILE
echo "2) 卸载 Docker Compose" | tee -a $LOGFILE
echo "3) 安装并配置 containerd" | tee -a $LOGFILE
echo "4) 安装 nerdctl" | tee -a $LOGFILE
echo "5) 安装 CNI 插件" | tee -a $LOGFILE
echo "6) 安装 BuildKit 并配置守护进程" | tee -a $LOGFILE
echo "7) 全部安装" | tee -a $LOGFILE
echo "8) 退出" | tee -a $LOGFILE
read -p "输入选择1-8" choice
case $choice in
1) install_docker_compose ;;
2) uninstall_docker_compose ;;
3) install_containerd; configure_containerd ;;
4) install_nerdctl ;;
5) install_cni_plugins ;;
6) install_buildkit; configure_buildkit_service ;;
7) install_all ;;
8) exit 0 ;;
*) echo "无效输入。" | tee -a $LOGFILE ;;
esac