Kubernetes: configmap рдлрд╝рд╛рдЗрд▓ рдорд╛рдЙрдВрдЯ рдкрде рдкрд░рд┐рдгрд╛рдо рдХрдорд╛рдВрдб рдореЗрдВ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реА

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдЕрдкреНрд░реИрд▓ 2017  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: kubernetes/kubernetes

рдХреНрдпрд╛ рдпрд╣ рдорджрдж рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╣реИ? (рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдФрд░ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рд╣рд╛рдпрддрд╛ рдЪреИрдирд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, http://kubernetes.io/docs/troubleshooting/ рджреЗрдЦреЗрдВред): рдирд╣реАрдВ

рдЗрд╕реЗ рдлрд╛рдЗрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореБрджреНрджреЛрдВ рдореЗрдВ рдХреМрди рд╕реЗ рдХреАрд╡рд░реНрдб рдЦреЛрдЬреЗ? (рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд╣рд╛рдВ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред): рдХрдорд╛рдВрдб рдирд╣реАрдВ рдорд┐рд▓рд╛ configmap Kubernetes


рдХреНрдпрд╛ рдпрд╣ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдпрд╛ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд╣реИ? (рдПрдХ рдЪреБрдиреЗрдВ): рдмрдЧ

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕рдВрд╕реНрдХрд░рдг ( kubectl version ):
рдЧреНрд░рд╛рд╣рдХ рд╕рдВрд╕реНрдХрд░рдг: v1.6.1 GitCommit: "b0b7a323cc5a4a2019b2e9520c21c7830b7f708e"
рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг: v1.6.0 GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37

рдкрд░реНрдпрд╛рд╡рд░рдг :

  • рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдпрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди :
  • OS (рдЬреИрд╕реЗ / etc / os-release рд╕реЗ): рд╣реЛрд╕реНрдЯ ubuntu 16.04 рд╣реИ
  • рдХрд░реНрдиреЗрд▓ (рдЬреИрд╕реЗ uname -a ): рд╣реЛрд╕реНрдЯ Linux dev1 4.4.0-72-рдЬреЗрдиреЗрд░рд┐рдХ #93-Ubuntu SMP рд╢реБрдХреНрд░ 31 рдорд╛рд░реНрдЪ 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux рд╣реИ
  • рдЙрдкрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ :
  • рдЕрдиреНрдп : рдорд┐рдиреАрдХреНрдпреВрдм рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рднреАрддрд░ рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ: v0.18.0

рдХреНрдпрд╛ рд╣реБрдЖ :
рдЬрдм рдореИрдВ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдХреЗ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЖрд░реЛрд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХрдВрдЯреЗрдирд░ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ
"рдбреЗрдореЙрди рд╕реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: рдХрдВрдЯреЗрдирд░ рдХрдорд╛рдВрдб '/app/app.sh' рдирд╣реАрдВ рдорд┐рд▓рд╛ рдпрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред"
рдкреЙрдб рд╕реНрдкреЗрдХ рдореЗрдВ рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрдореИрдк рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рд╡реЙрд▓реНрдпреВрдо рдмрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЛ рдЧрдИ рд╣реИ
рдЕрдЧрд░ рдореИрдВ configmap рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╕рднреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереА :
рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдореМрдЬреВрджрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдиреНрдлрд┐рдЧ рдореИрдк рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ

рдЗрд╕реЗ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░реЗрдВ (рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдиреНрдпреВрдирддрдо рдФрд░ рд╕рдЯреАрдХ):

рдбреЙрдХрд░ рдлрд╝рд╛рдЗрд▓ - рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ

FROM busybox:latest

RUN        mkdir /app
COPY       app.sh /app

ENTRYPOINT ["/app/app.sh"]

рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╕реНрдХреНрд░рд┐рдкреНрдЯ - рдЕрдирдВрдд рд▓реВрдк

#!/bin/sh
seq=1
while [[ true ]]; do
    echo "${seq} $(date) working"
    sleep .5s   
    let seq=$((seq + 1))
done

k8s рдХреЙрдиреНрдлрд┐рдЧрдореИрдк рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдлрд╝рд╛рдЗрд▓

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    product: k8s-demo
  name: demo
data:
  settings.json: |
    {
      "store": {
        "type": "InMemory",
    }

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  labels:
    product: k8s-demo
  name: demo
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: demo
        product: k8s-demo
    spec:
      containers:
      - name: demo
        image: pmcgrath/shellloop:1
        imagePullPolicy: Always
        volumeMounts:
          - name: demo-config
            mountPath: /app
      volumes:
        - name: demo-config
          configMap:
            name: demo
            items:
              - key: settings.json
                path: settings.json 

рдЬрдм рдореИрдВ kubectl рд▓рд╛рдЧреВ -d k8s.yaml рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдкреЙрдб рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИ

рдЖрд░рдкреАрд╕реА рддреНрд░реБрдЯрд┐: рдХреЛрдб = 2 desc = рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ "f9e0112c80ebba568d4b508f99ffb053bf1ae5a4f095ce7f45bff5f38900b617": рдбреЗрдореЙрди рд╕реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: рдХрдВрдЯреЗрдирд░ рдХрдорд╛рдВрдб '/app/app.sh' рдирд╣реАрдВ рдорд┐рд▓рд╛ рдпрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рд╣рдореЗрдВ рдФрд░ рдХреБрдЫ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ :
рдЕрдЧрд░ рдореИрдВ рд╡реЙрд▓реНрдпреВрдо рдХреЗ рд▓рд┐рдП рдорд╛рдЙрдВрдЯрдкрд╛рде рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдореЗрдЬрдмрд╛рди (резрен.режрей.реж-рд╕реАрдИ) рдкрд░ рд╕реАрдзреЗ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд┐рдпрд╛

touch settings.json
docker container run -ti -v $(pwd)/settings.json:/app/settings.json pmcgrath/shellloop:1

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@pmcgrath

рдпрд╣рд╛рдВ рдЪреЗрдХрдЖрдЙрдЯ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рднреА рдпрд╣реА рдкреНрд░рд╢реНрди рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдЙрддреНрддрд░ рд╣реИред

рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ configmap( settings.json: blahblah ) рд╣реИ, рдФрд░ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ /app ред рдлрд┐рд░ рдиреАрдЪреЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:

  1. рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЪрд╛рд╣реЗ рд╡рд╣ рдХреЙрдиреНрдлрд┐рдЧрдореИрдк рдпрд╛ рдЕрдиреНрдп рдХреЛрдИ рднреА рд╣реЛ), рдпрд╣ mountPath рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, /app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЗрд╡рд▓ settings.json ред
  2. рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдиреЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдереА, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ mountPath: /app/settings.json рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣, /app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореВрд▓ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреАред
  3. рдареАрдХ рд╣реИ, рдЬрдм рдЖрдк рджреВрд╕рд░рд╛ рдЪрд░рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд┐рдЧрдореИрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реИ), рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХреЛ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЖрдк configmap рд╕реЗ рдПрдХ рдЙрдкрдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдВрддрддрдГ рдорд┐рд▓реЗрдЧрд╛:

containers:
- volumeMounts:
  - name: demo-config
    mountPath: /app/settings.json
    subPath: settings.json
volumes:
- name: demo-config
  configMap:
    name: demo

рд╕рднреА 10 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@pmcgrath

рдпрд╣рд╛рдВ рдЪреЗрдХрдЖрдЙрдЯ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рднреА рдпрд╣реА рдкреНрд░рд╢реНрди рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдЙрддреНрддрд░ рд╣реИред

рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ configmap( settings.json: blahblah ) рд╣реИ, рдФрд░ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ /app ред рдлрд┐рд░ рдиреАрдЪреЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:

  1. рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЪрд╛рд╣реЗ рд╡рд╣ рдХреЙрдиреНрдлрд┐рдЧрдореИрдк рдпрд╛ рдЕрдиреНрдп рдХреЛрдИ рднреА рд╣реЛ), рдпрд╣ mountPath рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, /app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЗрд╡рд▓ settings.json ред
  2. рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдиреЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдереА, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ mountPath: /app/settings.json рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣, /app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореВрд▓ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреАред
  3. рдареАрдХ рд╣реИ, рдЬрдм рдЖрдк рджреВрд╕рд░рд╛ рдЪрд░рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд┐рдЧрдореИрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реИ), рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХреЛ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЖрдк configmap рд╕реЗ рдПрдХ рдЙрдкрдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдВрддрддрдГ рдорд┐рд▓реЗрдЧрд╛:

containers:
- volumeMounts:
  - name: demo-config
    mountPath: /app/settings.json
    subPath: settings.json
volumes:
- name: demo-config
  configMap:
    name: demo

@ рдЭреЛрд╣рд╛рдИрдмрд┐рдВрдЧ089
рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ

рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реБрдП рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ
рдердкрдердкрд╛рдирд╛

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдореВрд▓ рдЙрд▓реНрд▓реЗрдЦ рдпрд╣рд╛рдБ рд╣реИ: https://github.com/kubernetes/kubernetes/issues/23748#issuecomment -230390309

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдЧрд╛рдпрдм рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╛рдлреА рднреНрд░рдорд┐рдд/рднреНрд░рд╛рдордХ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЗрд╕реЗ рдФрд░ рднреА рднреНрд░рд╛рдордХ рдмрдирд╛рддреЗ рд╣реИрдВ - рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЧреБрдо рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдСрдЯреЛ рдЕрдкрдбреЗрдЯ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрд╕ рдореБрджреНрджреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ mountPath рдФрд░ subPath рджреЛрдиреЛрдВ рдХреЗ рддрд╣рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛

@ zhouhaibing089 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдорд╛рдЙрдВрдЯреЗрдб рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА subPath рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рд╕рджреГрд╢ ConfigMap рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

IMO, рдпрд╣ _really_ рд╣рд▓ рдирд╣реАрдВ рд╣реИред рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-conf
data:
  example1.conf: |
    server {
      server_name example1.com;
      # config here...
    }
  example2.conf: |
    server {
      server_name example2.com;
      # config here...
    }

рддрд╛рдХрд┐...

- name: nginx-conf
  mountPath: /etc/nginx/conf.d
  append: true

... рдореМрдЬреВрджрд╛ default.conf рдФрд░ рдбреЙрдХрд░ рдЫрд╡рд┐ рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди example*.conf рд╕рд╛рде рдмрдврд╝рд╛рддрд╛ рд╣реИ

рд╕рдмрдкрд╛рде рдореЗрдВ рдПрдХ рд╣реА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╕рд┐рд░реНрдл _icky_ рд╣реИред

@leebenson рдХреЗ append: true рд╡рд┐рдХрд▓реНрдк рдкрд░ +1ред

@leebenson рдЙрддреНрддрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░: рдХреНрдпрд╛ рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ append: true рд╡рд┐рдХрд▓реНрдк рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ ??

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдорд┐рд▓рд╛:

error: error validating "hdfs/21-namenode-statefulset.yaml": error validating data: ValidationError(StatefulSet.spec.template.spec.containers[1].volumeMounts[1]): unknown field "append" in io.k8s.api.core.v1.VolumeMount; if you choose to ignore these errors, turn validation off with --validate=false

рд╕рд╛рде рд╣реА, рдпрд╣ рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ:
https://k8smeetup.github.io/docs/api-reference/v1.9/#volumemount -v1-core

@leebenson рдЙрддреНрддрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░: рдХреНрдпрд╛ рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ append: true рд╡рд┐рдХрд▓реНрдк рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ ??

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдорд┐рд▓рд╛:

error: error validating "hdfs/21-namenode-statefulset.yaml": error validating data: ValidationError(StatefulSet.spec.template.spec.containers[1].volumeMounts[1]): unknown field "append" in io.k8s.api.core.v1.VolumeMount; if you choose to ignore these errors, turn validation off with --validate=false

рд╕рд╛рде рд╣реА, рдпрд╣ рд╡реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ:
https://k8smeetup.github.io/docs/api-reference/v1.9/#volumemount -v1-core

рдпрд╣ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рд╕реБрдЭрд╛рд╡ рд╣реИред рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП?
(рдореИрдВ рдПрдХ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдЬрд┐рд╕рдореЗрдВ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ -> /usr/share/elasticsearch/bin/run.sh: line 28: ./config/elasticsearch.yml: Read-only file system )

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

theothermike picture theothermike  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sanjana-bhat picture sanjana-bhat  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mml picture mml  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ddysher picture ddysher  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ttripp picture ttripp  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ