【问题标题】:Can't able to get externalID ( i.e instanceId provided by aws) of my kubernetes master node无法获取我的 kubernetes 主节点的 externalID(即 aws 提供的 instanceId)
【发布时间】:2019-12-31 18:22:37
【问题描述】:

我确实尝试过 kubectl describe node masterNodeName,它的输出为:-

Name:               ip-172-28-3-142
    Roles:              master
    Labels:             beta.kubernetes.io/arch=amd64
                        beta.kubernetes.io/os=linux
                        kubernetes.io/arch=amd64
                        kubernetes.io/hostname=ip-172-28-3-142
                        kubernetes.io/os=linux
                        node-role.kubernetes.io/master=
    Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                        node.alpha.kubernetes.io/ttl: 0
                        projectcalico.org/IPv4Address: 172.28.3.142/20
                        projectcalico.org/IPv4IPIPTunnelAddr: 192.163.119.24
                        volumes.kubernetes.io/controller-managed-attach-detach: true
    CreationTimestamp:  Thu, 06 Jun 2019 04:10:28 +0000
    Taints:             <none>
    Unschedulable:      false
    Conditions:
      Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
      ----                 ------  -----------------                 ------------------                ------                       -------
      NetworkUnavailable   False   Sat, 24 Aug 2019 12:10:03 +0000   Sat, 24 Aug 2019 12:10:03 +0000   CalicoIsUp                   Calico is running on this node
      MemoryPressure       False   Tue, 27 Aug 2019 14:08:19 +0000   Tue, 11 Jun 2019 14:38:27 +0000   KubeletHasSufficientMemory   kubelet has sufficient memory available
      DiskPressure         False   Tue, 27 Aug 2019 14:08:19 +0000   Tue, 11 Jun 2019 14:38:27 +0000   KubeletHasNoDiskPressure     kubelet has no disk pressure
      PIDPressure          False   Tue, 27 Aug 2019 14:08:19 +0000   Tue, 11 Jun 2019 14:38:27 +0000   KubeletHasSufficientPID      kubelet has sufficient PID available
      Ready                True    Tue, 27 Aug 2019 14:08:19 +0000   Tue, 11 Jun 2019 14:38:27 +0000   KubeletReady                 kubelet is posting ready status. AppArmor enabled
    Addresses:
      InternalIP:  172.28.3.142
      Hostname:    ip-172-28-3-142
    Capacity:
     cpu:                8
     ephemeral-storage:  20263484Ki
     hugepages-1Gi:      0
     hugepages-2Mi:      0
     memory:             32665856Ki
     pods:               110
    Allocatable:
     cpu:                8
     ephemeral-storage:  18674826824
     hugepages-1Gi:      0
     hugepages-2Mi:      0
     memory:             32563456Ki
     pods:               110
    System Info:
     Machine ID:                 121a679a217040c4aed637a6dc1e0582
     System UUID:                EB219C6D-8C25-AC92-9676-D6B04770257A
     Boot ID:                    144b1dt4-faf8-4fcb-229a-51082410bc5e
     Kernel Version:             4.15.0-2043-aws
               Namespace                  Name                                         CPU Requests  CPU Limits  Memory Requests   

编辑:-我正在使用 kubeadm 在 aws EC2 实例上设置 Kubernetes。

我正在寻找一种在节点配置中将 InstanceID 作为 externalID 的方法。

我的 V1Node 类集群信息也是空的

【问题讨论】:

  • 您是使用 EKS(由 AWS 管理)还是使用 kops 或其他工具设置自己的集群?
  • 如果您自己创建了集群,能否详细说明您是如何创建集群的?
  • 我刚刚在主节点上进行了 kubeadm init ..我也没有得到集群名称
  • 知道了,您正在使用 kubeadm 在 aws 中设置集群,而不是 eks
  • 是的..所以我们不会得到必需的参数?

标签: kubernetes kubeadm amazon-eks


【解决方案1】:

ExternalID 从 1.1 开始就是 deprecated

很遗憾,您无法在 1.11 的版本中获得它,当时它是 finally cleaned

唯一的方法是回滚/向后移植更改并构建您自己的版本。

【讨论】:

    【解决方案2】:

    在ec2节点上添加集群名称标签,标签的值无关紧要,只有名称重要。例如

    kubernetes.io/cluster/CLUSTER_NAME

    kubernetes.io/cluster/dhanvi-test-cluster

    确保按照https://github.com/kubernetes/cloud-provider-aws#iam-policy 中的说明设置 IAM 政策

    使用下面的配置文件和 kubeadm 作为kubeadm init --config FILE_NAME.yaml

    ---
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: ClusterConfiguration
    apiServer:
      extraArgs:
        cloud-provider: aws
    clusterName: dhanvi-test-cluster
    controllerManager:
      extraArgs:
        cloud-provider: aws
    kubernetesVersion: stable
    
    ---
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        cloud-provider: aws
    

    理想情况下,通过执行上述操作,您应该能够在描述节点时获得providerID,它还应该为您提供集群名称。

    如果您仍然缺少 providerID 作为解决方法,您仍然可以编辑节点并手动添加它。

    如果您在 extraArgs 中提供云提供商后仍未​​获得 providerID,请考虑在 https://github.com/kubernetes/kubeadm/issues 提出问题。

    【讨论】:

    • 如果是,它们是否在 EKS 上运行?他们可以使用 kops 运行
    • 它们在 AWS EC2 实例上运行
    • 你是想获取 instanceID 还是想在 Kubernetes 中获取 instanceID 作为标签?
    • 我想要 kubectl describe node 中的 externalID 参数作为 instanceId
    • 知道了!将更新答案以反映相同。
    【解决方案3】:

    Tummala Dhanvi 说的是正确的,但这里有更多细节。

    如果您使用EKSGKE(我不确定其他的),它们有一个重要的共同点。它们都由云管理。这样做主要是为了让 Kubernetes 更易于使用,因此您只需负责将在集群上运行的应用程序,而不必为集群的所有配置而烦恼。

    这也是为了让您的 Kubernetes 集群始终可以访问,因为云会检测和替换不健康的控制平面节点,并提供按需升级和修补,并且默认情况下,工作节点和托管控制平面之间的连接加密是安全的。

    您可以访问工作节点,这在 GKE 和 EKS 中都是可能的,但您无法访问主节点。

    如果您想拥有对主节点和工作节点的完全访问权限,您需要自己部署 Kubernetes。 如果您已经准备好虚拟机,这将相当简单直接。

    您可以为此使用kubeadm 并创建a single control-plane clusterHighly Available cluster

    还有其他工具可以为您安装集群,例如 kopskubespray

    请阅读Picking the Right Solution 以在各种平台上运行 Kubernetes,这是选择适合您需求的解决方案的指南。

    【讨论】:

    • 感谢您的信息。我使用 kubeadm 进行了配置,但无法在任何节点中获取 aws 的实例 ID。
    • 所以您使用 eks 或 aws 并使用 EC2 自己设置集群?
    • 我使用 aws EC2 实例作为主节点和工作节点
    • 检查this
    • 感谢该链接。我现在使用 kubectl label nodes nodeName beta.kubernetes.io/instance-id=$(curl 169.254.169.254/latest/meta-data/instance-id) 添加了 instanceId 作为标签
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 2018-02-22
    • 2019-07-14
    • 2019-03-15
    • 2020-07-19
    • 2020-08-04
    • 2018-03-30
    • 2016-03-31
    相关资源
    最近更新 更多