K8s 资源混乱怎么办?Namespace 隔离 + 上下文切换实战

📅 2026/8/27 12:53:44
K8s 资源混乱怎么办?Namespace 隔离 + 上下文切换实战
K8s 资源混乱怎么办Namespace 隔离 上下文切换实战Namespace and ContextsNamespace 介绍Namespace 管理Namespace 切换kubernetes 自带工具kubens-第三方工具自定义脚本Cluster 切换~/.kube/config 详解单集群配置多集群配置多集群切换kubernetes 自带工具kubectx-第三方工具Namespace and Contexts摘要本文全面介绍了 Kubernetes 中 Namespace 和 Context 的概念、管理与切换方法。首先解释了 Namespace 的作用——将物理集群逻辑划分为多个隔离的资源集合并介绍了默认的四个 Namespace。接着详细展示了 Namespace 的创建、查看、编辑和删除操作以及如何在特定 Namespace 中操作资源。然后讲解了 Namespace 切换的三种方式Kubernetes 自带工具、第三方工具 kubens 和自定义脚本。最后深入探讨了 Cluster 切换包括 kubeconfig 文件结构解析、单集群与多集群配置以及使用 kubectl 自带工具和第三方工具 kubectx 进行集群切换的实践方法。学习参考NamespaceNamespace 介绍**问题**多个用户使用同一个Kubernetes Cluster 如何将他们创建的资源隔离开呢答案Namespace简写ns也称之为project代表资源集合用于分组集群资源。Kubernetes 使用 Namespace 可以将一个物理的 Cluster 逻辑上划分成多个资源集合 每个集合就是一个Namespace。 不同Namespace 里的资源是完全隔离的。Kubernetes 默认创建以下Namespacedefault 创建资源时如果不指定Namespace 将被放到这个Namespace中。kube-system Kubernetes 自己创建的系统资源将放到这个Namespace中。kube-public该命名空间中所有对象可以被所有用户包括未验证身份的用户读取。kube-node-lease该命名空间含有与每个节点关联的Lease对象。节点租用允许kubelet发送heartbeat心跳以便控制平面能检测节点故障。思考所有对象都属于 Namespace 吗?**答**大多数Kubernetes资源例如 pod、services、pvc等都属于某个Namespace但 Namespace 资源本身并不在 Namespace 中更低级别资源如Node和persistentVolumes也不在任何Namespace中。Namespace 管理# 查看Namespace清单rootmaster30:~# kubectl get ns #kubectl get namespaces # 完整写法NAME STATUS AGE default Active 7d4h kube-node-lease Active 7d4h kube-public Active 7d4h kube-system Active 7d4h# 获取Namespace资源yaml格式定义文件rootmaster30:~# kubectl get ns default -o yaml# 创建Namespacerootmaster30:~# kubectl create ns lz# 注意命名空间名称满足正则表达式[a-z0-9]([-a-z0-9]*[a-z0-9])?最大长度为63位# 直接编辑Namespacerootmaster30:~# kubectl edit ns lz# 查看Namespace详细信息rootmaster30:~# kubectl describe ns lzName: lz Labels:noneAnnotations:noneStatus: Active No resource quota. No LimitRange resource.# 删除Namespacerootmaster30:~# kubectl delete ns lznamespacelzdeleted# 注意# 删除一个namespace会自动删除该namespace中所有资源。# default和kube-system命名空间不可删除。Namespace 还可以通过 yaml 文件创建。# ns-laoma.yamlapiVersion:v1kind:Namespacemetadata:name:lzrootmaster30:~# kubectl apply -f ns-lz.yamlnamespace/lz created操作特定ns中对象需要使用选项-n指定ns例如# 在lz ns创建nginx podrootmaster30:~# kubectl run web --imagenginx -n lzpod/web created# 查看lz下所有pod同时输出节点/IProotmaster30:~# kubectl get pod -n lz -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES web1/1 Running039s10.224.113.129 worker32.lz.cloudnonenonerootmaster30:~# curl -s 10.224.113.129 | grep nginxtitleWelcome to nginx!/titleh1Welcome to nginx!/h1pIf you see this page, nginx is successfully installed and working.ahrefhttps://nginx.org/nginx.org/a.br/ahrefhttps://community.nginx.org/community.nginx.org/a.br/ahrefhttps://f5.com/nginxf5.com/nginx/a./ppemThank youforusing nginx./em/pNamespace 切换kubernetes 自带工具查看当前所在ns# 查看所有上下文显示当前默认nsrootmaster30:~# kubectl config get-contextsCURRENT NAME CLUSTER AUTHINFO NAMESPACE * kubernetes-adminkubernetes kubernetes kubernetes-admin出列说明CURRENT*代表当前正在使用的上下文NAME上下文名称集群 用户组合CLUSTER集群地址标识AUTHINFO认证用户NAMESPACE该上下文绑定的默认命名空间空 default此时NAMESPACE列对应的属性为空不属于任何NAMESPACE。设置默认ns# 修改当前上下文的默认命名空间为lzrootmaster30:~# kubectl config set-context --current --namespacelzContextkubernetes-adminkubernetesmodified. rootmaster30:~# kubectl config get-contextsCURRENT NAME CLUSTER AUTHINFO NAMESPACE * kubernetes-adminkubernetes kubernetes kubernetes-admin lz此时NAMESPACE列对应的属性为 lz。kubens-第三方工具kubens 安装# 下载kubens二进制到系统全局命令目录rootmaster30:~# wget http://192.168.46.200/class/course-materials/softwares/stage03/kubens -O /usr/local/bin/kubens# 添加执行权限rootmaster30:~# chmod x /usr/local/bin/kubens# 配置补全rootmaster30:~# wget http://192.168.46.200/class/course-materials/softwares/stage03/kubens.bash -O /etc/bash_completion.d/kubens.bash# 加载补全立即生效rootmaster30:~# source /etc/bash_completion.d/kubens.bashkubens 命令使用rootmaster30:~# kubens -hUSAGE: kubens:list the namespacesinthe current context kubensNAME:change the active namespace of current context kubens -:switch to the previous namespaceinthis context kubens -c,--current:show the current namespace kubens -h,--help:show this message rootmaster30:~# kubensdefault kube-node-lease kube-public kube-system lz rootmaster30:~# kubens kube-systemrootmaster30:~# kubectl config get-contextsCURRENT NAME CLUSTER AUTHINFO NAMESPACE * kubernetes-adminkubernetes kubernetes kubernetes-admin kube-system rootmaster30:~# kubectl get podsNAME READY STATUS RESTARTS AGE calico-kube-controllers-7cb4fd5784-dqv6n1/1 Running019m calico-node-5k2bp1/1 Running018m calico-node-6vpt61/1 Running019m calico-node-7x82d1/1 Running019m coredns-66f779496c-h89xx1/1 Running019m coredns-66f779496c-zqqxd1/1 Running019m etcd-master30.lz.cloud1/1 Running219m kube-apiserver-master30.lz.cloud1/1 Running219m kube-controller-manager-master30.lz.cloud1/1 Running219m kube-proxy-7l9pr1/1 Running019m kube-proxy-9djwp1/1 Running019m kube-proxy-n2bk91/1 Running018m kube-scheduler-master30.lz.cloud1/1 Running219m自定义脚本#!/bin/bashfunctionusage(){echo$0[namespace] 1. 没有namespace参数时显示namespace清单 2. namespace必须是集群中存在的namespace}# 获取当前namespacenamespace$(kubectl config get-contexts|awk/\*/{print $5})if[-z$namespace];thennamespacedefaultfi# 显示 namespace清单if[$#-eq0];thenkubectl get ns|awk{print $1}|seds/^$namespace/\*$namespace/exit1fi# 切换 namespaceif[$#-eq1];thenifkubectl get ns|awk$1 !~ NAME {print $1}|grep-qx$1/dev/null;thenkubectl config set-context--current--namespace$1/dev/nullecho当前namespace设置为$1elseusagefifiCluster 切换~/.kube/config 详解单集群配置获取凭据文件内容不显示敏感信息# 查看kubeconfig隐藏证书密钥明文rootmaster30:~# kubectl config viewapiVersion:v1clusters:-cluster:certificate-authority-data:DATAOMITTEDserver:https://10.1.8.30:6443name:kubernetescontexts:-context:cluster:kubernetesnamespace:kube-systemuser:kubernetes-adminname:kubernetes-adminkubernetescurrent-context:kubernetes-adminkuberneteskind:Configpreferences:{}users:-name:kubernetes-adminuser:client-certificate-data:DATAOMITTEDclient-key-data:DATAOMITTED配置文件示例apiVersion:v1clusters:-cluster:certificate-authority-data:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EUXdNakExTURZd05Wb1hEVE15TURNek1EQTFNRFl3TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTHg5ClZnNGUyR3dUTkVUaUowTjBqV09hZ2NvQVRnclFzVXVjWU1Jb281YWFZZGtTZGY2amdJanhTeEtNTmZyL3MrQWQKems5S25CL2UwS0ZxSEJwOEhsQy9VZ0JTK1V2THl6b2VuWVNFM29MWmJzdDhwY1JXL0ZWQVdQckRkS1VhcTdJcApyVXpvQlRTSHRHSEluNitLR1htZ3BwWkdLK3pRT2pjTWYyT2IxOGZ0NDZDbXNFT24rMmhKZk13eHBUd3k0dEgvCktteWhnVStYUys1c0Z5L0N2R1gwbUEzbWpzeHZ4VnFmamQ0T2F0RVVhamN5aERVc3FxRVVBUmNWZGdpbkhUc2IKdWVhc3NieUFZSGRJWGFiMjQvVzg0ZXpDYk8vMGhvcHhZZFhGVDYxQVc3R2RNL0IvNlYyU0hDWUFCd2FKU1dmNApZWHFpajJoMndUNDdYZHZscHNzQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZLWlJpc2FLS1c4YjFFcUlHeHhTcTkrdUdEWFNNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRjhHSjI1c1RqVEd3RDRoSDVmegp5bXU2WGhSd212ejBzemNKUTVKVVlsSndpUlJ0NUVBZ2lNUHZ0MndIeGt1UExGWDAwRFZ2MWorQkEzaEt5Wk5GClVaQUdrRmVwK0JyOWZYUWxVSE15OHZTZjFZSVhBRk43MFdBT0dFdVZjWEJDeDFNbWlBTndObUQyck1LdmFJK1cKci80Y1hMdXdVZlNUaUZaeFpaVGdaRkFtSFJ0QnVvSmpoaStmQjRPT2xTRFNEMU9PaFZjVVc3bWo3YkhJUjN1cgpzRnFYakp5eEc0T0JadlM5MTBXMUNtYTJWUTFCYnprY1h0YzJZOUdDSS9Cd3h2a0labWFSYy9ETFY1M0YxSmxXCnluNmovZEpvdmd6SGZqaVhheUxoekpaUDhMaG9ULzFacFQ2K214Uml0SHVMM2RVRW9oL2ttSzZqclBjZlFUWlMKTnRrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgserver:https://10.1.8.30:6443name:kubernetescontexts:-context:cluster:kubernetesuser:kubernetes-adminname:kubernetes-adminkubernetescurrent-context:kubernetes-adminkuberneteskind:Configpreferences:{}users:-name:kubernetes-adminuser:client-certificate-data:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJYm9pOWR1alB4dEF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TWpBME1ESXdOVEEyTURWYUZ3MHlNekEwTURJd05UQTJNRGRhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXhSbWh6MkpjWG83RmNIb1QKQ0d6dHkyRGplM1FvYVl1djVMMmV2V3NpMk14SmZRLzVnRWg4cDdXZEdTQ0NDL0t5a2Fvbk9ZWFh3MkxEVi9yVQpkbEtNbUtTN2s1eG5WWWV1M0EyZGlCMTU1MVVFK0lTelVPTE54c3J0MjdVajRuMDliUU5kSzhjeEZvclhxVUV0ClppVTdHY0dOZ3hRUVA4MkhGSDdTb09RTXRtTmo0bXdMWHVZbEFWODZ5TXl5RThQYjF5Y0FoQjhVY1BFUmRUeWQKeEtUY3FVbG0xYnQ4cU1CRzlYWUZFNk1IUUpldXk0Rnk3NjlYL2ZJNk9SZCtuUGdVWHVVd0FUYVdYR2JIeWhoUApDS0dKWXdzY09PRUFmWnRWV3RYUkxiM1pEWWpiVmFqTzllT0ZHYnorcjRxVDR2NEpkL1dZZ1RLcmUvTDBzVlhRCkROZWZDd0lEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JTbVVZckdpaWx2RzlSS2lCc2NVcXZmcmhnMQowakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBckt4cjhFbEtYN2FYWUMvdzZhUFg4M3JvRHl0Q0NudTBTMHpWCm5WTVFnMUsvUmhRSGV5TnY2SGtycTJXSFhoUjh1L2M3Ukw3WGwyeDlzcWhPWmR3cGRrUlBXK0RENEs4TFMwYjAKUnhwdGxraW44UFE5QkZEOExuNDlmdmNhRG9LT0lhV2djZFFVMFRKQVZoZ1RNQ3FZZ0ZNTUhQa3I2d2Q2WVFtMgp3KzhsVlNCNytmeERKVlhkeUZWMFdOdk5Jb1JrM0FCcGEyOVVVZlZoY1FnZGI2M1RFamgwUlI0d014bjhhY2E1CnNiaE1wVmZiT2ZUU0pRTUJGRkRkMG5DWnJSN3NxQWluOUE2M3RydWZLTzJMTEF0YUVJeDRMUzJWZ09veG5odWEKQlh6UGp4SHF5TTR1WFRqQVlOMk44K2wxWXRBeSs0VTg2ZzVEMEZZeUpSTE5NMU5VL2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgclient-key-data:LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBeFJtaHoySmNYbzdGY0hvVENHenR5MkRqZTNRb2FZdXY1TDJldldzaTJNeEpmUS81CmdFaDhwN1dkR1NDQ0MvS3lrYW9uT1lYWHcyTERWL3JVZGxLTW1LUzdrNXhuVllldTNBMmRpQjE1NTFVRStJU3oKVU9MTnhzcnQyN1VqNG4wOWJRTmRLOGN4Rm9yWHFVRXRaaVU3R2NHTmd4UVFQODJIRkg3U29PUU10bU5qNG13TApYdVlsQVY4NnlNeXlFOFBiMXljQWhCOFVjUEVSZFR5ZHhLVGNxVWxtMWJ0OHFNQkc5WFlGRTZNSFFKZXV5NEZ5Cjc2OVgvZkk2T1JkK25QZ1VYdVV3QVRhV1hHYkh5aGhQQ0tHSll3c2NPT0VBZlp0Vld0WFJMYjNaRFlqYlZhak8KOWVPRkdieityNHFUNHY0SmQvV1lnVEtyZS9MMHNWWFFETmVmQ3dJREFRQUJBb0lCQUNkS0hMOUNWRGRsTG1abApielhXd1BBeHVDYjcyTEp4YmZhaTllbThXWTN0NnhoSy91bGJpYjNFcmpROERyQmpDTVdRclpFQjVTakZuenNDCmZTZTQvTjNRdUxPTUVlMHl4dUNHdGtoVDErRU5TWmhnbTM0Y04valFxdW1KQ2tZendQTGlJTWlCUkgvQjNZdVgKdW4wS0h1WGJkMklSdGN1Q0pOTXBGTU9Oc2hzSkMyRTI1cmhXazlZZFdKTVVQV2JjMGZUd0RDdHhVSXpRNWhycApOa0tGenpBekdiVFA2dXA2dWJrYzQ4Zm9BNDVTRUJLNkhhcFZBNEQ1NzNQNFNmZWRodmhMVG9lbmQzM3NmeTJYCjlkS1dFOUg4VUQ3VGFRc3N6MG8xSU1xK0xVVU5UNUVqRkVCOXVtemIxTHB4YW1wUFJqVVpXU2ZEcXJDbGlvMkUKWHFaWkd3RUNnWUVBMm5Tbmd2R0p2NUZhdFVQeGppbWMyNHhOWjZSTWhRRFc3OG9TRUYrUUVoV2RscGlwTk94QQpVNTJNY1NrSmNMR1Jkd3VIaWdjQXVWVW90N09sak9MU1Zzak4yN0xRQTFraTNXbjYxeWVKUSs5MVpZMW9GaUJQCmpBZWJoS1BJanFPT2p3YUsrMEJ5cGFJb2dTb215dzErNklrSE5kNmJkc2FQbG1aMU9wc0hjRHNDZ1lFQTV2bG0KOGNvUUlEWWx5Q0x3YzMzSWRHd0xsWU9KUmFNdCs5QXRNY1VaZGZZN2gvaUlWTE4wSEZkUUFkOWxLUUxyNlpZVApuS0lWcUdzU1BiM2kyMCsyZHNVN3VPUjNOVkZCeHcvZUVVM1FnTjFtVTRnZzBLNnpORUpkKzZaYVo2cUQyVVhRCnY3cTdiOHhzekJoUkNMakdjb1huL2ZnWFBIWmRDUE9VVUVIWTczRUNnWUVBek1RSHVDK2JoSnRFd1IvY3JmckgKY3V1Q0txSFFyK0xubFlCOWlpZHBMZXBnK3FaQ0JMOW1WSG9iQ0g4RXdFTlJMSnI4QXg4cFNJOVFTVkQwM3FoRgpyTjh3UnJ6SFNqd2srQkc4OUN1MCtKN2VGY0NFVGlrZkp3eUNjOFBwMi9ublNKMURiTnN1RzU5eUJCQjBxR1FRCkR2dFNiT1lxSngxYnZnaHYzZTB1L2IwQ2dZRUF4NHc1TURQT2NzWFZKbTlwSlo1S0RLczc1dFJaU0Z5T1lidWQKRUI2a3ZKRWJKWUhHNXNhVFRkanhPbXp5VE5oRlVPMWp6RE1NV3hFR0ZXbDBFTjF4V25OVUFZMEFvSU92UEhlcwo5MjR1OE9aV2ZWeGlYV2hSVXBqejhYSHJNUnpVQkdhWXpzeFpHMkdWclU1azFCQXZBc3BGZjlsUzJkMjR5djhGCjU4QzcxMEVDZ1lBV0p4NmpuV05vbGc1QzhvSGpDT0Jkb0RGdHhGeEpiT2M5QUJ2aHpZbGlTSHp5aTY3RjVQZ28KREdaWXJjWWZxYVY5MVl5R24xaWQybG5GcVZoZ1VGYnpGS2t4U0FaS0FJVDRwbGNucVRWQm9oc1UwMkxqSUdEZwpESU5SQW8xb0dqRTdOM3FWUVFzS0huSDBnUXNwWVZpN3NFRzRDdWtZSDQ2MUNCM0dET0N0b3c9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo说明certificate-authority-data 指定CA证书通过base64编码。# 解码base64证书查看原始证书内容rootmaster30:~# echo LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJYm9pOWR1alB4dEF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TWpBME1ESXdOVEEyTURWYUZ3MHlNekEwTURJd05UQTJNRGRhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXhSbWh6MkpjWG83RmNIb1QKQ0d6dHkyRGplM1FvYVl1djVMMmV2V3NpMk14SmZRLzVnRWg4cDdXZEdTQ0NDL0t5a2Fvbk9ZWFh3MkxEVi9yVQpkbEtNbUtTN2s1eG5WWWV1M0EyZGlCMTU1MVVFK0lTelVPTE54c3J0MjdVajRuMDliUU5kSzhjeEZvclhxVUV0ClppVTdHY0dOZ3hRUVA4MkhGSDdTb09RTXRtTmo0bXdMWHVZbEFWODZ5TXl5RThQYjF5Y0FoQjhVY1BFUmRUeWQKeEtUY3FVbG0xYnQ4cU1CRzlYWUZFNk1IUUpldXk0Rnk3NjlYL2ZJNk9SZCtuUGdVWHVVd0FUYVdYR2JIeWhoUApDS0dKWXdzY09PRUFmWnRWV3RYUkxiM1pEWWpiVmFqTzllT0ZHYnorcjRxVDR2NEpkL1dZZ1RLcmUvTDBzVlhRCkROZWZDd0lEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JTbVVZckdpaWx2RzlSS2lCc2NVcXZmcmhnMQowakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBckt4cjhFbEtYN2FYWUMvdzZhUFg4M3JvRHl0Q0NudTBTMHpWCm5WTVFnMUsvUmhRSGV5TnY2SGtycTJXSFhoUjh1L2M3Ukw3WGwyeDlzcWhPWmR3cGRrUlBXK0RENEs4TFMwYjAKUnhwdGxraW44UFE5QkZEOExuNDlmdmNhRG9LT0lhV2djZFFVMFRKQVZoZ1RNQ3FZZ0ZNTUhQa3I2d2Q2WVFtMgp3KzhsVlNCNytmeERKVlhkeUZWMFdOdk5Jb1JrM0FCcGEyOVVVZlZoY1FnZGI2M1RFamgwUlI0d014bjhhY2E1CnNiaE1wVmZiT2ZUU0pRTUJGRkRkMG5DWnJSN3NxQWluOUE2M3RydWZLTzJMTEF0YUVJeDRMUzJWZ09veG5odWEKQlh6UGp4SHF5TTR1WFRqQVlOMk44K2wxWXRBeSs0VTg2ZzVEMEZZeUpSTE5NMU5VL2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg | base64 -d-----BEGIN CERTIFICATE----- MIIDITCCAgmgAwIBAgIIboi9dujPxtAwDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE AxMKa3ViZXJuZXRlczAeFw0yMjA0MDIwNTA2MDVaFw0yMzA0MDIwNTA2MDdaMDQx FzAVBgNVBAoTDnN5c3RlbTptYXN0ZXJzMRkwFwYDVQQDExBrdWJlcm5ldGVzLWFk bWluMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxRmhz2JcXo7FcHoT CGzty2Dje3QoaYuv5L2evWsi2MxJfQ/5gEh8p7WdGSCCC/KykaonOYXXw2LDV/rU dlKMmKS7k5xnVYeu3A2diB1551UEISzUOLNxsrt27Uj4n09bQNdK8cxForXqUEt ZiU7GcGNgxQQP82HFH7SoOQMtmNj4mwLXuYlAV86yMyyE8Pb1ycAhB8UcPERdTyd xKTcqUlm1bt8qMBG9XYFE6MHQJeuy4Fy769X/fI6ORdnPgUXuUwATaWXGbHyhhP CKGJYwscOOEAfZtVWtXRLb3ZDYjbVajO9eOFGbzr4qT4v4Jd/WYgTKre/L0sVXQ DNefCwIDAQABo1YwVDAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUH AwIwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSmUYrGiilvG9RKiBscUqvfrhg1 0jANBgkqhkiG9w0BAQsFAAOCAQEArKxr8ElKX7aXYC/w6aPX83roDytCCnu0S0zV nVMQg1K/RhQHeyNv6Hkrq2WHXhR8u/c7RL7Xl2x9sqhOZdwpdkRPWDD4K8LS0b0 Rxptlkin8PQ9BFD8Ln49fvcaDoKOIaWgcdQU0TJAVhgTMCqYgFMMHPkr6wd6YQm2 w8lVSB7fxDJVXdyFV0WNvNIoRk3ABpa29UUfVhcQgdb63TEjh0RR4wMxn8aca5 sbhMpVfbOfTSJQMBFFDd0nCZrR7sqAin9A63trufKO2LLAtaEIx4LS2VgOoxnhua BXzPjxHqyM4uXTjAYN2N8l1YtAy4U86g5D0FYyJRLNM1NU/g-----END CERTIFICATE-----client-certificate-data 指定用户证书同样是 base64 编码。client-key-data 指定用户私钥同样是 base64 编码。# 或者使用以下命令获取不显示具体证书和key内容rootmaster30:~# kubectl config viewapiVersion:v1clusters:-cluster:certificate-authority-data:DATAOMITTEDserver:https://10.1.8.30:6443name:kubernetescontexts:-context:cluster:kubernetesuser:kubernetes-adminname:kubernetes-adminkubernetescurrent-context:kubernetes-adminkuberneteskind:Configpreferences:{}users:-name:kubernetes-adminuser:client-certificate-data:REDACTEDclient-key-data:REDACTED多集群配置示例/root/multi-cluster-configapiVersion:v1clusters:-cluster:certificate-authority-data:DATAOMITTEDserver:https://10.1.8.30:6443name:cluster1-cluster:certificate-authority-data:DATAOMITTEDserver:https://10.1.8.150:6443name:cluster2contexts:-context:cluster:cluster1namespace:defaultuser:cluster1-adminname:cluster1-context-context:cluster:cluster2namespace:defaultuser:cluster2-adminname:cluster2-contextcurrent-context:cluster1-contextkind:Configpreferences:{}users:-name:cluster1-adminuser:client-certificate-data:DATAOMITTEDclient-key-data:DATAOMITTED-name:cluster2-adminuser:client-certificate-data:DATAOMITTEDclient-key-data:DATAOMITTED配置文件定义了以下资源clusters集群信息包括集群名、authority、地址和端口。users用户信息包括用户名、certificate和key。contexts上下文信息包括上下文名称、集群名、用户名和namespace。多集群切换kubernetes 自带工具环境准备rootmaster30:~# cp .kube/config .kube/config.orirootmaster30:~# cp multi-cluster-config .kube/config查看集群清单# 查看所有集群名称rootmaster30:~# kubectl config get-clustersNAME cluster1 cluster2查看上下文清单# 查看全部上下文区分当前生效集群rootmaster30:~# kubectl config get-contextsCURRENT NAME CLUSTER AUTHINFO NAMESPACE * cluster1-context cluster1 cluster1-admin default cluster2-context cluster2 cluster2-admin default* 代表当前使用的上下文切换上下文# 切换到指定上下文切换集群rootmaster30:~# kubectl config use-context cluster2-contextrootmaster30:~# kubectl config get-contextsCURRENT NAME CLUSTER AUTHINFO NAMESPACE cluster1-context cluster1 cluster1-admin default * cluster2-context cluster2 cluster2-admin defaultkubectx-第三方工具kubectx 安装rootmaster30:~# wget http://192.168.46.200/class/course-materials/softwares/stage03/kubectx -O /usr/local/bin/kubectxrootmaster30:~# chmod x /usr/local/bin/kubectx# 配置补全rootmaster30:~# wget http://192.168.46.200/class/course-materials/softwares/stage03/kubectx.bash -O /etc/bash_completion.d/kubectx.bashrootmaster30:~# source /etc/bash_completion.d/kubectx.bashkubectx 帮助rootmaster30:~# kubectx -hUSAGE: kubectx:list the contexts kubectxNAME:switch to contextNAMEkubectx -:switch to the previous context kubectx -c,--current:show the current context name kubectxNEW_NAMENAME:renamecontextNAMEtoNEW_NAMEkubectxNEW_NAME.:renamecurrent-context toNEW_NAMEkubectx-dNAME[NAME...]:delete contextNAME(.forcurrent-context)(thiscommandwont delete the user/cluster entry that is used by the context)kubectx -u,--unset:unsetthe current context kubectx -h,--help:show this messagekubectx# 列出所有上下文集群kubectx cluster2-context# 切换到指定集群上下文kubectx -# 切回上一个集群kubectx-c/--current# 打印当前使用的集群上下文名kubectxnewnameoldname# 重命名上下文kubectxnewname.# 给当前上下文重命名kubectx-dctx1 ctx2# 删除指定上下文不会删除集群/用户配置kubectx-u# 清空current-context不绑定任何集群kubectx-h# 帮助kubectx 命令使用rootmaster30:~# kubectxcluster1-context cluster2-context rootmaster30:~# kubectx -ccluster2-context rootmaster30:~# kubectx cluster1-contextSwitched to contextcluster1-context.rootmaster30:~# kubectx -ccluster1-context rootmaster30:~# kubectx -uUnsetting current context. Propertycurrent-contextunset. rootmaster30:~# kubectx -cerror: current-context is notset