Rancher部署的K8S集群服务节点上执行 kubectl 命令

文章目录

    • [1、Rancher UI 和执行 kubectl 命令之间的关系](#1、Rancher UI 和执行 kubectl 命令之间的关系)
      • [1.1、Rancher 的架构和 kubectl](#1.1、Rancher 的架构和 kubectl)
      • [1.2、Rancher 内置 kubectl 的位置](#1.2、Rancher 内置 kubectl 的位置)
      • 1.3、执行权限和安全
    • [2、Rancher UI 的使用操作](#2、Rancher UI 的使用操作)
      • [2.1、UI 界面内置的 Kubectl 命令工具](#2.1、UI 界面内置的 Kubectl 命令工具)
      • [2.2、在服务节点执行 kubectl 命令的方法](#2.2、在服务节点执行 kubectl 命令的方法)
      • [2.3、创建一个集群上下文文件 config](#2.3、创建一个集群上下文文件 config)
      • [2.4、安装 kubectl 命令](#2.4、安装 kubectl 命令)
    • 3、总结

1、Rancher UI 和执行 kubectl 命令之间的关系

1.1、Rancher 的架构和 kubectl

Rancher 本身并不是 kubectl,而是一个 集群管理平台。

当你在 Rancher 的 UI 界面(Cluster Explorer 或者 Cluster Manager)里点开 kubectl Shell 或者 Execute Shell 的时候,其实 Rancher 会通过 API 调用到它内部的 rancher-webhook / rancher-api-server,再转发到对应的 Kubernetes API server。

换句话说:

UI 显示出来的 kubectl 终端并不是真的直接在你本地执行,而是 Rancher 在服务节点(运行 Rancher Server 的容器)里内置了一个 kubectl 客户端,通过 Rancher 的访问权限去执行命令。

你看到的结果是 Rancher 把 kubectl 输出通过 WebSocket 回传到浏览器。

1.2、Rancher 内置 kubectl 的位置

Rancher Server 镜像(如 rancher/rancher:v2.12.0)里内置了一个 kubectl 二进制文件。

当你进入 rancher 容器执行:

bash 复制代码
# 查看 Rancher 容器
docker ps | grep rancher

# 进入容器
docker exec -it rancher-2-11-3 bash

which kubectl
kubectl version --client

你能看到 Rancher 自带的 kubectl。

UI 打开的 kubectl shell,就是调用了这个内置 kubectl,并且带上了 Rancher 给的 kubeconfig。

1.3、执行权限和安全

Rancher 的 kubectl 命令使用的是当前登录用户在 Rancher 内的 RBAC 权限。

例如你是 cluster-admin,就能执行所有命令。

普通用户则只能执行有限的 kubectl 操作。

这样保证了 UI 和 CLI 行为一致,不会绕过 Rancher 的权限管理。

Rancher UI 里的 kubectl 并不是直接在 Kubernetes 节点上跑的命令,而是 在 Rancher 服务容器内置的 kubectl 客户端执行,再通过 Rancher 的 API 转发到集群。

  • 方法1:宿主机直接执行

如果你在宿主机安装了 kubectl:

bash 复制代码
export KUBECONFIG=/opt/rancher/kubeconfig.yaml
kubectl get nodes
  • 方法2:Rancher 容器内执行

如果你在 Rancher 容器内执行:

bash 复制代码
# 上传 kubeconfig 到容器
docker cp /opt/rancher/kubeconfig.yaml rancher-2-11-3:/root/kubeconfig.yaml

# 进入容器
docker exec -it rancher-2-11-3 bash

# 设置环境变量
export KUBECONFIG=/root/kubeconfig.yaml

# 测试连接
kubectl get nodes
kubectl get pods -A

2、Rancher UI 的使用操作

2.1、UI 界面内置的 Kubectl 命令工具

选择 K8S 集群 "cluster-dev" ,点击右上角带箭头的图标,在下面会弹出一个CLI的输入框,稍等后连接成功后,就可以执行 kubectl 命令

2.2、在服务节点执行 kubectl 命令的方法

Rancher Server 容器内置了 kubectl

当你进入运行 Rancher 的容器时,就可以直接用它

获取 kubeconfig 文件内容

如下图标:左边是直接下载 kubeconfig 文件,右边是直接复制文件的内容 ,二选一即可

2.3、创建一个集群上下文文件 config

Rancher 运行时,会把各个集群的 kubeconfig 保存在 Rancher 的数据库里,并通过 API 下发给 UI。

如果你要在服务节点(宿主机或者 Rancher 容器里)直接用 kubectl 管理某个集群,需要导出 kubeconfig:

在 Rancher UI 里 → 点击集群 → Kubeconfig File → 下载。

把下载的文件保存为 ~/.kube/config,然后在 Rancher 容器或宿主机直接执行:

yaml 复制代码
apiVersion: v1
kind: Config
clusters:
- name: "vm-k8s"
  cluster:
    server: "https://192.168.31.203/k8s/clusters/c-xb85q"
    certificate-authority-data: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ2VENDQ\
      VdPZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQkdNUnd3R2dZRFZRUUtFeE5rZVc1aGJXbGoKY\
      kdsemRHVnVaWEl0YjNKbk1TWXdKQVlEVlFRRERCMWtlVzVoYldsamJHbHpkR1Z1WlhJdFkyRkFNV\
      GMxTlRFMQpOVEl5T0RBZUZ3MHlOVEE0TVRRd056QTNNRGhhRncwek5UQTRNVEl3TnpBM01EaGFNR\
      Vl4SERBYUJnTlZCQW9UCkUyUjVibUZ0YVdOc2FYTjBaVzVsY2kxdmNtY3hKakFrQmdOVkJBTU1IV\
      1I1Ym1GdGFXTnNhWE4wWlc1bGNpMWoKWVVBeE56VTFNVFUxTWpJNE1Ga3dFd1lIS29aSXpqMENBU\
      VlJS29aSXpqMERBUWNEUWdBRVFXNmpxQmJlM09sRwp4aDlldHJ6d1BubVlWc3hCQ3RHZ2RFNHBzZ\
      HZsbHBYOFJyOGRWekdRM2hsV2JmNW5LZ1ovQ1Y5ZDh5ak9kTTR1CkdNUjMySjlNQjZOQ01FQXdEZ\
      1lEVlIwUEFRSC9CQVFEQWdLa01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWUQKVlIwT0JCWUVGR\
      09seGVRbDYwVGNnSy9RS1I4YWRtdU1mWDdhTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdwpOb\
      ERnRFI1TTdoYitFbTY3cTJ0R084cEpicVlyN2tYV05QZzEvNUoyekFJZ09WVE9sNmw4OXFwOXR0S\
      lZpT0o5ClJBNTI0Sy8xQ2VMZUlrZUMzWVFQSmpFPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t"

users:
- name: "vm-k8s"
  user:
    token: "kubeconfig-user-66m4vfkwh9:4dmw9pdl6lp7dtqkkgj7xp6vddvrzl5d9fjgp2bs4ks8lwpbwrcgb7"


contexts:
- name: "vm-k8s"
  context:
    user: "vm-k8s"
    cluster: "vm-k8s"

current-context: "vm-k8s"

2.4、安装 kubectl 命令

首先查看kubernetes仓库的yum/源地址

bash 复制代码
cat /etc/yum.repos.d/kubernetes.repo

然后运行安装命令

bash 复制代码
 yum install kubectl-1.33.3 -y     ### 注意版本要相同

3、总结

  • Rancher UI 的 kubectl → 调用的是 Rancher 容器里自带的 kubectl,通过 WebSocket 回传到 UI。

  • Rancher 服务节点 → 可以直接进入 Rancher 容器执行 kubectl,但必须指定 kubeconfig。

  • 宿主机 → 安装 kubectl 后,也可以用 Rancher 下发的 kubeconfig 文件操作集群。

这样,你就能在 Rancher 的服务节点(容器内或宿主机)直接执行 kubectl,和 Rancher UI 里看到的结果完全一致。


"人的一生会经历很多痛苦,但回头想想,都是传奇"。


相关推荐
lichenyang4533 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4533 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4533 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
运维开发故事6 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson8 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生8 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭8 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美9 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵10 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程