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


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

类别

配置项

详细信息

操作系统

版本

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仓库和私有镜像仓库实现完全离线部署,适用于严格的内网环境。

unbuntu离线部署K8S集群的更多相关文章

  1. Ansible自动化部署K8S集群

    Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企 ...

  2. 【02】Kubernets:使用 kubeadm 部署 K8S 集群

    写在前面的话 通过上一节,知道了 K8S 有 Master / Node 组成,但是具体怎么个组成法,就是这一节具体谈的内容.概念性的东西我们会尽量以实验的形式将其复现. 部署 K8S 集群 互联网常 ...

  3. 部署K8S集群

    1.Kubernetes 1.1.概念 kubernetes(通常称为k8s)用于自动部署.扩展和管理容器化应用程序的开源系统.它旨在提供“跨主机集群的自动部署.扩展以及运行应用程序容器的平台”.支持 ...

  4. 菜鸟系列k8s——快速部署k8s集群

    快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...

  5. 使用RKE快速部署k8s集群

    一.环境准备 1.1环境信息 IP地址 角色 部署软件 10.10.100.5 K8s Master Etcd.Control 10.10.100.17 K8s Worker1 Worker 10.1 ...

  6. 使用kubeadm部署k8s集群[v1.18.0]

    使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...

  7. centos7.8 安装部署 k8s 集群

    centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...

  8. 二进制方法-部署k8s集群部署1.18版本

    二进制方法-部署k8s集群部署1.18版本 1. 前置知识点 1.1 生产环境可部署kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式 kuberadm Kubea ...

  9. 通过kubeadm工具部署k8s集群

    1.概述 kubeadm是一工具箱,通过kubeadm工具,可以快速的创建一个最小的.可用的,并且符合最佳实践的k8s集群. 本文档介绍如何通过kubeadm工具快速部署一个k8s集群. 2.主机规划 ...

  10. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

随机推荐

  1. 让 LLM 来评判 | 设计你自己的评估 prompt

    设计你自己的评估 prompt 这是 让 LLM 来评判 系列文章的第三篇,敬请关注系列文章: 基础概念 选择 LLM 评估模型 设计你自己的评估 prompt 评估你的评估结果 奖励模型相关内容 技 ...

  2. Java字节码增强实际应用在哪些方面?

    Java字节码增强由于与业务应用耦合性较低,且可任意修改程序代码,所以在许多方面都有应用.也是许多公司产品实现的基础.下面大概分类一下: 1.在可观测和监控方面的应用 如果一个应用的架构服务之间的依赖 ...

  3. EAR_v3 《浮声三》 智能化图书管理系统

    EAR_v3 <浮声三> 搭建于 Actix_Web 框架下的智能化图书管理系统 本项目的前身是 <Rusty_Borders 危墙> 的 在线控制系统 部分,经过大量开发工作 ...

  4. ubuntu install 下载安装包报错 subprocess installed post-installation script returned error exit status 10

    前言 在 ubuntu 环境下使用 sudo apt-get install 安装软件包时,会报错 XXX 为安装软件包 dpkg:error processing package XXX (--co ...

  5. Netty源码—2.Reactor线程模型一

    大纲 1.关于NioEventLoop的问题整理 2.理解Reactor线程模型主要分三部分 3.NioEventLoop的创建 4.NioEventLoop的启动 1.关于NioEventLoop的 ...

  6. DNS+scapy学习

    DNS前置知识 大部分介绍转自这篇文章. 官方解释: DNS ( Domain Name System ,域名系统) ,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联 ...

  7. Linux下对LVM逻辑卷分区大小调整 [针对xfs和ext4文件系统]

    当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区 ...

  8. 当Kafka化身抽水马桶:论组件并发提升与系统可用性的量子纠缠关系

    <当Kafka化身抽水马桶:论组件并发提升与系统可用性的量子纠缠关系> 引言:一场OOM引发的血案 某个月黑风高的夜晚,监控系统突然发出刺耳的警报--我们的数据发现流水线集体扑街.事后复盘 ...

  9. ZeroTier简单使用

    在 CentOS 系统下,你可以使用以下命令行操作来管理 ZeroTier 网络和设备.首先,确保已经正确安装 ZeroTier 软件,你可以按照以下步骤进行安装: 安装 ZeroTier: Zero ...

  10. java学习-8【EnumMap】

    EnumMap和EnumSet几乎是一样的,区别时EnumMap的key时Enum. public enum Types { RED,GREEN,BLACK,YELLO } @Test public ...