Kubernetes集群使用Flux时如何创建并指定context?
报错原因
flux bootstrap命令里的--context参数引用的不是Flux自身维护的配置,而是本地kubeconfig(默认存储路径为~/.kube/config)里的Kubernetes集群访问上下文,作用是指定Flux组件要部署到的目标集群。本地没有存staging环境对应的集群访问上下文,就会抛出context "staging" does not exist的错误。
解决步骤
- 先查看本地已配置的所有K8s上下文,执行命令:
kubectl config get-contexts
输出结果中CURRENT列带*标记的,是你当前默认使用的上下文。 - 根据staging集群的类型,将集群访问凭证写入本地kubeconfig,生成可用的访问上下文:
- 本地测试集群(kind/minikube等):如果用kind创建staging测试环境,直接执行
kind create cluster --name staging,集群创建完成后会自动在kubeconfig中写入名为kind-staging的上下文,后续把bootstrap命令里的--context参数值改成这个实际名称即可;如果用minikube创建staging环境,执行minikube start -p staging会自动生成名为minikube-staging的上下文。 - 云厂商托管K8s集群:通过对应云平台的官方CLI拉取staging集群的访问配置,合并到本地kubeconfig中,拉取完成后重新执行上文的get-contexts命令,确认对应的上下文名称。
- 自建K8s集群:向集群管理员索要staging环境的kubeconfig文件,要么把文件内容合并到本地
~/.kube/config,要么执行export KUBECONFIG=<staging集群kubeconfig的本地存储路径>临时指定配置文件路径。
- 本地测试集群(kind/minikube等):如果用kind创建staging测试环境,直接执行
- 验证上下文连通性,执行命令测试:
kubectl --context=<你查到的staging集群实际上下文名> get ns
如果能正常返回命名空间列表,说明集群连通正常,把bootstrap命令里的--context参数替换成实际的上下文名,重新执行即可。
补充说明
从你贴的flux get sources all输出来看,两个GitRepository源都已经处于Ready状态,说明你之前已经在某个集群上完成过Flux引导。如果你当前默认连接的集群就是要部署staging环境的目标集群,直接删掉bootstrap命令里的--context=staging参数就行,Flux会默认使用当前激活的上下文执行部署。
你查询到的helmrelease状态异常,本质是当前运行Flux的集群没有匹配到staging路径下的同步配置,等Flux正确引导到目标staging集群后,会自动完成资源同步。
内容的提问来源于stack exchange,提问作者Richard Rublev
相关产品推荐
相关产品推荐

