一文清晰理解 kubeconfig | 使用 kubeconfig 进行多集群管理 | context关系理解

在这里插入图片描述

k8s 集群配置

IPHost配置
11.0.1.150master1 (keepalived+haproxy)2C 4G 30G
11.0.1.148master2 (keepalived+haproxy)2C 4G 30G
11.0.1.149node12C 4G 30G

vip 地址: https://11.0.1.100:16443

认识 kubeconfig

kubeconfig 即为 kubectl 用于管理 k8s 集群的配置文件

image-20240101163134772

关系图解

image-20240101164357203

  1. current-context 选择 context 操作相应集群
  2. context 将 user 与 cluster 联系起来
  3. user 提供要操作集群的 cert 与 key
  4. cluster 提供集群的 ca 与 集群的入口地址

user 与 cluster 是弱关联

kubectl config 参数详解

$ kubectl  config --help

Available Commands:
  current-context 显示当前上下文
  delete-cluster  删除kubeconfig文件中指定的集群
  delete-context  删除kubeconfig文件中指定的context
  delete-user     删除kubeconfig文件中指定的user
  get-clusters    显示kubeconfig文件中定义的集群
  get-contexts    显示一个或多个contexts
  get-users       显示kubeconfig文件中定义的users
  rename-context  重命名kubeconfig文件里的context
  set             在kubecconfig文件中设置一个单独的值
  set-cluster     在kubecconfig中设置集群条目
  set-context     在kubecconfig中设置上下文条目
  set-credentials 在kubecconfig中设置一个用户条目
  unset           取消kubecconfig文件中单个值的设置
  use-context     在kubecconfig文件中设置当前上下文(kubecconfig文件可以有多个上下文)
  view            显示合并的 kubeconfig 配置或一个指定的 kubeconfig 文件

kubeconifg 使用

  1. kubectl 自动加载 ~/.kube/config
  2. 如果指定 $KUBECONFIG, 从$KUBECONFIG加载
  3. 也可以通过 kubectl 指定: kubectl config get-contexts --kubeconfig=/root/.kube/config1

配置文件参考:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBD......
    server: https://11.0.1.100:16443  # 指定集群的入口
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes  # 指定当前 context 上下文
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: ......
    client-key-data: ......

生成新的 context

# 获取 kubeconfig 中所有 cluster
$ kubectl config get-clusters
NAME
kubernetes

$ kubectl config set-context test --cluster=kubernetes --user=kubernetes-admin --kubeconfig=/root/.kube/config --namespace=test

# --kubeconfig   kubeconfig 是默认路径可省略
# --namespace    指定 context 的默认 namespace, 没有即为 default

新增 context:

......
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
- context:          # 新增 context
    cluster: kubernetes
    namespace: test
    user: kubernetes-admin
  name: test
...

切换 context 上下文

# 查看当前 context
$ kubectl config current-context
kubernetes-admin@kubernetes

# 查看 kubeconfig 中所有 context
$ kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
          kubernetes-admin@kubernetes   kubernetes   kubernetes-admin
*         test                          kubernetes   kubernetes-admin   test

# 切换 context
$ kubectl config use-context test
Switched to context "test".

# 创建 pod | 默认在 test namespace 下创建
$ k get po
NAME       READY   STATUS    RESTARTS   AGE
nginxpod   1/1     Running   0          14m

多集群管理

因集群配置有 vip, 本文将新增一个 cluster 直接指向 master apiserver 的地址, 所以, cluster 的 ca 不变

$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBD......
    server: https://11.0.1.100:16443
  name: kubernetes
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBD......
    server: https://11.0.1.150:6443
  name: direct-cluster
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
- context:
    cluster: kubernetes
    namespace: test
    user: kubernetes-admin
  name: test
current-context: test
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: ......
    client-key-data: ......

我们新增了一个direct-cluster的cluster

创建 context

# 默认 namespace 为 default
$ kubectl config set-context direct --user=kubernetes-admin --cluster=direct-cluster

# 切换 context
$ kubectl config use-context direct

$ kubectl get po
No resources found in default namespace.

新增 context:

......
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
- context: 
    cluster: kubernetes
    namespace: test
    user: kubernetes-admin
  name: test
- context:          # 新增 context
    cluster: direct-cluster
    user: kubernetes-admin
  name: direct
...

参考:

  1. https://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/
  2. 什么是k8s上下文?kubeconfig配置文件讲解-CSDN博客
  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M·K·T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值