1. 什么是Application

  • ArgoCD的两个核心概念为Application和Project,他们可分别基于Application CRD和AppProject CRD创建;
  • 核心组件: Application Controller以及相关的一组CRD
  • 从本质来说,Application包含两个部分:
  • 一组在kubernetes上部署和运行某个应用的资源配置文件
  • 这组资源相关的source和destination
  • Source: 定义从何处获取资源配置文件,包括repoURL和配置文件所在的目录
  • Destination定义这组资源配置文件中定义的对象应该创建并运行于何处,其中的cluster可以是Argocd所在集群之外的其他集群。

1.0 什么是基础不可变设施

GitOps当中是这样定义的。应用都需要运行在多台机器上,它们被组织成不同的环境,例如开发环境、测试环境和生产环境等等。需要将相同的应用部署到不同的机器上。通常需要系统管理员确保所有的机器都处于相同的状态。接着所有的修改、补丁、升级需要在所有的机器中进行。随着时间的推移,很难再确保所有的机器处于相同的状态,同时越来越容易出错。这就是传统的可变架构中经常出现的问题。这时我们有了不可变架构,它将整个机器环境打包成一个单一的不可变单元,而不是传统方式仅仅打包应用。这个单元包含了之前所说的整个环境栈和应用所有的修改、补丁和升级,这就解决了前面的问题。 —— 摘自 InfoQ 的《关于不可变架构以及为什么需要不可变架构》作者 百占辉

1.1 Application核心组件

  • ArgoCD Application还存在两个非常重要的属性: Sync Status和Health Status

Synced:一致

OutOfSync:不一致

  • Health Status: Application的健康状态,是各资源的健康状态的聚合信息

Healthy:健康

Degraded:降级

Missing:缺失,即在GitRepo中存在资源定义,但并未完成部署

2. Argo Application的创建

ArgoCD可以基于WEB-UI的方式来进行应用的发布,也可以基于Configuration List的方式去部署应用。

2.1 查看ArgoCD支持的API-Resources

kubectl api-resources --api-group=argoproj.io
NAME SHORTNAMES APIVERSION NAMESPACED KIND
applications app,apps argoproj.io/v1alpha1 true Application
applicationsets appset,appsets argoproj.io/v1alpha1 true ApplicationSet
appprojects appproj,appprojs argoproj.io/v1alpha1 true AppProject

2.2 查看ArgoCD的字段属性

explain可以分级查看字段属性

[root@c-k-m1-10 argocd]# kubectl explain application
KIND: Application
VERSION: argoproj.io/v1alpha1 DESCRIPTION:
Application is a definition of Application resource. FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources kind <string>
Kind is a string value representing the REST resource this object
represents. Servers may infer this from the endpoint the client submits
requests to. Cannot be updated. In CamelCase. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds metadata <Object> -required-
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata operation <Object>
Operation contains information about a requested or running operation spec <Object> -required-
ApplicationSpec represents desired application state. Contains link to
repository with application definition and additional parameters link
definition revision. status <Object>
ApplicationStatus contains status information for the application

2.3 准备git源

GitOps中定义以特定Repository(配置仓库)为应用程序部署和管理的唯一可信源,该Repository负责定义Application的期望状态。本次测试使用gitee作为唯一的可信源。支持更多的配置管理工具例如helm、kustomize、jsonnet等;本次使用kubernetes原生的配置清单包含如下一个namespace一个裸Pod以及一个Service。

kind: Namespace
apiVersion: v1
metadata:
name: hello
apiVersion: v1
kind: Service
metadata:
name: hello-svc
namespace: hello
spec:
type: NodePort
selector:
app: hello
ports:
- name: http # 端口名称
protocol: TCP # 协议类型,目前支持TCP、UDP、SCTP默认为TCP
port: 80 # Service的端口号
targetPort: 8080 # 后端目标进程的端口号
nodePort:
apiVersion: v1
kind: Pod
metadata:
name: hello
namespace: hello
labels:
app: hello
spec:
containers:
- name: hello
image: lihuahaitang/helloworld:v1
imagePullPolicy: IfNotPresent

2.4 编辑资源配置清单;

[root@c-k-m1-10 argocd]# cat application-hello.yaml
apiVersion: argoproj.io/v1alpha1 # 定义的API版本,可通过API-Resources查看
kind: Application # 定义的资源类型
metadata:
name: hello # 名称
namespace: argocd # argocd所在的名称空间
spec:
project: default # 指明所属的项目是default
source: # 配置仓库及相关的配置访问的方法
repoURL: https://gitee.com/good-news/apps.git # 资源配置清单的Git的仓库源地址
targetRevision: HEAD # 期望基于哪个修订版本来部署
path: kubernetes # Git仓库的子目录路径
destination: # 应用程序要部署到的目标位置
server: https://kubernetes.default.svc # 目标kubernetes集群的API-Server访问入口,这里为本地集群
namespace: hello # 目标应用要部署的名称空间
syncPolicy: # 同步策略,如果不写默认就是Manual为手动同步
automated: null # 为自动同步策略

2.5 查看应用状态

这里的应用状态为未同步,因为我们未指定同步策略为自动。默认为手动同步;

[root@c-k-m1-10 argocd]# argocd app list
WARN[0000] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
argocd/hello https://kubernetes.default.svc hello default <none> <none> https://gitee.com/good-news/apps.git kubernetes HEAD

2.6 手动执行同步策略

[root@c-k-m1-10 argocd]# argocd app sync hello
WARN[0000] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
2023-03-25T22:00:35+08:00 Service default hello Unknown Healthy
2023-03-25T22:00:37+08:00 Service default hello Unknown Healthy ignored (requires pruning)
2023-03-25T22:00:37+08:00 Namespace hello hello Running Synced namespace/hello created
2023-03-25T22:00:37+08:00 Service hello hello-svc Running Synced service/hello-svc created
2023-03-25T22:00:37+08:00 Pod hello hello Running Synced pod/hello created
2023-03-25T22:00:37+08:00 Service default hello OutOfSync Healthy ignored (requires pruning)
2023-03-25T22:00:37+08:00 Service hello hello-svc OutOfSync Healthy service/hello-svc created
2023-03-25T22:00:37+08:00 Pod hello hello Synced Progressing pod/hello created
2023-03-25T22:00:37+08:00 Namespace hello Synced Name: argocd/hello
Project: default
Server: https://kubernetes.default.svc
Namespace: hello
URL: https://argocd.k8s.local/applications/hello
Repo: https://gitee.com/good-news/apps.git
Target: HEAD
Path: kubernetes
SyncWindow: Sync Allowed
Sync Policy: <none>
Sync Status: OutOfSync from HEAD (c916463)
Health Status: Healthy Operation: Sync
Sync Revision: c916463463c2244ae78ba442a0de764b743a493b
Phase: Succeeded
Start: 2023-03-25 22:00:34 +0800 CST
Finished: 2023-03-25 22:00:37 +0800 CST
Duration: 3s
Message: successfully synced (all tasks run) GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Service default hello OutOfSync Healthy ignored (requires pruning)
Namespace hello hello Running Synced namespace/hello created
Service hello hello-svc OutOfSync Healthy service/hello-svc created
Pod hello hello Synced Healthy pod/hello created

2.7 查看名称空间的Pod以及Service

[root@c-k-m1-10 argocd]# kubectl get po,svc -n hello
NAME READY STATUS RESTARTS AGE
pod/hello 1/1 Running 0 5m22s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/hello-svc NodePort xx.xx.xx.xx <none> 80:32618/TCP 5m22s

2.8 WEBUI查看应用状态

2.9 尝试访问应用

sh-3.2# curl -I http://xx.xx.xx.xx32618/
HTTP/1.1 200 OK
Date: Sat, 25 Mar 2023 14:07:57 GMT
Connection: keep-alive

ArgoCD实践之基于配置清单创建Application的更多相关文章

  1. 从一份配置清单详解 Nginx 服务器配置

      概述 在前面< Nginx 服务器开箱体验> 一文中我们从开箱到体验,感受了一下 Nginx 服务器的魅力.Nginx 是轻量级的高性能 Web 服务器,提供了诸如 HTTP 代理和反 ...

  2. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  3. puppet的配置清单书写

    puppet的配置清单书写 1使用数组,合并同类的 例如你想安装很多软件,如果分开来写的话,很麻烦,不简洁,这时我们可以使用数组来完成 以前我们这样来写 class packages{ package ...

  4. Spring Cloud Zuul 2(基于配置中心的动态API网关)

    在大体了解了API Zuul 和 配置中心Config后我们来尝试完成一个基于配置中心的动态API网关 创建项目 命名为api-gateway-dynamic-route并加入config 和 Zuu ...

  5. 分布式架构下的会话追踪实践【基于Cookie和Redis实现】

    分布式架构下的会话追踪实践[基于Cookie和Redis实现] 博客分类: NoSQL/Redis/MongoDB session共享rediscookie分布式架构session 在单台Tomcat ...

  6. Spring Boot Dubbo applications.properties 配置清单

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 与其纠结,不如行动学习.Innovate ,And out execute ! 』 本文 ...

  7. (4opencv)如何基于GOCW,创建一个实时视频程序

    直接使用提供的代码框架进行修改,是最快得到效果的方法:但是这样的灵活性较差,而且真正的程序员从来都不会停滞在这一步:我们需要的是"将框架解析到最小化.理清楚每个构建之间的关系",只 ...

  8. FI配置清单-概要

    1.编辑公司代码 T-Code:OX02 路径:IMG >企业结构Enterprise >定义Definition >财务会计 Financial Accounting>编辑, ...

  9. [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)

    本文转自:http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Ac ...

  10. Struts2之基于配置的字段校验

    上一篇struts2之输入校验介绍了手动完成输入校验,也即依靠重写validate方法和validateXxx方法,指定请求某个方法时对传入的参数进行校验. 本篇介绍基于配置的字段校验.下面是登录的常 ...

随机推荐

  1. win10查看笔记本电池性能

    要生成电池报告,可以按Windows + R,窗口中输入 cmd 回车. 在提示符处输入: Powercfg /batteryreport,回车. 就可以在C盘看到性能报告文件.

  2. Word技巧:ALT+X快捷键

    Word技巧:ALT+X快捷键 在Word中输入数字,然后使用键盘快捷键「ALT + X」,即可快速生成一个文字图形. 部分数字的对比参照: 2564 ╤ 2582 ▂ 2600 2618 ☘ 256 ...

  3. Jmeter八、关联

    关联的方式:1.正则2.Xpath 后置 处理器→正则表达式提取器 正则表达式:(.*) 模板$1$ 匹配数字:0代表随机,-1代表所有 缺省值为空即可

  4. python之变量

    什么是变量? 用来记录事务的变化状态,计算机模拟人,就需要具备人类某一个功能.你通过记录我的名字年龄等一系列的身份信息,以此和我进行匹配,确定我就是phoebe这个人. 为什么有变量? 游戏里的英雄角 ...

  5. Importing Your Own Python Module or Python File into Colab

    Source from : https://medium.com/analytics-vidhya/importing-your-own-python-module-or-python-file-in ...

  6. Java实现简单的大顶堆

    Java实现简单的大顶堆 今天刷LeetCode的347. 前 K 个高频元素的时候使用到了优先队列,由于对大顶堆掌握不算熟练,于是写了一个简单大顶堆练手: 实现代码在最后 之前很少使用泛型来写代码, ...

  7. api进阶Day1文件的创建、删除、访问、设置过滤器并查询。目录的删除、创建。

    文件的创建: package file; import java.io.File; import java.io.IOException; /* create:创建 new:新 file:文件 使用F ...

  8. 【第4次作业】CNN实战

    使用VGG模型进行猫狗大战 import numpy as np import matplotlib.pyplot as plt import os import torch import torch ...

  9. Java的由来

    Java 发展史 1.1.起源 20 世纪 90 年代,单片式计算机系统诞生,单片式计算机系统不仅廉价,而且功能强大,使用它 可以大幅度提升消费性电子产品的智能化程度. SUN 公司为了抢占市场先机, ...

  10. 量化交易-可视化展示(grafana)

    先上图 简单的实现了一下,效果还好,可玩性强 大概部署mysql+grafana step 1: 服务器:阿里云,ucloud啥的随意,配置也不需要什么,我的是阿里云1核1GB,足以 我用的ubunt ...