kubectl use-context配置多集群访问,控制多个k8s集群

kubectl use-context配置多集群访问

今天在rancher平台上进行日常维护。在多个集群切换时,鼠标一顿点点点还是有点不够顺畅。于是在"瑞斯拜"的chrome里面找到了k8s有关多集群访问配置的桥段,下面根据实践过程做简单描述

使用 kubeconfig 文件组织集群访问

通过 kubectl 连接k8s集群时,默认情况下,kubectl 会在 $HOME/.kube 目录下查找名为 config 的文件,我直接root用户登录的、我的 config配置文件路径为 ~/.kube/config下面贴上具体的配置和简要注释

apiVersion: v1
kind: Config
clusters:
- name: "fralychen"  # 集群名称、下面的contexts里面的cluster:value值对应
  cluster:
    server: "https://rancher.fralychen.com/k8s/clusters/a-99abr"

users:
- name: "fralychen"  # 用户名称、下面的contexts里面的user:value值对应
  user:
    token: "****"

contexts:
- name: "fralychen"  # 上下文名称、在命令行中做集群切换时会用到
  context:
    user: "fralychen"
    cluster: "fralychen"

current-context: "fralychen"  # 当前正在使用的上下文名称、表示kubectl连接的集群为fralychen

配置对多集群的访问

    在将集群、用户和上下文定义在一个或多个配置文件中之后,用户可以使用 kubectl config use-context 命令快速地在集群之间进行切换。rancher针对每个集群都有对应的kubeconfig文件,文件中连接的用户(user)名、集群(cluster)名、上下文(contexts)都是对应的,我这边根据字段一一添加到~/.kube/config文件中即可

apiVersion: v1
kind: Config
clusters:
- name: "fralychen" 
  cluster:
    server: "https://rancher.fralychen.com/k8s/clusters/a-99abr"
- name: "fralychen1"   # 这是新加的
  cluster:
    server: "https://rancher.fralychen.com/k8s/clusters/c-t8nci"

users:
- name: "fralychen" 
  user:
    token: "****"
- name: "fralychen1"   # 这是新加的
  user:
    token: "***"

contexts:
- name: "fralychen"  
  context:
    user: "fralychen"
    cluster: "fralychen"
- name: "fralychen1"   # 这是新加的
  context:
    user: "fralychen1"
    cluster: "fralychen1"


current-context: "fralychen" 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: wTU1aS1NLV2MrRS9JVXpsSEY3UGlYYzBUMXZNazRLbm11cwp5VlNmZz0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    server: https://10.111.111.111:6443
  name: abj
- cluster:
    certificate-authority-data: MKWHU5emloM0U0VUs0Ri9MTGRpTzA0MFIvVTV1YlJmQUVLWFUlRJRklDQVRFLS0tLS0K
    server: https://10.111.111.111:6443
  name: asg
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ2ekNDQXRPZ0F3i0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    server: https://10.111.111.111:6443
  name: cloud9-rs-bj
contexts:
- context:
    cluster: abj
    user: abj
  name: abj
- context:
    cluster: asg
    user: asg
  name: asg
- context:
    cluster: cloud9-rs-bj
    user: cloud9-rs-bj
  name: cloud9-rs-bj
current-context: fr
kind: Config
preferences: {}
users:
- name: abj
  user:
    client-certificate-data: dE92eXZrOWgKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    client-key-data: RFIEtFWS0tLS0tCg==
- name: asg
  user:
    client-certificate-data: hNU0VlNmVnWFVmWi9XWjVoY091ejIKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
    client-key-data: E9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
- name: cloud9-rs-bj
  user:
    client-certificate-data: EZRTlk4MlREbXNiU2E0S0ZQaGprZXM2TE9mTEtzLzM5NHRDS1BoagotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    client-key-data: bnc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=

集群切换

kubectl config view #查看config配置信息

....    # 省略输出

在pipeline中的CD环节,有时候需要部署到不同的K8S集群,比如开发环境、测试环境、生产环境。此时可以使用kubectl config来进行多个集群的管理。

  • 开发环境集群
  • 生产环境集群
    为了方便,我们使用Jenkins本机作为agent来配置两个K8S集群的认证文件,达到可以在本机上操作两个集群的目的。

scp root@192.168.2.29:/etc/kubernetes/admin.conf ~/.kube/config-work-prod
scp root@10.61.150.19:/etc/kubernetes/admin.conf ~/.kube/config-work-dev

我们已经完成了配置的拷贝,但是为了便于管理,我们需要对这些配置中的命名进行修改规范;我们要修改这两个配置文件,并着重关注三大要素:集群、上下文、用户;




1. 修改集群名称




2. 修改用户名称




3. 更新上下文名称,关联对应用户及集群

 
#dev

- context:

cluster: work-dev-cluster

user: work-dev-admin

name: kubernetes-dev



#prod

- context:

cluster: work-prod-cluster

user: work-dev-admin

name: kubernetes-prod




4. 将修改好的配置文件写入环境变量

vim ~/.bash_profile

export KUBECONFIG=$HOME/.kube/config-work-dev:$HOME/.kube/config-work-prod

source ~/.bash_profile

echo $KUBECONFIG

kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE

kubernetes-dev work-dev-cluster work-dev-admin

kubernetes-prod kubernetes kubernetes-admin




5. 或取全局上下文

kubectl config get-contexts




6. 获取当前K8S上下文

kubectl config current-context




7. 切换当前上下文

kubectl config use-context kubernetes-dev




8. kubectl config 命令见帮助信息

current-context 显示 current_context
delete-cluster 删除 kubeconfig 文件中指定的集群
delete-context 删除 kubeconfig 文件中指定的 context
get-clusters 显示 kubeconfig 文件中定义的集群
get-contexts 描述一个或多个 contexts
rename-context Renames a context from the kubeconfig file.
set 设置 kubeconfig 文件中的一个单个值
set-cluster 设置 kubeconfig 文件中的一个集群条目
set-context 设置 kubeconfig 文件中的一个 context 条目
set-credentials 设置 kubeconfig 文件中的一个用户条目
unset 取消设置 kubeconfig 文件中的一个单个值
use-context 设置 kubeconfig 文件中的当前上下文
view 显示合并的 kubeconfig 配置或一个指定的 kubeconfig 文件

使用 kubectl 管理多个 k8s 集群 - 知乎

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值