こんにちは、LinuCエバンジェリストこと、鯨井貴博@opensourcetechです。
kubernetesでYAMLからデプロイするときのエラーメッセージに関するメモです。
特に、初めてYAMLを書いてデプロイする場合に遭遇することが多そうです。
エラーメッセージ1
「error: error parsing test1.yaml: error converting YAML to JSON: yaml: line 3: found character that cannot start any token」
行先頭のスペースが1個多く、YAMLが解釈できないってことを言ってます。
Nantecotta:~ Pannacotta$ cat test1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec: ・・・・・・エラー原因はこの行の先頭にスペースが1個多い!
containers:
- name: nginx
image: nginx:1.17.3
ports:
- containerPort:80
Nantecotta:~ Pannacotta$ kubectl apply -f test1.yaml
error: error parsing test1.yaml: error converting YAML to JSON: yaml: line 3: found character that cannot start any token
エラーメッセージ2
「error: error validating "test1.yaml": error validating data: ValidationError(Deployment.spec): unknown field "spce" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false」
この場合、「spec」と書くべきところを「spce」と間違ってます。
いわゆる、typoってやつですね。
Nantecotta:~ Pannacotta$ cat test1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spce:・・・・原因はここのtypo
containers:
- name: nginx
image: nginx:1.17.3
ports:
- containerPort: 80
Nantecotta:~ Pannacotta$ kubectl apply -f test1.yaml
error: error validating "test1.yaml": error validating data: ValidationError(Deployment.spec): unknown field "spce" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false
正常時
エラーを修正したら、以下のようにデプロイできます。
使用したYAMLファイルは、こちらに一応置きました。
https://github.com/kujiraitakahiro/kubernetes/blob/master/test1.yaml
Nantecotta:~ Pannacotta$ cat test1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.17.3
ports:
- containerPort: 80
Nantecotta:~ Pannacotta$ kubectl apply -f test1.yaml
deployment.apps/nginx-deployment created
Nantecotta:~ Pannacotta$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 10s
Nantecotta:~ Pannacotta$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-778d6ddb68-4kpkw 1/1 ErrImagePull 0 14s
nginx-deployment-778d6ddb68-6mvxh 1/1 ErrImagePull 0 14s
nginx-deployment-778d6ddb68-jl68d 1/1 ErrImagePull 0 14s
おまけ
ちなみに指定するnginxのバージョンが現存しないものであった場合、以下のようになります。
deployment.apps/nginx-deployment created
Nantecotta:~ Pannacotta$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 0/3 3 0 10s・・・使用可能なものがない!
Nantecotta:~ Pannacotta$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-778d6ddb68-4kpkw 0/1 ErrImagePull 0 14s・・・使用可能なものがない!
nginx-deployment-778d6ddb68-6mvxh 0/1 ErrImagePull 0 14s・・・使用可能なものがない!
nginx-deployment-778d6ddb68-jl68d 0/1 ErrImagePull 0 14s・・・使用可能なものがない!
ダッシュボードも以下のように、真っ赤です。