unbuntu离线部署K8S集群
环境准备和服务器规划部署前提已知条件:
环境准备与服务器规划总表
|
类别 |
配置项 |
详细信息 |
|
操作系统 |
版本 |
Ubuntu 25.04(所有节点) |
|
容器运行时 |
Docker 版本 |
Docker 24.0.6(所有节点) |
|
Kubernetes |
版本 |
Kubernetes 1.23(所有节点) |
|
服务器角色 |
节点名称与IP |
- Master: k8s-master1 (192.168.100.10) |
|
网络规划 |
Pod 子网 |
10.244.0.0/16 |
|
Service 子网 |
10.96.0.0/12 (默认) |
|
|
防火墙 |
需开放端口 |
- Master: 6443, 2379-2380, 10250-10255 |
|
系统配置 |
禁用 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, |
|
k8s-node1 |
Worker |
192.168.100.11 |
Docker, kubeadm, kubelet |
|
k8s-node2 |
Worker |
192.168.100.12 |
Docker, kubeadm, kubelet |
依赖资源说明
- 外网机器
- 需临时连接外网以下载所有依赖包和镜像(仅需一台机器操作,后续离线使用)。
- 文件传输
- 离线包 offline-k8s.tar.gz 需通过 U盘/SCP 分发到所有节点。
- 系统一致性
- 所有节点需保持时间同步(建议安装 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
关键说明
- 网络规划:确保所有节点间网络互通,防火墙开放6443、2379-2380、10250-10255等端口。
- 镜像替换:所有Kubernetes组件镜像会自动从私有仓库192.168.100.10:5000拉取。
- 离线维护:后续新增镜像需在外网环境下载后,通过相同流程导入私有仓库。
- 系统配置:所有节点需关闭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集群的更多相关文章
- Ansible自动化部署K8S集群
Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企 ...
- 【02】Kubernets:使用 kubeadm 部署 K8S 集群
写在前面的话 通过上一节,知道了 K8S 有 Master / Node 组成,但是具体怎么个组成法,就是这一节具体谈的内容.概念性的东西我们会尽量以实验的形式将其复现. 部署 K8S 集群 互联网常 ...
- 部署K8S集群
1.Kubernetes 1.1.概念 kubernetes(通常称为k8s)用于自动部署.扩展和管理容器化应用程序的开源系统.它旨在提供“跨主机集群的自动部署.扩展以及运行应用程序容器的平台”.支持 ...
- 菜鸟系列k8s——快速部署k8s集群
快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...
- 使用RKE快速部署k8s集群
一.环境准备 1.1环境信息 IP地址 角色 部署软件 10.10.100.5 K8s Master Etcd.Control 10.10.100.17 K8s Worker1 Worker 10.1 ...
- 使用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 ...
- centos7.8 安装部署 k8s 集群
centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...
- 二进制方法-部署k8s集群部署1.18版本
二进制方法-部署k8s集群部署1.18版本 1. 前置知识点 1.1 生产环境可部署kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式 kuberadm Kubea ...
- 通过kubeadm工具部署k8s集群
1.概述 kubeadm是一工具箱,通过kubeadm工具,可以快速的创建一个最小的.可用的,并且符合最佳实践的k8s集群. 本文档介绍如何通过kubeadm工具快速部署一个k8s集群. 2.主机规划 ...
- kubernetes系列03—kubeadm安装部署K8S集群
本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...
随机推荐
- 让 LLM 来评判 | 设计你自己的评估 prompt
设计你自己的评估 prompt 这是 让 LLM 来评判 系列文章的第三篇,敬请关注系列文章: 基础概念 选择 LLM 评估模型 设计你自己的评估 prompt 评估你的评估结果 奖励模型相关内容 技 ...
- Java字节码增强实际应用在哪些方面?
Java字节码增强由于与业务应用耦合性较低,且可任意修改程序代码,所以在许多方面都有应用.也是许多公司产品实现的基础.下面大概分类一下: 1.在可观测和监控方面的应用 如果一个应用的架构服务之间的依赖 ...
- EAR_v3 《浮声三》 智能化图书管理系统
EAR_v3 <浮声三> 搭建于 Actix_Web 框架下的智能化图书管理系统 本项目的前身是 <Rusty_Borders 危墙> 的 在线控制系统 部分,经过大量开发工作 ...
- ubuntu install 下载安装包报错 subprocess installed post-installation script returned error exit status 10
前言 在 ubuntu 环境下使用 sudo apt-get install 安装软件包时,会报错 XXX 为安装软件包 dpkg:error processing package XXX (--co ...
- Netty源码—2.Reactor线程模型一
大纲 1.关于NioEventLoop的问题整理 2.理解Reactor线程模型主要分三部分 3.NioEventLoop的创建 4.NioEventLoop的启动 1.关于NioEventLoop的 ...
- DNS+scapy学习
DNS前置知识 大部分介绍转自这篇文章. 官方解释: DNS ( Domain Name System ,域名系统) ,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联 ...
- Linux下对LVM逻辑卷分区大小调整 [针对xfs和ext4文件系统]
当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区 ...
- 当Kafka化身抽水马桶:论组件并发提升与系统可用性的量子纠缠关系
<当Kafka化身抽水马桶:论组件并发提升与系统可用性的量子纠缠关系> 引言:一场OOM引发的血案 某个月黑风高的夜晚,监控系统突然发出刺耳的警报--我们的数据发现流水线集体扑街.事后复盘 ...
- ZeroTier简单使用
在 CentOS 系统下,你可以使用以下命令行操作来管理 ZeroTier 网络和设备.首先,确保已经正确安装 ZeroTier 软件,你可以按照以下步骤进行安装: 安装 ZeroTier: Zero ...
- java学习-8【EnumMap】
EnumMap和EnumSet几乎是一样的,区别时EnumMap的key时Enum. public enum Types { RED,GREEN,BLACK,YELLO } @Test public ...