first commit
This commit is contained in:
commit
ba848e218d
1001 changed files with 152333 additions and 0 deletions
69
CloudNative/Kubernetes/Base/DownwardAPI.md
Normal file
69
CloudNative/Kubernetes/Base/DownwardAPI.md
Normal file
|
@ -0,0 +1,69 @@
|
|||
Downward API,它的作用是:让 Pod 里的容器能够直接获取到这个 Pod API 对象本身的信息。减少与kubernetes的耦合
|
||||
```
|
||||
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: test-downwardapi-volume
|
||||
labels:
|
||||
zone: us-est-coast
|
||||
cluster: test-cluster1
|
||||
rack: rack-22
|
||||
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;
|
||||
sleep 5;
|
||||
done;
|
||||
volumeMounts:
|
||||
- name: podinfo
|
||||
mountPath: /etc/podinfo
|
||||
readOnly: false
|
||||
volumes:
|
||||
- name: podinfo
|
||||
projected:
|
||||
sources:
|
||||
- downwardAPI:
|
||||
items:
|
||||
- path: "labels"
|
||||
fieldRef:
|
||||
fieldPath: metadata.labels
|
||||
```
|
||||
在这个 Pod 的 YAML 文件中,我定义了一个简单的容器,声明了一个 projected 类型的 Volume。只不过这次 Volume 的数据来源,变成了 Downward API。而这个 Downward API Volume,则声明了要暴露 Pod 的 metadata.labels 信息给容器。
|
||||
通过这样的声明方式,当前 Pod 的 Labels 字段的值,就会被 Kubernetes 自动挂载成为容器里的 /etc/podinfo/labels 文件。而这个容器的启动命令,则是不断打印出 /etc/podinfo/labels 里的内容。所以,当我创建了这个 Pod 之后,就可以通过 kubectl logs 指令,查看到这些 Labels 字段被打印出来
|
||||
```
|
||||
$ kubectl create -f dapi-volume.yaml
|
||||
$ kubectl logs test-downwardapi-volume
|
||||
cluster="test-cluster1"
|
||||
rack="rack-22"
|
||||
zone="us-est-coast"
|
||||
```
|
||||
|
||||
当前支持的downward api
|
||||
```
|
||||
1. 使用fieldRef可以声明使用:
|
||||
spec.nodeName - 宿主机名字
|
||||
status.hostIP - 宿主机IP
|
||||
metadata.name - Pod的名字
|
||||
metadata.namespace - Pod的Namespace
|
||||
status.podIP - Pod的IP
|
||||
spec.serviceAccountName - Pod的Service Account的名字
|
||||
metadata.uid - Pod的UID
|
||||
metadata.labels['<KEY>'] - 指定<KEY>的Label值
|
||||
metadata.annotations['<KEY>'] - 指定<KEY>的Annotation值
|
||||
metadata.labels - Pod的所有Label
|
||||
metadata.annotations - Pod的所有Annotation
|
||||
|
||||
2. 使用resourceFieldRef可以声明使用:
|
||||
容器的CPU limit
|
||||
容器的CPU request
|
||||
容器的memory limit
|
||||
容器的memory request
|
||||
```
|
||||
|
||||
需要注意的是,Downward API 能够获取到的信息,一定是 Pod 里的容器进程启动之前就能够确定下来的信息。而如果你想要获取 Pod 容器运行后才会出现的信息,比如,容器进程的 PID,那就肯定不能使用 Downward API 了,而应该考虑在 Pod 里定义一个 sidecar 容器。
|
Loading…
Add table
Add a link
Reference in a new issue