使用本地存储库在 k3d 集群中运行 argocd

问题描述 投票:0回答:1

对 k8s 着迷,我正在尝试创建一个绑定到本地 git 存储库的 argocd 应用程序。我认为本地存储库是一个很好的开发解决方案,我阅读了this并决定自己尝试一下。我使用 k3d 提供集群,以下是我运行的说明:

k3d cluster create cluster1 -a 1 -v /home/myuser/workspace/argocd_tutorial:/workspace/argocd_tutorial@agent:0
kubectl create namespace argocd
kubectl apply -n argocd -f argocd/
kubectl config set-context --current --namespace=argocd
argocd app create argocd-tutorial --path "./k8s" --sync-policy auto --dest-server https://kubernetes.default.svc --repo file:///tmp/local_repo

kubectl apply -n argocd -f argocd/
应用两个 .yml 清单:

  • 已修补的 argocd 安装 .yml 文件,
  • 包含持久卷的 .yml 文件和持久卷声明将卷换羽到
    argocd-repo-server
    容器中。 他们在这里:
#relevant parts of patched argocd installation file
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/component: repo-server
    app.kubernetes.io/name: argocd-repo-server
    app.kubernetes.io/part-of: argocd
  name: argocd-repo-server
spec:
....
        volumeMounts:
        ....
        - mountPath: /tmp/local_repo
          name: local-repo
          readOnly: true
      ....
      volumes:
      ....
      - name: local-repo
        persistentVolumeClaim:
          claimName: local-repo-pvc
    ....

#persistent volume and volume claim file
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-repo-volume
  namespace: argocd
  labels:
    type: local
spec:
  storageClassName: standard
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /workspace/argocd_tutorial
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-repo-pvc
  namespace: argocd
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: standard
  resources:
    requests:
      storage: 1Gi
  volumeName: local-repo-volume

尽管我付出了努力,这就是我得到的回报:

FATA[0000] rpc error: code = InvalidArgument desc = application spec for argocd-tutorial is invalid: InvalidSpecError: repository not accessible: repositories not accessible: &Repository{Repo: "file:///tmp/local_repo", Type: "", Name: "", Project: ""}: repo client error while testing repository: rpc error: code = Unknown desc = error testing repository connectivity: repository not found

/bin/sh
放入
argocd-repo-server
我可以看到 root 拥有的
/tmp/local_repo
目录:

$ ls -dl /tmp/local_repo
drwxr-xr-x 2 root root 4096 Feb  6 20:38 /tmp/local_repo
$ ls -al /tmp/local_repo 
total 8
drwxr-xr-x 2 root root 4096 Feb  6 20:38 .
drwxrwxrwx 4 root root 4096 Feb  6 20:38 ..

我猜 k3d 以 root 身份挂载该卷...有没有办法让

argocd
用户看到该目录及其包含的所有内容作为 git 存储库?

kubernetes argocd k3d
1个回答
1
投票

快速修复

问题是您有

1 server
1 agent
,但您仅将卷从主机安装到
agent:0

只需删除

-a 1
并使用
-v /home/myuser/workspace/argocd_tutorial:/workspace/argocd_tutorial@server:0
安装卷(将
agent:0
更改为
server:0

长答案

首先,一切看起来都很好,但是当创建 POD 时,你不知道它将被放置在哪里,因为我试图验证它,我在

server:0
上安装了 pod,并且安装的卷在那里不可用。

拨打

kubectl get pods -o wide
并查看栏目
NODE

即可查看
NAME                                      READY   STATUS    RESTARTS   AGE   IP          NODE                    NOMINATED NODE   READINESS GATES
echo-server-deployment-66d64444b8-g26qt   1/1     Running   0          55s   10.42.1.4   k3d-cluster1-server-0   <none>           <none>

正如您在我的例子中看到的那样,当我将

server:0
缩放到 2 个副本时,第二个副本出现在
deployment
上,并且所有数据都在该 POD 上可用
有2种方法可以解决

(不太推荐)使用
    agent:0
  •  也可以为 
    server:0
     添加音量
    
    (我建议这个)删除
  • -v /home/myuser/workspace/argocd_tutorial:/workspace/argocd_tutorial@server:0
  • 并使用
    -a 1
    创建集群
    
    
  • 我认为第二个更好,因为它的一切都是为了测试目的,所以直到你真的需要多个节点时,仅使用一台服务器而不使用代理就完全没问题,因为一切都在一台机器上,并且服务器也运行 POD。

© www.soinside.com 2019 - 2024. All rights reserved.