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 项目参考 https://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 易于学习和开发。

  • 安装:

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

    minikube start
    
  • UI

    minikube dashboard
    

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

在这里插入图片描述

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

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

2.1.2 基于 minikube 安装 argo
  • 安装:

    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 模式

    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:

    kubectl -n argo port-forward deployment/argo-server 2746:2746
    

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

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

在这里插入图片描述

2.2 argo workflow 操作

2.2.1 配置时遇到的坑

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

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 之后发现,很多人在使用的时候也遇到了类似的问题,解决方案如下:

kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default

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

2.2.2 配置 workeflow
  • workflow 的 steps 运行效果:

    在这里插入图片描述

    注:配置的 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. CNCFCoreDNS

    2024-03-13 01:30:03       36 阅读
  2. argcargv参数

    2024-03-13 01:30:03       42 阅读
  3. CNCFK8s外传

    2024-03-13 01:30:03       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-13 01:30:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-13 01:30:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-13 01:30:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-13 01:30:03       20 阅读

热门阅读

  1. 【More Effective C++】条款24:了解虚函数的成本

    2024-03-13 01:30:03       29 阅读
  2. html 如何引入 百度地图

    2024-03-13 01:30:03       20 阅读
  3. 前端面试练习24.3.11

    2024-03-13 01:30:03       20 阅读
  4. MYSQL环境搭建面试题

    2024-03-13 01:30:03       22 阅读
  5. PTA L1-009 N个数求和(C++)

    2024-03-13 01:30:03       25 阅读
  6. url中可以包含@吗

    2024-03-13 01:30:03       21 阅读
  7. docker学习笔记——对数据卷的一些简单命令

    2024-03-13 01:30:03       20 阅读
  8. Activiti工作流引擎:流程实例名称模糊查询

    2024-03-13 01:30:03       22 阅读