将 kubeconfig 文件复制到 jenkins 上下文时找不到文件错误

File not found error when copying kubeconfig file to jenkins context

我正在尝试使用 Jenkins 访问 k0s 集群,以便从 Jenkins 管道进行部署。为了在 kubeconfig 文件中 copy/paste 集群凭据,我尝试使用“~/.kube/config”命令访问,但出现“没有这样的文件或目录”的错误,即当我 运行 :

sudo cp ~/.kube/config ~/.jenkins/.kube/

我收到 没有那个文件或目录 错误。似乎配置文件不存在,或者可能位于我不知道的其他地方。 我根据文档 here :

为 root 用户创建了一个 kubeconfig 文件(假设它默认不存在)
k0s kubeconfig create root

但是当我重新尝试复制时,我仍然遇到同样的错误 'No such file or directory'。 kubeconfig 文件 已创建 根据此命令的输出 k0s kubeconfig create root :

WARN[2022-01-30 17:44:16] no config file given, using defaults

apiVersion: v1
clusters:

cluster:
server: https://10.XXX.XXX.XXX:6443
certificate-authority-data: xxxxxxxx
name: k0s
contexts:
context:
cluster: k0s
user: root
name: k0s
current-context: k0s
kind: Config
preferences: {}
users:
name: root
user:
client-certificate-data: xxxxxxxxxxxx

我可以使用命令 k0s kubectl config view:

验证文件确实存在
apiVersion: v1
clusters:

cluster:
certificate-authority-data: DATA+OMITTED
server: https://localhost:6443
name: local
contexts:
context:
cluster: local
namespace: default
user: user
name: Default
current-context: Default
kind: Config
preferences: {}
users:
name: user
user:
client-certificate-data: REDACTED
client-key-data: REDACTED

其中一篇帖子建议使用命令 k0s kubectl get pods -v=6 来查看 kubeconfig 文件的确切位置,但是当我 运行 时,k0s 似乎不支持 -v :

Error: unknown shorthand flag: 'v' in -v=6
See 'k0s kubectl get --help' for usage

作为检查,我已经做了 cd ~/.kube/config,但那里什么也没有

我错过了什么?

您可以使用以下命令将 kubeconfig 复制到位置 /root/.kube/config

k0s kubectl config view --raw > ~/.kube/config

创建文件后,您应该不会收到提到的错误 "no such file or directory"

我发现我错过了什么:

~/.kube/config 默认情况下根本不会由 k0s 创建。 k0s 默认创建的是位于 /var/lib/k0s/pki/admin.conf

的“break-the-glass”管理 kubeconfig

所以我必须这样做:

  1. cp /var/lib/k0s/pki/admin.conf ~/.kube/config
  2. cp ~/.kube/config/admin.conf /var/lib/jenkins
  3. 将 jenkins 用户添加到 sudo 用户:

纳米-f /etc/sudoers

然后

jenkins ALL=NOPASSWD: ALL

然而,推荐的方法是使用适当的 RBAC 为 Jenkins 提供专用访问权限,仅允许所需的访问权限,例如服务帐户令牌。下一步我将不得不在另一个 Jenkins 实例上对此进行测试,因为我无法再撤销访问(使用 admin.conf 的缺点)