【问题标题】:kubectl command for talking to multiple physical clusters用于与多个物理集群通信的 kubectl 命令
【发布时间】:2022-08-23 00:32:23
【问题描述】:

这是我的~/.kube/config 文件:

apiVersion: v1
clusters:
- cluster:
    server: https://192.168.10.190:6443
  name: cluster-1
- cluster:
    server: https://192.168.99.101:8443
  name: cluster-2
contexts:
- context:
    cluster: cluster-1
    user: kubernetes-admin-1
  name: cluster-1
- context:
    cluster: cluster-2
    user: kubernetes-admin-2
  name: cluster-2
kind: Config
preferences: {}
users:
- name: kubernetes-admin-1
  user:
    client-certificate: /home/user/.minikube/credential-for-cluster-1.crt
    client-key: /home/user/.minikube/credential-for-cluster-1.key
- name: kubernetes-admin-2
  user:
    client-certificate: /home/user/.minikube/credential-for-cluster-2.crt
    client-key: /home/user/.minikube/credential-for-cluster-2.key

我的理解是,cluster-1 & cluster-2 是 Kubernetes 物理集群(Control Plane)。

每个物理集群有多个虚拟集群(Namespaces

如果我的理解是正确的,那么用上面的kubeConfigkubectl的语法是什么获取集群中的所有命名空间?

    标签: kubernetes kubectl kubeconfig


    【解决方案1】:

    简短的回答,您可以在kubeconfig 中获取现有集群中的所有 ns

    for context in $(kubectl config view -o jsonpath='{.clusters[*].name}'); do 
    kubectl config use-context $context ;
    kubectl get ns;
    done
    #or
    for context in $(kubectl config view -o jsonpath='{.clusters[*].name}'); do kubectl config use-context $context ;kubectl get ns;done
    

    你可以得到所有命名空间使用以下命令从每个集群(当前上下文)

    kubectl get namespace
    

    以上将在当前上下文中返回namespace,因此您有两个集群,这意味着您将需要两个不同的上下文来从两个集群中获取所有命名空间

    kubeconfig 文件中的上下文元素用于以方便的名称对访问参数进行分组。每个上下文都有三个参数:集群、命名空间和用户.默认情况下,kubectl 命令行工具使用来自与集群通信的当前上下文.

    organize-cluster-access-kubeconfig-context

    命名空间只是隔离的资源。例如

    你不能创造两次部署在单个命名空间中具有相同名称,因为这些资源是命名空间范围.

    因此您可以在developstageproduction 命名空间下部署多个部署。

    kubernetes-namespaces

    【讨论】:

      【解决方案2】:

      在 Kubernetes 中,没有物理或虚拟集群之类的东西。 Kubeconfig 由三部分组成。

      • 集群
      • 用户
      • 上下文
      1. 集群- 由不同虚拟机/本地节点组成的 k8s 集群
      2. 用户- 有权访问集群的用户,可以是kube-admin 或普通开发者。用户可以拥有定义用户可以操作哪些资源的角色 (RBAC)
      3. 上下文- 一个集群和一个用户之间的链接,因为您以用户身份使用一个集群。

        现在对于命名空间,它们就像 linux 网络命名空间一样工作。把它想象成一个有家人住在里面的房子。如果你住的房子里有鲍勃·纽曼,你会简单地叫他鲍勃。如果鲍勃住在另一所房子里,你会称他为鲍勃·纽曼。命名空间从逻辑上拆分集群内的资源。你可以有例如监控命名空间、工资单命名空间、后端命名空间。 房子有不同

      【讨论】:

        【解决方案3】:

        希望这个答案对您有所帮助:

        使用上下文管理多个集群

        假设我们有多个集群给管理员,所以我们有多个kubeconfig 文件。

        但是每次在我们的kubectl 命令中使用--kubeconfig 选项并不是那么有效!


        使用上下文访问多个集群

        • 在 1kubeconfig 文件中定义所有集群和用户
        • 为每个集群定义一个上下文
        • 我们可以使用这些上下文在集群之间切换
        • 无需指定 kube kconfig 文件

        什么是上下文?

        在 kubeconfig 文件中,我们有:

        • K8s 集群列表
        • K8s 用户列表
        • kubeconfig 文件中引用它们的名称
        • 我们还有Context

        语境

        • 哪个用户应该访问哪个集群的组合
        • 或“使用Kubernetes-管理员用户访问 Kubernetes集群”
        • 我们通过以下任一方式与之交互:
          • 手动更新kubeconfig
          • 或使用kubectl config 命令

        • 如何切换上下文?
          kubectl config use-context <CONTEXT-NAME>
          
        • 显示上下文列表
          kubectl config get-context
          
        • 显示current-context
          kubectl config gcurrent-context
          

        上下文中的命名空间

        每个上下文实际上包含 3 个组件

        • 集群
        • 用户
        • 命名空间
        • 默认配置default命名空间
        • 除了默认命名空间,我们需要定义它们

        可以说大多数时候,我们使用 1 个特定的命名空间(default 除外),并且为每个 kubectl 命令使用 --namespace 有点烦人......

        • 切换默认命名空间
          kubectl config set-context --current --namespace kube-system
          
        • 现在检查~/.kube/config 文件
          contexts:
          - context:
              cluster: kubernetes
              namespace: kube-system # Just added!
              user: kubernetes-admin
            name: kubernetes-admin@kubernetes
          

        【讨论】:

        • 所以,kubernetes 是一个可以有多个命名空间的集群。 kube-system 是该名称空间之一,对吗?
        • 是的,每个集群, 有多个namespaces其中kube-system 是默认情况下将存在的其中之一(kube-system 有点像集群的核心)。此外,您可能有多个集群(例如 DevStageProduction 集群),在这种情况下,您应该使用 contexts 来管理您的每个集群集群.认为namespaces集群内的虚拟集群(More resources)
        猜你喜欢
        • 2023-03-08
        • 1970-01-01
        • 2019-07-19
        • 2021-10-24
        • 2020-08-13
        • 1970-01-01
        • 2016-02-29
        • 1970-01-01
        • 2019-10-11
        相关资源
        最近更新 更多