kubespray离线安装k8s集群

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

来源: DevOpSec公众号
作者: DevOpSec

背景

国内安装k8s集群,下载镜像往往失败或者半天下载不下来,导致安装不成功,影响摸鱼心情。
是否可以通过kubespray离线部署k8s集群。

完全可以的,准备就绪后,只需10多分钟即可搭建出一套高可用的k8s集群,心情畅悦。

准备工作

  1. 首先需要一台科学上网机器,用于下载k8s相关镜像和安装包
  2. 搭建nginx下载站,用于存放k8s集群安装所需的安装包。
  3. 搭建harbor镜像服务,存储安装k8s集群所需的镜像。
  4. 需要一台独立管理机器,安装docker环境用于部署k8s集群。

开始实施

资源

主机名角色ip操作系统
master1master192.168.1.11Centos 7.9.x 内核版本4.19.x
master2master192.168.1.12Centos 7.9.x 内核版本4.19.x
master3master192.168.1.13Centos 7.9.x 内核版本4.19.x
node1node192.168.1.14Centos 7.9.x 内核版本4.19.x
manager1管理机器192.168.1.253Centos 7.9.x 内核版本4.19.x
nogfw001科学上网机器192.168.2.111Centos 7.9.x 内核版本4.19.x
yourdownload.domian.com下载站Centos 7.9.x 内核版本4.19.x
yourharbor.domian.com镜像源Centos 7.9.x 内核版本4.19.x

科学上网机器上做如下操作

  1. 下载kubespray包,选最新最稳定版
a. 检出kubespray代码
git clone git@github.com:kubernetes-sigs/kubespray.git

b. 此时对外release版本v.2.21.0
cd kubespray
git clone v.2.21.0
  1. 离线下载需要的安装包
a. 生成下载包和镜像列表
yum install ansible -y #安装ansible
cd contrib/offline
sh generate_list.sh

b. 查看目录结构
tree temp/
temp/
├── files.list          #依赖包的列表
├── files.list.template
├── images.list         #依赖镜像的列表
└── images.list.template

c. 下载软件包到目录 temp/files
wget -x -P temp/files -i temp/files.list

  1. 配置nginx代理,代理可以不在科学上网机器
a. nginx配置块
server {
        listen 80 yourdownload.domian.com;
        location /k8s/ {
                alias /path/kubespray/contrib/offline/temp/files/;
        }
}

reload nginx 进程

b. 测试,注意版本,如果能正常下载则代表代理搭建正常
wget http://yourdomain.domian.com/k8s/etcd-io/etcd/releases/download/v3.5.6/etcd-v3.5.6-linux-amd64.tar.gz 

  1. 下载依赖镜像
a. 安装并启动docker-ce 
yum install docker-ce
service docker start

b. 安装 skopeo 将依赖镜像同步到自建私有镜像仓库
yum install  skopeo   ## 注意centos操作系统版本要在7.x

c. 创建docker公共的项目k8s,harbor域名:youharbor.domain.com
如果需要登录则执行
docker login youharbor.domain.com

d. 同步镜像
for image in $(cat temp/images.list); do skopeo copy docker://${image} docker://youharbor.domain.com/k8s/${image#*/}; done

  1. 下载kubespray镜像,省去安装kubespray各种依赖
下载镜像
docker pull quay.io/kubespray/kubespray:v2.21.0 

镜像打tag
docker tag quay.io/kubespray/kubespray:v2.21.0 youharbor.domain.com/k8s/quay.io/kubespray/kubespray:v2.21.0 

推送到自己的harbor仓库
docker push youharbor.domain.com/k8s/quay.io/kubespray/kubespray:v2.21.0 

管理机器上操作

  1. 安装docker,下载镜像
a. 安装docker-ce并启动
b. 下载kubespray image
docker pull youharbor.domain.com/k8s/quay.io/kubespray/kubespray:v2.21.0
  1. 免密登录k8s集群机器
1. 生产公私钥对
ssh-keygen  -b 4096
遇到输密码直接回车
d. 公钥copy到master和node机器
ssh-copy-id master1
ssh-copy-id master2
ssh-copy-id master3
ssh-copy-id node1
  1. 下载kubespray包选最新最稳定版,或者从科学上网的机器上copy

a. 检出kubespray代码
git clone git@github.com:kubernetes-sigs/kubespray.git

b. 此时对外release版本v.2.21.0
cd kubespray
git clone v.2.21.0

或者从`科学上网的机器`上copy

cp -rp 192.168.2.111:/path/kubespray .
  1. 配置离线安装
cp -rp /path/kubespray/inventory/sample/  /path/kubespray/inventory/mycluster/
vim /path/kubespray/inventory/mycluster/group_vars/all/offline.yml


# 替换镜像地址
registry_host: "yourharbor.domian.com/k8s"
kube_image_repo: "{{ registry_host }}"
gcr_image_repo: "{{ registry_host }}"
github_image_repo: "{{ registry_host }}"
docker_image_repo: "{{ registry_host }}"
quay_image_repo: "{{ registry_host }}"

# 替换软件包地址
files_repo: "http://yourdownload.domian.com/k8s"
kubeadm_download_url: "{{ files_repo }}/storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubeadm"
kubectl_download_url: "{{ files_repo }}/storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubectl"
kubelet_download_url: "{{ files_repo }}/storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubelet"
cni_download_url: "{{ files_repo }}/github.com/containernetworking/plugins/releases/download/{{ cni_version }}/cni-plugins-linux-{{ image_arch }}-{{ cni_version }}.tgz"
crictl_download_url: "{{ files_repo }}/github.com/kubernetes-sigs/cri-tools/releases/download/{{ crictl_version }}/crictl-{{ crictl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
etcd_download_url: "{{ files_repo }}/github.com/etcd-io/etcd/releases/download/{{ etcd_version }}/etcd-{{ etcd_version }}-linux-{{ image_arch }}.tar.gz"
calicoctl_download_url: "{{ files_repo }}/github.com/projectcalico/calico/releases/download/{{ calico_ctl_version }}/calicoctl-linux-{{ image_arch }}"
calico_crds_download_url: "{{ files_repo }}/github.com/projectcalico/calico/archive/{{ calico_version }}.tar.gz"
flannel_cni_download_url: "{{ files_repo }}/github.com/flannel-io/cni-plugin/releases/download/{{ flannel_cni_version }}/flannel-{{ image_arch }}"
helm_download_url: "{{ files_repo }}/get.helm.sh/helm-{{ helm_version }}-linux-{{ image_arch }}.tar.gz"
crun_download_url: "{{ files_repo }}/github.com/containers/crun/releases/download/{{ crun_version }}/crun-{{ crun_version }}-linux-{{ image_arch }}"
kata_containers_download_url: "{{ files_repo }}/github.com/kata-containers/kata-containers/releases/download/{{ kata_containers_version }}/kata-static-{{ kata_containers_version }}-{{ ansible_architecture }}.tar.xz"
runc_download_url: "{{ files_repo }}/github.com/opencontainers/runc/releases/download/{{ runc_version }}/runc.{{ image_arch }}"
containerd_download_url: "{{ files_repo }}/github.com/containerd/containerd/releases/download/v{{ containerd_version }}/containerd-{{ containerd_version }}-linux-{{ image_arch }}.tar.gz"
nerdctl_download_url: "{{ files_repo }}/github.com/containerd/nerdctl/releases/download/v{{ nerdctl_version }}/nerdctl-{{ nerdctl_version }}-{{ ansible_system | lower }}-{{ image_arch }}.tar.gz"
krew_download_url: "{{ files_repo }}/github.com/kubernetes-sigs/krew/releases/download/{{ krew_version }}/krew-{{ host_os }}_{{ image_arch }}.tar.gz"
cri_dockerd_download_url: "{{ files_repo }}/github.com/Mirantis/cri-dockerd/releases/download/{{ cri_dockerd_version }}/cri-dockerd-{{ cri_dockerd_version }}-linux-{{ image_arch }}.tar.gz"
gvisor_runsc_download_url: "{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/runsc"
gvisor_containerd_shim_runsc_download_url: "{{ files_repo }}/storage.googleapis.com/gvisor/releases/release/{{ gvisor_version }}/{{ ansible_architecture }}/containerd-shim-runsc-v1"
youki_download_url: "{{ files_repo }}/github.com/containers/youki/releases/download/v{{ youki_version }}/youki_v{{ youki_version | regex_replace('\\.', '_') }}_linux.tar.gz"

  1. 配置机器资源
vim  /path/kubespray/inventory/mycluster/inventory.ini

[all]
master1 ansible_host=192.168.1.11
master2 ansible_host=192.168.1.12
master3 ansible_host=192.168.1.13
node1 ansible_host=192.168.1.14

[kube_control_plane]
master1
master2
master3

[etcd]
master1
master2
master3

[kube_node]
node1

[calico_rr]

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
  1. 配置安装集群信息
vim  /path/kubespray/inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml

a. 配置pod网段
kube_service_addresses: 10.233.0.0/18  ## 有1.6万多个ip,更具自己环境配置

b. 配置pod网段
kube_service_addresses: 10.233.0.0/18  ## 有1.6万多个ip,更具自己环境配置

c. 选择网络插件,默认calico
kube_network_plugin: calico

d. 容器运行时
container_manager: containerd  #推荐containerd

e. 是否开启kata容器,建议开启
kata_containers_enabled: true

f. 证书是否自动续期,建议开启
auto_renew_certificates: true

也可以通过手动续期,在所有的master节点执行 
sh /usr/local/bin/k8s-certs-renew.sh

以上工作准备完之后,就开始我们的集群安装之旅,内网环境大概10多分钟就能搞定集群安装。

kubespray运维k8s集群,在管理机器上操作

  1. 启动kubespray容器
    kubespray容器启动脚本如下
cat runc.sh

# 把我们刚刚准备的配置挂载到容器里
docker run --rm -it --mount type=bind,source=/path/kubespray/inventory/mycluster,dst=/inventory \
  --mount type=bind,source=/path/kubespray,dst=/apps/kubespray \
  --mount type=bind,source="${HOME}"/.ssh/id_rsa,dst=/root/.ssh/id_rsa \
  yourharbor.domian.com/k8s/quay.io/kubespray/kubespray:v2.21.0 bash
  1. k8s集群安装
a. 启动kubespray容器
sh runc.sh

b. 在容器里执行命令安装集群
# ANSIBLE_HOST_KEY_CHECKING=False 作用是首次访问集群机器不用输入yes验证
# 注意集群节点都能访问yourharbor.domian.com和yourdownload.domian.com域名
ANSIBLE_HOST_KEY_CHECKING=False  ansible-playbook -i /inventory/inventory.ini --private-key /root/.ssh/id_rsa cluster.yml

如果安装过程中有报jmespath依赖包的错误,见下文问题部分

  1. k8s集群新增节点
a. 修改/path/kubespray/inventory/mycluster/inventory.ini
[kube_node]
node1
node2 #新增节点

b. 启动容器
sh runc.sh

b. 执行扩容
ANSIBLE_HOST_KEY_CHECKING=False  ansible-playbook -i /inventory/inventory.ini --private-key /root/.ssh/id\_rsa scale.yml -b -v
  1. k8s集群删除节点
a. 修改/path/kubespray/inventory/mycluster/inventory.ini
[kube_node]
node1
node2 #删除节点
node3 #删除节点

b. 启动容器
sh runc.sh

b. 执行删除
ANSIBLE_HOST_KEY_CHECKING=False  ansible-playbook -i /inventory/inventory.ini --private-key /root/.ssh/id_rsa remove-node.yml -b -v --extra-vars "node=node2,node3"
  1. k8s集群升级
a. 下载文件和对应的镜像,具体操作见上文

b. 启动容器
sh runc.sh

b. 执行升级
ANSIBLE_HOST_KEY_CHECKING=False  ansible-playbook -b -i /inventory/inventory.ini --private-key /root/.ssh/id_rsa upgrade-cluster.yml  -e kube\_version=v1.26.3
  1. 卸载k8s集群
a. 启动容器
sh runc.sh

b. ANSIBLE_HOST_KEY_CHECKING=False  ansible-playbook -i /inventory/inventory.ini --private-key /root/.ssh/id\_rsa reset.yml

问题

  1. jmespath 依赖包没有
如果安装过程中有报jmespath依赖包的错误,重新打镜像
cat Dockerfile
FROM youharbor.domain.com/k8s/quay.io/kubespray/kubespray:v2.21.0 
RUN pip3 install jmespath -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple

docker build youharbor.domain.com/k8s/quay.io/kubespray/kubespray:v2.21.0 .
docker push youharbor.domain.com/k8s/quay.io/kubespray/kubespray:v2.21.0 
  1. node节点上kubelet报错
error:
Apr 27 13:06:37 plat-data-mysql-sh-001 kubelet[26809]: E0427 13:06:37.782074   26809 summary_sys_containers.go:48] "Failed to get system container stats" err="failed to get cgroup stats for "/kube.slice/containerd.service": failed to get container info for "/kube.slice/containerd.service": unknown container "/kube.slice/containerd.service"" containerName="/kube.slice/containerd.service"

解决:
sed -i 's#/kube.slice/containerd.service#/system.slice/kubelet.service#g' /etc/kubernetes/kubelet.env ; service kubelet restart
kubespray部署kubernetes集群 阅读详情

相关推荐

kubespray-2.26.0安装kubernetes-1.30.4

Kubespray是开源的kubernetes部署工具,整合了ansible,可以方便的部署高可用集群环境。官网地址:https://github.com/kubernetes-sigs/kubespray注意:要求两台机器都可以访问github,不然后面安装的时候,下载文件会非常非常慢。

lxiaopu的博客 999

Kubespray v2.21.0 离线部署 Kubernetes v1.25.6 集群

Kubespray可以部署在 AWS, GCE, Azure, OpenStack 以及裸机上.部署 High Available Kubernetes 集群.可组合性 (Composable),可自行选择 Network Plugin (flannel, calico, canal, weave) 来部署.支持多种 Linux distributions。

爱死亡机器人 3643

利用Kubespray安装生产环境的k8s集群-实施篇

具体的讲解了如何用Kubespray安装k8s集群

sinat_30893849的博客 925

kubespray 离线部署 kubernetes集群

Kubespray是Google开源的一个部署生产级别的Kubernetes服务器集群的项目,它整合了Ansible作为部署的工具。

IT 7064

kubespray离线安装k8s

OS: Static hostname: test Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 83bb7e5dbf27453c94ff9f1fe88d5f02 Virtualization: vmware Operating System: Ubuntu 22.04.4 LTS Kernel: Linux 5.15.0-105-generic Architecture: x

神棍之路 2104

KuboardSpray:图形化Kubernetes集群离线部署与维护工具详解

KuboardSpray是一款基于kubespray的图形化工具,专门用于Kubernetes集群离线安装和维护。它通过直观的Web界面简化了Kubernetes集群的部署流程,特别适合需要在离线环境中部署K8s集群的用户。 ## 核心特性 1. **图形化操作界面**:告别复杂的命令行操作,通过Web界面完成K8s集群部署 2. **离线部署支持**:内置资源包机制,完美适配无外网连接的环...

gitblog_00932的博客 786

Rocky 9.4 Kubespray 1.27.0 offline install kubernetes v1.31.4(无需下载整合介质)

Kubespray 是一个开源项目,旨在通过 Ansible 简化生产就绪的 Kubernetes 集群的部署。它提供了灵活且可定制的框架,支持多种云提供商和本地环境,包括 AWS、Google Cloud Engine、Azure、OpenStack、vSphere 和裸金属环境。这种多样性使用户能够根据需求选择合适的基础设施来运行 Kubernetes 集群Kubespray 支持创建高可用的 Kubernetes 集群,确保即使在节点故障时,应用程序也能保持正常运行。

爱死亡机器人 2万+

万字长文详解 PaaS toB 场景下 Kubernetes 离线部署方案

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !在企业私有云环境当中,出于对数据安全的考虑以及满足 网络安全等级保护 的要求,往往会对内部环境中的服务器做...

easylife206的专栏 1863

KuboardSpray离线环境部署秘籍:解决企业内网K8S安装难题

KuboardSpray是一款专为企业内网环境设计的Kubernetes集群离线安装与维护工具,通过图形化界面让K8S集群的部署变得简单高效。对于需要在隔离网络环境中部署Kubernetes的企业来说,KuboardSpray提供了完整的离线解决方案,彻底解决了内网环境下的K8S安装难题。这款工具基于kubespray开发,支持高可用集群部署,让运维人员无需连接外网即可完成整个K8S生态的搭建。?

gitblog_00337的博客 322

5分钟极速部署高可用Kubernetes集群Kubespray实战指南

Kubespray是一个基于Ansible的Kubernetes集群部署工具,提供自动化部署、集群管理等功能。它支持多种Kubernetes版本,支持离线安装,且易于上手,是新手和普通用户部署Kubernetes集群的理想选择。 ## 为什么选择KubesprayKubespray作为一款优秀的Kubernetes集群部署工具,具有诸多优势。它基于Ansible,这意味着你可以利用Ansi

gitblog_00434的博客 690

从0到1:Kubespray生产环境部署避坑指南与最佳实践

Kubespray是一款基于Ansible的Kubernetes集群部署工具,提供自动化部署、集群管理等功能,支持多种Kubernetes版本和离线安装,非常适合新手和普通用户快速搭建生产环境。本文将详细介绍Kubespray的部署流程、避坑技巧和最佳实践,帮助你轻松上手。 ## 一、Kubespray简介 Kubespray是一个开源项目,它基于Ansible实现了Kubernetes集群

gitblog_00720的博客 886

k8s内网安装相关记录

修改网卡配置DNS /etc/sysconfig/network-scripts/ifcfg-ens192 sudo service network restart 在有网的服务器执行 1, Yum服务器安装 mkdir /apps/localrpm/ sudo yum install yum-utils 如果只想通过yum下载软件的安装包,但是不需要进行安装的话,可以...

gs80140的专栏 505

K8S离线部署--自用

目录

wrtwen的博客 1227

Kubespray-Offline 安装与配置指南

Kubespray-Offline 安装与配置指南 一、项目目录结构及介绍 Kubespray-Offline 是一个针对 Kubernetes离线部署工具包,旨在帮助用户在无网络连接或限制网络访问的环境中部署 Kubernetes 集群。以下是 kubespray-offline 项目的典型目录结构概览及其重要组成部分: . ├── README.md # ...

gitblog_01106的博客 645

【亲测免费】 Kuboard-Spray 开源项目教程

Kuboard-Spray 是一个基于 kubespray 的开源项目,旨在提供图形化的界面,用于离线安装、维护和升级高可用的 Kubernetes 集群。该项目支持多种操作系统和硬件平台,适用于企业级 Kubernetes 集群的管理和运维。 ## 项目快速启动 ### 环境要求 - 一台不低于 1 核 2G,不少于 10G 磁盘空间的已安装Docker 的服务器。 ### 安装步骤 ...

gitblog_00875的博客 621

kubespray最新版踩坑安装k8s

下载最新发行版本,解压 wget https://github.com/kubernetes-sigs/kubespray/archive/refs/tags/v2.18.1.tar.gz tar -zxvf v2.18.1.tar.gz kubernetes官网使用kubespray方式安装 kubespray Getting Started 先阅读下此页面kubespray readme 支持的docker版本 18.09, 19.03 和 20.10.推荐使用20.10. cri-o版本支持

a807719447的专栏 1130

RHEL 9.5 Kubespray 1.27.0 offline install kubernetes v1.31.4

Kubespray 是一个开源项目,旨在通过 Ansible 简化生产就绪的 Kubernetes 集群的部署。它提供了灵活且可定制的框架,支持多种云提供商和本地环境,包括 AWS、Google Cloud Engine、Azure、OpenStack、vSphere 和裸金属环境。这种多样性使用户能够根据需求选择合适的基础设施来运行 Kubernetes 集群Kubespray 支持创建高可用的 Kubernetes 集群,确保即使在节点故障时,应用程序也能保持正常运行。

爱死亡机器人 3万+

离线部署k8s工具推荐

动一下小手点一下赞。谢谢! 你的赞就是我更新的动力。离线部署Kubernetes是指在没有互联网连接或网络带宽受限的情况下,将Kubernetes集群和相关组件部署到本地或内部网络中。离线部署Kubernetes可以在没有网络条件的情况下练习和学习Kubernetes,也可以用于企业内部网络环境中的部署。本文将介绍如何进行...

weixin_35308770的博客 409

KuboardSpray资源包完全解析:自制离线安装包的完整教程

KuboardSpray是一款强大的Kubernetes集群离线安装工具,其核心功能依赖于资源包。资源包是Kubernetes离线安装的关键组件,包含了Kubernetes集群部署所需的所有二进制文件、镜像和配置。对于需要在无网络环境或内网中部署Kubernetes集群的用户来说,掌握自制离线安装包的技能至关重要。本文将为您详细介绍KuboardSpray资源包的完整制作流程和实用技巧。 ##

gitblog_00668的博客 211
上一篇: 运维面试怎么问问题?
下一篇: tcpdump解决运维生产中遇到问题
DevOpSec
博客等级 码龄14年 4粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值