Início
Selecionando Campos
Usando variáveis de ambiente
Usando o plug-in de volume
Início
É comum que containers consumam informações sobre objetos de API. A API downward é um mecanismo que permite containers consumam estas informações sem acoplar ao OpenShift. Os containers podem consumir estas informações a partir da API downward usando variáveis de ambiente ou plug-in volume.
Selecionando Campos
Campos dentro do pod são selecionados usando o tipo FieldRef da API. O tipo FieldRef tem dois campos:
Campo | Descrição |
fieldPath | O path do campo a selecionar, relativo do pod. |
apiVersion | A versão da API que vai interpretar o selector do fieldPath. |
Atualmente existem 4 selectors validos na v1 da API:
Selector | Descrição |
metadata.name | O nome do pod. |
metadata.namespace | O namespace do pod. |
metadata.labels | O label do pod. |
metadata.annotations | Anotações do pod. |
O campo apiVersion, se não especificado, o valor default vai ser a versão da API do template do pod.
No futuro, mais informações como limite de recursos para pods e informações sobre serviços, estarão disponíveis usando a API downward.
Usando variáveis de ambiente
Uma maneira de usar a API downward é usando as variáveis de ambiente de um container. O tipo EnvVar do campo ValueFrom(que é tipo do EnvVarSource) é usado para especificar que o valor da variável deve vir de FieldRef em vez do valor especificado pelo campo value. No futuro, fontes adicionais serão suportadas; atualmente a origem do campo fieldRef é usada para selecionar um campo da API downward.
Somente atributos constante do POD podem ser consumidos desta forma, como variáveis de ambiente não podem ser atualizadas assim que o processo é iniciado, de uma maneira que permita o processo ser notificado de que o valor da variável foi alterado. Os campos suportados usando variáveis de ambiente são:
- Nome do Pod
- Namespace do Pod
Exemplo:
1. Criar um arquivo pod.json:
apiVersion: v1
kind: Pod
metadata:
name: dapi-env-test-pod
spec:
containers:
- name: env-test-container
image: gcr.io/google_containers/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
restartPolicy: Never
2. Criar o pod usando o arquivo pod.json:
$ oc create -f pod.json
3. Checando os logs do container:
$ oc logs -p dapi-env-test-pod
Você deve ver MY_POD_NAME e MY_POD_NAMESPACE nos logs.
Usando o plug-in de volume
Outra maneira de utilizar a API downward é usando o plug-in volume. O plug-in volume da API downward cria um volume com com os campos configurados nos arquivos. O campo metadata do objeto VolumeSoure da API é usado para configurar este volume. O plug-in suporta os seguintes campos:
- Nome do pod
- Namespace do pod
- Anotações do pod
- Labels do pod
Exemplo 1. Configuração do plug-in volume da API downward
spec:
volumes:
- name: podinfo
metadata:
items:
- name: "labels"
fieldRef:
fieldPath: metadata.labels
O campo metadata do volume source configura o volume da API downward.
O campo items mantem uma lista dos campos do projeto no volume.
O nome do arquivo para projetar o campo.
O selector do campo para o projeto.
Exemplo:
1. Criar o arquivo volume-pod.json:
kind: Pod
apiVersion: v1
metadata:
labels:
zone: us-east-coast
cluster: downward-api-test-cluster1
rack: rack-123
name: dapi-volume-test-pod
annotations:
annotation1: 345
annotation2: 456
spec:
containers:
- name: volume-test-container
image: gcr.io/google_containers/busybox
command: ["sh", "-c", "cat /etc/labels /etc/annotations"]
volumeMounts:
- name: podinfo
mountPath: /etc
readOnly: false
volumes:
- name: podinfo
metadata:
items:
- name: "labels"
fieldRef:
fieldPath: metadata.labels
- name: "annotations"
fieldRef:
fieldPath: metadata.annotations
restartPolicy: Never
2. Criar um pod através do arquivo volume-pod.json:
$ oc create -f volume-pod.json
3. Checar os logs do container e confirmar a presença dos campos configurados:
$ oc logs -p dapi-volume-test-pod
cluster=downward-api-test-cluster1
rack=rack-123
zone=us-east-coast
annotation1=345
annotation2=456
kubernetes.io/config.source=api
Comentários
0 comentário
Por favor, entre para comentar.