Como alcançar a compatibilidade entre o ExtendPathMode e o client-go de Kubernetes?
Cenário
A estrutura do pod do Kubernetes não contém ExtendPathMode. Portanto, quando um usuário chama a API para criar um pod ou implementação usando client-go, o pod criado não contém ExtendPathMode. O CCE fornece uma solução para garantir a compatibilidade com o client-go do Kubernetes.
Solução
- Ao criar um pod, você precisa adicionar kubernetes.io/extend-path-mode à annotation do pod.
- Ao criar uma implantação, você precisa adicionar kubernetes.io/extend-path-mode a kubernetes.io/extend-path-mode no modelo.
O seguinte é um exemplo de YAML de criação de um pod. Depois que a palavra-chave kubernetes.io/extend-path-mode for adicionada à annotation, os campos containername, name e mountpath serão correspondentes e o extendpathmode correspondente será adicionado ao volumeMount.
apiVersion: v1
kind: Pod
metadata:
name: test-8b59d5884-96vdz
generateName: test-8b59d5884-
namespace: default
selfLink: /api/v1/namespaces/default/pods/test-8b59d5884-96vdz
labels:
app: test
pod-template-hash: 8b59d5884
annotations:
kubernetes.io/extend-path-mode: '[{"containername":"container-0","name":"vol-156738843032165499","mountpath":"/tmp","extendpathmode":"PodUID"}]'
metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]'
ownerReferences:
- apiVersion: apps/v1
kind: ReplicaSet
name: test-8b59d5884
uid: 2633020b-cd23-11e9-8f83-fa163e592534
controller: true
blockOwnerDeletion: true
spec:
volumes:
- name: vol-156738843032165499
hostPath:
path: /tmp
type: ''
- name: default-token-4s959
secret:
secretName: default-token-4s959
defaultMode: 420
containers:
- name: container-0
image: 'nginx:latest'
env:
- name: PAAS_APP_NAME
value: test
- name: PAAS_NAMESPACE
value: default
- name: PAAS_PROJECT_ID
value: b6315dd3d0ff4be5b31a963256794989
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
volumeMounts:
- name: vol-156738843032165499
mountPath: /tmp
extendPathMode: PodUID
- name: default-token-4s959
readOnly: true
mountPath: /var/run/secrets/kubernetes.io/serviceaccount
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
serviceAccountName: default
serviceAccount: default
nodeName: 192.168.0.24
securityContext: {}
imagePullSecrets:
- name: default-secret
- name: default-secret
affinity: {}
schedulerName: default-scheduler
tolerations:
- key: node.kubernetes.io/not-ready
operator: Exists
effect: NoExecute
tolerationSeconds: 300
- key: node.kubernetes.io/unreachable
operator: Exists
effect: NoExecute
tolerationSeconds: 300
priority: 0
dnsConfig:
options:
- name: timeout
value: ''
- name: ndots
value: '5'
- name: single-request-reopen
enableServiceLinks: true
|
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
containername |
String |
Nome de um contêiner. |
|
name |
String |
Nome de um volume. |
|
mountpath |
String |
Caminho de montagem. |
|
extendpathmode |
String |
Um diretório de terceiro nível é adicionado ao diretório/subdiretório de volume criado para facilitar a obtenção de um único arquivo de saída de pod. Os seguintes cinco tipos são suportados. Para obter detalhes, consulte Logs de contêiner.
|