This commit is contained in:
Your Name
2024-11-12 00:07:46 +08:00
commit b00f025742
24 changed files with 1912 additions and 0 deletions

13
k8s/README.md Normal file
View File

@@ -0,0 +1,13 @@
赋予脚本执行权限:
```shell
chmod +x install_script.sh
```
执行:
```shell
./install_script.sh
```
通过这个脚本,你可以选择安装 Docker Compose、containerd、nerdctl、CNI 插件和 BuildKit并配置它们以支持 GPU 和容器构建。该脚本还会自动从环境变量获取版本号,并将安装日志重定向到当前目录下的 install_log.txt 文件中。

157
k8s/install_script.sh Normal file
View File

@@ -0,0 +1,157 @@
#!/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

32
k8s/reinstall_docker.sh Normal file
View File

@@ -0,0 +1,32 @@
#!/bin/bash
# Step 1: 卸载旧版本
sudo apt-get remove -y docker docker-engine docker.io containerd runc
# Step 2: 更新apt包索引
sudo apt-get update
# Step 3: 安装必要的包
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# Step 4: 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Step 5: 设置稳定的存储库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Step 6: 更新apt包索引并安装Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# Step 7: 验证Docker安装
sudo docker run hello-world
echo "Docker and Docker Compose have been successfully reinstalled."