Kubernetes ConfigMaps: рдкрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд░реАрдХрд┐рдпреЛрдВ

рдиреЛрдЯ : рдпрд╣ рдПрдХ рдкреВрд░реНрдг-рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЧрд╛рдЗрдб рд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ / рд╕рдВрдХреЗрдд рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдмрд╕ рдЗрд╕рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЖрд╡реЗрджрди рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред



рдкреГрд╖реНрдарднреВрдорд┐: rsync рд╕реЗ ... Kubernetes


рдкрд╣рд▓реЗ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛? "рд╢рд╛рд╕реНрддреНрд░реАрдп рдкреНрд░рд╢рд╛рд╕рди" рдХреЗ рдпреБрдЧ рдореЗрдВ, рд╕рд░рд▓рддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдпрд╛ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ) рдХреЗ рдареАрдХ рдмрдЧрд▓ рдореЗрдВ рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рд░рдЦреА рдЧрдИ рдереАред рдпрд╣ рд╕рд░рд▓ рд╣реИ: рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рд╡рд┐рддрд░рдг (рд╕реАрдбреА) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕рд╢рд░реНрдд rsync рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реАрдбреА рдХреА рдЕрд╢рд┐рд╖реНрдЯрддрд╛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЬрдм рдЖрдзрд╛рд░рднреВрдд рд╕рдВрд░рдЪрдирд╛ рдмрдврд╝реА, рддреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг (рджреЗрд╡ / рдордВрдЪ / рдЙрддреНрдкрд╛рджрди) рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдХреМрди рд╕реЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧреА рд╢реЗрдл / рдХрдардкреБрддрд▓реА / Ansible рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде рдФрд░ рднреА рд╕реАрдбреА рдЬрдЯрд┐рд▓ рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рд░реЛрд▓реНрд╕ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЧрд╣реЛрдВ рдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо IaC (рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░) рдореЗрдВ рдЖрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдкреАрдЫрд╛ рдХрд┐рдпрд╛? рдпрджрд┐ рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рдерд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЖрдП, рддреЛ рдкреНрд░рд╡рд╛рд╕рди рд╣реБрдЖред рд░рд╛рд╕реНрддреЗ рдореЗрдВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдФрд░ рдорддрднреЗрджреЛрдВ рдХреА рдЙрдореНрдореАрдж рдереА, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рддреЛ рдореБрдЭреЗ K8 рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдЖрд╡реЗрджрди рдорд┐рд▓рд╛ред

рдПрдХ рдмрд╛рд░ рдпрд╣рд╛рдВ, рд╣рдо рдЕрднреА рднреА рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдИрдПрдирд╡реА рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдпрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░рдкреИрдк рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред рдпрд╣ K8s рдЖрджрд┐рдо рдЖрдкрдХреЛ рдЧреЛрд▓реНрд╕ рдХреЛ рдЧреЛрдлрд╝ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЙрдиреНрд╣реЗрдВ HTML рдкреЗрдЬреЛрдВ рдХреА рддрд░рд╣ рд░реЗрдВрдбрд░ рдХрд░реЗрдВ рдФрд░ рдмрд┐рдирд╛ рд░рд┐рд╕реНрдЯрд╛рд░реНрдЯ рдХрд┐рдП рд╣реБрдП рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░реЗрдВред ConfigMaps рдХреЗ рд╕рд╛рде, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП 3+ рдХреЙрдиреНрдлрд┐рдЧ рд░рдЦрдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

ConfigMaps рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдЪрдп рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ ред рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред

рд╕рд░рд▓ рд╡рд┐рдиреНрдпрд╛рд╕


рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рдерд╛? рдЙрдиреНрд╣реЗрдВ рдЧреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рд╕реЗ рдХреНрдпрд╛ рдорд┐рд▓рд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдПрдХ Helm рдЪрд╛рд░реНрдЯ рд╕реЗ рддреИрдирд╛рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app
data:
  config.json: |
    {
      "welcome": {{ pluck .Values.global.env .Values.welcome | quote }},
      "name": {{ pluck .Values.global.env .Values.name | quote }}
    }

рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдпрд╣рд╛рдБ рдХреЗ .Values.welcomeрдФрд░ .Values.nameрдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ values.yamlред рдЖрдЦрд┐рд░ рдХреНрдпреЛрдВ values.yaml? Go рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЗрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ ред

рдХреЙрд▓ pluckрдирдХреНрд╢реЗ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ:

$ cat .helm/values.yaml 
welcome:
  production: "Hello"
  test: "Hey"
name:
  production: "Bob"
  test: "Mike"

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рджреЛрдиреЛрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрдиреЛрдВ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рдВрдкреВрд░реНрдг рдЯреБрдХрдбрд╝реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, configMap рдЗрд╕ рддрд░рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

data:
  config.json: |
    {{ pluck .Values.global.env .Values.data | first | toJson | indent 4 }}

... рдФрд░ values.yaml- рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдореЗрдВ:

data:
  production:
    welcome: "Hello"
    name: "Bob"

рдпрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рдПрдХ global.envрдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдирд╛рдо рд╣реИред рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдорд╛рди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░рдореИрдк рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред firstрдпрд╣рд╛рдБ рдЬрд░реВрд░рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ pluckрдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред

рдЬрдм рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЙрдиреНрдлрд┐рдЧ рд╣реЛрддреЗ рд╣реИрдВ


рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХрдИ рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓реНрд╕ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:

data:
  config.json: |
    {
      "welcome": {{ pluck .Values.global.env .Values.welcome | first | quote }},
      "name": {{ pluck .Values.global.env .Values.name | first | quote }}
    }
  database.yml: |
    host: 127.0.0.1
    db: app
    user: app
    password: app

рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдорд╛рдЙрдВрдЯ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

        volumeMounts:
        - name: app-conf
          mountPath: /app/configfiles/config.json
          subPath: config.json
        - name: app-conf
          mountPath: /app/configfiles/database.yml
          subPath: database.yml

... рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрдард╛рдПрдБ:

        volumeMounts:
        - name: app-conf
          mountPath: /app/configfiles

рдпрджрд┐ рдЖрдк рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕рдВрд╕рд╛рдзрди рдХрд╛ рд╡рд░реНрдгрди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ Kubernetes рдПрдХ рдирдпрд╛ рд░реЗрдкреНрд▓рд┐рдХрд╛рд╕реЗрдЯ рдмрдирд╛рдПрдЧрд╛, рдкреБрд░рд╛рдиреЗ рдХреЛ 0 рд╕реЗ рдШрдЯрд╛рдХрд░ рдФрд░ рдирдП рдХреЛ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрдврд╝рд╛рдПрдЧрд╛ред (рдпрд╣ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд░рдгрдиреАрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ RollingUpdateред)

рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдПрдХ рдирдП рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдлрд▓реА рдХрд╛ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдПрдХ рдЫрд╡рд┐ рдереА image:my-registry.example.com:v1, рд▓реЗрдХрд┐рди рдмрди рдЧрдИ - image:my-registry.example.com:v2ред рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдЕрдкрдиреА рддреИрдирд╛рддреА рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдП рд╣реИрдВ: рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддрд┐рдХреГрддрд┐ (рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдлрд▓реА) рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдЙрдВрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЪреЗрдВрдЬ рд░рд┐рд╕реНрдкрд╛рдВрд╕


рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЪрд╛рд░ рдИрд╡реЗрдВрдЯ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

  1. : ConfigMap, subPath.
    : .
  2. : ConfigMap, pod.
    : pod .
  3. : ConfigMap Deployment -.
    : , ConfigMapтАЩ, Deployment, pod , тАФ .
  4. : ConfigMap, .
    : podтАЩ / podтАЩ.

рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

рджреГрд╖реНрдЯрд╛рдВрдд 1


рд╣рдордиреЗ рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рд╣реА рдХрд┐рдпрд╛ рд╣реИ? рдЖрд╡реЗрджрди рдкреБрдирдГ рдЖрд░рдВрдн рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдмрдврд╝рддреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, subPathрддрдм рддрдХ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдлрд▓реА рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреЙрдб рдореЗрдВ рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рдорд╛рдкрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд╛рде рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ subPath, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд "рдкреНрд░рднрд╛рд╡" рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреГрд╢реНрдп реи


рдлрд▓реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдП рдмрд┐рдирд╛ рдлрд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ? рдареАрдХ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреИрдирд╛рддреА рдореЗрдВ 6 рдкреНрд░рддрд┐рдХреГрддрд┐рдпрд╛рдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдм рдХреБрдЫ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ delete podред рдлрд┐рд░ рдирдИ рдкреЙрдбреНрд╕ рдмрдирд╛рддреЗ рд╕рдордп, рд╡реЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ "рдкрд┐рдХ" рдХрд░реЗрдВрдЧреЗред

рдкрд░рд┐рджреГрд╢реНрдп 3


рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рд╕реЗ рдердХ рдЧрдП? рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рд╣реЗрд▓реНрдо рдЯрд┐рдкреНрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ :

kind: Deployment
spec:
  template:
    metadata:
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]

рдЗрд╕ рдкреНрд░рдХрд╛рд░, spec.templateрд░реЗрдВрдбрд░ рдПрдиреЛрдЯреЗрд╢рди рдХреЙрдиреНрдлрд┐рдЧ рдХрд╛ рд╣реИрд╢ рдмрд╕ рдкреЙрдб ( ) рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдПрдиреЛрдЯреЗрд╢рди рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдХреА-рд╡реИрд▓реНрдпреВ рдлрд╝реАрд▓реНрдб рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ spec.templateрднрд╡рд┐рд╖реНрдп рдХреА рдлрд▓реА рдХреЗ рдЦрд╛рдХреЗ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдпреЗ рдХреНрд╖реЗрддреНрд░ рд░реЗрдкреНрд▓рд┐рдХрд╛рд╕реЗрдЯ рдФрд░ рдлрд▓реА рдореЗрдВ рд╣реА рдЧрд┐рд░ рдЬрд╛рдПрдВрдЧреЗред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ рдХрд┐ рдкреЙрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ (рдЪреВрдВрдХрд┐ sha256 рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓ рдЧрдпрд╛ рд╣реИ) рдФрд░ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ RollingUpdate, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдФрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдкреЙрдб рдХреЗ рдкреБрди: рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕реА рддрд░рд╣ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ kubectl delete, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рд╕рд╣реА рдврдВрдЧ рд╕реЗ": рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдФрд░ рд╕рд╛рде RollingUpdateред

рджреГрд╢реНрдп 4


рд╢рд╛рдпрдж рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ? рдпрд╣рд╛рдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрдореИрдк рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд╣рд┐рдд рд╣реИ ...

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ, рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ subPath, рддреЛ рдЗрд╕реЗ рддрдм рддрдХ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдкреЙрдб рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдкрд╣рд▓реЗ рддреАрди рдкрд░рд┐рджреГрд╢реНрдп рджреЗрдЦреЗрдВ) ред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд┐рдирд╛ subPath, рддреЛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдкреЙрдб рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реЛрдЧреАред

рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ:

  • рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЕрджреНрдпрддрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреБрдЫ рджреЗрд░реА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдмрд┐рд▓реНрдХреБрд▓ рдорд╛рдЙрдВрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯред
  • рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕рд┐рдорд▓рд┐рдВрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде subPath:

    $ kubectl -n production exec go-conf-example-6b4cb86569-22vqv -- ls -lha /app/configfiles 
    total 20K    
    drwxr-xr-x    1 root     root        4.0K Mar  3 19:34 .
    drwxr-xr-x    1 app      app         4.0K Mar  3 19:34 ..
    -rw-r--r--    1 root     root          42 Mar  3 19:34 config.json
    -rw-r--r--    1 root     root          47 Mar  3 19:34 database.yml

    рдФрд░ subPathрдЬрдм рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рдореБрд╣рд┐рдо рд╢реБрд░реВ рдХреА рдЧрдИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ ?

    $ kubectl -n production exec go-conf-example-67c768c6fc-ccpwl -- ls -lha /app/configfiles 
    total 12K    
    drwxrwxrwx    3 root     root        4.0K Mar  3 19:40 .
    drwxr-xr-x    1 app      app         4.0K Mar  3 19:34 ..
    drwxr-xr-x    2 root     root        4.0K Mar  3 19:40 ..2020_03_03_16_40_36.675612011
    lrwxrwxrwx    1 root     root          31 Mar  3 19:40 ..data -> ..2020_03_03_16_40_36.675612011
    lrwxrwxrwx    1 root     root          18 Mar  3 19:40 config.json -> ..data/config.json
    lrwxrwxrwx    1 root     root          19 Mar  3 19:40 database.yml -> ..data/database.yml

    рдХреЙрдиреНтАНрдлрд╝рд┐рдЧрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ (рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдпрд╛ kubectl edit), 2 рдорд┐рдирдЯ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ (рдПрдкрд┐рд╕реЗрд╡рд░ рдХреИрд╢рд┐рдВрдЧ рд╕рдордп) - рдФрд░ рд╡реЙрдЗрд▓рд╛:

    $ kubectl -n production exec go-conf-example-67c768c6fc-ccpwl -- ls -lha --color /app/configfiles 
    total 12K    
    drwxrwxrwx    3 root     root        4.0K Mar  3 19:44 .
    drwxr-xr-x    1 app      app         4.0K Mar  3 19:34 ..
    drwxr-xr-x    2 root     root        4.0K Mar  3 19:44 ..2020_03_03_16_44_38.763148336
    lrwxrwxrwx    1 root     root          31 Mar  3 19:44 ..data -> ..2020_03_03_16_44_38.763148336
    lrwxrwxrwx    1 root     root          18 Mar  3 19:40 config.json -> ..data/config.json
    lrwxrwxrwx    1 root     root          19 Mar  3 19:40 database.yml -> ..data/database.yml

    рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

рдЯреНрд░реИрдХрд┐рдВрдЧ рдмрджрд▓реЗрдВ


рдФрд░ рдЕрдВрдд рдореЗрдВ - рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгред

рд╣рдо рдРрд╕реЗ рдЧреЛ-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"os"
	"time"

	"github.com/fsnotify/fsnotify"
)

// Config fo our application
type Config struct {
	Welcome string `json:"welcome"`
	Name    string `json:"name"`
}

var (
	globalConfig *Config
)

// LoadConfig - load our config!
func LoadConfig(path string) (*Config, error) {
	configFile, err := os.Open(path)

	if err != nil {
		return nil, fmt.Errorf("Unable to read configuration file %s", path)
	}

	config := new(Config)

	decoder := json.NewDecoder(configFile)
	err = decoder.Decode(&config)
	if err != nil {
		return nil, fmt.Errorf("Unable to parse configuration file %s", path)
	}

	return config, nil
}

// ConfigWatcher - watches config.json for changes
func ConfigWatcher() {
	watcher, err := fsnotify.NewWatcher()
	if err != nil {
		log.Fatal(err)
	}
	defer watcher.Close()

	done := make(chan bool)
	go func() {
		for {
			select {
			case event, ok := <-watcher.Events:
				if !ok {
					return
				}
				log.Println("event:", event)
				if event.Op&fsnotify.Write == fsnotify.Write {
					log.Println("modified file:", event.Name)
				}
				globalConfig, _ = LoadConfig("./configfiles/config.json")
				log.Println("config:", globalConfig)
			case err, ok := <-watcher.Errors:
				if !ok {
					return
				}
				log.Println("error:", err)
			}
		}
	}()

	err = watcher.Add("./configfiles/config.json")
	if err != nil {
		log.Fatal(err)
	}
	<-done
}

func main() {
	log.Println("Start")
	globalConfig, _ = LoadConfig("./configfiles/config.json")
	go ConfigWatcher()
	for {
		log.Println("config:", globalConfig)
		time.Sleep(30 * time.Second)
	}
}

... рдЗрд╕реЗ рдРрд╕реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛:

$ cat configfiles/config.json 
{
  "welcome": "Hello",
  "name": "Alice"
}

рдпрджрд┐ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓реЙрдЧ рд╣реЛрдЧрд╛:

2020/03/03 22:18:22 config: &{Hello Alice}
2020/03/03 22:18:52 config: &{Hello Alice}

рдФрд░ рдЕрдм рд╣рдо рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдЫрд╡рд┐ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп рдкреЙрдб рдореЗрдВ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред GitHub рдкрд░ рдПрдХ Helm рдЪрд╛рд░реНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :

helm install -n habr-configmap --namespace habr-configmap ./habr-configmap --set 'name.production=Alice' --set 'global.env=production'

рдФрд░ рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓реЗрдВ:

-  production: "Alice"
+  production: "Bob"

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╣реЗрд▓рдо рдЪрд╛рд░реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:

helm upgrade habr-configmap ./habr-configmap --set 'name.production=Bob' --set 'global.env=production'

рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

  • рдЕрдиреБрдкреНрд░рдпреЛрдЧ v1 рдФрд░ v2 рдкреБрдирдГ рдЖрд░рдВрдн рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП, рддреИрдирд╛рддреА рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ - рд╡реЗ рдЕрднреА рднреА рдРрд▓рд┐рд╕ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВред
  • V3 рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ, рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рд╛, рдФрд░ рдмреЙрдм рдХреЛ рдЕрднрд┐рд╡рд╛рджрди рдХрд┐рдпрд╛ред
  • V4 рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреБрдирд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реБрдЖред рдЪреВрдВрдХрд┐ configMap рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрд╣рд┐рдо рд╢реБрд░реВ рдХреА рд╣реИ, рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрд╛ рдЧрдпрд╛ рдФрд░ рдлрд▓реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛, рдордХреНрдЦреА рдкрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдмрджрд▓ рдЧрдпрд╛ред рд╣рд╛рдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрд╛ - fsnotify рд╕реЗ рдИрд╡реЗрдВрдЯ рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВ :

    2020/03/03 22:19:15 event: "configfiles/config.json": CHMOD
    2020/03/03 22:19:15 config: &{Hello Bob}
    2020/03/03 22:19:22 config: &{Hello Bob}

рдЖрдк рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ - рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ - рдПрдХ рдЕрдзрд┐рдХ рд╡рдпрд╕реНрдХ (рдФрд░ рдмрд╕ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ") рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ ред

рдЬрд░реВрд░реА! рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдЖрд▓реЗрдЦ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА Kubernetes ( kind: Secret) рдореЗрдВ Secret'ov рдХреЗ рд▓рд┐рдП рднреА рд╕рдЪ рд╣реИ : рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ ...

рдмрдХреНрд╢реАрд╢! рддреГрддреАрдп рдкрдХреНрд╖ рд╕рдорд╛рдзрд╛рди


рдпрджрд┐ рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд╣реИрдВ:

  • jimmidyson / configmap-reload - рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдмрджрд▓ рдЧрдИ рд╣реИ рддреЛ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдиреЗ SUBUP рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рднреА рдмрдирд╛рдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрдЯреВрдмрд░ 2019 рд╕реЗ рдХрдорд┐рдЯ рдХреА рдХрдореА рдЗрди рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИ;
  • stakater / Reloader - рдХреЙрдиреНтАНрдлрд╝рд┐рдЧрд░реЗрд╢рди / рдЧреЛрдкрдиреАрдпрддрд╛ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рд░реЛрд▓рд┐рдВрдЧ рдЕрдкрдЧреНрд░реЗрдб (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХрд╛ рд▓реЗрдЦрдХ рдХрд╣рддрд╛ рд╣реИ) рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдореМрдЬреВрджрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдбрдХрд╛рд░-рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ / рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ "рд▓рд╛рдЗрд╡" (рдереНрд░реВ edit) рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ ... рддреЛ рдРрд╕реА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреА рдХреНрд╖рдорддрд╛ рдЕрддрд┐рд░реЗрдХрдкреВрд░реНрдг рд▓рдЧ рд╕рдХрддреА рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдирд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖


рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдЧрд▓реЗ рджреМрд░ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛: рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ HTML рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓реЗрдкрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рд▓рд╛рдпрд╛ рдЧрдпрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕реА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдиреЗ рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ , рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдкреВрд░рдХ рдмрди рдЧрдпрд╛ ред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╢рд╛рд╕рдХ (рдпрд╛ рдмрд▓реНрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕) рдХреЗ рд▓рд┐рдП рдЬреЛ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдмреЗрдорд╛рдиреА рдорд╛рдирддреЗ рд╣реИрдВ, рдЕрдЪреНрдЫреА рдкреБрд░рд╛рдиреА рдлрд╛рдЗрд▓реЗрдВ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдЦ рдЙрдирдХреЗ рд╕рд╛рд░ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреА рдпреБрдХреНрддрд┐рдпрд╛рдВ рдФрд░ рддрд░рдХреАрдмреЗрдВ рд╣реИрдВ - рддреЛ рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдкреБрдирд╢реНрдЪ


рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ:


All Articles