config kubectl_使用 kubectl 管理多个 k8s 集群

eca5c9eedb55eda20b5002ad05a6c5a0.png

第一性原则看问题

kubectl 本质上是一个与 kube-apiserver 做 7 层通信的客户端工具,因为 kube-apiserver 会做鉴权,所以 kubectl 使用过程中需要 kubeconfig 文件来保存一些配置信息,这些信息包括:

  1. 用来验证 kube-apiserver 的 CA 根证书
  2. 用来标识 kubectl 管理员的 证书 & 私钥,或者用来标识普通用户的 token

kubeconfig 是一个 YAML 格式的配置文件,其主要字段如下:

  • clusters 类型为数组,每个元素代表一个 k8s cluster
  • users 类型为数组,每个元素代表拥有访问权限的用户
  • contexts 类型为数组,每个元素表示要使用的 cluster & user 组合
  • current-context 当前正在使用的上下文

kubectl 做多集群的管理,本质上就是把集群的相关参数,以及用户的相关信息全都记录下来,然后通过 context 将其组合,通过 current-context 参数来标明当前正在使用的 context

多集群管理实操

1. 创建 kubeconfig 文件脚手架

kubeconfig 是一个 YAML 格式的配合文件,假定我们现在的需求是:管理开发集群 dev 和测试集群 test。这时我们先定义两个集群 test & dev,此外 test 集群管理员我们命名为 test-admindev 集群的管理员命名为 dev-admin

最后我们通过 test context 来表示测试集群上下文,用dev context 来表示开发集群上下文。

apiVersion: v1
kind: Config
preferences: {}

clusters:
- cluster:
  name: test
- cluster:
  name: dev

users:
- name: test-admin
- name: dev-admin

contexts:
- context:
  name: test
- context:
  name: dev

2. 向 kubeconfig 中填写参数

该步骤的任务是向 kubeconfig 文件中填写配置信息,主要包含 clusterusercontext。不需要手动填写,kubectl config 会将我们传入的参数填入到配置文件中去。默认的,kubectl 会操作 $HOME/.kube/config 文件(没有 KUBECONFIG 环境变量做特殊声明的话),我们可以使用 --kubeconfig 参数来指明要操作的 kubeconfig 文件。

cluster 做配置

分别对 dev & test 集群配置,填写内容包括 kube-apiserver 的地址端口和集群的根证书路径。--embed-certs=true 参数可以把证书内容内嵌到配置文件中。

kubectl config --kubeconfig=kubeconfig set-cluster ${Cluster_Name} 
--server=${API_Server_Addr} 
--certificate-authority=${CA_PATH}
--embed-certs=true

user 做配置

分别对 test-admin & user-admin 做参数配置,填写的内容包括标识 admin 身份的证书和私钥。

kubectl config --kubeconfig=kubeconfig set-credentials ${User_Name} 
--client-certificate=${Client_Cert} 
--client-key=${Client_Private_Key} 
--embed-certs=true

context 做配置

context 本质上是 clusterusernamespace 的组合,其中 namespace 选填,默认为 default

# 配置 test 集群
kubectl config --kubeconfig=kubeconfig set-context test 
--cluster=test 
--user=test-admin

# 配置 dev 集群
kubectl config --kubeconfig=kubeconfig set-context dev 
--cluster=dev 
--user=dev-admin

选定要使用的集群

切换集群的本质就是改变 current-context 的值,通过 current-context 来标识当前 kubectl 访问的是哪个集群。

kubectl config use-context ${Context_Name}

核查配置结果

本文要达到的最终目的就是通过 kubectl config use-context 快速的在多个集群之间切换,效果如下:

➜  kubectl get node
NAME                             STATUS                     ROLES    AGE   VERSION
master1.safehouse.mydomain.com   Ready,SchedulingDisabled   master   87d   v1.15.5
worker1.safehouse.mydomain.com   Ready                      node     87d   v1.15.5
worker2.safehouse.mydomain.com   Ready                      node     87d   v1.15.5
➜  kubectl config use-context dev
Switched to context "dev".
➜  kubectl get node
NAME                 STATUS                     ROLES    AGE   VERSION
master1.dev.sf.com   Ready,SchedulingDisabled   master   82d   v1.15.5
worker1.dev.sf.com   Ready                      node     82d   v1.15.5
worker2.dev.sf.com   Ready                      node     82d   v1.15.5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值