找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3714

积分

0

好友

520

主题
发表于 11 小时前 | 查看: 1| 回复: 0

Kubernetes 配置文件终端示例截图

当你需要管理多个 Kubernetes 集群时,如何高效地使用 kubectl 切换不同的上下文?这一切都依赖于其客户端的配置文件。本文将详细介绍 kubectl 配置文件的读取优先级、核心格式、管理多个配置文件的方法,并提供常用命令的实操示例,帮助你玩转 云原生 环境下的集群管理。

kubectl 配置文件优先级

kubectl 客户端的配置以文件形式保存在用户本地,它提供了多种指定配置文件的方式,并且这些方式之间存在明确的优先级顺序。

  1. --kubeconfig 选项(最高优先级):用户在执行 kubectl 命令时,通过 --kubeconfig 选项直接指定配置文件路径。这是优先级最高的方式。

    [me@imzcy ~]$ kubectl get pods --kubeconfig=./test.conf
  2. KUBECONFIG 环境变量:其次,kubectl 会检查 KUBECONFIG 环境变量是否被设置。如果已设置,则读取其指定的文件。

    [me@imzcy ~]$ echo $KUBECONFIG
    
    [me@imzcy ~]$ export KUBECONFIG=/home/me/test.conf
  3. 默认配置文件 ~/.kube/config(最低优先级):如果以上两种方式均未指定,kubectl 会默认读取用户家目录下的 ~/.kube/config 文件。

    [me@imzcy ~]$ ls .kube/config
    .kube/config
    [me@imzcy ~]$

kubectl 配置文件格式

我们可以通过 kubectl config view 命令查看当前生效的配置文件内容。对于一个全新的、未配置过的环境,输出如下:

[me@imzcy ~]$ kubectl config view
apiVersion: v1
clusters: null
contexts: null
current-context: ""
kind: Config
preferences: {}
users: null
[me@imzcy ~]$

一个典型的、已配置好的 kubectl 配置文件(如上图所示)通常包含以下几个主要字段:

  • apiVersion:由于 kubectl 直接与 Kubernetes API Server 通信,此处需指定使用的 API 版本,以确保兼容性。
  • clusters:定义集群连接信息的列表,包括 CA 证书、服务器地址等。
  • contexts:定义上下文信息的列表。每个上下文将一个 user(用户)和一个 cluster(集群)关联起来,并可设置默认的命名空间。
  • current-context:指定当前默认使用的上下文。kubectl 命令会默认使用此上下文中定义的用户身份和集群。
  • kind:资源类型,固定为 Config
  • preferences:指定 kubectl 的一些可选偏好设置。
  • users:定义用户认证信息的列表。支持多种认证方式,如下是几种常见示例:
users:
- name: "100000888888"
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
- name: test-user
  user:
    token: your-token
- name: cluster-admin
  user:
    password: your-password
    username: admin

管理多个配置文件

当你只需要管理单个集群时,最简单的方法是将拿到的配置文件直接移动到 ~/.kube/config 路径下。

[me@imzcy ~]$ kubectl config get-contexts
CURRENT   NAME   CLUSTER   AUTHINFO   NAMESPACE
[me@imzcy ~]$
[me@imzcy ~]$ mkdir .kube
[me@imzcy ~]$ mv test.conf .kube/config
[me@imzcy ~]$ kubectl config get-contexts
CURRENT   NAME                                        CLUSTER        AUTHINFO       NAMESPACE
*         cls-xxxxxx88-100000888888-context-default   cls-xxxxxx88   100000888888   default
[me@imzcy ~]$

但现实工作中,我们常常需要同时管理多个 Kubernetes 集群。为每个命令都添加 --kubeconfig 选项显然过于繁琐。

方法一:设置 KUBECONFIG 环境变量
此时,一个简便的方法是通过设置 KUBECONFIG 环境变量来指定多个配置文件(路径间用冒号分隔)。

[me@imzcy ~]$ export KUBECONFIG=/home/me/test.yaml:/home/me/config/local.yaml
[me@imzcy ~]$ kubectl config get-contexts
CURRENT   NAME                                        CLUSTER        AUTHINFO       NAMESPACE
*         cls-xxxxxx88-100000888888-context-default   cls-xxxxxx88   100000888888   default
          test-user@test-cluster                      test-cluster   test-user
[me@imzcy ~]$

方法二:合并多个配置文件
你还可以考虑将多个集群的配置文件合并成一个单一的文件,便于统一管理。

[me@imzcy ~]$ export KUBECONFIG=/home/me/test.yaml:/home/me/config/local.yaml
[me@imzcy ~]$ kubectl config view --merge --flatten > merged-config
[me@imzcy ~]$ kubectl config get-contexts --kubeconfig=./merged-config
CURRENT   NAME                                        CLUSTER        AUTHINFO       NAMESPACE
*         cls-xxxxxx88-100000888888-context-default   cls-xxxxxx88   100000888888   default
          test-user@test-cluster                      test-cluster   test-user
[me@imzcy ~]$
[me@imzcy ~]$ mv ./merged-config .kube/config
[me@imzcy ~]$ unset KUBECONFIG

重要提醒:合并配置文件时,务必检查不同配置文件中 userscontexts 下的 name 字段(显示名)是否重复。如果名称相同但认证信息不同,合并后只会保留其中一个,导致切换到对应集群时因认证失败而无法访问。合并前如有重复,需要手动修改 name 字段确保其唯一性。

常用命令示例

掌握以下几个常用命令,能让你在日常使用 kubectl 时更加得心应手。

1. 安装 kubectl (CentOS/RHEL 示例)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
[root@imzcy ~]# yum install kubectl

2. 查看客户端版本

[me@imzcy ~]$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.5", GitCommit:"5c99e2ac2ff9a3c549d9ca665e7bc05a3e18f07e", GitTreeState:"clean", BuildDate:"2021-12-16T08:38:33Z", GoVersion:"go1.16.12", Compiler:"gc", Platform:"linux/amd64"}
[me@imzcy ~]$

3. 查看当前所有上下文

[me@imzcy ~]$ kubectl config get-contexts
CURRENT   NAME                                        CLUSTER        AUTHINFO       NAMESPACE
*         cls-xxxxxx88-100000888888-context-default   cls-xxxxxx88   100000888888   default
          test-user@test-cluster                      test-cluster   test-user
[me@imzcy ~]$

4. 切换当前默认上下文

[me@imzcy ~]$ kubectl config use-context test-user@test-cluster
Switched to context "test-user@test-cluster".
[me@imzcy ~]$ 
[me@imzcy ~]$ kubectl config get-contexts
CURRENT   NAME                                        CLUSTER        AUTHINFO       NAMESPACE
          cls-xxxxxx88-100000888888-context-default   cls-xxxxxx88   100000888888   default
*         test-user@test-cluster                      test-cluster   test-user
[me@imzcy ~]$

5. 修改当前上下文的默认命名空间

[me@imzcy ~]$ kubectl config set-context --current --namespace=test
Context "test-user@test-cluster" modified.
[me@imzcy ~]$
[me@imzcy ~]$ kubectl config get-contexts
CURRENT   NAME                                        CLUSTER        AUTHINFO       NAMESPACE
          cls-xxxxxx88-100000888888-context-default   cls-xxxxxx88   100000888888   default
*         test-user@test-cluster                      test-cluster   test-user      test
[me@imzcy ~]$

理解并熟练运用 kubectl 的配置机制,是高效管理多集群环境的基础。希望本文的详解与示例能帮助你扫清操作障碍。如果你想探讨更多 Kubernetes 或 云原生 相关的实践经验,欢迎在 云栈社区 交流分享。




上一篇:攻击者视角下K8s集群横向移动:利用kubeconfig配置文件的实战步骤
下一篇:Node.js应用Kubernetes部署指南:从代码到集群的实战演练
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-3 21:31 , Processed in 0.374709 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表