0

0

K3s 使用 k3sup 部署时 "failed to create kubeconfig" 的几种写法坑

冷炫風刃

冷炫風刃

发布时间:2026-01-18 18:42:09

|

680人浏览过

|

来源于php中文网

原创

k3sup“failed to create kubeconfig”本质是本地写入kubeconfig失败,主因包括:本地~/.kube目录权限不足或不存在;SSH远程sudo无密码免TTY权限;--ip/--server-ip与K3s证书SAN不匹配;KUBECONFIG环境变量干扰。

k3s 使用 k3sup 部署时 \

使用 k3sup 部署 K3s 时出现 "failed to create kubeconfig",通常不是 K3s 启动失败,而是 k3sup 在本地生成或写入 kubeconfig 文件环节出错。问题多集中在权限、路径、SSH 配置和环境变量这几个关键点上。

本地目标目录不可写或父目录不存在

k3sup 默认把生成的 kubeconfig 写入当前用户主目录下的 ~/.kube/config(或指定的 --kubeconfig 路径)。如果该路径所在目录不存在、权限不足,或磁盘已满,就会报这个错。

  • 检查路径是否存在:mkdir -p ~/.kube
  • 确认写入权限:ls -ld ~/.kube,确保当前用户有 drwxr-xr-x 或更宽松的权限
  • 避免用 sudo k3sup:它会以 root 身份运行,导致生成的 config 写入 /root/.kube/config,而后续 kubectl 命令仍读取普通用户的 ~/.kube/config,造成错位

SSH 连接成功但无法执行远程命令(尤其 sudo 权限)

k3sup 需要通过 SSH 登录节点后执行 sudo k3s kubectl 获取集群信息,并拉取 server 的证书与 endpoint。若远程用户无免密 sudo 权限,或 sudo 配置要求 TTY(默认开启),k3sup 就卡在“获取证书”阶段,最终误报为 kubeconfig 创建失败。

  • 在目标节点检查:ssh user@host 'sudo -n k3s kubectl config view --raw > /dev/null',若报错 no tty presentsudo: a password is required,说明 sudo 权限配置不满足非交互式调用
  • 修复方式:编辑 /etc/sudoers,添加一行(用 visudo):user ALL=(ALL) NOPASSWD: /usr/local/bin/k3s
  • 禁用 requiretty(可选):Defaults:user !requiretty

指定了错误的 --ip--server-ip,导致证书校验失败

K3s 生成的 server 证书只绑定特定 IP 或域名(如 --tls-san 指定的地址)。若 k3sup 使用的 --ip 与证书中 SAN 不匹配,kubectl 无法安全连接 API Server,k3sup 就会放弃写入 kubeconfig。

Lyrics Generator
Lyrics Generator

免费人工智能歌词生成器和人工智能歌曲作家

下载
  • 部署前确认:目标节点能被访问的 IP 是哪个?是内网 IP、公网 IP,还是 localhost?不要直接填 127.0.0.1(除非你在节点本机跑 k3sup)
  • 部署时显式指定可信地址:k3sup install --ip 192.168.1.100 --server-ip 192.168.1.100
  • 如需支持多地址,重装 K3s 并加参数:--tls-san 192.168.1.100 --tls-san mycluster.local

KUBECONFIG 环境变量干扰或文件被占用

若系统中已设置 KUBECONFIG 环境变量,k3sup 可能尝试写入一个你没权限的路径(比如 /etc/rancher/k3s/k3s.yaml),或与已有进程冲突(如 VS Code Kubernetes 插件正在监听该文件)。

  • 临时清空变量再试:KUBECONFIG= k3sup install ...
  • 换一个明确路径避开干扰:k3sup install --kubeconfig ./my-k3s-config
  • 检查文件是否被锁:lsof ./my-k3s-config(Linux/macOS)

这个问题表面是“创建失败”,实质是 k3sup 在最后一步验证连接 + 写入配置时断在了某个依赖环节。盯住 SSH 权限、本地路径、IP 匹配、环境变量这四点,基本能覆盖 95% 的场景。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

231

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

436

2024.03.01

macOS怎么切换用户账户
macOS怎么切换用户账户

在 macOS 系统中,可通过多种方式切换用户账户。如点击苹果图标选择 “系统偏好设置”,打开 “用户与群组” 进行切换;或启用快速用户切换功能,通过菜单栏或控制中心的账户名称切换;还能使用快捷键 “Control+Command+Q” 锁定屏幕后切换。

333

2025.05.09

Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

24

2025.12.22

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

702

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号