Rancher部署的K8S集群服务节点上执行 kubectl 命令
文章目录
- 1、Rancher UI 和执行 kubectl 命令之间的关系
- 1.1、Rancher 的架构和 kubectl
- 1.2、Rancher 内置 kubectl 的位置
- 1.3、执行权限和安全
- 2、Rancher UI 的使用操作
- 2.1、UI 界面内置的 Kubectl 命令工具
- 2.2、在服务节点执行 kubectl 命令的方法
- 2.3、创建一个集群上下文文件 config
- 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 容器执行:
# 查看 Rancher 容器
docker ps | grep rancher# 进入容器
docker exec -it rancher-2-11-3 bashwhich 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:
export KUBECONFIG=/opt/rancher/kubeconfig.yaml
kubectl get nodes
- 方法2:Rancher 容器内执行
如果你在 Rancher 容器内执行:
# 上传 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 容器或宿主机直接执行:
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/源地址
cat /etc/yum.repos.d/kubernetes.repo
然后运行安装命令
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 里看到的结果完全一致。
“人的一生会经历很多痛苦,但回头想想,都是传奇”。