Back
Featured image of post 使用 kubeconfig 管理集群

使用 kubeconfig 管理集群

一文直接学会如何通过配置 kubeconfig 管理多集群

k8s 集群配置

IP Host 配置
11.0.1.150 master1 (keepalived+haproxy) 2C 4G 30G
11.0.1.148 master2 (keepalived+haproxy) 2C 4G 30G
11.0.1.149 node1 2C 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博客