对 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-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 存储库?
问题是您有
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
创建集群