KusionStack使用文档
下载安装
1. 安装 Kusionup
如果想自定义默认安装版本,可以运行下述命令(将最后的 open@latest 替换为你想要默认安装的版本号就就行):
curl -s "http://kusion-public.oss-cn-hzfinance.aliyuncs.com/cli/kusionup/scripts/install_kusionup.sh" | bash -s -- --skip-install && source $HOME/.kusionup/env && kusionup reinstall open@latest
该脚本执行后会创建 $HOME/.kusionup 目录,该目录下会包含:
- $HOME/.kusionup/bin 目录用于放置 kusionup 二进制工具
- $HOME/.kusionup/env 文件用于声明 kusionup 和 kusion 技术栈所需要的环境变量
- $HOME/.kusionup/current 软链接用于标识当前激活的 kusion 版本
- $HOME/.kusionup/$VERSION 目录代表不同的 kusion 版本目录,比如默认安装的内部最新版本 $HOME/.kusionup/alipay@latest
2. 管理 Kusion 版本
执行完安装脚本后,默认已经安装好了 kusionup 和一个默认的 kusion 版本,你可以通过执行 kusionup 查看已安装的所有版本:
$ kusionup
Use the arrow keys to navigate: ↓ ↑ → ←
? Select a version:▸ alipay@latest
执行 kusionup ls-ver 列出来自内置安装源中的所有可安装的 **kusion** 版本:
$ kusionup ls-ver
alipay@latest
alipay@v0.3.16
alipay@v0.3.15
alipay@v0.3.14
open@latest
执行 kusionup install $VERSION 安装指定版本:
# 这里假设安装开源 kusion 的最新版本 ↓
$ kusionup install open@latest
Downloaded 0.0% ( 2426 / 139988826 bytes) ...
Downloaded 11.4% ( 16003466 / 139988826 bytes) ...
Downloaded 21.0% ( 29433014 / 139988826 bytes) ...
Downloaded 32.2% ( 45077686 / 139988826 bytes) ...
Downloaded 41.9% ( 58642898 / 139988826 bytes) ...
Downloaded 51.2% ( 71647010 / 139988826 bytes) ...
Downloaded 61.6% ( 86258486 / 139988826 bytes) ...
Downloaded 71.2% ( 99667706 / 139988826 bytes) ...
Downloaded 81.5% (114078806 / 139988826 bytes) ...
Downloaded 91.5% (128134166 / 139988826 bytes) ...
Downloaded 100.0% (139988826 / 139988826 bytes)
INFO[0055] Unpacking /root/.kusionup/kusion-open@latest/kusion-linux.tgz ...
INFO[0061] Success: latest downloaded in /root/.kusionup/kusion-open@latest
INFO[0061] Default Kusion is set to 'open@latest'$ kusion version
releaseVersion: v0.3.16-9f700718 (open) # ReleaseVersion 带 (open) 后缀的即为开源版本
......
执行 kusionup show 查看目前正在使用的 kusion 版本:
$ kusionup show
| VERSION | ACTIVE |
|---------------|--------|
| alipay@latest | |
| open@latest | * |
执行 kusionup remove $VERSION 删除指定版本:
# 这里假设删除内部 kusion 的最新版本 ↓
$ kusionup remove alipay@latest
INFO[0000] Removing alipay@latest$ kusionup
Use the arrow keys to navigate: ↓ ↑ → ←
? Select a version:▸ open@latest # 已经没有 alipay@latest 的选项了
Kubernetes应用部署
1. 初始化
以 KCL 和 Kusion 的方式部署应用服务,依赖 kusion 工具、Konfig 大库和 Kubernetes 集群。
打开 Konfig 大库项目,进入 appops 目录,初始化 KCL 项目:
#先克隆 Kusion 模型库:
git clone git@code.alipay.com:OpenKus/Konfig.gitcd appops && kusion init
kusion init 命令会提示你输入可能需要的参数,例如项目名称、项目描述,镜像地址等;也可以一路点击 回车 使用默认值。输出类似于:
✔ deployment-single-stack A minimal kusion project of single stack
This command will walk you through creating a new kusion project.Enter a value or leave blank to accept the (default), and press <ENTER>.
Press ^C at any time to quit.✔ project name: deployment-single-stack
✔ project description: A minimal kusion project of single stack
✔ Stack: dev
✔ ClusterName: kubernetes-dev
✔ Image: gcr.io/google-samples/gb-frontend:v4
Created project 'deployment-single-stack'
该项目的目录结构如下:
deployment-single-stack
├── README.md
├── base
│ └── base.k
├── dev
│ ├── ci-test
│ │ └── settings.yaml
│ ├── kcl.yaml
│ ├── main.k
│ └── stack.yaml
├── kusion.yaml
└── project.yaml3 directories, 8 files
2.添加/修改配置
一个应用的配置根据环境进行隔离,环境间的差异化配置存放到每个 Stack 目录中,环境间的通用配置存放在 base 目录中。
配置文件:
- dev/main.k:差异化配置
- base/base.k:通用配置
配置业务容器
appConfiguration: frontend.Server {# 业务容器配置mainContainer = container.Main {# 业务容器名称name = "main"# 环境变量env = [{name = "HOST_NAME"value = "example.com"}]# 端口号配置ports = [{ containerPort = 80 }]}
}
配置监控
通过将 enableMonitoring 设置为 True 使能配置,并添加业务容器端口号配置 8080
import base.pkg.kusion_models.kube.frontend
import base.pkg.kusion_models.kube.frontend.container
import base.pkg.kusion_models.kube.frontend.container.env as e
import base.pkg.kusion_models.kube.frontend.container.port as cp
import base.pkg.kusion_models.kube.frontend.container.probe as p# The application configuration in stack will overwrite
# the configuration with the same attribute in base.
appConfiguration: frontend.Server {# Main container configurationmainContainer: container.Main {name = "prometheus-example-app"ports = [cp.ContainerPort {name = "web"containerPort = 8080}]}enableMonitoring = True
}
配置网络
在样例代码的 dev/main.k 或者 base/base.k 中添加 Service 配置:
import base.pkg.kusion_models.kube.frontend
import base.pkg.kusion_models.kube.frontend.serviceappConfiguration: frontend.Server {# 添加 Service 配置services = [service.Service {name = "app"type = "NodePort"ports = [{"port" = 80}]}]
}
镜像升级
编辑 dev/main.k 中的 image 的值:
import base.pkg.kusion_models.kube.frontendappConfiguration: frontend.Server {# 修改 image 的值为要升级的版本# 修改前:image = "gcr.io/google-samples/gb-frontend:v4"# 修改后:image = "gcr.io/google-samples/gb-frontend:v5"
应用扩缩容
通过编辑 schedulingStrategy.resource 的值来设置业务容器的资源规格。
有两个方法修改资源规格,一种是修改 resource 表达式中 cpu、memory 的值:
import base.pkg.kusion_models.kube.frontend
import base.pkg.kusion_models.kube.frontend.resource as resappConfiguration: frontend.Server {# 修改 resource 表达式中 cpu、memory 的值# 原值:schedulingStrategy.resource = "cpu=100m,memory=100Mi,disk=1Gi"# 新的值(应用扩容):schedulingStrategy.resource = res.Resource {cpu = 500mmemory = 500Midisk = 1Gi}
}
另一种是使用预置的 resource 值替代原值来进行应用扩容:
import base.pkg.kusion_models.kube.frontend
import base.pkg.kusion_models.kube.templates.resource as res_tplappConfiguration: frontend.Server {# 使用预置的 resource 值替代原值来进行应用扩容:# 原值:schedulingStrategy.resource = "cpu=100m,memory=100Mi,disk=1Gi"# 新的值(应用扩容):schedulingStrategy.resource = res_tpl.large
}
上述代码是样例配置,可以根据 SchedulingStrategy 模型定义和实际情况添加自定义配置:
import base.pkg.kusion_models.kube.frontend.resource as resschema SchedulingStrategy:""" SchedulingStrategy represents scheduling strategy.Attributes----------resource: str | res.Resource, default is "1<cpu<2,1Gi<memory<2Gi,disk=20Gi", required.A Pod-level attribute.Main container resource."""resource: str | res.Resource = "1<cpu<2,1Gi<memory<2Gi,disk=20Gi"
差异化配置
base/bask.k 中 Pod Label 的配置:
appConfiguration: frontend.Server {podMetadata.labels = {if __META_CLUSTER_NAME in ["minikube", "kind"]:cluster = __META_CLUSTER_NAMEelse:cluster = "other"}
}
通过以上 KCL 代码,根据Konfig中的魔术变量判断实际部署时的集群名称来选择性的为应用容器中注入标签,来做到被第三方服务识别或者其他目的。
容器启动参数
3. 配置编译
首先进入到项目的 Stack 目录(deployment-single-stack/dev)并执行编译:
cd deployment-single-stack/dev && kusion compile
输出默认保存在 deployment-single-stack/dev/ci-test/stdout.golden.yaml 文件中。
4. 配置生效
完成编译,现在开始下发配置。通过查看 stdout.golden.yaml 文件,可以看到 3 个资源:
- 一个 name 为 deployment-single-stackdev 的 Deployment
- 一个 name 为 deployment-single-stack 的 Namespace
- 一个 name 为 frontend-service 的 Service
可以使用 kubectl apply -f stdout.golden.yaml 直接下发配置, 也可以使用 kusion apply 完成配置编译并下发。
执行命令:
kusion apply
输出类似于:
SUCCESS Compiling in stack dev...Stack: dev Provider Type Name Plan* ├─ kubernetes v1:Namespace deployment-single-stack[0] Create* ├─ kubernetes apps/v1:Deployment deployment-single-stackdev[0] Create* └─ kubernetes v1:Service frontend-service[0] Create✔ yes
Start applying diffs......SUCCESS Creating Namespace/deployment-single-stack SUCCESS Creating Deployment/deployment-single-stackdevSUCCESS Creating Service/frontend-service
Creating Service/frontend-service [3/3] ███████████████████████████████████████████ 100% | 0sApply complete! Resources: 3 created, 0 updated, 0 deleted.
以上就完成了配置生效,可以使用 kubectl 工具检查资源的实际状态。
1、 检查 Namespace
kubectl get ns
输出类似于:
NAME STATUS AGE
argocd Active 59d
default Active 72d
deployment-single-stack Active 10m
2、检查 Deployment
kubectl get deploy -n deployment-single-stack
输出类似于:
NAME READY UP-TO-DATE AVAILABLE AGE
deployment-single-stackdev 1/1 1 1 11m
3、检查 Service
kubectl get svc -n deployment-single-stack
输出类似于:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend-service NodePort 10.111.95.95 <none> 80:30226/TCP 11m
4、检查应用
使用 kubecl 工具,将本机端口 30000 映射到 Service 端口 80
kubectl port-forward svc/frontend-service -n deployment-single-stack-xx 30000:80
打开浏览器访问 http://127.0.0.1:30000
应用场景
1. 单租户场景:应用和环境
在某些通用场景,我们可以对集群的概念进一步进行抽象为环境,一个应用通常需要部署到多个环境,比如测试、预发、生产。在单租户场景中,一个推荐的做法是将 Project 映射为应用,Stack 映射为环境。
概念 | 映射为 |
Project | 应用 |
Stack | 环境 |
2.多租户场景:应用和环境
在多租户场景中且以应用为核心的运维体系中,一种推荐做法是在应用名中添加租户信息,应用名在不同租户间是唯一的,即 Project 映射为多租户间唯一应用,Project 的 Name 是多租户间唯一应用名,Stack 映射为该应用下的环境配置。
概念 | 映射为 |
Project | 多租户间唯一的应用名称 |
Stack | 环境 |
相关文章:

KusionStack使用文档
下载安装 1. 安装 Kusionup 如果想自定义默认安装版本,可以运行下述命令(将最后的 openlatest 替换为你想要默认安装的版本号就就行): curl -s "http://kusion-public.oss-cn-hzfinance.aliyuncs.com/cli/kusionup/script…...

ONLYOFFICE 文档如何与 Alfresco 进行集成
ONLYOFFICE 文档是一款开源办公套件,其是包含文本文档、电子表格、演示文稿、数字表单、PDF 查看器和转换工具的协作性编辑工具。要在 Alfresco 中使用 ONLYOFFICE 协作功能,可以将他们连接集成。阅读本文,了解这如何实现。 关于 ONLYOFFICE…...

PostgreSQL下载路径与安装步骤
PgSQL介绍 PgSQL和MySQL一样是一种关系模型的数据库,全称为PostgreSQL 数据库。 优势:PgSQL是一种可扩展、可靠、可定制的数据库管理系统,具有良好的数据完整性和安全性,支持多种操作系统,包括 Linux、Windows、MacOS …...
如何在PHP中编写条件语句
引言 决策是生活不可缺少的一部分。从平凡的着装决定,到改变人生的工作和家庭决定。在开发中也是如此。要让程序做任何有用的事情,它必须能够对某种输入做出响应。当用户点击网站上的联系人按钮时,他们希望被带到联系人页面。如果什么都没有…...

LLM架构自注意力机制Transformers architecture Attention is all you need
使用Transformers架构构建大型语言模型显著提高了自然语言任务的性能,超过了之前的RNNs,并导致了再生能力的爆炸。 Transformers架构的力量在于其学习句子中所有单词的相关性和上下文的能力。不仅仅是您在这里看到的,与它的邻居每个词相邻&…...

计算机网络 QA
DNS 的解析过程 浏览器缓存。当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的 IP 地址(曾经访问过该域名并且没有清空缓存)系统缓存。当浏览器缓存中无域名对应的 IP 地址时,会自动检测用户计算机…...

安果天气预报 产品介绍
软件介绍版本号 2.0.5 安果天气预报:全世界覆盖,中国定制 想要查找北京、上海、纽约、东京还是巴黎的天气?一款简约的天气预 报应用为你呈现。专注于为用户提供纯净的天气体验,我们不发送任何打扰的通知。包含空气质量、能见度、…...

net start Mysql 启动服务时 ,显示“Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误
一、问题 有时候,输入net start Mysql 启动服务时 mysql>net start Mysql 显示 Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误 二、原因 由于mysql的默认端口是3306,因此在启动服务的时候,如果此端口被占用,就会出…...

DAY24
题目一 啊 看着挺复杂 其实很简单 第一种方法 就是纵轴是怪兽编号 横轴是能力值 看看能不能打过 逻辑很简单 看看能不能打得过 打过的就在花钱和直接打里面取小的 打不过就只能花钱 这种方法就导致 如果怪兽的能力值很大 那么我们就需要很大的空间 所以引出下一种做法 纵…...

Redis过期数据的删除策略
1 介绍 Redis 是一个kv型数据库,我们所有的数据都是存放在内存中的,但是内存是有大小限制的,不可能无限制的增量。 想要把不需要的数据清理掉,一种办法是直接删除,这个咱们前面章节有详细说过;另外一种就是…...

如何使用CSS实现一个拖拽排序效果?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现拖拽排序效果的CSS和JavaScript示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦…...

leetcode 118.杨辉三角
⭐️ 题目描述 🌟 leetcode链接:https://leetcode.cn/problems/pascals-triangle/description/ 代码: class Solution { public:vector<vector<int>> generate(int numRows) {// 先开空间vector<vector<int>> v;v.…...
微服务框架之SpringBoot面试题汇总
微服务框架之SpringBoot面试题汇总 什么是Spring Boot? 多年来,随着新功能的增加,spring变得越来越复杂。Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加spring配置。因此&…...
Promise详解
目录 一、前言:为什么会出现Promise?二、Promise是什么?2.1 Promise的初体验 三、使用Promise的好处?3.1 指定回调函数的方式更加灵活3.2 可以解决回调地狱问题,支持链式调用 四、Promise实例对象的两个属性五、resolve函数以及reject函数六、Promise…...

Oracle 查询(当天,月,年)的数据
Trunc 在oracle中,可利用 trunc函数 查询当天数据,该函数可用于截取时间或者数值,将该函数与 select 语句配合使用可查询时间段数据 查询当天数据 --sysdate是获取系统当前时间函数 --TRUNC函数用于截取时间或者数值,返回指定的…...

什么是梯度下降
什么是梯度下降 根据已有数据的分布来预测可能的新数据,这是回归 希望有一条线将数据分割成不同类别,这是分类 无论回归还是分类,我们的目的都是让搭建好的模型尽可能的模拟已有的数据 除了模型的结构,决定模型能否模拟成功的关键…...

开黑啦kook 机器人开发 PHP swoole Liunx 服务器(宝塔)
安装环境 PHP 拓展 直接使用 宝塔一键安装 (Windows系统不支持) 设置命令行的PHP版本避免执行脚本时 获取不到 swoole 检查swoole是否安装成功 获取官方SDK GitHub - kaiheila/php-bot: 开黑啦机器人的php版本https://github.com/kaiheila/php-bot 配…...

Vue 中hash 模式与 history 模式的区别
hash 模式: - 地址中永远带着 # 号,不美观。 - 兼容性比较好。 - 通过手机 app 分享地址时,如果 app 效验严格,该地址会被标记为不合法。 history 模式: - 地址干净,美观。 - 兼容性和 hash 模式相比…...

Dockerfile推送私有仓库的两个案例
一,编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。 具体要求如下: (1)基于centos基础镜像; (2)指定作者信息; ÿ…...

【指标】指标公式大全,款款经典(建议珍藏)!-神奇指标网
三、指标源码: 1、连续三天高开高走的选股公式 count(o〉ref(c,1)andc>o,3)3; 2、连续3天每天的最低价都比前一天高 count(l〉ref(c,1),3)3; 3、周量缩小50%或40%或n&#x…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...