最近、Kubernetes 1.16を使い始めました。ただ、Kubernetes 1.15まで問題なく動いていたYAMLファイルを使ってPodを作ろうとすると、なんかうまくいかないのでおかしいなと思ったのですが、APIがとうとう削除されたのが原因でした。
ChangeLogをきちんとみていればはまらない問題でした。1.15のChangeLogでも予告されてました。ただしKubernetes 1.15では本例の変更前と変更後のYAMLどちらの記述でも通ります。1.16以降は --runtime-config
で再度有効にしない限り、変更が必要です。
デフォルトでは無効にされたAPIは次で確認できます。
Kubernetes 1.16からは「Deployment apps/v1」を使う
なので、次のようなYAMLを使っていたのであれば
--- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginxapp1 spec: replicas: 1 template: metadata: labels: app: nginxapp1 spec: containers: - name: nginxapp1 image: nginx:alpine ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginxapp1-nodeport labels: app: nginxapp1 spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 30080 selector: app: nginxapp1
次のように変えれば良いそうです。最初「言われたようにselectorとappをspecの中に書いたのになんで通らないのかなと思っていたら、 matchLabelsが必要だったという話でした。ちゃんとエラーをみないといけませんね。
--- apiVersion: apps/v1 kind: Deployment metadata: name: nginxapp1 spec: replicas: 1 selector: matchLabels: app: nginxapp1 template: metadata: labels: app: nginxapp1 spec: containers: - name: nginxapp1 image: nginx:alpine ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginxapp1-nodeport labels: app: nginxapp1 spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 30080 selector: app: nginxapp1
YAMLをブログに貼り付けた際にインデントが不足している箇所がある可能性があります。ご了承ください。