“Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML” Kod odpowiedzi

Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML

1

I create a script called kubectl_apply. It loads variables from .env, replace ${CUSTOMVAR} in yml and pass it to kubectl command

  #!/bin/bash
  set -a
  source .env
  set +a
  eval "cat <<EOF
  $(<$1)
  EOF
  " | kubectl apply -f -
DreamCoder

Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML

cat $app/deployment.yaml | envsubst | kubectl apply ...
DreamCoder

Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML

This kind of thing is painfully easy with ytt:

deployment.yml

#@ load("@ytt:data", "data")
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: guestbook
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: guestbook
      spec:
        container:
          - name: guestbook
            image: #@ data.values.image
values.yml

#@data/values
image: nginx@sha256:fe2fa7bb1ceb86c6d9c935bc25c3dd8cbd64f2e95ed5b894f93ae7ffbd1e92bb
Then...

$ ytt -f deployment.yml -f values.yml | kubectl apply -f -
or even better, use ytt's cousin, kapp for a high-control deployment experience:

$ ytt -f deployment.yml -f values.yml | kapp deploy -a guestbook -f -
DreamCoder

Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML

I have been using kubetpl (https://github.com/shyiko/kubetpl)

It has three different template flavors and supports ConfigMap/Secret freezing.
DreamCoder

Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML

#!/bin/bash

# sample value for your variables
MYVARVALUE="nginx:latest"

# read the yml template from a file and substitute the string 
# {{MYVARNAME}} with the value of the MYVARVALUE variable
template=`cat "deploy.yml.template" | sed "s/{{MYVARNAME}}/$MYVARVALUE/g"`

# apply the yml with the substituted value
echo "$template" | kubectl apply -f -
DreamCoder

Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML

envsubst < deployment.yaml | kubectl apply -f -
DreamCoder

Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML


My approach:

tools/jinja2-cli.py:

#!/usr/bin/env python3
import os
import sys
from jinja2 import Environment, FileSystemLoader

sys.stdout.write(Environment(loader=FileSystemLoader('templates/')).from_string(sys.stdin.read()).render(env=os.environ) + "\n")
Make rule:

_GENFILES = $(basename $(TEMPLATES))
GENFILES = $(_GENFILES:templates/%=%)

$(GENFILES): %: templates/%.j2 $(MKFILES) tools/jinja2-cli.py .env
        env $$(cat .env | xargs) tools/jinja2-cli.py < $< > $@ || (rm -f $@; false)
Inside the .j2 template file you can use any jinja syntax construct, e.g. {{env.GUEST}} will be replaced by the value of GUEST defined in .env

So your templates/deploy.yaml.j2 would look like:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: guestbook
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: guestbook
      spec:
        container:
          - name: guestbook
            image: {{env.GUEST}}
Another approach (using just bash builtins and xargs) might be

env $(cat .env | xargs) cat <<EOF | kubectl create -f -
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: guestbook
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: guestbook
      spec:
        container:
          - name: guestbook
            image: ${GUEST}
EOF
DreamCoder

Odpowiedzi podobne do “Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML”

Pytania podobne do “Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML”

Więcej pokrewnych odpowiedzi na “Ustaw wartości dynamiczne za pomocą pliku Kubernetes YAML” w Shell/Bash

Przeglądaj popularne odpowiedzi na kod według języka

Przeglądaj inne języki kodu