如何找到群集节点的IP地址

时间:2020-01-31 07:04:09

标签: kubernetes

Minikube具有单个群集的特定节点IP地址(192.168.99.100),如果我使用kubeadm创建许多节点群集,我该怎么做才能找到此IP地址?

4 个答案:

答案 0 :(得分:2)

这应该非常简单:kubectl get nodes -o wide

答案 1 :(得分:1)

要获取有关Kubernetes objects的信息,您应该使用kubectl get <resource>kubectl describe <resource>

docs

显示一种或多种资源

打印有关指定资源的最重要信息的表。您可以使用标签选择器和--selector标志来过滤列表。如果所需的资源类型已命名空间,则除非传递--all-namespaces,否则您只会在当前命名空间中看到结果。

如果您要查看kubectl get手册,则会获得有关-o标志的信息。

-o,--output ='':输出格式之一: json | yaml | wide | name | custom-columns = ... | custom-columns-file = ... | go-template = ... | go-template-file = ... | jsonpath = ... | jsonpath-file = ... 查看golang模板中的自定义列[http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns] [http://golang.org/pkg/text/template/#pkg-overview]和jsonpath模板 [http://kubernetes.io/docs/user-guide/jsonpath]

这意味着您可以获得YAMLsJSON格式的输出。详细信息可以在this doc中找到。

正如@Bernard Halas提到的,您可以只使用kubectl get nodes -o wide

另一种选择是将describegrep一起使用。 -A将打印尾随上下文的数字行。如果您需要获取有关每个节点的信息的列表,它将很有帮助。

$ kubectl describe node | grep Addresses: -A 4
Addresses:
  InternalIP:   10.164.0.63
  ExternalIP:   35.204.67.223
  InternalDNS:  gke-test-default-pool-d11b1330-g44z.c.composite-rune-239911.internal
  Hostname:     gke-test-default-pool-d11b1330-g44z.c.composite-rune-239911.internal
--
Addresses:
  InternalIP:   10.164.0.61
  ExternalIP:   35.204.63.113
  InternalDNS:  gke-test-default-pool-d11b1330-gtpj.c.composite-rune-239911.internal
  Hostname:     gke-test-default-pool-d11b1330-gtpj.c.composite-rune-239911.internal
--
Addresses:
  InternalIP:   10.164.0.62
  ExternalIP:   35.204.202.107
  InternalDNS:  gke-test-default-pool-d11b1330-r4dw.c.composite-rune-239911.internal
  Hostname:     gke-test-default-pool-d11b1330-r4dw.c.composite-rune-239911.internal

您还可以使用YAMLJSON格式。输出将类似于上一个。

$ kubectl get nodes -o yaml | grep addresses: -A 8
    addresses:
    - address: 10.164.0.63
      type: InternalIP
    - address: 35.204.67.223
      type: ExternalIP
    - address: gke-test-default-pool-d11b1330-g44z.c.composite-rune-239911.internal
      type: InternalDNS
    - address: gke-test-default-pool-d11b1330-g44z.c.composite-rune-239911.internal
      type: Hostname
...

此外,如果您需要一些特定的输出(仅需要信息且未默认打印),则可以使用custom columns。它基于YAML格式。

$ kubectl get pods -o custom-columns=Name:.metadata.name,NS:.metadata.namespace,HostIP:.status.hostIP,PodIP:status.podIP,REQ_CPU:.spec.containers[].resources.requests.cpu
Name                          NS        HostIP        PodIP       REQ_CPU
httpd-5d8cbbcd67-gtzcx        default   10.164.0.63   10.32.2.7   100m
nginx-7cdbd8cdc9-54dds        default   10.164.0.62   10.32.1.5   100m
nginx-7cdbd8cdc9-54ggt        default   10.164.0.62   10.32.1.3   100m
nginx-7cdbd8cdc9-bz86v        default   10.164.0.62   10.32.1.4   100m
nginx-7cdbd8cdc9-zcvrf        default   10.164.0.62   10.32.1.2   100m
nginx-test-59df8dcb7f-hlrcr   default   10.164.0.63   10.32.2.4   100m

答案 2 :(得分:1)

重要的是要了解,不存在kubernetes集群的单个IP之类的东西。 Minikube之所以拥有它,是因为它是一个特殊的1节点案例。大多数生产集群将以一种或多种方式使用许多内部和外部IP地址进行操作:每个节点都部署在具有自己IP地址的单独(虚拟)计算机上,该IP地址是公共的还是私有的,具体取决于您设置(虚拟)计算机的方式。 现在的问题是,您需要什么IP:

  • 如果您要查找kubernetes API端点服务器地址(kubectl与之对话的端点),那么在使用kubeadm手动创建集群的情况下,这将是主节点的IP您使用kubeadm init命令创建的(假设使用单个大写字母)。有关详情,请参见this official doc。要使用kubectl与您的集群通信,您将需要一些授权数据,但其IP除外:请参见上述文档的后续部分如何获取它。
  • 如果您正在寻找LoadBalancer类型服务的IP,那么它将在kubectl get service name-of-your-service -o yamlkubectl describe service name-of-your-service的输出中报告许多其他内容。但是请注意,使用kubeadm创建的集群不能单独提供外部负载均衡器(这就是为什么将它们称为外部)的原因,如果您打算手动设置功能齐全的生产集群,则需要使用类似另外MetalLB
  • 如果您正在寻找NodePort类型服务的IP,那么这些将是通过在它们上运行kubeadm join命令而被吸收到群集中的工作节点(虚拟)计算机的所有IP。如果您不记得它们,则可以按照other answer中的建议使用kubectl get nodes -o wide

答案 3 :(得分:0)

以下命令应显示cluser中每个节点的内部IP地址:

ubuntu@astrocyte:~$ kubectl get nodes -o yaml | grep -- "- address:"
    - address: 192.168.1.6
    - address: astrocyte
    - address: 192.168.1.20
    - address: axon2.local
    - address: 192.168.1.7
    - address: axon3.local

如果配置了主机名,它还会显示主机名