在 Kubernetes(K8s)离线环境中进行安装和部署需要一些准备工作,因为无法直接使用在线的包管理工具和镜像仓库。以下是一个详细的步骤指南,帮助你在离线环境中成功部署 Kubernetes 集群。
在所有节点上执行以下命令:
bashsudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
对于 CentOS:
bashsudo yum update -y
sudo yum install -y epel-release
sudo yum install -y vim wget curl git
Kubernetes 需要一个容器运行时,Docker 是最常用的选择之一。
安装 Docker(以 Ubuntu 为例):
bashsudo apt-get install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
验证 Docker 安装:
bashdocker --version
Kubernetes 对交换分区的使用有限制,建议禁用交换分区。
bashsudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
在一台有网络的机器上下载所需版本的 Kubernetes 二进制文件:
bashcurl -LO "https://dl.k8s.io/v1.26.0/kubernetes-server-linux-amd64.tar.gz"
tar -zxvf kubernetes-server-linux-amd64.tar.gz
将解压后的 kubelet
、kubectl
和 kubeadm
二进制文件复制到所有节点的 /usr/local/bin/
目录下,并赋予执行权限。
bashsudo cp kubelet kubectl kubeadm /usr/local/bin/
sudo chmod +x /usr/local/bin/kubelet /usr/local/bin/kubectl /usr/local/bin/kubeadm
在有网络的机器上拉取所需的 Kubernetes 镜像,并保存为 tar 文件:
bashkubeadm config images list --kubernetes-version v1.26.0
根据输出结果,逐个拉取镜像并保存:
bashdocker pull k8s.gcr.io/kube-apiserver:v1.26.0
docker pull k8s.gcr.io/kube-controller-manager:v1.26.0
docker pull k8s.gcr.io/kube-scheduler:v1.26.0
docker pull k8s.gcr.io/kube-proxy:v1.26.0
docker pull k8s.gcr.io/pause:3.6
docker pull k8s.gcr.io/etcd:3.5.1-0
# 根据需要拉取其他镜像
保存镜像为 tar 文件:
bashdocker save -o kube-apiserver_v1.26.0.tar k8s.gcr.io/kube-apiserver:v1.26.0
# 重复上述命令保存其他镜像
将所有 tar 文件传输到离线节点。
在每个离线节点上加载镜像:
bashdocker load -i kube-apiserver_v1.26.0.tar
# 重复加载其他镜像
验证镜像是否加载成功:
bashdocker images
在控制平面节点上执行初始化命令。假设使用 kubeadm
进行初始化:
bashsudo kubeadm init --apiserver-advertise-address=<控制平面节点IP> --pod-network-cidr=192.168.0.0/16 --kubernetes-version v1.26.0
初始化完成后,按照输出提示配置 kubectl
:
bashmkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Kubernetes 需要网络插件来实现 Pod 之间的通信。这里以 Calico 为例。
在有网络的机器上下载 Calico 的 YAML 配置文件:
bashcurl https://docs.projectcalico.org/manifests/calico.yaml -O
修改 calico.yaml
中的 IP 地址池配置,确保与 kubeadm init
时的 --pod-network-cidr
一致。
将 calico.yaml
传输到离线节点。
在控制平面节点上应用配置:
bashkubectl apply -f calico.yaml
等待网络插件部署完成。
在工作节点上执行 kubeadm join
命令。这个命令在控制平面节点初始化时会提供。
示例:
bashsudo kubeadm join <控制平面节点IP>:6443 --token <token> \
--discovery-token-ca-cert-hash sha256:<hash>
如果 token 过期,可以在控制平面节点上重新生成:
bashkubeadm token create --print-join-command
将生成的 kubeadm join
命令复制到工作节点并执行。
在控制平面节点上运行以下命令,检查集群状态:
bashkubectl get nodes
所有节点应显示为 Ready
状态。
kubeadm join
命令是否正确。领取专属 10元无门槛券
手把手带您无忧上云