一、在Minikue和Google Kubernetes引擎之间切换
切换到Minikube
$minikube start
Starting local kubernetes cluster...
...
Setting up kubeconfig...
kubectl is now configured to use the cluster
从Minikube切换到GKE后,可以通过停止Minikube并重新切换回来。这时kubectl会被再次重新设置以适用于Minikube集群
切换到GKE
$gcloud container clusters get-credentials my-gke-cluster
二、在多集群或多命名空间下使用kubectl
如果需要在多个kubernetes集群之间切换,或想在命名空间之外的命名空间下工作,但不想在每次运行kubectl时指定--namespace选项,可以执行以下操作
1、配置kubeconfig文件的路径
kubectl使用的配置通常存储在~/.kube/config文件中。如果存储在其他位置,环境变量KUBECONFIG需要指向配置文件的位置
可以通过在KUBECONFIG环境变量中指定多个配置文件(使用冒号分割)来让kubectl一次性加载全部配置
2、了解kubeconfig文件的内容
kubeconfig文件示例
apiVersion:v1
clusters:
-cluster:
certificate-authority:/home/luksa/.minikube/ca.crt
server:https://192.168.99.100:8443
name:minikube
contexts:
-context:
cluster:minikube
user:minikube
namespace:default
name:minikube
current-context:minikube
kind:Config
preferences:{}
users:
name:minikube
user:
client-certificate:/home/luksa/.minikube/apiserver.crt
client-key:/home/luksa/.minikube/apiserver.key
kubeconfig文件由以下四部分组成:
每个集群、用户和上下文都有一个名称用于区分
集群(cluster)
集群条目代表kuberrnetes集群,并包含api服务器的URL、证书颁发机构(CA)文件,以及可能与通过API服务器进行通信相关的一些其他配置选项。CA证书可以存储在单独的文件中并在kubeconfig文件中引用,也可以直接将其包含在certificate-authority-data字段中。
用户(users)
每个用户定义了在与API服务器交谈时使用的凭证。这可以是用户名和密码、身份验证令牌火客户端密钥和证书。证书和密钥可以包含在kubeconfig文件中(通过client-certificate-data和client-key-data属性),或者存储在单独的文件中并配置文件中引用。
上下文(context)
上下文将kubectl执行命令时应使用的集群、用户以及默认命名空间关联在一起。多个上下文可以指向同一用户或者集群。
当前上下文(current-context)
虽然可以在kubeconfig文件中定义多个上下文,但在同一时间,只有其中一个是当前上下文。
3、查询、添加和修改kube配置条目
既可以手动编辑该文件以添加、修改和删除集群、用户和上下文信息,也可以通过kubectl config命令进行这些操作。
添加或修改一个集群
kubectl config set-cluster命令添加一个集群
$kubectl config set-cluster my-other-cluster
返回:
--server=http://k8s.example.com:6443
--certificate-authority=path/to/the/cafile
如果指定的集群名称已存在,则set-cluster 命令将会覆盖该同名集群的配置选项
添加或修改用户凭证
$kubectl config set-credentials foo --username=foo --password=pass
使用基于token的认证方式
$kubectl config set-credentials foo --tolen=mysecrettokenXFDJIQ1234
如果使用相同凭证来针对不同集群进行身份验证,则可以自定义一个用户并将其用于两个集群
将集群和用户凭证联系到一起
上下文中定义了哪个用户使用哪个集群,同时也可以定义kubectl应该使用的命名空间,这样就不需要使用--namespace或者-n选项手动指定命名空间。
$kubectl config set-context some-context --cluster=my=other-cluster
返回:
--user=foo --namespace=bar
这会创建一个名为some-context的上下文,该上下文使用my-other=cluster集群和foo用户凭证。次上下文中的默认命名空间设置为bar
也可以 使用同样的命令来更改当前上下文的命名空间。
$kubectl config current-context
使用如下命令修改命名空间
$kubectl config set-context minikube --namespace=another-namespace
4、在不同的集群、用户和上下文中使用kubectl
在运行kubectl命令时,会使用kubeconfig当前上下文中定义的集群、用户和命名空间,同时也可以使用以下命令选项覆盖它们:
--user 指定一个kubeconfig文件中不同的用户
--username和--password 分别指定不同的用户名和密码(该用户名和密码不需要在配置文件中预先定义),如果使用其他类型认证,可以使用--client-key、--client-certificate或--token
--cluster 指定一个不同的集群(该集群必须在配置文件中预先定义)
--server 指定一个不同服务器的url(配置文件中不存在的)
--namespace 指定一个不同的命名空间
5、切换上下文
可以使用set-context命令创建附加上下文,然后在上下文之间切换
$kubectl config user-context my-other-context
这样就将当前上下文切换到my-other-context
6、列出上下文和集群
$kubectl config get-contexts
7、删除上下文和集群
$kubectl config delete-config my-unused-context
和
$kubectl config delete-cluster my-old-cluster