KusionStack使用文档

news2024/11/16 1:58:57

下载安装

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.git

cd 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.yaml

3 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 configuration
    mainContainer: 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.service

appConfiguration: frontend.Server {
    # 添加 Service 配置
    services = [
        service.Service {
            name = "app"
            type = "NodePort"
            ports = [
                {
                    "port" = 80
                }
            ]
        }
    ]
}

镜像升级

编辑 dev/main.k 中的 image 的值:

import base.pkg.kusion_models.kube.frontend

appConfiguration: 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 res

appConfiguration: frontend.Server {
    # 修改 resource 表达式中 cpu、memory 的值
    # 原值:schedulingStrategy.resource = "cpu=100m,memory=100Mi,disk=1Gi"
    # 新的值(应用扩容):
    schedulingStrategy.resource = res.Resource {
        cpu = 500m
        memory = 500Mi
        disk = 1Gi
    }
}

另一种是使用预置的 resource 值替代原值来进行应用扩容:

import base.pkg.kusion_models.kube.frontend
import base.pkg.kusion_models.kube.templates.resource as res_tpl

appConfiguration: 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 res

schema 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_NAME
        else:
            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-stackdev
 SUCCESS  Creating Service/frontend-service
Creating Service/frontend-service [3/3] ███████████████████████████████████████████ 100% | 0s

Apply 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

环境

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spark中排查Premature EOF: no length prefix available

报错信息 /07/22 10:20:28 WARN DFSClient: Error Recovery for block BP-888461729-172.16.34.148-1397820377004:blk_15089246483_16183344527 in pipeline 172.16.34.64:50010, 172.16.34.223:50010: bad datanode 172.16.34.64:50010 [DataStreamer for file /bdp/data/u9…

java学习-阻塞队列原理

JAVA 阻塞队列原理 阻塞队列&#xff0c;关键字是阻塞&#xff0c;先理解阻塞的含义&#xff0c;在阻塞队列中&#xff0c;线程阻塞有这样的两种情况&#xff1a; 当队列中没有数据的情况下&#xff0c;消费者端的所有线程都会被自动阻塞&#xff08;挂起&#xff09;&#x…

Linux的软连接和硬链接

1.创建链接 首先ln --help 可以看到默认创建的链接是硬链接。若是要创建符号链接则需要使用-s 参数 格式是&#xff1a; ln 源文件 链接文件 或者 ln -s 源文件 链接文件 2.区别 首先我创建了a和b文件。 然后又分别建立了a的硬链接a2&#xff0c;b的符号链接b2 由图中即可看…

角色属性04----HP

添加两个变量&#xff0c;使用任意伤害事件来扣除HP&#xff0c;蓝图的方式和加速跑差不多 找到一个死亡动画&#xff0c;先ue4重定向ue5小银人&#xff0c;在ue5重定向ue4给低模人物 进入动画&#xff0c;创建hit把死亡动画给它&#xff0c;同时创建一个变量is_hit作为状态转换…

全国最大规模量子计算云平台重磅发布

8月19日&#xff0c;在2023中国算力大会主论坛上&#xff0c;中国移动携手中国电科发布“量子计算云平台”。这是目前国内最大规模的量子计算云平台&#xff0c;也是业界第一次实现“量子与通用算力统一纳管混合调度”的系统级平台。该发布标志着我国量子计算正在逐步走向实用化…

不要再错过晓程科技【300139】了-神奇指标网

8.24不要再错过晓程科技【300139】了 虽然 晓程科技的庄家操盘不怎么的&#xff0c;经常诱多发套吸筹。但是通过神奇指标系统来操盘基本可以完美吃到这几波冲高。包括今天一开盘就入场了&#xff0c;明天有调整的话看情况还可以低吸一口也是稳的。 我们看到今天5月到至今在这个…

服务器数据恢复-AIX PV完整镜像方法以及误删LV的数据恢复方案

AIX中的PV相当于物理磁盘&#xff08;针对于存储来说&#xff0c;PV相当于存储映射过来的卷&#xff1b;针对操作系统来说&#xff0c;PV相当于物理硬盘&#xff09;&#xff0c;若干个PV组成一个VG&#xff0c;AIX可以将容量不同的存储空间组合起来统一分配。AIX把同一个VG的所…

【安装】MongoDB7安装MongoSH命令

MongoDB Shell Download | MongoDB 下载之后 解压 配置环境变量即可 以前使用 mongo命令 改为 mongosh 官方说明 安装mongosh MongoDB 中文手册 | MongoD Manual | 中文操作手册 | MongoDB 最新版 (whaleal.com) 安装 mongosh — MongoDB Shell

suricata安装以及流量抓包

suricata安装 先安装wazuh的agent上篇博客有提到。Wazuh安装及使用_无所不知的神奇海螺的博客-CSDN博客 与wazuh联动&#xff0c;所以查看wazuh官方文档Network IDS integration - Proof of Concept guide Wazuh documentation 配置要求 跟着配置一步步走就行 到这一步&am…

主力资金指标公式-神奇指标网

主力资金&#xff1a; VA1:100-3*SMA((CLOSE-LLV(LOW,65))/(HHV(HIGH,80)-LLV(LOW,65))*100,20,1)2*SMA(SMA((CLOSE-LLV(LOW,65))/(HHV(HIGH,80)-LLV(LOW,65))*100,20,1),15,1); VARA:EMA(VAR9,3); VARB:(VAR9-VARA)/2; 大盘资金:VARB,COLORGREEN,LINETHICK2; …

聚水潭无需API开发连接伙伴云,实现新增售后申请单自动汇总到表单

聚水潭用户使用场景&#xff1a; 电商行业通常使用聚水潭作为企业的ERP系统。每当聚水潭有新的售后申请时&#xff0c;企业人员常常需要将订单信息手动复制并录入到伙伴云存储、汇总&#xff0c;包括订单单号、状态、金额等20多项信息。这种人工手动复制和录入的方式容易导致订…

vue直接使用高德api

第一步&#xff1a;在index.html 引入 <script src"https://webapi.amap.com/maps?v2.0&key你的key"></script>第二步&#xff1a;在你需要地图的时候 放入 <template><div style"width: 200px; height: 200px"><div id&q…

浅谈电力电容器的在线监测技术与选型

安科瑞 华楠 【摘要】传统的电力电容器检测通常为断电,离线进行,影响了生产。已有的电力电容器在线诊断技术集中于对电容量、介质损耗角的测量,检测结果滞后于故障的发生,且检测结果并不理想。主要针对电力系统中高压电力电容器的常见故障,对其故障中发生放电现象的机理进行了…

【腾讯云 Cloud studio 实战训练营】基于Claude快速完成Excel工资自动核算

目录 1 什么是Cloud Studio&#xff1f;2 注册与代码管理2.1 账号注册2.2 Git关联 3 实战&#xff1a;Excel工资自动核算3.1 创建项目与配置3.2 “念咒师”Claude GPT3.3 代码编写与运行 4 个人开发感受 1 什么是Cloud Studio&#xff1f; Cloud Studio是腾讯云为开发者提供的…

超越界限:大模型应用领域扩展,探索文本分类、文本匹配、信息抽取和性格测试等多领域应用

超越界限&#xff1a;大模型应用领域扩展&#xff0c;探索文本分类、文本匹配、信息抽取和性格测试等多领域应用 随着 ChatGPT 和 GPT-4 等强大生成模型出现&#xff0c;自然语言处理任务方式正在逐步发生改变。鉴于大模型强大的任务处理能力&#xff0c;未来我们或将不再为每…

C#获取DataTable的前N行数据然后按指定字段排序

获取DataTable的前N行数据然后按指定字段排序 可以使用以下三种代码&#xff1a; 第一种&#xff1a;使用Linq DataTable dtLast dataTable.AsEnumerable().Take(count).OrderBy(dataRow > Convert.ToInt32(dataRow["Sequence"])).CopyToDataTable(); 第二种…

Mysql-InnoDB记录结构

一、InnoDB简介 InnoDB 采取的方式是&#xff1a;将数据划分为若干个页&#xff0c;以页作为磁盘和内存之间交互的基本单位&#xff0c;InnoDB中页的大小一般为 16 KB。也就是在一般情况下&#xff0c;一次最少从磁盘中读取16KB的内容到内存中&#xff0c;一次最少把内存中的1…

Hadoop入门机安装hadoop

0目录 1.Hadoop入门 2.linux安装hadoop 1.Hadoop入门 定义 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行高速运算和存储。 优势 高可靠性&#xff1a;Hadoop底层维护多…

智慧互联,有序充电--多场景充电

企业微电网能效及充电管理解决方案 安科瑞 崔丽洁 1、企业需求&#xff08;目的地充电&#xff09; 站在企业的角度&#xff0c;除了要主动承担碳达峰、碳中和的社会责任&#xff0c;也需要考虑自身的经营和利润&#xff0c;需要结合企业的现状进行改造 企业微电网平台——与…

OLED透明屏直销:高性价比与便捷购买的首选

OLED透明屏作为一项创新的显示技术&#xff0c;其透明度和高清晰度的特点使其在各个领域得到了广泛应用。 在购买OLED透明屏时&#xff0c;传统的渠道如经销商和代理商可能增加额外的成本和环节。 然而&#xff0c;OLED透明屏的直销模式为消费者提供了更便捷和高性价比的购买…