#####################################################
#把每个k8s集群的json配置文件放到/root/.kube/目录下,改为不同名字,通过–kubeconfig实现不同集群操作
kubectl --kubeconfig=/root/.kube/myconfig get pods
#####################################################
kubecm
https://github.com/sunny0826/kubecm
export VERSION=0.15.3
curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v${VERSION}/kubecm_${VERSION}_Linux_x86_64.tar.gz
#https://github.com/sunny0826/kubecm/releases/download/v0.15.3/kubecm_0.15.3_Linux_x86_64.tar.gz
tar -zxvf kubecm.tar.gz kubecm
cd kubecm
mv kubecm /usr/local/bin/
# 集群切换命令
$ kubecm switch
#####################################################
使用 kubectl 管理多个 k8s 集群
第一性原则看问题
kubectl 本质上是一个与 kube-apiserver 做 7 层通信的客户端工具,因为 kube-apiserver会做鉴权,所以 kubectl 使用过程中需要 kubeconfig 文件来保存一些配置信息,这些信息包括:
- 用来验证 kube-apiserver 的 CA 根证书
- 用来标识 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-admin,dev 集群的管理员命名为 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 文件中填写配置信息,主要包含 cluster 、user、context。不需要手动填写,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 本质上是 cluster、user、namespace 的组合,其中 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
#####################################################
Rancher
可以学习一下rancher, 应该也可以管理多个集群。