Kubernetes学习笔记-在多个集群中使用kubectl 20230623

一、在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

你可能感兴趣的:(kubernetes,学习,笔记)