CNCF 已毕业项目简介之 - argo

CNCF 已毕业项目简介之 - argo

1. 写在最前面

因为处于忙碌的状态而不放弃学习、反思、总结是对自己懒惰的借口。虽然已经断断续续的工作了接近八年,但依然希望自己是那个不忘初心的自己。

最近间歇性的处于迷茫、纠结、内耗的状态,对于新技术的学习,总是早上定了目标,晚上总结的时候发现目标没有实现。如果想要停止这种状态,只能倒逼自己学习,然后输出总结。

注:不要因为没有掌声而丢掉了自己的梦想

1.1 关于 CNCF

CNCF,全称 Cloud Native Computing Foundation(云原生计算基金会),成立于 2015 年 7 月 21 日。

CNCF 的使命: 该基金会的使命是让云原生计算无处不在。CNCF 云原生定义 v1.0 表示,

  • 云原生技术使组织能够在公有云、私有云和混合云等现代动态环境中构建和运行可扩展的应用程序。容器、service meshes、微服务、不可变基础设施和声明式 API 就是这种方式的例证。
  • 这些技术使松散耦合的系统具有弹性、可管理和可观察。与强大的自动化相结合、工程师能够以最少的工作量频繁且可预测地进行高影响力的更改。
  • 云原生计算基金会旨在通过培养和维持开源、供应商中立项目的目的生态系统来推动这种凡事的采用。使用最先进的模式民主化,使每个人都能获得这些创新。

注:技术的产生是有时代背景的,图灵机如此,云原生亦如此。

1.2 CNCF 项目成熟度

在申请成为 CNCF 项目的时候,需要确定项目的成熟度,成熟度的级别包括以下三种:

  • sandbox(初级)
  • incubating(孵化中)
  • graduated(毕业)

是否可以成为 CNCF 项目需要通过技术监督委员会 (TOC),投票采取 fallback 策略,即回退策略,先从最高级别开始,如果 2/3 多数投票都通过的话则确认该级别,如果没有通过的话,则进行下一个级别的投票,如果一直到 sandbox 级别都没有得到 2/3 多数投票通过的话,则拒绝进行 CNCF 项目。

简略投票回退总结示意图:

注:当前所有的 CNCF 项目参考 www.cncf.io/projects/

长篇大论的 CNCF & CNCF 项目背景介绍完成了,可以开始针对感兴趣的已经毕业的项目做简单的用途介绍。由于目前已经毕业的项目比较多,会按照多期文章的方式进行总结。

注:What does not kill me, makes me stronger.

2. 关于 argo

Argo 是在云原生框架下,诞生的 CI/CD 框架,其核心是一个云原生的工作流引擎,基于 Kubernetes 来做编排任务。

注:Open source tools for Kubernetes to run workflows, manage clusters, and do GitOps right.

2.1 配置 argo 的前置步骤

argo 是基于 k8s 操作的,所以在操作前你需要在本地有一套 k8s 的环境。

2.1.1 minikube

minikube 是本地 k8s,专注于让 k8s 易于学习和开发。

  • 安装:

    ruby 复制代码
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
    sudo install minikube-darwin-amd64 /usr/local/bin/minikube
  • 启动:

    sql 复制代码
    minikube start
  • UI

    复制代码
    minikube dashboard

完成以上步骤的效果图如下:

注:以上使用均以 macOS 操作系统为例进行,更多 minikube 的命令使用及介绍见参考资料

完成 argo 使用的极简 k8s 环境后,就可以开始部署 argo 相关的服务。

2.1.2 基于 minikube 安装 argo

  • 安装:

    ruby 复制代码
    kubectl create namespace argo
    kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v<<ARGO_WORKFLOWS_VERSION>>/install.yaml
  • 指定 auth 为 server 模式

    css 复制代码
    kubectl patch deployment \
      argo-server \
      --namespace argo \
      --type='json' \
      -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": [  "server",  "--auth-mode=server"]}]'

    注:这个步骤必须增加,否则使用 client auth 模式,会导致进入 argo 的 ui 一直报 401

  • 打开端口转发访问 argo ui:

    bash 复制代码
    kubectl -n argo port-forward deployment/argo-server 2746:2746

    注:argo-server 使用了自签发证书,打开遇到 TLS 错误,忽略就好

完成上述步骤的效果图如下:

2.2 argo workflow 操作

2.2.1 配置时遇到的坑

在最开始尝试最简单的 hello world 的 example workflow 时,一直会报下面的错误:

vbnet 复制代码
Error (exit code 1): pods "xxx" is forbidden: User "system:serviceaccount:my-namespace:default" cannot patch resource "pods" in API group "" in the namespace "my-namespace"

在使用 google 之后发现,很多人在使用的时候也遇到了类似的问题,解决方案如下:

scss 复制代码
kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default

注:以上的解决方案,在我遇到的 case 里是生效的,也有人反馈遇到类似的问题,同样的操作,但是没有解决

2.2.2 配置 workeflow

  • workflow 的 steps 运行效果:
markdown 复制代码
> 注:配置的 example 可以官网直接查,此处只展示配置好运行成功的效果图
  • DAG 图的 workflow 运行效果:
  • Loops 的 workflow 运行效果图:
  • 高端 workflow 用法 --- HTTP Template 执行 http 请求:

基于如何搭建环境及安装官网示例跑了极简的几个例子,感受下来发现 argo 的 ui 设计相较于 jenkins 更友好,并且其与 k8s 的结合使用使 ci/cd 的使用范围更加广泛。

3. 碎碎念

本来只打算学习一下 argo 这类 CNCF 项目的基本概念及使用场景,但是总觉得不上手实践的话更像是纸上谈兵,意义不大,所以浅浅的整理了一篇上手入门文章。

  • 心平能愈三千疾,凡事拈花自在笑
  • What does not kill me, makes me stronger.
  • 晚风吹人醒,万事藏于心,我没说不公平,也没说苦,我说我知道了。

4. 参考资料

相关推荐
薯条不要番茄酱1 小时前
【SpringBoot】从零开始全面解析Spring Ioc&DI (一)
spring boot·后端·spring
奋斗的袍子0072 小时前
Spring Boot 拦截器:解锁5大实用场景
java·spring boot·后端·拦截器·interceptor
Java&Develop6 小时前
springboot 集成kerberos 用户认证 获取域账号
java·spring boot·后端
会飞的架狗师6 小时前
【SpringBoot实战指南】使用 Spring Cache
spring boot·后端·spring·缓存
努力也学不会java8 小时前
【RabbitMQ】 RabbitMQ高级特性(二)
java·分布式·后端·中间件·rabbitmq
头发那是一根不剩了10 小时前
Spring Boot 注解 @ConditionalOnMissingBean是什么
java·spring boot·后端
进击的愤怒11 小时前
GIM发布新版本了 (附rust CLI制作brew bottle流程)
开发语言·后端·rust
x-cmd11 小时前
x-cmd install | cargo-selector:优雅管理 Rust 项目二进制与示例,开发体验升级
开发语言·后端·rust·cargo·示例
smileNicky12 小时前
SpringBoot系列之OpenAI API 创建智能博客评论助手
java·spring boot·后端
程序员阿明14 小时前
spring boot 实现rtsp视频推流
spring boot·后端·音视频