如何在Ubuntu 16.04机器上离线安装Kubernetes?
Ubuntu 16.04 离线安装 Kubernetes 步骤
一、提前在联网机器上准备离线资源
1. 下载 Kubernetes 组件 deb 包
选择适配 Ubuntu 16.04 的 K8s 版本(如 v1.21.14),在联网机器执行:
# 临时添加 K8s 源 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF apt update # 下载指定版本的 kubeadm、kubelet、kubectl 及依赖包 apt-get download kubeadm=1.21.14-00 kubelet=1.21.14-00 kubectl=1.21.14-00 cri-tools socat conntrack ipset # 打包所有 deb 包 tar -czf k8s-debs.tar.gz *.deb
将打包好的 k8s-debs.tar.gz 传输到离线机器。
2. 下载 K8s 集群所需镜像
# 获取当前版本需要的镜像列表 kubeadm config images list --kubernetes-version v1.21.14 # 拉取并保存所有镜像 for img in $(kubeadm config images list --kubernetes-version v1.21.14); do docker pull $img docker save -o ${img//\//-}.tar $img done # 打包镜像文件 tar -czf k8s-images.tar.gz *.tar
将 k8s-images.tar.gz 传输到离线机器。
3. 下载 Docker 离线包(若离线机器未安装 Docker)
选择适配 Ubuntu 16.04 的 Docker 版本(如 20.10.x),在联网机器执行:
curl -fsSL https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/ | grep -E "(docker-ce|docker-ce-cli|containerd.io)" | awk '{print "https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/"$9}' | xargs wget # 打包 Docker deb 包 tar -czf docker-debs.tar.gz *.deb
将 docker-debs.tar.gz 传输到离线机器。
二、离线机器环境配置
# 关闭防火墙 ufw disable # 关闭 SELinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 关闭 swap swapoff -a sed -i '/swap/s/^/#/' /etc/fstab # 配置内核参数 cat <<EOF >/etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system # 加载必要内核模块 modprobe br_netfilter modprobe overlay
三、离线安装 Docker
# 解压 Docker 包 tar -xzf docker-debs.tar.gz # 安装 Docker dpkg -i *.deb # 启动并设置开机自启 systemctl start docker systemctl enable docker
四、离线安装 Kubernetes 组件
# 解压 K8s 组件包 tar -xzf k8s-debs.tar.gz # 安装所有组件及依赖 dpkg -i *.deb # 设置 kubelet 开机自启 systemctl enable kubelet
五、导入 K8s 镜像到 Docker
# 解压镜像包 tar -xzf k8s-images.tar.gz # 导入所有镜像 for img in *.tar; do docker load -i $img done # 若镜像源与 kubeadm 期望不一致,重新打标签(示例) docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.14 k8s.gcr.io/kube-apiserver:v1.21.14
六、初始化 Master 节点
# 初始化集群,指定版本并忽略预检查 kubeadm init --kubernetes-version v1.21.14 --ignore-preflight-errors=all --pod-network-cidr=10.244.0.0/16 # 配置 kubectl 环境 mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
保存初始化完成后输出的 Worker 节点加入命令。
七、离线安装 Pod 网络插件(以 Flannel 为例)
- 提前在联网机器下载 Flannel 的 yaml 文件和镜像:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml docker pull quay.io/coreos/flannel:v0.14.0 docker save -o flannel.tar quay.io/coreos/flannel:v0.14.0
将 kube-flannel.yml 和 flannel.tar 传输到离线机器。
- 在离线机器执行:
# 导入 Flannel 镜像 docker load -i flannel.tar # 应用网络配置 kubectl apply -f kube-flannel.yml
八、Worker 节点加入集群
在 Worker 节点重复执行步骤二到五的操作,然后执行 Master 节点初始化时输出的加入命令,示例:
kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
若 token 过期,可在 Master 节点生成新命令:
kubeadm token create --print-join-command
内容的提问来源于stack exchange,提问作者CuriousCase
相关产品推荐
相关产品推荐

