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 ...
随机推荐
- DOS批处理小案例应用分享 - 整理桌面
想必大多数办公的同志都有个习惯----往桌面上堆放文件,各种文件.几天下来桌面就杂乱无章,乱七八糟的.能做一个快速清理的功能,是很有实用价值的.比如采用Windows自带的DOS批处理系统,就可快速搭 ...
- Vulnhub-Node
利用信息收集拿到路径得到账户密码,下载备份文件,base64解密后,利用fcrackzip爆破zip压缩包,得到一个文件,查看app.js,发现泄露的账户密码,连接ssh,成功连接,利用ubuntu历 ...
- Selenium KPI接口 窗口句柄
应用场景: 当单击主页上的链接时,将打开一个新窗口.在新打开的窗口中,无法执行任何操作,因为焦点仍然在主页Web驱动程序上. 这时候,我们需要把焦点定位到新打开的页面上. 先获取所有窗口a=drive ...
- uniapp 截屏扫码
最近开发功能遇到个需求,用户点击某个操作之后,需要截取当前屏幕内容,并扫码识别屏幕截图中的二维码,代码如下: 首先将代码抽离到外部文件中,以便复用: // 截图 export function tak ...
- 解决 Mac(M1/M2)芯片,使用node 14版本
前言 nvm 在安装 Node.js v14.21.3 时,报错: nvm install 14 Downloading and installing node v14.21.3... Downloa ...
- 无法解析@NotBlank
当碰到无法解析的时候,一般都是地址写错了,找不到相应的路劲 我是全局能搜到这个包@NotBlank,在jakarta.validation-api包里面,但是我网上搜https://www.cnblo ...
- 【Linux】3.6 组管理和权限管理
组管理和权限管理 1. Linux组基本介绍 Linux中每个用户属于一个组,不能独立于组以外.所以在Linux中每个文件存在组的概念: 所有者 所在组 其他组 改变用户所在组 2. 文件/目录所有者 ...
- 【Maven】POM基本概念
目前的技术在开发中存在的问题: 一个项目就是一个工程 如果项目非常庞大,就不适合继续使用 package 来划分模块.最好是每一个模块对应一个工程,利于分工协作. 借助于 Maven 就可以将一个项目 ...
- Debian 下安装 Nginx
Debian 下安装 Nginx 非常容易. apt update apt install nginx 输入以下命令查看是否可以正常访问, 顺便验证下安装是否成功. curl -I 127.0.0.1 ...
- CoreOS 更新重启后, 所有容器服务全部停掉了
今天有几个服务出问题了,上去看了下,这台 CoreOS 下的所有容器服务竟然全部停掉了,好奇怪,启动容器时明明加了--detach参数了呀. 问题原因 想了想,会不是是 CoreOS 更新重启导致的, ...