ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

把“部署应用“写成一份 YAML:KubeVela 深度实战指南

把“部署应用“写成一份 YAML:KubeVela 深度实战指南 把部署应用写成一份 YAMLKubeVela 深度实战指南【免费下载链接】kubevelaThe Modern Application Platform.项目地址: https://gitcode.com/gh_mirrors/ku/kubevelaKubeVela 是一个把应用交付做成声明式工作流的现代化应用平台它基于 Open Application ModelOAM一种描述应用如何组成、如何部署的开放标准让你能用一份 YAML 描述清楚应用由哪些组件构成、按什么顺序发布、发到哪些集群其余交给控制器去执行。这篇文章会从一次真实的部署经历讲起带你理解 KubeVela 的核心设计并亲手跑通安装、部署、版本回滚与生产调优的全过程。从一个部署翻车的夜晚说起想象一下这个场景你维护着一个前后端分离的微服务应用上线前要手动执行十几条命令——先改数据库、再起后端、等健康检查通过、最后切流量到前端。操作多、依赖强、顺序错一步就翻车。你试着把这些步骤写进 CI 脚本结果脚本越写越长环境一换就要大改。这正是 KubeVela 要解决的问题。它把部署流程本身变成了一种可编程、可版本化的资源你描述最终要长成什么样和按什么顺序长KubeVela 负责让集群变成那样。第一步用 5 分钟把平台跑起来准备一个 Kubernetes 集群KubeVela 的控制器本质上是运行在 Kubernetes 里的一个 Operator即一种盯住自定义资源并自动调谐的程序所以你需要一个可用的集群任意主流发行版都可以kubectl cluster-info # 确认集群可达 kubectl get nodes # 确认节点就绪 helm version # 确认 Helm 3 已安装用 Helm 安装控制平面控制平面组件统一部署在kubevela-system命名空间helm repo add kubevela https://charts.kubevela.io/stable helm repo update helm install kubevela kubevela/kubevela \ --namespace kubevela-system \ --create-namespace \ --wait装完后看一眼 Pod 是否全部 Runningkubectl get pods -n kubevela-system安装 CLIvelaCLI 不是必需品但它能让你用几条命令完成查看状态、对比版本、跟踪工作流等操作强烈建议装上curl -fsSl https://kubevela.io/script/install.sh | bash vela version想从源码构建的同学可以 clone 仓库后自行编译仓库地址https://gitcode.com/gh_mirrors/ku/kubevelaCLI 入口在 references/cli/控制器入口在 cmd/core/main.go。平台就绪后我们来写第一份应用描述。能力一一份 YAML说清应用长什么样KubeVela 用Application资源核心类型定义在 apis/core.oam.dev/v1beta1/application_types.go把组件、运维能力和发布策略打包在一起。来看仓库自带的最小示例docs/examples/application/application-sample.yamlapiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: application-sample spec: components: - name: myweb type: worker # 用系统内置的 worker 组件类型 properties: image: busybox cmd: [sleep, 1000] traits: # 运维能力副本、边车、服务暴露 - type: scaler properties: replicas: 10 - type: sidecar properties: name: sidecar-test image: nginx - type: kservice properties: http: server: 80提交即部署vela up -f docs/examples/application/application-sample.yaml这条命令背后发生了什么可以结合这张图理解 KubeVela 在 CI/CD 链路里的位置——左侧 CI 产出代码和配置中间是 KubeVela 的**渲染Render→ 编排Orchestrate→ 部署Deploy**三段式流水线右侧是各类目标环境这里有个新手容易困惑的点type: webservice、type: scaler这些类型是谁定义的答案是定义类资源——ComponentDefinition组件定义和TraitDefinition运维能力定义。它们把如何把参数渲染成 Deployment / Service / Ingress的逻辑封装起来这也是 KubeVela 可扩展性的根基。安装时系统已经预置了一批内置定义可以用vela component list和vela trait list查看。能力二部署顺序交给工作流而不是祈祷多组件应用往往有严格的上线顺序先数据库、再后端、最后前端。手写脚本维护这种顺序很痛苦而 KubeVela 把它变成了spec.workflow里的一段声明。仓库里的依赖示例docs/examples/workflow/depends-on-app/app.yaml演示了步骤之间的依赖写法apiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: kruise spec: components: - name: kruise type: helm properties: chart: ./charts/kruise/v0.9.0 repoType: git workflow: steps: - name: check-flux type: depends-on-app # 先确认另一个应用已就绪 properties: name: fluxcd namespace: vela-system - name: apply-kruise type: apply-component # 再执行真正的部署 properties: component: kruise工作流步骤由WorkflowStepDefinition定义见 apis/core.oam.dev/v1beta1/workflow_step_definition.go内置了apply-component、deploy2env、health-check、notification、read-object等常用步骤还可以用 CUE 或 shell 脚本自定义步骤。执行内部是控制器—工作流管理器—任务管理器三层的闭环落到日常操作上工作流给开发体验带来的变化是步骤失败会自动重试重试次数可在 Helm values 里配置卡住时可以暂停从容排查而不是直接回滚每一步的进度和日志可查vela workflow status app、vela workflow logs app --step step支持条件分支、超时、步骤分组对应示例见 docs/examples/workflow/app-with-if/ 和 docs/examples/workflow/step-group/。如果你做金丝雀发布工作流配合rollout与canary-traffic两个 trait可以在不写任何脚本的情况下完成分批放量与灰度流量切换完整示例就在 docs/examples/workflow/canary-rollout/。能力三每次发布都有快照回滚不再靠翻 Git 记录KubeVela 每次应用变更都会生成一个ApplicationRevision应用修订版本它把当时的组件定义、运维能力定义、工作流定义连同参数一起做成快照。所以回滚到某个历史版本意味着把当时整套定义原样重放而不是只换镜像——这比 GitOps 工具通常做的内容回滚更彻底。日常操作vela revision list microservices-demo # 查看版本历史 vela revision get microservices-demo # 查看某个版本的详细信息仓库里对应的版本管理设计文档在 docs/examples/application/versioning.md。版本保留数量由 Helm 参数applicationRevisionLimit控制默认只留 2 个生产环境建议调大以留足回滚余量后面会讲。能力四一套配置铺到多集群多云多集群部署在 KubeVela 里不是高级功能而是平台的一等公民。通过topology策略声明目标集群通过override策略按集群差异化调整参数KubeVela 会自动完成分发apiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: example-app spec: components: - name: express-server type: webservice properties: image: crccheck/hello-world port: 8000 policies: - type: topology name: topology properties: clusters: [cluster-1, cluster-2]常见的测试环境验证 → 预发灰度 → 生产放量渐进式发布本质上就是多套topologyoverride策略的组合配合工作流按阶段执行。多集群的参考架构图在 docs/examples/multicluster/ref-arch.jpg相关策略实现位于 pkg/policy/。能力五0.5C1G 的轻量底座 无限扩展KubeVela 的整个控制平面可以只跑一个 Pod、占用约 0.5 核 1G 内存却足以管理上千个应用——这得益于它把大多数逻辑放在了定义层控制器本体保持精简。扩展有两条路定义扩展用 CUE 语言一种配置即代码的描述语言编写自定义组件/运维能力/工作流步骤写入ComponentDefinition等定义资源。仓库的 CUE 模板目录在 vela-templates/definitions/里面能看到内置定义的写法。插件扩展通过vela addon生态安装现成能力vela addon list # 查看可用插件 vela addon enable observability # 一键启用监控面板再叠加一层角色分离视角就更清楚这套设计的价值了平台工程师定义怎么部署应用开发者只声明我要什么两者各司其职互不阻塞。生产落地照抄这 5 个调优项就够了前面聊的是能力这一段聊上线前必须改的东西。KubeVela 的 Helm values 集中在 charts/vela-core/values.yaml下面几个参数请务必按生产环境调整1. 版本保留数别让回滚无票可买applicationRevisionLimit: 10 # 默认只有 2上线前调大到 10 左右 definitionRevisionLimit: 52. 并发与同步跟着集群规模走concurrentReconciles: 8 # 控制器并发调谐数默认 4 controllerArgs: reSyncPeriod: 5m # 定期重新同步周期需要更快的状态收敛可调小3. 失败处理暂停而不是默默重试到天荒地老workflow: enableSuspendOnFailure: true # 失败即暂停方便现场排查 step: errorRetryTimes: 5 # 默认 10 次可按需调小4. 资源配额从够用到稳resources: requests: cpu: 250m memory: 256Mi limits: cpu: 500m memory: 1Gi5. 大规模场景分片架构当应用规模大到单控制器吃紧时KubeVela 支持主从分片master 实例负责各类定义和调度多个 slave 实例各自分管一组应用通过shard-id划分实现水平扩展分片设计文档在 design/vela-core/vela-core-sharding-arch.jpg 同目录配合featureGates如applyOnce、enableInMemoryWorkflowContext还能进一步压性能。这些开关在 pkg/features/controller_features.go 里都有定义按需开启即可。踩坑备忘三个高频问题的一线排查思路Pod 一直 Pending 或反复重启先kubectl describe pod name -n ns看事件再查资源配额kubectl describe resourcequota最后看容器日志定位应用层问题。大多数时候不是 KubeVela 的问题而是资源或镜像的问题。工作流步骤卡在 Running用vela workflow status app确认卡在哪一步再vela workflow logs app --step step看该步日志如果开启了失败暂停先检查是不是上一步的条件依赖没满足。多集群里某个集群没部署上先vela cluster list确认集群注册与心跳正常再针对该集群查看应用状态与资源配额。注意topology策略里集群名必须与注册名完全一致。要点清单核心心智KubeVela 把部署从命令/脚本抽象成了声明式资源你描述最终状态与顺序平台负责变成现实。一份 YAML 交付Application聚合组件、trait、工作流、策略vela up一条命令完成渲染-编排-部署。工作流是灵魂步骤依赖、失败重试、暂停恢复、金丝雀发布都在这层实现别再写胶水脚本了。版本快照兜底每次变更生成ApplicationRevision回滚是整套定义重放比只改镜像更可靠。多集群是标配topologyoverride策略解决跨集群分发与差异化配置。轻量但可扩展0.5C1G 起步CUE 定义与 addon 插件两条扩展路径。上线前必调applicationRevisionLimit、concurrentReconciles、enableSuspendOnFailure、资源配额四个参数先改到位。下一步建议先在测试集群把 docs/examples/ 下的示例逐个跑一遍尤其是 canary-rollout 和 multicluster然后尝试用 CUE 写一个自己的组件定义体会定义一次、处处复用最后按本文的调优清单走一遍生产化检查。等你对渲染-编排-部署的闭环有手感之后再去看 design/ 目录下的设计文档会发现每一篇都能读懂了。【免费下载链接】kubevelaThe Modern Application Platform.项目地址: https://gitcode.com/gh_mirrors/ku/kubevela创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表