nodejs api,返回在GCP K8S群集中运行pod的区域和区域

时间:2018-03-18 00:33:17

标签: kubernetes google-cloud-platform google-kubernetes-engine

我在pod中运行了nodejs代码。从pod内部我想找到运行此pod的节点的区域。这样做的最佳方式是什么?我需要额外的权限吗?

2 个答案:

答案 0 :(得分:1)

我无法找到图书馆,但我发布了下面的代码。 getContent函数稍微改编自post此代码应在GKE pod或GCE主机内部工作。

使用如下:

const gcp = require('./gcp.js')
gcp.zone().then(z  => console.log('Zone is: ' + z))

模块:gcp.js

const getContent = function(lib, options) {
  // return new pending promise
  return new Promise((resolve, reject) => {
    // select http or https module, depending on reqested url
    const request = lib.get(options, (response) => {
      // handle http errors
      if (response.statusCode < 200 || response.statusCode > 299) {
         reject(new Error('Failed to load page, status code: ' + response.statusCode));
       }
      // temporary data holder
      const body = [];
      // on every content chunk, push it to the data array
      response.on('data', (chunk) => body.push(chunk));
      // we are done, resolve promise with those joined chunks
      response.on('end', () => resolve(body.join('')));
    });
    // handle connection errors of the request
    request.on('error', (err) => reject(err))
    })
};

exports.zone = () => {
    return getContent(
        require('http'),
        {
            hostname: 'metadata.google.internal',
            path: '/computeMetadata/v1/instance/zone',
            headers: {
                'Metadata-Flavor': 'Google'
            },
            method: 'GET'
        }) 
}

答案 1 :(得分:0)

您可以使用广告连播的failure-domain.beta.kubernetes.io/regionfailure-domain.beta.kubernetes.io/zone标签来获取其区域和AZ。

但是,请记住:

  

目前只支持GCE和AWS自动支持(尽管通过简单地安排将相应的标签添加到节点和卷中,很容易为其他云甚至裸机添加类似的支持)。

要获取对标签的访问权限,您可以使用DownwardAPI附加Volume以及当前标签和广告连播的注释。您不需要任何额外的权限来使用它,只需将它们作为卷安装即可。

以下是documentation

的示例

apiVersion: v1 kind: Pod metadata: name: kubernetes-downwardapi-volume-example labels: zone: us-est-coast cluster: test-cluster1 rack: rack-22 annotations: build: two builder: john-doe spec: containers: - name: client-container image: k8s.gcr.io/busybox command: ["sh", "-c"] args: - while true; do if [[ -e /etc/podinfo/labels ]]; then echo -en '\n\n'; cat /etc/podinfo/labels; fi; if [[ -e /etc/podinfo/annotations ]]; then echo -en '\n\n'; cat /etc/podinfo/annotations; fi; sleep 5; done; volumeMounts: - name: podinfo mountPath: /etc/podinfo readOnly: false volumes: - name: podinfo downwardAPI: items: - path: "labels" fieldRef: fieldPath: metadata.labels - path: "annotations" fieldRef: fieldPath: metadata.annotations

如果您已安装带标签的卷,则可以读取文件/etc/labels,其中包含有关AZ和区域作为键对的信息,如下所示: failure-domain.beta.kubernetes.io/region=us-east-1 failure-domain.beta.kubernetes.io/zone=us-east-1c