我在pod中运行了nodejs代码。从pod内部我想找到运行此pod的节点的区域。这样做的最佳方式是什么?我需要额外的权限吗?
答案 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/region
和failure-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