Kubernetes: kubectl --validate ํ”Œ๋ž˜๊ทธ๋Š” yaml ํŒŒ์ผ์ด ์ž˜๋ชป๋˜์—ˆ์„ ๋•Œ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 06์›” 06์ผ  ยท  2์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubernetes

/ ์ข…๋ฅ˜์˜ ๋ฒ„๊ทธ

๋ฒ„๊ทธ ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

๋ฌด์Šจ ์ผ์ด ์ผ์–ด ๋‚ฌ์Šต๋‹ˆ๊นŒ?
kubectl์€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ ๋œ yaml ํŒŒ์ผ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค (yaml ํŒŒ์ผ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฐธ์กฐ).

$ kubectl --context=minikube  create --dry-run --validate -f invalid.yml 
deployment "test" created (dry run)

๊ทธ๋Ÿฌ๋‚˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์—†์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

$ kubectl --context=minikube apply -f invalid.yml 
The Deployment "test" is invalid: 
* metadata.labels: Invalid value: "ยฃ\"+=_+!ยนยฒยณโ‚ฌ}{{@\"}{@~@:>?|\\|ยฌ`}": a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue',  or 'my_value',  or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?')
* spec.replicas: Invalid value: -100: must be greater than or equal to 0
* spec.selector.matchLabels: Invalid value: "ยฃ\"+=_+!ยนยฒยณโ‚ฌ}{{@\"}{@~@:>?|\\|ยฌ`}": a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue',  or 'my_value',  or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?')
* spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"ยฃ\"+=_+!ยนยฒยณโ‚ฌ}{{@\"}{@~@:>?|\\|ยฌ`}"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: invalid label selector.

์˜ˆ์ƒ ํ•œ ์ผ :
kubectl create --dry-run --validate ์—์„œ yaml ํŒŒ์ผ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Œ์„๋ณด๊ณ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋ฐฉ๋ฒ• (๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ•œ์œผ๋กœ ์ •ํ™•ํ•˜๊ฒŒ) :
์•„๋ž˜ yaml์„ yaml ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ ์ ์šฉํ•˜์‹ญ์‹œ์˜ค.
kubectl create --dry-run --validate -f file.yaml

๊ทธ๋ฆฌ๊ณ  ์ง„์งœ๋กœ
kubectl create -f file.yaml

Minikube๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test
  labels:
    app: ยฃ"+=_+!ยนยฒยณโ‚ฌ}{{@"}{@~@:>?|\|ยฌ`}
  namespace: default
spec:
  replicas: -100
  revisionHistoryLimit: 2
  template:
    metadata:
      labels:
        app: ยฃ"+=_+!ยนยฒยณโ‚ฌ}{{@"}{@~@:>?|\|ยฌ`}
    spec:
      containers:
      - image: ยฃ"+=_+!ยนยฒยณโ‚ฌ}{{@"}{@~@:>?|\|ยฌ`}
        name: ยฃ"+=_+!ยนยฒยณโ‚ฌ}{{@"}{@~@:>?|\|ยฌ`}
        envFrom:
        - secretRef:
            name: ยฃ"+=_+!ยนยฒยณโ‚ฌ}{{@"}{@~@:>?|\|ยฌ`}

์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„์•ผ ํ•  ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? :

ํ™˜๊ฒฝ :

  • Kubernetes ๋ฒ„์ „ ( kubectl version ) :
    ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „ : version.Info {Major : "1", Minor : "9", GitVersion : "v1.9.6", GitCommit : "9f8ebd171479bec0ada837d7ee641dec2f8c6dd1", GitTreeState : "clean", BuildDate : "2018-03-21T15 : 21 : 50Z ", GoVersion :"go1.9.3 ", ์ปดํŒŒ์ผ๋Ÿฌ :"gc ", ํ”Œ๋žซํผ :"linux / amd64 "}
    ์„œ๋ฒ„ ๋ฒ„์ „ : version.Info {Major : "", Minor : "", GitVersion : "v1.9.4", GitCommit : "bee2d1505c4fe820744d26d41ecd3fdd4a3d6546", GitTreeState : "clean", BuildDate : "2018-03-21T21 : 48 : 36Z" , GoVersion : "go1.9.1", ์ปดํŒŒ์ผ๋Ÿฌ : "gc", ํ”Œ๋žซํผ : "linux / amd64"}
  • ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ๊ตฌ์„ฑ :
    Linux์˜ minikube, ๋‹ค๋ฅธ ๋น„ minikube ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • OS (์˜ˆ : / etc / os-release) :
NAME="Linux Mint"
VERSION="18.3 (Sylvia)"
ID=linuxmint
ID_LIKE=ubuntu
PRETTY_NAME="Linux Mint 18.3"
VERSION_ID="18.3"
VERSION_CODENAME=sylvia
UBUNTU_CODENAME=xenial
  • ์ปค๋„ (์˜ˆ : uname -a ) :
    Linux nb 4.13.0-43-generic # 48 ~ 16.04.1-Ubuntu SMP Thu May 17 12:56:46 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

  • ๋„๊ตฌ ์„ค์น˜ :

  • ๊ธฐํƒ€ :

/ sig cli

kinbug sicli

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํด๋ผ์ด์–ธํŠธ ์ธก ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ์™„์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ yaml ํŒŒ์ผ์˜ ํ•„๋“œ ์ด๋ฆ„๊ณผ ์œ ํ˜•์ด ์œ ํšจํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ํ•ญ์ƒ ์„œ๋ฒ„์—์„œ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ํ•ญ์ƒ ํด๋ผ์ด์–ธํŠธ ์ธก ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ œํ•œ / ์ œ์•ฝ์„ ๋ถ€๊ณผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  2 ๋Œ“๊ธ€

ํด๋ผ์ด์–ธํŠธ ์ธก ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ์™„์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ yaml ํŒŒ์ผ์˜ ํ•„๋“œ ์ด๋ฆ„๊ณผ ์œ ํ˜•์ด ์œ ํšจํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ํ•ญ์ƒ ์„œ๋ฒ„์—์„œ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ํ•ญ์ƒ ํด๋ผ์ด์–ธํŠธ ์ธก ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ œํ•œ / ์ œ์•ฝ์„ ๋ถ€๊ณผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/๋‹ซ๊ธฐ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰