oke(k8s)多集群集中控制管理kubeconfig文件的生成 ·『云原生品鉴与布道』·
1、备份原config文件2、设置KUBECONFIG环境变量(把要合并的kubeconfig文件都列出)注意:不同kubeconfig文件,context中的cluster和user的名称是不能相同的,即,cluster/name 和users/name 在不同的kubeconfig文件中不能一样,否则,合并的时候只留一个。- cluster:中name: == - context中cluste
中心思想,用serviceaccoun权限代理useraccount权限来管理多集群。
## 在各集群生成各自kubeconfig文件
1、建立管理账号,绑定集群管理角色
```
# cat SC-rbac-oke-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: oke-admin
namespace: kube-system
---
apiVersion: v1
kind: Secret
metadata:
name: secret-sa-oke-admin
namespace: kube-system
annotations:
kubernetes.io/service-account.name: "oke-admin" # 这里填写serviceAccountName
type: kubernetes.io/service-account-token
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: oke-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: oke-admin
namespace: kube-system
```
2、获取oke-admin的token信息:
export TOKEN=$(kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep oke-admin | awk '{print $1}') | grep token: | awk '{print $2}')
3、获取OKE集群的server信息:
export SERVER=$(kubectl config view --flatten --minify | grep server | awk '{print $2}')
4、获取OKE集群的certificate-authority-data信息
export CERTIFICATE_AUTHORITY_DATA=$(kubectl config view --flatten --minify | grep certificate-authority-data | awk '{print $2}')
5、创建kubeconfig文件
cat > kubeconfig <<EOF
apiVersion: v1
kind: Config
users:
- name: oke-admin
user:
token: $TOKEN
clusters:
- cluster:
certificate-authority-data: $CERTIFICATE_AUTHORITY_DATA
server: $SERVER
name: oke-cluster
contexts:
- context:
cluster: oke-cluster
user: oke-admin
name: oke-admin@oke-cluster
current-context: oke-admin@oke-cluster
EOF
6、为避免名称一致,改成能识别的名称
mv kubeconfig kubeconfig-xxxx
## 修改各文件{context,cluster,user}name ,确保被识别元素唯一性
1、通过命令修改context名称
# kubectl config rename-context oke-admin@oke-cluster xinjiapo --kubeconfig=./kubeconfig-Singapore
# kubectl config rename-context oke-admin@oke-cluster fenghuangcheng --kubeconfig=./kubeconfig-fenghuangcheng
# kubectl config rename-context oke-admin@oke-cluster bali --kubeconfig=./kubeconfig-bali
# kubectl config rename-context oke-admin@oke-cluster xini --kubeconfig=./kubeconfig-xini
2、手动编辑修改修改各个kubecofig文件中的cluster/name 和users/name,使不一致。(修改字段举例如下:)
```
巴黎区别于悉尼:
- cluster:
name:oke-cluster-bali
- context:
cluster: oke-cluster-bali
user: oke-admin-bali
users:
- name: oke-admin-bali
-----------------------------------------------------------
- cluster:
name:oke-cluster-xini
- context:
cluster: oke-cluster-xini
user: oke-admin-xini
users:
- name: oke-admin-xini
```
## 合并各个kubeconfig
设置KUBECONFIG环境变量(把要合并的kubeconfig文件都列出)
# export KUBECONFIG=./kubeconfig-bali:./kubeconfig-fenghuangcheng:./kubeconfig-xini:./kubeconfig-xinjiapo
合并为一个
# kubectl config view --flatten > all-in-one-kubeconfig.yaml
## 用新生成的文件测试,连接各个k8s集群
# kubectl --context=xinjiapo --kubeconfig=all-in-one-kubeconfig.yaml get pod -o wide -A
# kubectl --context=bali --kubeconfig=all-in-one-kubeconfig.yaml get pod -o wide -A
# kubectl --context=fenghuangcheng --kubeconfig=all-in-one-kubeconfig.yaml get pod -o wide -A
# kubectl --context=xini --kubeconfig=all-in-one-kubeconfig.yaml get pod -o wide -A
## 替换默认的config文件
把生成的all-in-one-kubeconfig.yaml 替换原来的$HOME/.kube/config , 即可方便地在一台机器上控制所有k8s集群,控制权限受制于第一步创建ServiceAccount时给予的rbac,可以灵活控制,举例
# kubectl --context=bali get pod -o wide -A
### 其他快捷工具还有:
kubecm(https://cloud.tencent.com/developer/article/1649637)
kubectx,它可以比 kubectl 更快地在上下文(集群)之间切换,但还是依赖于 config 的合并。
https://github.com/ahmetb/kubectx
也可以使用国人开源的 ki命令行工具,不用合并 config,直接使用ki -s即可快速完成切换。
GitHub - ywgx/ki: Manage multiple kubeconfigs easily
== 最后给出我整理的命令参考 ==
1、备份原config文件
cp $HOME/.kube/config $HOME/.kube/config-backup
2、设置KUBECONFIG环境变量(把要合并的kubeconfig文件都列出)
export KUBECONFIG=$HOME/.kube/config:/path/cluster1:/path/cluster2
注意:
不同kubeconfig文件,context中的cluster和user的名称是不能相同的,即,cluster/name 和users/name 在不同的kubeconfig文件中不能一样,否则,合并的时候只留一个。
- cluster:中name: == - context中cluster: 各个kubeconfig文件中的不能一样
users:中 - name: == - context中user:
3、将所有 kubeconfig 文件合并为一个
kubectl config view --flatten > all-in-one-kubeconfig.yaml
4、验证后,改名为默认名称
mv all-in-one-kubeconfig.yaml $HOME/.kube/config
5、使用,按照kubeconfig中context名称来切换环境操作
kubectl config use-contexts $context名称
6、修改context名称,(有时原来定义的context name不好记忆,可以修改)
注意:修改后kubeconfig中内容并不会改变,可以备份后手动修改。
kubectl config rename-context old-context-name new-context-name --kubeconfig=/path/to/kubeconfig
7、执行kubectl指定context。
kubectl --context=spartan-eks get pod
kubectl --context=DDC-devops get pod
更多推荐
所有评论(0)