kubernetes 节点初始化 ubuntu 22.04 虚拟机节点 shell 脚本
在ubuntu 22.04 虚拟机上为安装kubernetes环境,初始化节点,运行脚本之后应该可以直接执行kubeadm安装命令,如kubeadm init,join之类的。
注意需要代理来让containerd下载kubernetes的镜像,替换《代理地址》的部分。
如果你能直接下载各个k8s镜像则应该不需要第9部分。'
如果需要配置ubuntu的apt国内源,请自行配置,脚本中没有。
#!/bin/bash
set -e
# 1. 关闭 swap
echo "[Step 1] Disable swap..."
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
# 2. 设置 sysctl 参数
echo "[Step 2] Configure sysctl for Kubernetes..."
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
sysctl net.ipv4.ip_forward
echo "[Step 2.1] Ensure br_netfilter is loaded and bridge traffic is seen by iptables…"
# 安装模块包(可选,视内核而定)
sudo apt-get update && sudo apt-get install -y linux-modules-extra-$(uname -r)
# 开机加载
cat <<EOF | sudo tee /etc/modules-load.d/k8s-br_netfilter.conf
br_netfilter
EOF
# 立即生效
sudo modprobe br_netfilter
# 配置桥接流量转发
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
# 3. 安装 ssh 方便之后的链接
echo "[Step 3] Install and configure SSH server..."
# 更新 apt 索引并安装 OpenSSH Server
sudo apt-get update
sudo apt-get install -y openssh-server
# 开机自启并立即启动 SSH 服务
sudo systemctl enable ssh
sudo systemctl start ssh
# 4. 安装 containerd 所需依赖并添加 Docker 仓库
echo "[Step 4] Install containerd..."
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
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 containerd.io
# 5. 生成默认配置
echo "[Step 5] Generate default containerd config..."
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
# 6. 设置 systemd cgroup
echo "[Step 6] Set SystemdCgroup to true..."
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
# 7. 添加 Kubernetes 仓库
echo "[Step 7] Add Kubernetes repo..."
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/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.33/deb/ /' | \
sudo tee /etc/apt/sources.list.d/kubernetes.list
# 8. 安装 kubelet kubeadm kubectl
echo "[Step 8] Install kubelet, kubeadm, kubectl..."
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo mkdir -p /etc/systemd/system/containerd.service.d
# 9. 设置 containerd 的 HTTP 代理
echo "[Step 9] Configure containerd HTTP proxy..."
cat <<EOF | sudo tee /etc/systemd/system/containerd.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=《代理地址》"
Environment="HTTPS_PROXY=《代理地址》"
Environment="NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.0.0/16,10.244.0.0/16,.svc,.cluster.local"
EOF
# 10. 重启服务,准备 kube config 目录
echo "[Step 10] Finalizing setup..."
sudo systemctl daemon-reload
sudo systemctl restart containerd.service
mkdir -p $HOME/.kube
echo "[All Done] Node initialization complete."
浙公网安备 33010602011771号