KubeKey 2.0.0 发布:让离线部署 K8s 更加便捷

KubeKey2.0.0发布,引入了通用任务编排框架,支持模块化任务调度。新增清单manifest和制品artifact概念,简化离线部署流程。此外,还支持MultusCNI、Kata和NodeFeatureDiscovery等,并可一键部署私有镜像仓库。KubeKey是一款用于快速、便捷部署Kubernetes和KubeSphere的开源工具。

2022 年 3 月 8 日,KubeKey 2.0.0 正式发布,这是 KubeKey 的第 7 个正式版本,也是非常重要的一个版本。该版本新增了清单(manifest)和制品(artifact)的概念,为用户离线部署 Kubernetes 集群提供了解决方案。

KubeKey 简介

b14297e1fac3f662cc1492ea58910e9e.png

KubeKey 是 KubeSphere 社区开源的一款高效集群部署工具,运行时默认使用 Docker , 也可对接 Containerd CRI-O iSula 等 CRI 运行时,且 ETCD 集群独立运行,支持与 K8s 分离部署,提高环境部署灵活性。它提供了一种灵活、快速、便捷的方式来仅安装 Kubernetes/K3s,或同时安装 Kubernetes/K3s 和 KubeSphere,以及其他云原生插件。除此之外,它也是扩展和升级集群的有效工具。

解读 KubeKey 2.0.0 重大更新

全新的任务编排框架

7926972b3cc3d62d94f1129d26a30d5a.png

基于模块化的设计思路,KubeKey v2.0.0 实现了通用且规范化的任务编排框架。其中定义了host, pipeline, module, taskaction等对象,实现了模块化的任务调度引擎。基于该框架,用户可根据具体需求及业务逻辑,便捷地开发自定义任务流水线执行程序以及扩展 KubeKey 原有的任务流水线。

相关文档可参考:开发者指南[1]

更加方便的离线部署流程

KubeKey v2.0.0 中提供了一种全新的自定义离线部署 Kubernetes 集群的解决方案,为此新增了清单 manifest 和制品 artifact 的概念:

  • manifest:离线部署安装包自定义配置文件。

  • artifact:离线部署自定义安装包。

在过去,用户需要准备部署工具,镜像 tar 包以及其他相关的二进制文件,每位用户需要部署的 Kubernetes 版本和涉及到的镜像都可能是不同的。现在使用 KubeKey ,用户仅需使用清单 manifest 文件来定义将要离线部署的集群环境需要的内容,再通过该 manifest 来导出制品 artifact 文件即可完成准备工作。离线部署时只需要 KubeKey 二进制文件 和 artifact 就可快速、简单的在环境中部署镜像仓库、 Kubernetes 以及 KubeSphere。

离线部署相关文档可参考:

一键部署私有镜像仓库

KubeKey v2.0.0 可使用自签名证书部署 docker regisgry 或者 harbor,部署过程中会自动将证书分发至集群所有节点。并且该功能也支持离线部署,与 Kubernetes 集群离线部署结合实现闪电交付。

相关文档可参考:容器镜像仓库[4]

新增部署配置项

  1. ISSUE #789[5]:支持 Multus CNI 。

  2. ISSUE #811[6]:支持 Kata 和 Node Feature Discovery 。

  3. PR #902[7]:创建集群时默认开启 FeatureGates 。

  4. ISSUE #913[8]:创建集群时默认关闭 SELINUX 。

  5. ISSUE #915[9]:支持私有镜像仓库授权登录。

  6. ISSUE #940[10]:支持拉取和推送镜像时配置 namespaceOverride 。

  7. ISSUE #950[11]:支持自定义 dnsDomain 。

  8. ISSUE #951[12]:支持设置 NTPServer 和 timezone 。

  9. PR #992[13]:创建集群时添加配置 pod 的 PID Limit 和 PID Available 。

更多更新内容可查看 GitHub Release[14]

安装方式

获取最新正式版 KubeKey 的最快方法是通过命令行脚本:

curl -sfL https://get-kk.kubesphere.io | sh -

或者也可以前往 GitHub Release 页面,下载获取 KubeKey 2.0.0 的二进制文件。

致谢贡献者

以下是参与 KubeKey 2.0.0 代码与文档贡献的贡献者 GitHub ID,若此名单有遗漏请您与我们联系,排名不分先后。

  • 24sama

  • chaunceyjiang

  • haiker2011

  • life-

  • lvillis

  • pixiake

  • tanguofu

  • vincenthe11

  • yj-cloud

感谢以上贡献者在 KubeKey 2.0.0 开发中作出的贡献。KubeKey 是个非常年轻的开源项目,也是一个很有潜力的开源项目,欢迎更多的社区小伙伴加入到贡献者行列。

KubeKey GitHub 地址[15]:https://github.com/kubesphere/kubekey/

KubeKey 相关内容参考

引用链接

[1]

开发者指南: https://github.com/kubesphere/kubekey/blob/master/docs/developer-guide.md

[2]

KubeKey 制品和清单: https://github.com/kubesphere/kubekey/blob/master/docs/zh/manifest_and_artifact.md

[3]

推送镜像命令: https://github.com/kubesphere/kubekey/pull/1094

[4]

容器镜像仓库: https://github.com/kubesphere/kubekey/blob/master/docs/registry.md

[5]

ISSUE #789: https://github.com/kubesphere/kubekey/issues/789

[6]

ISSUE #811: https://github.com/kubesphere/kubekey/issues/811

[7]

PR #902: https://github.com/kubesphere/kubekey/pull/902

[8]

ISSUE #913: https://github.com/kubesphere/kubekey/issues/913

[9]

ISSUE #915: https://github.com/kubesphere/kubekey/issues/915

[10]

ISSUE #940: https://github.com/kubesphere/kubekey/issues/940

[11]

ISSUE #950: https://github.com/kubesphere/kubekey/issues/950

[12]

ISSUE #951: https://github.com/kubesphere/kubekey/issues/951

[13]

PR #992: https://github.com/kubesphere/kubekey/pull/992

[14]

GitHub Release: https://github.com/kubesphere/kubekey/releases/tag/v2.0.0

[15]

KubeKey GitHub 地址: https://github.com/kubesphere/kubekey/


关于 KubeSphere

KubeSphere (https://kubesphere.io)是在 Kubernetes 之上构建的开源容器混合云,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。

KubeSphere 已被 Aqara 智能家居、爱立信、本来生活、东软、华云、新浪、三一重工、华夏银行、四川航空、国药集团、微众银行、杭州数跑科技、紫金保险、去哪儿网、中通、中国人民银行、中国银行、中国人保寿险、中国太平保险、中国移动、中国联通、中国电信、天翼云、中移金科、Radore、ZaloPay 等海内外数千家企业采用。KubeSphere 提供了开发者友好的向导式操作界面和丰富的企业级功能,包括 Kubernetes 多云与多集群管理、DevOps (CI/CD)、应用生命周期管理、边缘计算、微服务治理 (Service Mesh)、多租户管理、可观测性、存储与网络管理、GPU support 等功能,帮助企业快速构建一个强大和功能丰富的容器云平台。

 ✨ GitHub:https://github.com/kubesphere

 💻 官网(中国站):https://kubesphere.com.cn

 👨‍💻‍ 微信群:请搜索添加群助手微信号 kubesphere

 🔗 企业服务https://kubesphere.cloud

4381dd2547424ab987454fe1d8e4af33.gif

<think>我们正在使用KubeKey进行Kubernetes离线部署KubeKey是一个用于部署Kubernetes集群的工具,特别适合离线环境。 目标:在CentOS 8(内核4.18,x86_64架构)上离线部署Kubernetes 1.28.15,并生成下载、部署和系统优化脚本。 步骤: 1. 准备离线环境:需要在一台可以联网的机器上预先下载所有必要的文件(包括Kubernetes镜像、二进制文件、依赖包等),然后转移到离线机器上。 2. 使用KubeKey生成配置文件并调整以适应离线安装。 3. 编写系统优化脚本(包括内核参数调整、关闭swap等)。 4. 编写部署脚本。 注意:CentOS 8默认使用podman而不是docker,但Kubernetes通常使用containerd或docker作为容器运行时。这里我们选择containerd。 由于是离线安装,我们需要: - 下载KubeKey二进制文件 - 使用KubeKey生成一个配置文件(指定版本、组件等) - 下载离线资源包(包含所有镜像和二进制文件) - 编写脚本完成系统设置和部署 具体步骤: 步骤1:在联网机器上操作 a. 下载KubeKey b. 创建配置文件 c. 下载离线资源包 步骤2:将下载的文件传输到离线环境的机器上(包括KubeKey离线资源包、部署脚本等) 步骤3:在离线机器上执行系统优化,然后使用KubeKey安装集群 详细脚本编写: 1. 下载和准备脚本(download.sh): 在联网机器上执行,用于下载KubeKey离线资源包。 2. 系统优化脚本(optimize.sh):离线机器上执行,用于系统设置。 3. 部署脚本(deploy.sh):离线机器上执行,使用KubeKey进行安装。 注意:KubeKey从v2.0.0开始支持Kubernetes v1.20及以上版本。我们需要确保使用支持Kubernetes 1.28.15的KubeKey版本。 由于KubeKey离线安装时,需要指定一个离线包的路径。我们可以使用KubeKey的`--with-package`选项。 开始编写脚本: 1. download.sh (在联网机器上运行) - 下载KubeKey - 使用KubeKey生成配置文件(示例配置) - 使用KubeKey下载离线资源包 2. optimize.sh (在离线机器上运行) - 关闭防火墙 - 关闭SELinux - 关闭swap - 设置内核参数 - 配置时间同步 - 安装依赖包(如socat, conntrack, ipset, ebtables, ipvsadm等) 3. deploy.sh (在离线机器上运行) - 加载离线镜像(使用KubeKey导入) - 使用KubeKey安装集群 注意:由于CentOS 8的yum源已经停止更新,我们需要使用vault.centos.org作为源,或者使用阿里云等镜像源。但离线环境下,我们需要提前下载好所有依赖的rpm包。 然而,KubeKey在下载离线包时,默认只下载容器镜像和二进制文件,不包含系统依赖包。因此,我们需要自行准备系统依赖包。 解决方案: - 在联网的CentOS 8机器上,使用yum下载所有依赖的rpm包,然后复制到离线机器上安装。 因此,我们需要在download.sh中增加下载依赖包的部分,并在optimize.sh中安装这些包。 具体步骤: 1. 在download.sh中,除了用KubeKey下载镜像和二进制文件,还要用yum下载所需rpm包。 2. 编写一个脚本(download-deps.sh)来下载依赖包,并在download.sh中调用。 由于依赖包可能会比较多,我们可以创建一个本地yum仓库,但为了简化,我们可以直接下载所有依赖包到一个目录,然后复制到离线机器上用`yum localinstall`安装。 依赖包列表(至少包括): - socat - conntrack-tools - ipset - ebtables - ipvsadm - chrony (用于时间同步) 另外,还需要containerd的安装包,但KubeKey离线包中已经包含了containerd的二进制文件,所以我们可以用KubeKey安装containerd,但系统依赖包还是需要单独处理。 因此,我们调整: 在optimize.sh中,我们使用提前下载好的rpm包进行安装。 接下来,我们分别编写脚本。 注意:KubeKey的下载地址:https://github.com/kubesphere/kubekey/releases 我们选择最新版本(目前是v3.0.13,但需要确认支持Kubernetes 1.28.15)。根据KubeKey的文档,KubeKey v3.0.13支持Kubernetes v1.19+,所以1.28.15应该支持。 开始编写脚本: 1. download.sh ```bash #!/bin/bash # 设置版本 KK_VERSION="v3.0.13" K8S_VERSION="v1.28.15" # 下载KubeKey wget https://github.com/kubesphere/kubekey/releases/download/${KK_VERSION}/kubekey-v${KK_VERSION}-linux-amd64.tar.gz tar -zxvf kubekey-v${KK_VERSION}-linux-amd64.tar.gz mv kk kubekey chmod +x kubekey # 创建配置文件(这里我们创建一个单节点集群的示例配置) ./kubekey create config --with-kubernetes ${K8S_VERSION} --container-manager containerd # 修改配置文件(config-sample.yaml),将registry设置为离线仓库(如果没有,后面会使用本地文件方式) # 由于是离线,我们需要使用KubeKey离线包功能,所以这里先不修改registry,而是使用--with-package指定离线包 # 下载离线资源包(包含Kubernetes镜像和二进制文件) ./kubekey artifact export -m config-sample.yaml -o kk-artifact.tar.gz # 下载系统依赖包 mkdir -p deps yum install --downloadonly --downloaddir=./deps socat conntrack-tools ipset ebtables ipvsadm chrony # 注意:CentOS 8默认的yum可能无法使用,需要配置yum源为vault.centos.org # 如果遇到问题,可以配置一个临时的yum源 # 创建本地仓库(可选,这里我们直接下载rpm包) # 打包所有文件 tar -czvf offline-k8s-${K8S_VERSION}.tar.gz kubekey kk-artifact.tar.gz deps config-sample.yaml echo "Download completed. Please copy offline-k8s-${K8S_VERSION}.tar.gz to the offline machine." ``` 2. optimize.sh ```bash #!/bin/bash # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 关闭swap swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 设置内核参数 cat <<EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter cat <<EOF | tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system # 安装依赖包 # 将deps目录中的rpm包安装 yum localinstall -y deps/*.rpm # 启动并启用chronyd systemctl enable --now chronyd # 设置时区(可选) timedatectl set-timezone Asia/Shanghai # 确保br_netfilter模块加载 echo "br_netfilter" | tee /etc/modules-load.d/br_netfilter.conf # 设置主机名(可选,根据实际情况) # hostnamectl set-hostname master echo "System optimization completed." ``` 3. deploy.sh ```bash #!/bin/bash # 解压离线包(假设已经将offline-k8s-${K8S_VERSION}.tar.gz放在当前目录) tar -zxvf offline-k8s-${K8S_VERSION}.tar.gz # 设置权限 chmod +x kubekey # 导入镜像和二进制文件 ./kubekey artifact import -m config-sample.yaml -o kk-artifact.tar.gz # 使用KubeKey安装集群 ./kubekey create cluster -m config-sample.yaml --with-package kk-artifact.tar.gz --container-manager containerd # 安装完成后,检查集群 export KUBECONFIG=/etc/kubernetes/admin.conf kubectl get nodes ``` 注意:以上脚本中的`config-sample.yaml`是KubeKey生成的配置文件,在单节点情况下,需要修改为至少包含一个节点。例如,在生成配置文件后,我们可以手动编辑`config-sample.yaml`,添加节点信息。 因此,在download.sh生成配置文件后,我们需要手动编辑(或者用sed自动替换)来添加节点信息。为了简化,我们可以在download.sh中生成配置文件后,用sed修改节点信息。 例如,修改config-sample.yaml,添加一个节点(假设当前机器): - 将`spec.hosts`部分替换为当前机器的IP、用户名、密码(或密钥)和角色。 由于是离线环境,我们建议使用密钥登录,避免输入密码。因此,需要提前在目标机器上配置好密钥。 但是,为了通用性,我们在脚本中不包含密码,而是建议用户编辑配置文件。 因此,在download.sh中,我们生成配置文件后,可以提示用户编辑配置文件。 所以,我们调整download.sh,在生成配置文件后,输出提示信息。 另外,KubeKey在安装过程中会尝试配置容器运行时,我们指定了containerd。 最后,请注意,离线安装需要确保所有节点的系统环境一致(CentOS 8),并且已经按照optimize.sh进行了优化。 总结步骤: 1. 在联网机器上运行download.sh,生成离线包(包含KubeKey离线资源包、依赖包和配置文件)。 2.离线包复制到离线环境的主节点上。 3.离线机器上运行optimize.sh进行系统优化(需要root权限)。 4. 运行deploy.sh开始安装集群。 注意:deploy.sh需要在包含离线包解压后的目录中运行,并且需要确保配置文件中的节点信息正确。 由于节点信息需要根据实际情况修改,所以在运行deploy.sh之前,请编辑config-sample.yaml。 另外,KubeKey也支持多节点集群,只需在配置文件中添加多个节点即可。 以上脚本是一个基础版本,实际使用中可能需要根据具体环境调整。 最后,我们生成相关问题。</think>以下是为在CentOS 8系统上使用KubeKey离线部署Kubernetes 1.28.15的完整解决方案,包含下载、部署和系统优化脚本: ### 一、准备工作 1. **环境要求**: - CentOS 8.5 (内核4.18.0-348) - x86_64架构 - 2核CPU/4GB内存/50GB磁盘(最低) - 所有节点关闭防火墙和SELinux 2. **资源准备**: - 联网机器:用于下载离线资源 - 离线环境:部署Kubernetes的目标机器 - 存储空间:至少50GB可用空间存放离线包 --- ### 二、脚本实现 #### 1. 资源下载脚本 (`download.sh`) 在**联网机器**上执行,下载所需资源: ```bash #!/bin/bash # 设置版本 KUBE_VERSION="v1.28.15" KK_VERSION="v3.0.13" # 创建资源目录 mkdir -p offline-resources && cd offline-resources # 下载KubeKey wget https://github.com/kubesphere/kubekey/releases/download/${KK_VERSION}/kubekey-v${KK_VERSION}-linux-amd64.tar.gz tar -zxvf kubekey-v${KK_VERSION}-linux-amd64.tar.gz chmod +x kk # 生成配置文件(单节点示例) cat > config-sample.yaml <<EOF apiVersion: kubekey.kubesphere.io/v1alpha2 kind: Cluster metadata: name: offline-cluster spec: hosts: - {name: master, address: 192.168.1.10, internalAddress: 192.168.1.10, user: root, password: "YourPassword"} roleGroups: etcd: - master control-plane: - master worker: - master kubernetes: version: ${KUBE_VERSION} clusterName: cluster.local network: plugin: calico registry: registryMirrors: [] insecureRegistries: [] addons: [] EOF # 导出离线资源包 ./kk artifact export -m config-sample.yaml -o kk-artifact-${KUBE_VERSION}.tar.gz # 下载系统依赖包 mkdir -p deps yum install --downloadonly --downloaddir=./deps \ socat conntrack-tools ebtables ipset ipvsadm chrony # 打包所有资源 tar -czvf full-offline-${KUBE_VERSION}.tar.gz * echo "下载完成!请将 full-offline-${KUBE_VERSION}.tar.gz 复制到离线环境" ``` #### 2. 系统优化脚本 (`optimize.sh`) 在**所有节点**执行: ```bash #!/bin/bash # 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 关闭Swap swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 内核优化 cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF sysctl --system # 加载内核模块 cat > /etc/modules-load.d/k8s.conf <<EOF overlay br_netfilter EOF modprobe overlay && modprobe br_netfilter # 时间同步 yum localinstall -y deps/chrony-*.rpm systemctl enable --now chronyd chronyc sources # 安装依赖 yum localinstall -y deps/*.rpm ``` #### 3. 部署脚本 (`deploy.sh`) 在**主节点**执行: ```bash #!/bin/bash # 解压资源包 tar -zxvf full-offline-*.tar.gz chmod +x kk # 导入镜像和二进制文件 ./kk artifact import -m config-sample.yaml -o kk-artifact-*.tar.gz # 安装Kubernetes ./kk create cluster -f config-sample.yaml --with-package kk-artifact-*.tar.gz # 验证安装 export KUBECONFIG=/etc/kubernetes/admin.conf kubectl get nodes kubectl get pods -A ``` --- ### 三、操作步骤 1. **在联网机器**: ```bash chmod +x download.sh && ./download.sh ``` 2. **传输文件到离线环境**: ```bash scp full-offline-v1.28.15.tar.gz root@offline-machine:/root ``` 3. **在离线环境所有节点**: ```bash tar -zxvf full-offline-v1.28.15.tar.gz chmod +x optimize.sh && ./optimize.sh ``` 4. **在主节点部署**: ```bash chmod +x deploy.sh && ./deploy.sh ``` --- ### 四、验证部署 ```bash # 检查节点状态 kubectl get nodes -o wide # 检查核心组件 kubectl get pods -n kube-system # 获取集群信息 kubectl cluster-info ``` --- ### 五、注意事项 1. **配置文件调整**: - 修改`config-sample.yaml`中的节点IP、密码和角色 - 多节点需在`hosts`部分添加worker节点 2. **离线仓库配置**: ```yaml spec: registry: privateRegistry: "registry.local:5000" # 使用私有仓库时配置 ``` 3. **资源需求**: - 每个节点至少2GB空闲内存 - `/var/lib/docker`分区预留20GB以上 4. **升级注意事项**: 离线升级需重新导出资源包并更新`KUBE_VERSION`[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值