k8s context & kubeconfig
k8s context & kubeconfig
context 简介
在 Kubernetes 中,一个 "context" 是一个包含了一组集群、用户和命名空间的命名集合。kubectl context 命令用于管理这些上下文,并允许你在不同的 Kubernetes 集群之间切换,或者使用不同的用户和命名空间。
每个 context 包含以下信息,kubeconfig文件里配置:
- clusters:用于连接到 Kubernetes API Server 的地址和证书。
- users:用于身份验证的用户名和密码、客户端证书、客户端密钥等。
- context:用于连接user和cluster,指定哪个user去连接哪个cluster。我们切换集群的时候就是指定context
通过 kubectl config 命令,可以查看、创建、修改和删除 context。其中,kubectl config get-contexts 命令可以列出所有可用的 context,kubectl config use-context
通过使用 context,可以方便地在不同的 Kubernetes 集群、用户和命名空间之间切换,从而简化了在 Kubernetes 中进行开发和部署的工作。
context 组成
在开始之前我们先大体看一下成品吧,结束后再回来看会很清晰了
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM0VENDQWNtZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcw
server: https://192.168.10.30:6443
name: local
contexts:
- context:
cluster: local
user: kube-admin-local
name: local
current-context: local
kind: Config
preferences: {}
users:
- name: kube-admin-local
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURDakNDQWZLZ0F3SUJBZ0lJWDNDSmRzclJaTmt3RFFZ
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdWpmMGxCd20vbTZiQlpvN
//apiVersion:该字段指定此配置文件所针对的 Kubernetes API 版本。
//clusters:该字段包含可以被此配置文件定位的 Kubernetes 集群列表。在本例中,只有一个名为 local 的集群。
//cluster:该字段指定特定集群的配置详细信息。它包括用于验证服务器的服务器 URL 和证书授权。
//certificate-authority-data:该字段包含 base64 编码的证书授权数据。
//server:该字段指定此集群的 Kubernetes API 服务器的 URL。
//contexts:该字段包含可以与此配置文件一起使用的上下文列表。上下文包括一个集群和一个用户,并定义应使用哪个集群和用户来执行任何使用此上下文执行的 Kubernetes 命令。
//context:该字段指定特定上下文的配置详细信息。在本例中,只有一个名为 local 的上下文。
//user:该字段指定要用于此上下文的用户。在本例中,用户名为 kube-admin-local。
//client-certificate-data:该字段包含用于验证用户的 base64 编码的客户端证书数据。
//client-key-data:该字段包含用于验证用户的 base64 编码的客户端密钥数据。
创建上下文
//创建cxk-dev上下文
kubectl config set-context cxk-dev --cluster=cluster1 --user=admin --namespace=development
//--namespace=development 为上下文指定命名空间,这个是非必需的,如果不需要可以删除。它的作用是当我们用kubectl创建pod的时候,如果没有指定命名空间,会以这个命名空间作为pod的命名空间。
// --cluster=kubernets 是指定k8s集群的名称,这个名称不是随便写的。可以在k8s节点上执行kubectl config get-contexts,查看当前k8s的集群名称CLUSTER叫什么
//--user=kubernetes-admin 是指定用户身份验证信息的,执行 kubectl config get-user 可以看到
执行完后,我们就得到了一个上下文
查看上下文
kubectl config get-contexts
可以看到我们当前有3个上下文,目前正在第2个上下文上
切换上下文
//最终我们以此来切换不同的k8s集群
kubectl config use-context local
删除上下文
kubectl --kubeconfig=config-demo config unset contexts.<name>
指定上下文创建deployment
//当使用 kubectl 命令时,可以通过 --context 选项指定要使用的 context。例如,使用以下命令在指定的 context 中创建一个新的 Deployment:
//--context 选项指定了要使用的 context,my-context 是 context 的名称。这将在 my-context context 中创建一个新的 Deployment,并使用指定的镜像。
kubectl --context=my-context create deployment my-deployment --image=my-image