如何在各种已部署应用程序的 kubernetes 上下文之间切换?

Sco*_*and 4 amazon-web-services kubernetes

当我在 aws 上使用 kubernetes/cluster/kube-up.sh 部署每个应用程序时,我使用以下方法设置上下文:

CONTEXT=$(kubectl config view | grep current-context | awk '{print $2}')

kubectl config set-context $CONTEXT --namespace=${PROJECT_ID}
Run Code Online (Sandbox Code Playgroud)

我为多个应用程序执行此操作,并且每个应用程序都可以正常部署。但是,我需要能够在 kubernetes 上下文之间切换以与任意部署的应用程序交互(查看日志/执行 kubectl exec )

这是显示我所有上下文的方法

kubectl config view --output=json

{
    "kind": "Config",
    "apiVersion": "v1",
    "preferences": {},
    "clusters": [
        {
            "name": "aws_kubernetes",
            "cluster": {
                "server": "https://52.87.88.888",
                "certificate-authority-data": "REDACTED"
            }
        },
        {
            "name": "gke_primacyofdirectexperience_us-east1-b_loudhttpscluster",
            "cluster": {
                "server": "https://104.196.888.888",
                "certificate-authority-data": "REDACTED"
            }
        }
    ],
    "users": [
        {
            "name": "aws_kubernetes",
            "user": {
                "client-certificate-data": "REDACTED",
                "client-key-data": "REDACTED",
                "token": "taklamakan"
            }
        },
        {
            "name": "aws_kubernetes-basic-auth",
            "user": {
                "username": "admin",
                "password": "retrogradewaif"
            }
        },
        {
            "name": "gke_primacyofdirectexperience_us-east1-b_loudhttpscluster",
            "user": {
                "client-certificate-data": "REDACTED",
                "client-key-data": "REDACTED",
                "username": "admin",
                "password": "emptyadjacentpossible"
            }
        }
    ],
    "contexts": [
        {
            "name": "aws_kubernetes",
            "context": {
                "cluster": "aws_kubernetes",
                "user": "aws_kubernetes",
                "namespace": "ruptureofthemundaneplane"
            }
        },
        {
            "name": "gke_primacyofdirectexperience_us-east1-b_loudhttpscluster",
            "context": {
                "cluster": "gke_primacyofdirectexperience_us-east1-b_loudhttpscluster",
                "user": "gke_primacyofdirectexperience_us-east1-b_loudhttpscluster",
                "namespace": "primacyofdirectexperience"
            }
        }
    ],
    "current-context": "aws_kubernetes"
}
Run Code Online (Sandbox Code Playgroud)

你可以在上面看到我已经部署了两个应用程序......当我尝试选择我的 kubernetes 上下文时

kubectl config set-context  gke_primacyofdirectexperience_us-east1-b_loudhttpscluster  --namespace=${PROJECT_ID}

... outputs
context "gke_primacyofdirectexperience_us-east1-b_loudhttpscluster" set.


kubectl config set-cluster "gke_primacyofdirectexperience_us-east1-b_loudhttpscluster"

... outputs
cluster "gke_primacyofdirectexperience_us-east1-b_loudhttpscluster" set.
Run Code Online (Sandbox Code Playgroud)

然后当我发出类似的命令时它就会挂起

kubectl describe pods --namespace=primacyofdirectexperience 
Run Code Online (Sandbox Code Playgroud)

也许我缺少设置用户的命令,因为在上面的 json 中,每个部署的应用程序都有自己的用户名???

更新

kubectl config use-context gke_primacyofdirectexperience_us-east1-b_loudhttpscluster

... outputs
switched to context "gke_primacyofdirectexperience_us-east1-b_loudhttpscluster".
Run Code Online (Sandbox Code Playgroud)

但是现在当我发出任何 kubectl 命令时......例如

kubectl get pods 

.... outputs
Unable to connect to the server: x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)

这是我以前从未见过的错误......毫无疑问是由于切换问题

即使出现上述错误消息,/kubernetes/cluster/kube-down.sh 也能够拆除集群,因此希望切换能够正常工作!

Pix*_*ant 6

要在上下文之间切换,请使用use-context

kubectl config use-context gke_primacyofdirectexperience_us-east1-b_loudhttpscluster
Run Code Online (Sandbox Code Playgroud)

现在应用的任何 kubectl 命令都将应用于该集群(使用primacyofdirectexperience命名空间,因为您将其设置为集群的默认值)。

kubectl get pods
Run Code Online (Sandbox Code Playgroud)

现在将获得命名空间gke_primacyofdirectexperience_us-east1-b_loudhttpscluster上的所有 pod primacyofdirectexperience。要使用不同的命名空间,您可以应用 namspace 标志:

kubectl get pods --namespace=someothernamespace
Run Code Online (Sandbox Code Playgroud)

要再次切换上下文,只需use-context再次运行:

kubectl config use-context aws_kubernetes
Run Code Online (Sandbox Code Playgroud)

现在,

kubectl get pods
Run Code Online (Sandbox Code Playgroud)

aws_kubernetes使用default命名空间在集群上运行。

您始终可以kubectl通过运行来查看当前正在使用的上下文:

kubectl config current-context
Run Code Online (Sandbox Code Playgroud)