在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 文件
root@ubuntu:~/karmada# kubectl get clusters error: the server doesn't have a resource type "clusters" root@ubuntu:~/karmada# echo $KUBECONFIG /root/karmada/251.k8s.conf.in.ubuntu:/etc/kubernetes/admin.conf root@ubuntu:~/karmada# kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE karmada-apiserver251 karmada-apiserver karmada-apiserver * kubernetes-admin@kubernetes kubernetes kubernetes-admin root@ubuntu:~/karmada# kubectl get clusters error: the server doesn't have a resource type "clusters" root@ubuntu:~/karmada#
要执行export KUBECONFIG=/root/karmada/251.k8s.conf.in.ubuntu:/etc/kubernetes/admin.conf
root@ubuntu:~/karmada# export KUBECONFIG=/root/karmada/251.k8s.conf.in.ubuntu:/etc/kubernetes/admin.conf root@ubuntu:~/karmada# kubectl get clusters NAME VERSION MODE READY AGE 251k8s v1.18.1 Push True 19h root@ubuntu:~/karmada#
root@ubuntu:~/karmada# kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE k8s251 kubernetes251 kubernetes-admin karmada-apiserver251 karmada-apiserver251 karmada-apiserver * kubernetes-admin@kubernetes kubernetes kubernetes-admin root@ubuntu:~/karmada# kubectl config use-context k8s251 Switched to context "k8s251". root@ubuntu:~/karmada# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-f89759699-c7hj6 1/1 Running 0 19h root@ubuntu:~/karmada# kubectl config use-context karmada-apiserver251 Switched to context "karmada-apiserver251". root@ubuntu:~/karmada# kubectl get pods No resources found in default namespace. root@ubuntu:~/karmada# kubectl get works No resources found in default namespace. root@ubuntu:~/karmada# kubectl get clusters NAME VERSION MODE READY AGE 251k8s v1.18.1 Push True 19h root@ubuntu:~/karmada# kubectl config use-context kubernetes-admin@kubernetes Switched to context "kubernetes-admin@kubernetes". root@ubuntu:~/karmada# kubectl get pods error: You must be logged in to the server (Unauthorized) root@ubuntu:~/karmada#
root@ubuntu:~/karmada# kubectl config use-context kubernetes-admin@kubernetes Switched to context "kubernetes-admin@kubernetes". root@ubuntu:~/karmada# kubectl get pods NAME READY STATUS RESTARTS AGE apache-app-84f76964b5-fgsc7 1/1 Running 3 10d apache-app-84f76964b5-kt5cx 1/1 Running 0 14d example-foo-54dc4db9fc-fmsqn 1/1 Running 3 10d nginx-app-56b5bb67cc-mkfct 1/1 Running 3 10d nginx-app-56b5bb67cc-s9jtk 1/1 Running 0 14d web2-7cdf5dffb-26xrn 1/1 Running 3 15d web3-c9654466d-xwb5j 1/1 Running 3 15d root@ubuntu:~/karmada#
root@ubuntu:~/karmada# kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE k8s251 kubernetes251 kubernetes-admin251 karmada-apiserver251 karmada-apiserver251 karmada-apiserver251 * kubernetes-admin@kubernetes kubernetes kubernetes-admin root@ubuntu:~/karmada#
root@ubuntu:~/karmada# export KUBECONFIG=/root/karmada/251.k8s.conf.in.ubuntu:/etc/kubernetes/admin.conf root@ubuntu:~/karmada# kubectl config use-context karmada-apiserver251 Switched to context "karmada-apiserver251". root@ubuntu:~/karmada# kubectl get clusters NAME VERSION MODE READY AGE 251k8s v1.18.1 Push True 19h root@ubuntu:~/karmada#