From 16c37228ff9ac12b49e890baa5c977055e187afc Mon Sep 17 00:00:00 2001 From: kuangcheng Date: Thu, 11 Jan 2024 09:50:10 +0800 Subject: [PATCH] add docs for offline_installation Signed-off-by: kuangcheng --- .../kosmosctl/img/kosmos-installation.png | Bin 0 -> 52626 bytes .../kosmosctl/offline_installation_zh.md | 202 ++++++++++++++++++ pkg/kosmosctl/image/pull.go | 2 +- pkg/utils/constants.go | 4 +- 4 files changed, 204 insertions(+), 4 deletions(-) create mode 100644 docs/proposals/kosmosctl/img/kosmos-installation.png create mode 100644 docs/proposals/kosmosctl/offline_installation_zh.md diff --git a/docs/proposals/kosmosctl/img/kosmos-installation.png b/docs/proposals/kosmosctl/img/kosmos-installation.png new file mode 100644 index 0000000000000000000000000000000000000000..ec94cbe03ff6f6714bc62c1dede805ace435c30a GIT binary patch literal 52626 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 L{}EQnfD{r4SFRe@{M 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 literal 0 HcmV?d00001 diff --git a/docs/proposals/kosmosctl/offline_installation_zh.md b/docs/proposals/kosmosctl/offline_installation_zh.md new file mode 100644 index 000000000..37f79a062 --- /dev/null +++ b/docs/proposals/kosmosctl/offline_installation_zh.md @@ -0,0 +1,202 @@ +# Kosmos离线部署 +针对网络环境受限,无法访问外网的情况,Kosmos提供离线部署方案,本文将以v0.2.0版本为例,讲述如何在离线环境中部署Kosmos。(开始以下步骤之前,请确保有可用的Kubernetes集群环境)。 + +Kosmos 项目链接:https://github.com/kosmos-io/kosmos + + + +## 一. 在能够连接外网的机器上 + +在进行离线部署之前,需要在可以访问外网的机器上拉取Kosmos所必须的镜像包。 + +### 步骤一:安装kosmosctl + +`kosmosctl` 也是允许你控制 kosmos 命令行工具,可以通过该命令行工具实现镜像的快速下载,根据操作系统选择合适的`kosmosctl`工具包,以 `kosmosctl-linux-amd64` 为例。 + +1. 执行下述指令下载命令行工具包: + + ```shell + curl -L -O https://github.com/kosmos-io/kosmos/releases/download/v0.3.0/kosmosctl-linux-amd64 + ``` + +2. 将其移至`/usr/bin`目录下,并赋予执行权限: + + ```shell + sudo mv ./kosmosctl-linux-amd64 /usr/local/bin/kosmosctl + sudo chmod +x /usr/local/bin/kosmosctl + ``` + +3. 验证`kosmosctl` 命令行工具是否有效: + + ```shell + kosmoctl -h + ``` + +其他版本详见:https://github.com/kosmos-io/kosmos/releases + + +### **步骤二:准备安装镜像** + +`kosmosctl`支持docker和containerd两种方式拉取部署Kosmos所需要的镜像。 + +- docker + + ```shell + # 默认拉取最新的镜像 + kosmosctl image pull + # 拉取指定版本的镜像 + kosmosctl image pull --kosmos-version=v0.3.0 --eps-version=v0.1.1 --coredns-version=v0.1.8 + ``` + +- containerd + + ```shell + # 默认拉取default命名空间下最新的镜像 + kosmosctl image pull --containerd-runtime=containerd + # 拉取k8s.io命名空间下特定版本的镜像 + kosmosctl image pull --containerd-runtime=containerd --containerd-namespace=k8s.io --kosmos-version=v0.3.0 --eps-version=v0.1.1 --coredns-version=v0.e1.8 + ``` + +`kosmosctl`在拉取镜像后,会在当前目录下生成`kosmos-io.tar.gz` + +参数说明: + +- `--containerd-runtime`,定义机器容器运行时,支持docker和containerd,默认docker; +- `--containerd-namespace`,表示containerd拉取镜像时的命名空间; +- `--kosmos-version`,表示kosmos相关镜像的版本,默认latest; +- `--eps-version`,表示eps-probe-plugin镜像的版本,默认latest; +- `--coredns-version`,表示coredns镜像的版本,默认latest。 + + + +## 二. 在无法连接外网的机器上 + +### 步骤三:拷贝压缩包 + +将上述`kosmosctl`命令行工具和`kosmos-io.tar.gz`压缩包拷贝至无法连接外网的机器上,同时执行: + +``` +sudo mv ./kosmosctl /usr/local/bin/kosmosctl +sudo chmod +x /usr/local/bin/kosmosctl +``` + +### 步骤四:准备私有镜像库 + +1. 前提:机器能够访问私有镜像仓库,以docker仓库作为示例。 + +2. 配置镜像仓库 + + 修改`/etc/hosts` 文件: + + ```shell + vim /etc/hosts + ``` + + 在host文件中将主机名(即仓库域名;在本示例中是 registry.local.com)映射到机器的私有 IP 地址: + + ```shell + # registry(xxx.xxx.xxx.xxx 表示具体ip地址) + xxx.xxx.xxx.xxx registry.local.com + ``` + + 使用镜像仓库的`username`和`password`登录镜像仓库: + + ``` + docker login --username=[用户名] registry.local.com + ``` + +3.验证镜像仓库是否有效 + +使用 `docker push` 和 `docker pull` 来测试。 + + + +### **步骤五:推送镜像至私有镜像仓库** + +`kosmosctl`支持docker和containerd两种方式推送Kosmos部署所需要的镜像到私有镜像仓库。 + +- docker + + ```shell + kosmosctl image push --artifact=[*/kosmos-io.tar.gz] --private-registry=registry.local.com --username=[用户名] + ``` + +- containerds + + ```shell + kosmosctl image push --artifact=[*/kosmos-io.tar.gz] --containerd-runtime=containerd --containerd-namespace=k8s.io --private-registry=registry.local.com --username=[用户名] + ``` + + 执行上述命令,输入镜像仓库的`password`,开始推送镜像 + +参数说明: + +- --artifact,表示`kosmos-io.tar.gz` 的路径; +- --private-registry,表示私有镜像仓库的地址。 + + + +### **步骤六:开始安装** + +镜像推送成功后,开始安装Kosmos,执行指令: + +```shell +# 默认安装最新的镜像 +kosmosctl install --private-image-registry=registry.local.com +# 指定镜像版本安装 +kosmosctl install --private-image-registry=registry.local.com --kosmos-vesion=0.2.0 +``` + + + +### **步骤七:验证安装** + +安装成功后,会出现下述界面: + +图片 + + + +## **三. 补充功能** + +`kosmoctl`不光能够下载Kosmos部署相关镜像,还能够帮助下载自定义镜像。 + +1. 准备镜像清单`image-list.txt`(以Kosmos v0.3.0为例) + + ```txt + ghcr.io/kosmos-io/clustertree-cluster-manager:v0.3,0 + ghcr.io/kosmos-io/kosmos-operator:v0.3.0 + ghcr.io/kosmos-io/clusterlink-agent:v0.3.0 + ghcr.io/kosmos-io/clusterlink-network-manager:v0.3.0 + ghcr.io/kosmos-io/clusterlink-controller-manager:v0.3.0 + ghcr.io/kosmos-io/clusterlink-proxy:v0.3.0 + ghcr.io/kosmos-io/clusterlink-elector:v0.3.0 + ghcr.io/kosmos-io/clusterlink-floater:v0.3.0 + ``` + +2. 下载镜像指令 + + ```shell + # docker指令 + kosmosctl image pull --image-list=[image-list.txt] + # containerd指令 + kosmosctl image pull --image-list=[image-list.txt] --container-runtime=containerd --containerd-namespace=k8s.io + ``` + +3. 推送镜像指令 + + ```shell + # docker指令 + kosmosctl image push --image-list=[image-list.txt] --artifact=[*/kosmos-io.tar.gz] --private-registry=registry.local.com --username=[用户名] + # containerd指令 + kosmosctl image push --image-list=[image-list.txt] --artifact=[*/kosmos-io.tar.gz] --containerd-runtime=containerd --containerd-namespace=k8s.io --private-registry=registry.local.com --username=[用户名] + ``` + + 执行指令,输入镜像仓库`password`,推送镜像。 + + + +## 参考文献: + +1. [Kosmos实现无状态工作负载跨集群平滑扩展](https://mp.weixin.qq.com/s/6zZXPP9FKbgWV1JUYv-iVw) +2. https://github.com/kosmos-io/kosmos \ No newline at end of file diff --git a/pkg/kosmosctl/image/pull.go b/pkg/kosmosctl/image/pull.go index 483b54dc1..63acd1dc1 100644 --- a/pkg/kosmosctl/image/pull.go +++ b/pkg/kosmosctl/image/pull.go @@ -26,7 +26,7 @@ var PullExample = templates.Examples(i18n.T(` kosmosctl image pull # Pull and save images with custom config, e.g: - kosmosctl image pull --kosmos-version=[kosmos-image-version] --coredns-version=[coredns-image-version] --eps-version=[eps-image-version] --output=[output-dir] --container-runtime=[container-runtime] + kosmosctl image pull --kosmos-version=[kosmos-image-version] --coredns-version=[coredns-image-version] --eps-version=[eps-image-version] --output=[output-dir] --containerd-runtime=[container-runtime] `)) type CommandPullOptions struct { diff --git a/pkg/utils/constants.go b/pkg/utils/constants.go index 3b78795e4..89a481a3f 100644 --- a/pkg/utils/constants.go +++ b/pkg/utils/constants.go @@ -15,14 +15,13 @@ var ( ClusterLinkProxy, ClusterLinkElector, ClusterLinkFloater, - KosmosOperator, Coredns, EpsProbePlugin} ) const ( ClusterTreeClusterManager = "ghcr.io/kosmos-io/clustertree-cluster-manager" - ClusterLinkOperator = "ghcr.io/kosmos-io/clusterlink-operator" + ClusterLinkOperator = "ghcr.io/kosmos-io/kosmos-operator" ClusterLinkAgent = "ghcr.io/kosmos-io/clusterlink-agent" ClusterLinkNetworkManager = "ghcr.io/kosmos-io/clusterlink-network-manager" ClusterLinkControllerManager = "ghcr.io/kosmos-io/clusterlink-controller-manager" @@ -31,7 +30,6 @@ const ( ClusterLinkFloater = "ghcr.io/kosmos-io/clusterlink-floater" Coredns = "ghcr.io/kosmos-io/coredns" EpsProbePlugin = "ghcr.io/kosmos-io/eps-probe-plugin" - KosmosOperator = "ghcr.io/kosmos-io/kosmos-operator" Containerd = "containerd" DefaultContainerRuntime = "docker" DefaultContainerdNamespace = "default"