查看原文
其他

只需四步!发布 KCL 程序包发布到 docker.io

KCL 团队 规模化云原生运维 2023-12-28

kpm 是一个用于管理 kcl 程序包的工具,在 kpm 的帮助下,我们可以很轻松的管理 KCL 的三方库。从 kpm 0.2.0 版本开始,kpm 支持使用 OCI Registry 作为中央仓库保存 KCL 的程序包,本文将以 docker.io 作为 kpm 的中央仓库,仅需四步,您就可以轻松的将您的 KCL 程序包发布到 docker.io 中。

步骤 1:安装 kpm

首先,您需要在您的计算机上安装 kpm,我们推荐您使用 go install 安装。

go install kcl-lang.io/kpm@latest

您也可以手动安装, 其他的安装方式您可以参考:https://kcl-lang.io/docs/user_docs/guides/package-management/installation

步骤 2:创建一个 docker.io 账户

您需要创建一个 docker.io 账户以支持您的 kcl 包的推送。下文中,我们将用账户名为 test,账户密码为 1234 的账户为例。

步骤 3:登录 docker.io

您可以直接使用 docker.io 的账户名和密码登录。其中 <USERNAME> 是您的 docker.io 用户名,<PASSWORD> 是您 docker.io 账户的密码。

kpm login -u <USERNAME> -p <PASSWORD> docker.io

对于我们的示例账户,我们就可以用下面的命令登录。

kpm login -u test -p 1234 docker.io

关于如何使用 kpm  login 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/login。

步骤 4:推送您的 kcl 包

现在,您可以使用 kpm 将您的 kcl 包推送到 docker.io。

1. 准备工作:一个合法的 kcl 包

首先,您需要确保您推送的内容是符合一个 kcl 包的规范,即必须包含合法的 kcl.mod 和 kcl.mod.lock 文件。

如果您不知道如何得到一个合法的 kcl.mod 和 kcl.mod.lock 您可以使用 kpm init 命令创建。

以 聊聊 K8S 中的 SideCar 设计模式·第 2 篇 中提到的 Nginx 容器配置为例, 我们可以新建一个 KCL 程序包 my_nginx,并使用 kpm 为其添加需要的 k8s 依赖。

# 新建一个名为 my_nginx 的 KCL 程序包
kpm init my_nginx 

# 进入 my_nginx 中
cd my_nginx

# 添加 k8s 依赖
kpm add k8s

在 my_nginx / main.k 文件中,编写我们需要的 nginx 容器配置。

import k8s.api.core.v1 as k8core

k8core.Pod {
    metadata.name = "web-app"
    spec.containers = [{
        name = "main-container"
        image = "nginx"
        ports = [{containerPort: 80}]
    }]
}

在得到了一个合法的 kcl 程序包后,接下来就可以使用 kpm 将这个包发布在 docker.io 中了。

关于如何使用 kpm init 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/init

关于如何使用 kpm add 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/add

2. 推送 kcl 包

您可以在 kcl 包的根目录下使用以下命令进行操作:

kpm push oci://docker.io/<USERNAME>/<PACKAGE_NAME>

其中, <USERNAME> 是您的 docker.io 用户名, <PACKAGE_NAME>是 KCL 程序包的名称。以上面创建的 my_nginx 为例:

# 在 my_nginx 包的根目录下
pwd 
/home/user/my_nginx

# 推送 kcl 包到 docker.io
$ kpm push oci://docker.io/test/my_nginx

完成上述步骤后,您就成功地将您的 kcl 包 my_nginx 推送到了 docker.io .

关于如何使用 kpm push 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/push

3. 看看效果

通过 kpm run, 我们可以直接编译我们发布到 docker.io 上的 my_nginx 。

kpm run oci://docker.io/test/my_nginx

成功得到如下编译结果,编译成功 !

apiVersion: v1
kind: Pod
metadata:
  name: web-app
spec:
  containers:
  - image: nginx
    name: main-container
    ports:
    - containerPort: 80

关于如何使用 kpm run 的更多信息,请参阅 https://kcl-lang.io/docs/reference/package-management/command-reference/run

4. 总结

这篇文章向大家演示了如何使用 kpm 将 KCL 的程序包发布到 docker.io。在后续的文章中,我们将会向大家分享一些在开发 kpm 过程中的一些设计参考和思路,来帮助大家使用 kpm 管理 KCL 的程序包。

往期回顾

KPM:KCL语言的包管理器

KCL v0.5.0 重磅发布 - 面向云原生场景更易用的语言、工具链,社区集成和扩展支持

聊聊 K8S 中的 SideCar 设计模式·第 2 篇

使用 Github、Argo CD 和 KCL 实现 GitOps 以简化 DevOps


欢迎来玩~ 欢迎 star ⭐️

https://github.com/kcl-lang/kpm

https://github.com/kcl-lang/kcl

https://kcl-lang.io

https://github.com/KusionStack/kusion

https://kusionstack.io/


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存