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

ArgoCD可以基于WEB-UI的方式来进行应用的发布,也可以基于Configuration List的方式去部署应用。
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
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
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
[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 # 为自动同步策略
这里的应用状态为未同步,因为我们未指定同步策略为自动。默认为手动同步;
[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
[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
[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

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
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm