unbuntu离线部署K8S集群

环境准备和服务器规划部署前提已知条件:


环境准备与服务器规划总表

类别

配置项

详细信息

操作系统

版本

Ubuntu 25.04(所有节点)

容器运行时

Docker 版本

Docker 24.0.6(所有节点)

Kubernetes

版本

Kubernetes 1.23(所有节点)

服务器角色

节点名称与IP

Master: k8s-master1 (192.168.100.10)
Node1: k8s-node1 (192.168.100.11)
Node2: k8s-node2 (192.168.100.12)

网络规划

Pod 子网

10.244.0.0/16

 

Service 子网

10.96.0.0/12 (默认)

防火墙

需开放端口

- Master: 6443, 2379-2380, 10250-10255
- Node: 10250, 30000-32767

系统配置

禁用 Swap

所有节点需关闭 Swap 并永久禁用

 

主机名与 hosts 解析

所有节点需配置 /etc/hosts 包含各节点 IP 与主机名映射

离线仓库

本地 APT 仓库

所有节点通过 /opt/local-apt-repo 安装依赖包

 

私有镜像仓库地址

192.168.100.10:5000(运行在 Master 节点)


服务器节点明细表

节点名称

角色

IP 地址

核心组件

k8s-master1

Master

192.168.100.10

kube-apiserver, kube-controller-manager, kube-scheduler, etcd, Docker, kubeadm, kubelet, kubectl, 私有镜像仓库

k8s-node1

Worker

192.168.100.11

Docker, kubeadm, kubelet

k8s-node2

Worker

192.168.100.12

Docker, kubeadm, kubelet


依赖资源说明

  1. 外网机器
    • 需临时连接外网以下载所有依赖包和镜像(仅需一台机器操作,后续离线使用)。
  2. 文件传输
    • 离线包 offline-k8s.tar.gz 需通过 U盘/SCP 分发到所有节点。
  3. 系统一致性
    • 所有节点需保持时间同步(建议安装 chrony 或 ntp)。

此表格可作为部署前的检查清单,确保所有环境和规划符合要求后再执行后续步骤。

以下是Ubuntu 25.04离线部署Kubernetes 1.23集群的详细步骤:


一、外网环境准备(需连接外网的机器k8s-master1

1. 下载所有依赖包及镜像

bash

# 创建缓存目录

mkdir -p /opt/offline/{debs,docker,images,k8s}

cd /opt/offline

 

# 添加Kubernetes APT仓库(Ubuntu 25.04可能需要调整版本代号)

cat <<EOF > /etc/apt/sources.list.d/kubernetes.list

deb [arch=amd64] https://apt.kubernetes.io/ kubernetes-xenial main

EOF

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

 

# 更新并下载kubeadm/kubelet/kubectl 1.23.x

apt-get update

apt-get download kubeadm=1.23.* kubelet=1.23.* kubectl=1.23.*

 

# 递归下载依赖

apt-get install -y --download-only docker.io=24.0.6* kubeadm=1.23.*

cp /var/cache/apt/archives/*.deb ./debs/

 

# 下载Docker镜像

docker pull registry:2

docker save registry:2 -o ./images/registry.tar

 

# 下载Kubernetes镜像

kubeadm config images list --kubernetes-version 1.23.0 > ./k8s-images.txt

while read img; do

  docker pull $img

  docker save $img -o ./images/$(basename $img | sed 's/:/_/').tar

done < ./k8s-images.txt

2. 打包文件并传输到离线环境

bash

tar czvf offline-k8s.tar.gz /opt/offline

# 使用U盘或SCP将offline-k8s.tar.gz复制到各节点


二、离线环境配置(所有节点执行)

1. 解压离线包并创建本地APT仓库

bash

# 解压到各节点

tar xzvf offline-k8s.tar.gz -C /opt

 

# 创建本地APT源

apt-get install -y dpkg-dev

mkdir -p /opt/local-apt-repo

cp /opt/offline/debs/*.deb /opt/local-apt-repo/

cd /opt/local-apt-repo

dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

 

# 配置APT源

cat <<EOF > /etc/apt/sources.list.d/local-apt.list

deb [trusted=yes] file:/opt/local-apt-repo ./

EOF

apt-get update

2. 安装Docker和Kubernetes工具

bash

# 安装Docker

apt-get install -y docker.io=24.0.6*

 

# 安装kubeadm/kubelet/kubectl

apt-get install -y kubeadm=1.23.* kubelet=1.23.* kubectl=1.23.*

 

# 启动服务

systemctl enable docker kubelet

systemctl start docker

3. 配置私有镜像仓库

bash

# 导入Registry镜像

docker load -i /opt/offline/images/registry.tar

docker run -d -p 5000:5000 --restart=always --name registry registry:2

 

# 配置Docker信任私有仓库

cat <<EOF > /etc/docker/daemon.json

{

  "insecure-registries": ["192.168.100.10:5000"]

}

EOF

systemctl restart docker

 

# 导入Kubernetes镜像到仓库

for img in /opt/offline/images/k8s/*.tar; do

  docker load -i $img

  image_name=$(docker inspect --format='{{.RepoTags}}' $(tar xO $img manifest.json | jq -r '.[0].Config') | sed 's/[\[\]"]//g')

  new_tag="192.168.100.10:5000/$(basename $image_name | sed 's|/|_|g')"

  docker tag $image_name $new_tag

  docker push $new_tag

done


三、Kubernetes集群初始化

1. Master节点配置

bash

# 生成kubeadm配置文件

cat <<EOF > kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3

kind: InitConfiguration

nodeRegistration:

  kubeletExtraArgs:

    pod-infra-container-image: "192.168.100.10:5000/pause:3.6"

---

apiVersion: kubeadm.k8s.io/v1beta3

kind: ClusterConfiguration

imageRepository: "192.168.100.10:5000"

kubernetesVersion: "1.23.0"

networking:

  podSubnet: "10.244.0.0/16"

EOF

 

# 初始化Master

kubeadm init --config=kubeadm-config.yaml

 

# 配置kubectl

mkdir -p $HOME/.kube

cp /etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config

 

# 安装网络插件(Flannel)

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

2. Node节点加入集群

bash

# 在Master节点查看加入命令

kubeadm token create --print-join-command

 

# 在Node节点执行加入命令(示例)

kubeadm join 192.168.100.10:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>


四、验证集群状态

bash

# 在Master节点执行

kubectl get nodes

kubectl get pods -A


关键说明

  1. 网络规划:确保所有节点间网络互通,防火墙开放6443、2379-2380、10250-10255等端口。
  2. 镜像替换:所有Kubernetes组件镜像会自动从私有仓库192.168.100.10:5000拉取。
  3. 离线维护:后续新增镜像需在外网环境下载后,通过相同流程导入私有仓库。
  4. 系统配置:所有节点需关闭swap并设置正确的hosts解析:

bash

echo "192.168.100.10 k8s-master1

192.168.100.11 k8s-node1

192.168.100.12 k8s-node2" >> /etc/hosts

swapoff -a

sed -i '/ swap / s/^/#/' /etc/fstab

此方案通过本地APT仓库和私有镜像仓库实现完全离线部署,适用于严格的内网环境。

 

posted @ 2025-05-24 16:31  Johny_Zhao  阅读(431)  评论(0)    收藏  举报