首先,这是在 Kubernetes 内运行的单一存储库应用程序的上下文中。
在 GitOps 中,我的理解是一切都是声明性的,并写入配置文件(例如 YAML)中。这允许 git 内完整的更改历史记录。分支代表环境。例如:
问题我记得读过...某处...配置应该位于主存储库之外,在另一个“配置存储库”内。从记忆中,这个想法是应用程序不应该知道特定的配置......只知道如何使用配置?
这是真的?我应该有一个应用程序存储库和一个应用程序配置存储库吗?例如
foo-organisation/bar-applicationfoo-organisation/bar-application-config不同环境的配置分支模型位于该存储库中的哪个位置?为什么以及优点是什么?
否则它应该只存在于应用程序存储库的目录中吗?
我们已经愉快地将 ArgoCD 与公共存储库一起使用了一段时间,但在尝试将 ArgoCD 连接到私有存储库时遇到了问题。我们有一个Application看起来像这样的:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: example-app
namespace: argocd
spec:
destination:
name: example-cluster
namespace: open-cluster-management-agent
project: ops
source:
path: .
repoURL: ssh://git@github.com/example-org/example-repo.git
targetRevision: HEAD
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- Validate=false
- ApplyOutOfSyncOnly=true
Run Code Online (Sandbox Code Playgroud)
以及相应的密钥,其密钥如下所示:
apiVersion: v1
metadata:
labels:
argocd.argoproj.io/secret-type: repository
name: example-repo
namespace: argocd
type: Opaque
stringData:
sshPrivateKey: |
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
url: ssh://git@github.com/example-org/example-repo.git
kind: Secret
Run Code Online (Sandbox Code Playgroud)
ArgoCD 无法同步此应用程序并显示以下错误:
rpc error: code = Unknown desc = …Run Code Online (Sandbox Code Playgroud) 我正在尝试为 gitops 设置 ArgoCD。我使用 ArgoCD Helm Chart 将其部署到本地 Docker Desktop Kubernetes 集群。我正在尝试使用 ArgoCD 的应用程序模式。
\n问题是,当我应用 yaml 来创建根应用程序时,没有任何反应。\n这是 yaml(由helm template apps/ -n argocd我的公共存储库中的命令创建https://github.com/gajewa/gitops):
apiVersion: argoproj.io/v1alpha1\nkind: Application\nmetadata:\n name: root\n finalizers:\n - resources-finalizer.argocd.argoproj.io\nspec:\n destination:\n server: http://kubernetes.default.svc\n namespace: argocd\n project: default\n source:\n path: apps/\n repoURL: https://github.com/gajewa/gitops.git\n targetRevision: HEAD\n syncPolicy:\n automated:\n prune: true\n selfHeal: true\nRun Code Online (Sandbox Code Playgroud)\n资源已创建,但 Argo UI 中实际上没有发生任何事情。没有可见的应用程序。因此,我尝试通过 Web UI 创建应用程序,甚至将 yaml 粘贴到其中。该应用程序是在 Web ui 中创建的,它似乎与 prometheus 和 argo 的 yaml 模板同步并查看存储库,但它实际上并未在 ArgoCD 中创建 prometheus 应用程序。根应用程序的普罗米修斯部分正在不断进步。
\n …我在将 k3s 集群连接到 GitLab Docker 注册表时遇到问题。
在集群上,我在默认名称空间中创建了秘密,如下所示
kubectl create secret docker-registry regcred --docker-server=https://gitlab.domain.tld:5050 --docker-username=USERNAME --docker-email=EMAIL --docker-password=TOKEN
Run Code Online (Sandbox Code Playgroud)
然后在部署配置中我得到了这个秘密,我的配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
labels:
app.kubernetes.io/name: "app"
app.kubernetes.io/version: "1.0"
namespace: default
spec:
template:
metadata:
labels:
app: app
spec:
imagePullSecrets:
- name: regcred
containers:
- image: gitlab.domain.tld:5050/group/appproject:1.0
name: app
imagePullPolicy: Always
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
但创建的 pod 仍然无法拉取该镜像。仍然有错误信息:
failed to authorize: failed to fetch anonymous token: unexpected status: 403 Forbidden
Run Code Online (Sandbox Code Playgroud)
你能帮我看看错误可能出在哪里吗?如果我尝试通过本地 docker 上的秘密连接到这个 GitLab 注册表,它工作正常,docker 登录是正确的,也可以拉取该图像。
谢谢
从我们的 Tekton 管道中,我们希望使用 ArgoCD CLI 来动态argocd app create地argocd app sync基于所构建的应用程序。我们通过向ConfigMap添加 a 来创建一个新用户,如文档中所述:accounts.tekton: apiKeyargocd-cm
kubectl patch configmap argocd-cm -n argocd -p '{"data": {"accounts.tekton": "apiKey"}}'
Run Code Online (Sandbox Code Playgroud)
然后我们为tekton用户创建了一个令牌:
argocd account generate-token --account tekton
Run Code Online (Sandbox Code Playgroud)
将此令牌作为 the password,username tekton我们做了argocd login类似的事情
argocd login $(kubectl get service argocd-server -n argocd --output=jsonpath='{.status.loadBalancer.ingress[0].hostname}') --username=tekton --password="$TOKEN";
Run Code Online (Sandbox Code Playgroud)
现在,在我们的 Tekton 管道中(但我们猜测,考虑到非管理员用户的使用,这对于所有其他 CI 来说都是相同的),如果我们运行,我们会收到以下错误argocd app create:
$ argocd app create microservice-api-spring-boot --repo https://gitlab.com/jonashackt/microservice-api-spring-boot-config.git --path deployment --dest-server https://kubernetes.default.svc …Run Code Online (Sandbox Code Playgroud) 我想使用 argocd 安装 helm 版本,我以声明方式定义了一个 helm 应用程序,如下所示:
\napiVersion: argoproj.io/v1alpha1\nkind: Application\nmetadata:\n name: moon\n namespace: argocd\nspec:\n project: aerokube\n source:\n chart: moon2\n repoURL: https://charts.aerokube.com/\n targetRevision: 2.4.0\n helm:\n valueFiles:\n - values.yml\n destination:\n server: "https://kubernetes.default.svc"\n namespace: moon1\n syncPolicy:\n syncOptions:\n - CreateNamespace=true\nRun Code Online (Sandbox Code Playgroud)\n我的values.yml在哪里:
\ncustomIngress:\n enabled: true\n annotations:\n cert-manager.io/cluster-issuer: "letsencrypt" \n ingressClassName: nginx\n host: moon3.benighil-mohamed.com\n tls:\n - secretName: moon-tls\n hosts:\n - moon3.benighil-mohamed.com\nconfigs:\n default:\n containers:\n vnc-server:\n repository: quay.io/aerokube/vnc-server\n resources:\n limits:\n cpu: 400m\n memory: 512Mi\n requests:\n cpu: 200m\n memory: 512Mi\nRun Code Online (Sandbox Code Playgroud)\n请注意,该应用程序没有考虑values.yml,并且我收到以下错误:
\nrpc error: code …Run Code Online (Sandbox Code Playgroud) 我想直接从 git 存储库创建一个 argoCD 应用程序,即 gitOps 方式。我已经为应用程序创建了一个 CRD 文件,如下所示:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-service
namespace: argocd
spec:
destination:
namespace: default
server: https://kubernetes.default.svc
syncPolicy:
syncOptions:
- CreateNamespace=true
project: default
source:
path: clusters/helm-chart
repoURL: https://github.com/user/my-repo.git
targetRevision: HEAD
helm:
values: |
image:
repository: user/my-image
pullPolicy: Always
tag: xxx
Run Code Online (Sandbox Code Playgroud)
我当前的工作流程是将此 CRD 应用于我的集群k apply -f application.yaml。
问题:如何指示 ArgoCD 去同步/创建我定义的应用程序,而https://github.com/user/my-repo.git无需首先“手动”创建该应用程序?