không có kết quả phù hợp với loại hình triển khai trong phiên bản "mở rộng / v1beta1


27

Tôi đã gặp sự cố khi triển khai mojaloop .kubernetes đang phản hồi với nhật ký lỗi như

Tôi đã kiểm tra phiên bản Kubernetes của mình và 1.16 là phiên bản vì vậy làm cách nào tôi có thể khắc phục loại sự cố như vậy với phiên bản API. Từ khi điều tra tôi đã thấy rằng Kubernetes không hỗ trợ ứng dụng / v1beta2, apps / v1beta1 vậy hiện đang sử dụng phiên bản không được hỗ trợ hoặc phiên bản được hỗ trợ Tôi mới sử dụng Kubernetes và bất kỳ ai có thể hỗ trợ tôi, tôi rất vui

Lỗi: xác thực không thành công: [không thể nhận ra "": không khớp với loại "Triển khai" trong phiên bản "apps / v1beta2", không thể nhận ra "": không khớp với loại "Triển khai" trong phiên bản "extend / v1beta1", không thể nhận ra "": không khớp với loại "Statefulset" trong phiên bản "apps / v1beta2", không thể nhận ra "": không khớp với loại "Statefulset" trong phiên bản "apps / v1beta1"]


1
Viết lại các tệp kê khai của bạn để sử dụng apis kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16
zerkms

Làm thế nào tôi có thể tái tạo vấn đề bạn có thể chia sẻ cho tôi một số bước
dan

Câu trả lời:


56

Trong Kubernetes 1.16 một số apis đã được thay đổi.

Bạn có thể kiểm tra apis nào hỗ trợ đối tượng Kubernetes hiện tại bằng cách sử dụng

$ kubectl api-resources | grep deployment
deployments                       deploy       apps                           true         Deployment

Điều này có nghĩa là chỉ apiVersion với appslà chính xác cho Triển khai ( extensionskhông hỗ trợ Deployment). Tình trạng tương tự với Statefulset.

Bạn chỉ cần thay đổi Triển khai và apiVersion trạng thái để apiVersion: apps/v1.

Nếu điều này không có ích, vui lòng thêm YAML của bạn vào câu hỏi.

EDIT Do sự cố xảy ra do các mẫu của HelM bao gồm các lỗi cũ trong Triển khai không được hỗ trợ trong phiên bản 1.16, có 2 giải pháp khả thi:

1. git clone toàn bộ repo và thay thế apiVersion thành apps/v1trong tất cả các mẫu / triển khai.yaml bằng cách sử dụng tập lệnh
2. Sử dụng phiên bản cũ hơn của Kubernetes (1.15) khi trình xác nhận chấp nhận extensionsnhư apiVersioncho DeployentStatefulSet.


Tôi có thể hạ cấp các kubernettes không vì tất cả tệp yaml triển khai cho mojaloop có thể tương thích với kuberntes phiên bản 1.15, làm thế nào tôi có thể hạ cấp hoặc bằng cách hạ cấp tôi có thể nhận được một bản sau đó
dan

1
Tôi đã kiểm tra biểu đồ helm mojaloop / mojaloop này. Thật không may, tất cả các mẫu có triển khai đều có apiVersions : extensions/v1beta1. Một trong những cách giải quyết có thể là git clonetoàn bộ repo và thay thế apiVersion thành apps/v1trong tất cả các mẫu / triển khai.yaml usinc script find . -name 'deployment.yaml' | xargs -n 1 perl -pi -e 's/(apps\/v1beta2)|(extensions\/v1beta1)/apps\/v1/g'.Cách giải quyết thứ hai có thể chỉ là sử dụng phiên bản cũ hơn của Kubernetes (1.15) khi trình xác nhận chấp nhận các phần mở rộng là apiVersion cho Deployent và Statefulset.
PjoterS

@dan bạn đang dùng Minikubehay Kubeadm?
PjoterS

kubeadm tôi đã không sử dụng minikube
dan

Bạn có thể chia sẻ cho tôi một số bước để cài đặt kubeadmn specfic lên phiên bản 1.15 không thể tìm thấy tài nguyên cụ thể khi xem xét cài đặt kubeadmn 1.15
dan

4

Bạn có thể thay đổi bằng tay như là một thay thế. Lấy biểu đồ helm:

helm fetch --untar stable/metabase

Truy cập thư mục biểu đồ:

cd ./metabase

Thay đổi phiên bản API:

sed -i 's|extensions/v1beta1|apps/v1|g' ./templates/deployment.yaml

Thêm spec.selector.matchLabels:

spec:
[...]
selector:
    matchLabels:
    app: {{ template "metabase.name" . }}
[...]

Cuối cùng cài đặt biểu đồ đã thay đổi của bạn:

helm install ./ \
  -n metabase \
  --namespace metabase \
  --set ingress.enabled=true \
  --set ingress.hosts={metabase.$(minikube ip).nip.io}

Thưởng thức!


0

Điều này gây khó chịu cho tôi vì tôi đang thử nghiệm nhiều gói helm nên tôi đã viết một kịch bản nhanh - có thể được sửa đổi để sắp xếp quy trình công việc của bạn có thể xem bên dưới

Quy trình công việc mới Đầu tiên tìm nạp biểu đồ dưới dạng tgz vào thư mục làm việc của bạn

helm fetch repo/chart

sau đó, trong công việc của bạn trực tiếp chạy tập lệnh bash bên dưới - mà tôi đặt tên là helmk

helmk myreleasename mynamespace chart.tgz [any parameters for kubectl create]

Nội dung của helmk - cần chỉnh sửa clustername kubeconfig của bạn để hoạt động

#!/bin/bash
echo usage $0 releasename namespace chart.tgz [createparameter1] [createparameter2] ... [createparameter n]
echo This will use your namespace then shift back to default so be careful!!
kubectl create namespace $2   #this will create harmless error if namespace exists have to ignore
kubectl config set-context MYCLUSTERNAME --namespace $2
helm template -n $1 --namespace $2 $3 | kubectl convert -f /dev/stdin | kubectl create --save-config=true ${@:4}  -f /dev/stdin
#note the --namespace parameter in helm template above seems to be ignored so we have to manually switch context
kubectl config set-context MYCLUSTERNAME --namespace default

Đó là một hack hơi nguy hiểm vì tôi tự chuyển sang bối cảnh không gian tên mong muốn mới của bạn sau đó quay lại để chỉ được sử dụng cho các nhà phát triển người dùng thực sự hoặc nhận xét điều đó.

Bạn sẽ nhận được cảnh báo về việc sử dụng tiện ích chuyển đổi kubectl như thế này

Nếu bạn cần chỉnh sửa YAML để tùy chỉnh - chỉ cần thay thế một trong số / dev / stdin thành các tệp trung gian nhưng có lẽ tốt hơn là sử dụng "tạo" bằng cấu hình lưu như tôi có và sau đó chỉ cần "áp dụng" các thay đổi của bạn điều đó có nghĩa là chúng cũng sẽ được ghi lại trong kubernetes. Chúc may mắn


0

Để đơn giản, bạn không bắt buộc cài đặt hiện tại sử dụng phiên bản API đã lỗi thời, nhưng bạn chỉ cần sửa phiên bản trong tệp cấu hình của mình nếu bạn muốn kiểm tra phiên bản hiện tại mà kube hỗ trợ, chỉ cần chạy:

root @ ubn64: ~ # kubectl api-Phiên bản | ứng dụng grep -i

ứng dụng / v1

root @ ubn64: ~ #

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.