Вывод helm version
: v2.14.3
Вывод kubectl version
: клиент: v1.15.3, сервер: v1.16.0-rc.1
Облачный провайдер / платформа (AKS, GKE, Minikube и т. Д.): IBM Cloud Kubernetes Service
$ helm init --service-account tiller
$HELM_HOME has been configured at /Users/xxxx/.helm.
Error: error installing: the server could not find the requested resource
$ helm init --debug --service-account tiller
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: helm
name: tiller
name: tiller-deploy
namespace: kube-system
spec:
.
.
.
Похоже, что helm пытается создать tiller
Deployment с помощью: apiVersion: extensions/v1beta1
Согласно: https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16
это больше не поддерживается.
В прошлом мы избегали обновления tiller до apps / v1 из-за сложности с helm init --upgrade
согласованием развертываний extensions/v1beta1
и apps/v1
tiller. Похоже, что как только мы начнем поддерживать Kubernetes 1.16.0, нам придется разобраться с этим случаем и перейти на более новую версию apiVersion.
Вот краткосрочный обходной путь:
helm init --output yaml | sed 's<strong i="6">@apiVersion</strong>: extensions/v1beta1<strong i="7">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
На самом деле этого недостаточно. Я все еще получаю сообщение об ошибке:
error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec
Это можно исправить с помощью:
/usr/local/bin/kubectl patch --local -oyaml -f - -p '{"spec":{"selector": {"app":"helm","name":"tiller"}}}'
Хороший! Возможно, вы сможете добиться того же эффекта с помощью флага --override
сумасшедшие взломы sed :)
Хороший! Возможно, вы сможете добиться того же эффекта с помощью флага
--override
сумасшедшие взломы sed :)
Да, но его сумасшедшие хаки sed я могу скопировать и вставить, тогда как этот helm init --override "apiVersion"="apps/v1"
просто не работает. Хорошо, sed hack тоже не работает.
Текущий обходной путь выглядит примерно так:
helm init --output yaml> tiller.yaml
и обновите tiller.yaml:
---
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: helm
name: tiller
name: tiller-deploy
namespace: kube-system
spec:
replicas: 1
strategy: {}
selector:
matchLabels:
app: helm
name: tiller
....
Для меня работает следующий sed:
helm init --service-account tiller --output yaml | sed 's<strong i="6">@apiVersion</strong>: extensions/v1beta1<strong i="7">@apiVersion</strong>: apps/v1@' | sed 's@ replicas: 1@ replicas: 1\n selector: {"matchLabels": {"app": "helm", "name": "tiller"}}@' | kubectl apply -f -
Проблема с решением @mattymo (с использованием kubectl patch --local) заключается в том, что оно, похоже, не работает, когда его входные данные содержат несколько ресурсов (здесь развертывание и служба).
Kubernetes 1.16.0 был выпущен вчера: 18.09.2018.
Helm не работает в этом последнем выпуске Kubernetes, если не используется вышеуказанный обходной путь.
Когда эта проблема будет исправлена и когда выйдет Helm 2.15.0
?
Если вы хотите использовать на один sed меньше :)
helm init --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's<strong i="6">@apiVersion</strong>: extensions/v1beta1<strong i="7">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
Спасибо!
Сегодня столкнулся с такой же проблемой, сам поменял лейбл. Я меняю метку на apps/v1
и добавляю часть selector
, на данный момент она отлично работает, ниже мой файл yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: helm
name: tiller
name: tiller-deploy
namespace: kube-system
spec:
replicas: 1
strategy: {}
selector:
matchLabels:
app: helm
name: tiller
template:
metadata:
creationTimestamp: null
labels:
app: helm
name: tiller
spec:
automountServiceAccountToken: true
containers:
- env:
- name: TILLER_NAMESPACE
value: kube-system
- name: TILLER_HISTORY_MAX
value: "0"
image: gcr.io/kubernetes-helm/tiller:v2.14.3
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /liveness
port: 44135
initialDelaySeconds: 1
timeoutSeconds: 1
name: tiller
ports:
- containerPort: 44134
name: tiller
- containerPort: 44135
name: http
readinessProbe:
httpGet:
path: /readiness
port: 44135
initialDelaySeconds: 1
timeoutSeconds: 1
resources: {}
serviceAccountName: tiller
status: {}
@jbrette ты мой герой! Я боролся со строфой selector
.
Сегодня столкнулся с такой же проблемой, сам поменял лейбл. Я меняю метку на
apps/v1
и добавляю частьselector
, на данный момент она отлично работает, ниже мой файл yaml:apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: helm name: tiller name: tiller-deploy namespace: kube-system spec: replicas: 1 strategy: {} selector: matchLabels: app: helm name: tiller template: metadata: creationTimestamp: null labels: app: helm name: tiller spec: automountServiceAccountToken: true containers: - env: - name: TILLER_NAMESPACE value: kube-system - name: TILLER_HISTORY_MAX value: "0" image: gcr.io/kubernetes-helm/tiller:v2.14.3 imagePullPolicy: IfNotPresent livenessProbe: httpGet: path: /liveness port: 44135 initialDelaySeconds: 1 timeoutSeconds: 1 name: tiller ports: - containerPort: 44134 name: tiller - containerPort: 44135 name: http readinessProbe: httpGet: path: /readiness port: 44135 initialDelaySeconds: 1 timeoutSeconds: 1 resources: {} serviceAccountName: tiller status: {}
как изменить ? можешь описать подробнее?
Сегодня столкнулся с такой же проблемой, сам поменял лейбл. Я меняю метку на
apps/v1
и добавляю частьselector
, на данный момент она отлично работает, ниже мой файл yaml:apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: helm name: tiller name: tiller-deploy namespace: kube-system spec: replicas: 1 strategy: {} selector: matchLabels: app: helm name: tiller template: metadata: creationTimestamp: null labels: app: helm name: tiller spec: automountServiceAccountToken: true containers: - env: - name: TILLER_NAMESPACE value: kube-system - name: TILLER_HISTORY_MAX value: "0" image: gcr.io/kubernetes-helm/tiller:v2.14.3 imagePullPolicy: IfNotPresent livenessProbe: httpGet: path: /liveness port: 44135 initialDelaySeconds: 1 timeoutSeconds: 1 name: tiller ports: - containerPort: 44134 name: tiller - containerPort: 44135 name: http readinessProbe: httpGet: path: /readiness port: 44135 initialDelaySeconds: 1 timeoutSeconds: 1 resources: {} serviceAccountName: tiller status: {}
@ gm12367 как поменять и можно
Сегодня столкнулся с такой же проблемой, сам поменял лейбл. Я меняю метку на
apps/v1
и добавляю частьselector
, на данный момент она отлично работает, ниже мой файл yaml:apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: helm name: tiller name: tiller-deploy namespace: kube-system spec: replicas: 1 strategy: {} selector: matchLabels: app: helm name: tiller template: metadata: creationTimestamp: null labels: app: helm name: tiller spec: automountServiceAccountToken: true containers: - env: - name: TILLER_NAMESPACE value: kube-system - name: TILLER_HISTORY_MAX value: "0" image: gcr.io/kubernetes-helm/tiller:v2.14.3 imagePullPolicy: IfNotPresent livenessProbe: httpGet: path: /liveness port: 44135 initialDelaySeconds: 1 timeoutSeconds: 1 name: tiller ports: - containerPort: 44134 name: tiller - containerPort: 44135 name: http readinessProbe: httpGet: path: /readiness port: 44135 initialDelaySeconds: 1 timeoutSeconds: 1 resources: {} serviceAccountName: tiller status: {}
@ gm12367 как поменять и можно
Например, вы можете использовать helm init --service-account tiller --tiller-namespace kube-system --debug
для печати манифестов в формате YAML, опция --debug
сделает это.
@ gm12367 Да, я могу видеть распечатку, но только вывод. Итак, какой командой я могу изменить вывод?
@ gm12367 Я хочу изменить apps / v1 и добавить часть селектора
@ puww1010 Я просто перенаправил вывод в файл, а затем использовал VIM, чтобы изменить его. Ниже приведены команды для справки.
# helm init --service-account tiller --tiller-namespace kube-system --debug >> helm-init.yaml
# vim helm-init.yaml
# kubectl apply -f helm-init.yaml
если ваша среда go настроена и вы не можете дождаться следующего PR, который исправит эту проблему [Helm init, совместимый с Kubernetes 1.16] # 6462, вы всегда можете сделать следующее:
Строить
mkdir p ${GOPATH}/src/k8s.io
cd ${GOPATH}/src/k8s.io
git clone -b kube16 https://github.com/keleustes/helm.git
cd helm
make bootstrap build
Контрольная работа:
kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"2bd9643cee5b3b3a5ecbd3af49d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:36:53Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"2bd9643cee5b3b3a5ecbd3af49d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:27:17Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
/bin/helm init --wait --tiller-image gcr.io/kubernetes-helm/tiller:v2.14.3
Creating /home/xxx/.helm
Creating /home/xxx/.helm/repository
Creating /home/xxx/.helm/repository/cache
Creating /home/xxx/.helm/repository/local
Creating /home/xxx/.helm/plugins
Creating /home/xxx/.helm/starters
Creating /home/xxx/.helm/cache/archive
Creating /home/xxx/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /home/xxx/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Баш
kubectl получить развертывание.apps / tiller-deploy -n kube-system -o yaml
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2019-09-22T01:01:11Z"
generation: 1
labels:
app: helm
name: tiller
name: tiller-deploy
namespace: kube-system
resourceVersion: "553"
selfLink: /apis/apps/v1/namespaces/kube-system/deployments/tiller-deploy
uid: 124001ca-6f31-417e-950b-2452ce70f522
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: helm
name: tiller
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: helm
name: tiller
spec:
automountServiceAccountToken: true
containers:
- env:
- name: TILLER_NAMESPACE
value: kube-system
- name: TILLER_HISTORY_MAX
value: "0"
image: gcr.io/kubernetes-helm/tiller:v2.14.3
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 3
httpGet:
path: /liveness
port: 44135
scheme: HTTP
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: tiller
ports:
- containerPort: 44134
name: tiller
protocol: TCP
- containerPort: 44135
name: http
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /readiness
port: 44135
scheme: HTTP
initialDelaySeconds: 1
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status:
availableReplicas: 1
conditions:
- lastTransitionTime: "2019-09-22T01:01:23Z"
lastUpdateTime: "2019-09-22T01:01:23Z"
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: "2019-09-22T01:01:11Z"
lastUpdateTime: "2019-09-22T01:01:23Z"
message: ReplicaSet "tiller-deploy-568db6b69f" has successfully progressed.
reason: NewReplicaSetAvailable
status: "True"
type: Progressing
observedGeneration: 1
readyReplicas: 1
replicas: 1
updatedReplicas: 1
@jbrette По-прежнему имеет ту же проблему после выполнения вашей инструкции
@jbrette По-прежнему имеет ту же проблему после выполнения вашей инструкции
Похоже, вы набрали «helm» вместо «./bin/helm"....», значит, вы используете старую версию двоичного файла.
После успешной инициализации вы не сможете установить пакет диаграммы из репозитория, пока в нем также не замените extension / v1beta1.
Вот как адаптировать любую диаграмму из репозитория для k8s v1.16.0
Пример основан на диаграмме Прометея.
git clone https://github.com/helm/charts
cd charts/stable
Замените extension / v1beta1 на policy / v1beta1 PodSecurityPolicy:
sed -i 's<strong i="11">@apiVersion</strong>: extensions/v1beta1<strong i="12">@apiVersion</strong>: policy/v1beta1@' `find . -iregex ".*yaml\|.*yml" -exec awk '/kind:\s+PodSecurityPolicy/ {print FILENAME}' {} +`
NetworkPolicy apiVersion хорошо обрабатывается _helpers.tpl для тех диаграмм, где он используется.
Замените extension / v1beta1 на apps / v1 в Deployment, StatefulSet, ReplicaSet, DaemonSet.
sed -i 's<strong i="17">@apiVersion</strong>: extensions/v1beta1<strong i="18">@apiVersion</strong>: apps/v1@' `find . -iregex ".*yaml\|.*yml" -exec awk '/kind:\s+(Deployment|StatefulSet|ReplicaSet|DaemonSet)/ {print FILENAME}' {} +`
sed -i 's<strong i="19">@apiVersion</strong>: apps/v1beta2<strong i="20">@apiVersion</strong>: apps/v1@' `find . -iregex ".*yaml\|.*yml" -exec awk '/kind:\s+(Deployment|StatefulSet|ReplicaSet|DaemonSet)/ {print FILENAME}' {} +`
Создайте новый пакет:
helm package ./prometheus
Successfully packaged chart and saved it to: /home/vagrant/charts/stable/prometheus-9.1.1.tgz
Установите его:
helm install /home/vagrant/charts/stable/prometheus-9.1.1.tgz
На основе https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/
PS Для некоторых диаграмм с зависимостями вам может потребоваться использовать helm dependency update
и заменить зависимые tgz на исправленные, если это применимо.
Та же ошибка при запуске helm init --history-max 200
выход
$HELM_HOME has been configured at /Users/neil/.helm.
Error: error installing: the server could not find the requested resource
$ helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Error: could not find tiller
Эта ветка работает https://github.com/keleustes/helm/tree/kube16. Вы можете построить ветку самостоятельно. Я также загрузил двоичный файл сюда для вашего удобства https://s3-us-west-2.amazonaws.com/bin.cryptexlabs.com/github.com/keleustes/helm/kube16/darwin/helm. Одно предостережение: вы должны использовать флаг канареечного изображения helm init --canary-image
поскольку сборка еще не выпущена.
Вам не понадобится изображение канарейки для этой работы. Я бы посоветовал использовать helm init --tiller-image gcr.io/kubernetes-helm/tiller:v2.14.3
в качестве упомянутого ранее @jbrette, если вы хотите попробовать # 6462.
Я бы порекомендовал пользователям сначала попробовать один из предложенных ранее
Когда я выполняю команду, он развертывает его, но после этого может видеть его в модулях и сообщает Ошибка с сервера (NotFound): модули "tiller-deploy" не найдены.
helm init --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's<strong i="7">@apiVersion</strong>: extensions/v1beta1<strong i="8">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
Deployment.apps / tiller-deploy создано
сервис / tiller-deploy создан
Но когда я делаю kubectl get pods --all-namespaces не может видеть модули
NAMESPACE ИМЯ СОСТОЯНИЕ ГОТОВНОСТЬ ВОЗВРАЩАЕТСЯ ВОЗРАСТ
kube-system coredns-5644d7b6d9-559hw 1/1 Бег 0 23ч
kube-system coredns-5644d7b6d9-xcmjd 1/1 Бег 0 23ч
kube-system etcd-fmp 1/1 Работает 0 24ч
kube-system kube-apiserver-fmp 1/1 Работает 0 24 часа
kube-system kube-controller-manager-fmp 1/1 Работает 1 24 часа
kube-system kube-flannel-ds-amd64-ffx2g 1/1 Запуск 0 23ч
kube-system kube-proxy-lfvrz 1/1 Работает 0 24 часа
kube-system kube-scheduler-fmp 1/1 Работает 0 24 часа
kubectl получить все --all-namespaces | grep tiller
служба kube-system / tiller-deploy ClusterIP xxx
kube-system deployment.apps / tiller-deploy 0/1 0 0 2 мин. 54 сек.
kube-system replicaset.apps / tiller-deploy-77855d9dcf 1 0 0 2 м54 с
@DanielIvaylov Я думаю, у вас нет учетной записи службы румпеля. Пожалуйста, создайте его, и тогда при развертывании также будет создан румпель.
Спасибо!
@DanielIvaylov Я думаю, у вас нет учетной записи службы румпеля. Пожалуйста, создайте его, и тогда при развертывании также будет создан румпель.
Спасибо!
Извините, я новенький, я подумал, что с этого все начнется. Как мне запустить учетную запись службы румпеля?
@DanielIvaylov
kubectl --namespace kube-system create sa tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
Ниже добавлен флаг для сервера api (/etc/kubernetes/manifests/kube-apiserver.yaml), который временно повторно включил этот устаревший API.
--runtime-config = apps / v1beta1 = true, apps / v1beta2 = true, extensions / v1beta1 / daemonsets = true, extensions / v1beta1 / deployments = true, extensions / v1beta1 / replicasets = true, extensions / v1beta1 / networkpolicies = true, расширения / v1beta1 / podsecuritypolicies = true
Это исправило шлем v2
Для пользователей Windows мы смогли установить / обновить tiller через PowerShell следующим образом:
$(helm init --output yaml) -replace "extensions/v1beta1","apps/v1"
Вот краткосрочный обходной путь:
helm init --output yaml | sed 's<strong i="7">@apiVersion</strong>: extensions/v1beta1<strong i="8">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
На самом деле этого недостаточно. Я все еще получаю сообщение об ошибке:
error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec
Это можно исправить с помощью:
/usr/local/bin/kubectl patch --local -oyaml -f - -p '{"spec":{"selector": {"app":"helm","name":"tiller"}}}'
у меня висит патч kubectl
нет сообщений в файле / var / log / syslog
сервисные аккаунты уже существуют
kubeflow @ masternode : ~ $ kubectl --namespace kube-system create sa tiller
Ошибка сервера (уже существует): serviceaccounts "tiller" уже существует
kubeflow @ masternode : ~ $ kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount = kube- system: tiller
Ошибка сервера (уже существует): clusterrolebindings.rbac.authorization.k8s.io "tiller" уже существует
Вы могли бы посоветовать
выполнение нижеприведенного
экспорт ПУТЬ = $ ПУТЬ: / usr / local / bin
какой руль
какой культиватор
helm install \
--name nfs-client-provisioner \
--set nfs.server = 10.0.0.4 \
--set nfs.path = / nfsroot \
--set storageClass.name = nfs \
--set storageClass.defaultClass = true \
стабильный / nfs-client-provisioner
возвращается с
/ USR / местные / бен / шлем
/ USR / местные / бен / культиватор
Ошибка: не удалось найти румпель
ценю любую помощь, так как теперь это ограничитель шоу
@cyrilthank Похоже, ошибка румпеля
helm init --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's<strong i="7">@apiVersion</strong>: extensions/v1beta1<strong i="8">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
helm version -s
должен вернуть версию сервера (тиллера), если он запущен и работает правильно
Спасибо, сэр.
Вы помогли нам перейти с kubeflow к следующему этапу
хорошо, теперь я думаю, что у меня эта проблема
https://github.com/kubeflow/kubeflow/issues/4184
назад как блокирующий
Большое спасибо, если бы вы могли помочь советом о том, как я могу получить помощь на https://github.com/kubeflow/kubeflow/issues/4184
@cyrilthank, попробуйте шаги, указанные выше: https://github.com/helm/helm/issues/6374#issuecomment -533853888
Вам необходимо заменить устаревшие версии API на новые.
kubeflow_workaround_and_error_traces.txt
Спасибо, сэр, за ваши терпеливые ответы, особенно за то, что этот вопрос остается открытым.
Приносим извинения, но похоже, что я что-то делаю не так
Буду признателен, если вы можете просмотреть шаги в прилагаемых трассировках и сообщить мне, что я делаю неправильно.
@cyrilthank, вам просто нужно запустить команды sed
против ваших yamls kubeflow, чтобы заменить старое расширение api новым (нет необходимости развертывать prometheus вообще 😆). Извините, если я недостаточно хорошо выразился.
Исправление в основном заменяет extensions/v1beta1
на apps/v1
в вашем kubeflow dpl yamls
ах так я сделал тупую копию :(
мой KFAPP = / nfsroot / kf-poc
Кажется, я все еще получаю несколько сообщений и последнюю ошибку
не могли бы вы помочь, поскольку теперь я полагаюсь на вас, чтобы перейти к следующему шагу в kubeflow
@cyrilthank, вам просто нужно запустить команды
sed
против ваших yamls kubeflow, чтобы заменить старое расширение api новым (не нужно развертывать prometheus, вообще смеясь). Извините, если я недостаточно хорошо выразился.
Исправление в основном заменяетextensions/v1beta1
наapps/v1
в вашем kubeflow dpl yamls
apps/v1beta2
также с apps/v1
https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/
Большое спасибо @uniuuu за вашу помощь
Не могли бы вы посоветовать, где / как получить файлы yaml, указанные в https://github.com/helm/helm/files/3662328/kubeflow_workaround_sed_and_error_traces.txt
https://github.com/helm/helm/issues/6374#issuecomment -533840097
https://github.com/helm/helm/issues/6374#issuecomment -533185074
запрос, поскольку после внесения изменений в sed мы все еще сталкивались с ошибками, указанными в
не могли бы вы посоветовать, если шаг
kubectl convert -f
необходимо выполнить для каждого
Если вы применили упомянутый выше обходной путь при работе с helm init
, но по-прежнему получаете следующую ошибку, пытаясь что-то вроде helm version
, это потому, что helm
deployment
Не может быть найдено.
Error: could not find tiller
Вам нужно запустить kubectl get events --all-namespaces | grep -i tiller
чтобы узнать, почему он не готов.
Например, моя проблема такая, как показано ниже, потому что мне не нужно serviceaccount "tiller"
с microk8s
.
microk8s.kubectl get events --all-namespaces | grep -i tiller
kube-system 23m Warning FailedCreate replicaset/tiller-deploy-77855d9dcf Error creating: pods "tiller-deploy-77855d9dcf-" is forbidden: error looking up service account kube-system/tiller: serviceaccount "tiller" not found
Итак, я сделал рабочий день без учетной записи службы
- helm init --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's<strong i="20">@apiVersion</strong>: extensions/v1beta1<strong i="21">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
+ helm init spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's<strong i="22">@apiVersion</strong>: extensions/v1beta1<strong i="23">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
@cyrilthank Я удалил ваш комментарий, потому что он не имеет отношения к обсуждаемому здесь обсуждению. Продолжайте следить в kubeflow / kubeflow # 4184. Спасибо!
helm init spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's<strong i="6">@apiVersion</strong>: extensions/v1beta1<strong i="7">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
Небольшая коррекция
helm init --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's<strong i="11">@apiVersion</strong>: extensions/v1beta1<strong i="12">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
+1
@ puww1010 Я просто перенаправил вывод в файл, а затем использовал VIM, чтобы изменить его. Ниже приведены команды для справки.
# helm init --service-account tiller --tiller-namespace kube-system --debug >> helm-init.yaml # vim helm-init.yaml # kubectl apply -f helm-init.yaml
Я пробовал это делать. После редактирования файла в VIM я использую команду kubectl apply
, но, похоже, она ничего не делает. Когда я снова запускаю helm init --service-account tiller --tiller-namespace kube-system --debug >> helm-init.yaml
или helm init --output yaml
изменения не применяются. Кто-нибудь еще испытывает это?
Если вы хотите использовать на один sed меньше :)
helm init --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's<strong i="7">@apiVersion</strong>: extensions/v1beta1<strong i="8">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
Спасибо!
Я только что обновил наши k8s, столкнулся с этой проблемой и использовал вышеуказанное решение. Он создает развертывание, но набор реплик не работает, и вот что я получаю от kubectl describe -n kube-system replicasets.apps tiller-deploy-77855d9dcf
:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedCreate 41s (x14 over 82s) replicaset-controller Error creating: pods "tiller-deploy-77855d9dcf-" is forbidden: error looking up service account kube-system/tiller: serviceaccount "tiller" not found
Где я могу найти файл yaml для создания этой учетной записи службы?
@DanielIvaylov
kubectl --namespace kube-system create sa tiller kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
Это решило мою проблему!
Спасибо всем!
Изображение Canary по-прежнему выдает ту же ошибку, если еще не выполнено слияние,
@ puww1010 Я просто перенаправил вывод в файл, а затем использовал VIM, чтобы изменить его. Ниже приведены команды для справки.
# helm init --service-account tiller --tiller-namespace kube-system --debug >> helm-init.yaml # vim helm-init.yaml # kubectl apply -f helm-init.yaml
Я пробовал это делать. После редактирования файла в VIM я использую команду
kubectl apply
, но, похоже, она ничего не делает. Когда я снова запускаюhelm init --service-account tiller --tiller-namespace kube-system --debug >> helm-init.yaml
илиhelm init --output yaml
изменения не применяются. Кто-нибудь еще испытывает это?
Да, это тоже происходит со мной.
Возможно, вам потребуется изменить расположение изображения на gcr.azk8s.cn/kubernetes-helm/tiller:v2.14.3
расположение gcr.io
кажется заблокированным.
Возможно, вам потребуется изменить расположение образа на gcr.azk8s.cn/kubernetes-helm/ tiller : v2.14.3 расположение gcr.io кажется заблокированным.
Несмотря на то, что проблема является полностью допустимой, она немного ортогональна проблеме, присутствующей в этом выпуске, к сожалению, gcr.io
заблокирован в Китае. См. Https://github.com/helm/charts/issues/14607 для получения дополнительной информации.
мы смогли решить эту проблему, откатив версию Kubernetes до 1.15.4.
Спасибо @UmamaheshMaxwell за то, что поделился этим.
Не могли бы вы поделиться шагами, которые вы использовали для отката версии kubernetes?
@cyrilt спасибо, если это minikube, minikube config set kubernetes-version v1.15.4
Спасибо @UmamaheshMaxwell за то, что поделился этим.
Не могли бы вы поделиться шагами, которые вы использовали для отката версии kubernetes?
@cyrilthank, мы использовали наши собственные виртуальные 1.15.4
--pod-network-cidr=10.244.10.0/16
- фланель
--apiserver-advertise-address=x.x.x.x
- частный IP вашей ВМ (Мастер)
--apiserver-cert-extra-sans=x.x.x.x
- общедоступный IP-адрес вашей виртуальной машины (мастер) (требуется, если вы пытаетесь получить доступ к своему мастеру с локального компьютера.
Примечание. Перейдите по ссылке ниже, чтобы настроить файл kubeconfig для автономного кластера Kubernetes (http://docs.shippable.com/deploy/tutorial/create-kubeconfig-for-self-hosted-kubernetes-cluster/)
Дайте мне знать, если у вас останутся вопросы.
@cyrilt спасибо, если это minikube, конфигурация minikube установлена kubernetes-version v1.15.4
Спасибо, @MrSimonEmms, мой не мини, я думаю, мне придется пойти по шагам @UmamaheshMaxwell
Спасибо @UmamaheshMaxwell за то, что поделился этим.
Не могли бы вы поделиться шагами, которые вы использовали для отката версии kubernetes?@cyrilthank, мы использовали наши собственные виртуальные
kubeadm сбросить
sudo apt-get install kubelet = 1.15.4-00 kubectl = 1.15.4-00 kubeadm = 1.15.4-00
sudo kubeadm init --pod-network-cidr = 10.244.10.0 / 16 --apiserver-Advertise-address = xxxx --apiserver-cert-extra-sans = xxxx --kubernetes-version "1.15.4"--pod-network-cidr = 10.244.10.0 / 16 - фланель
--apiserver-Advertise-address = xxxx - частный IP-адрес вашей виртуальной машины (Master)
--apiserver-cert-extra-sans = xxxx - общедоступный IP-адрес вашей виртуальной машины (мастер) (это необходимо, если вы пытаетесь получить доступ к своему мастеру с локального компьютера.
Примечание. Перейдите по ссылке ниже, чтобы настроить файл kubeconfig для автономного кластера Kubernetes (http://docs.shippable.com/deploy/tutorial/create-kubeconfig-for-self-hosted-kubernetes-cluster/)
Дайте мне знать, если у вас останутся вопросы.
Спасибо @UmamaheshMaxwell за ваш терпеливый ответ
У меня уже есть установка Kubernetes 1.16. Не могли бы вы подтвердить, могу ли я попробовать выполнить эти шаги?
Спасибо @UmamaheshMaxwell за то, что поделился этим.
Не могли бы вы поделиться шагами, которые вы использовали для отката версии kubernetes?
@cyrilthank, мы использовали наши собственные виртуальные
kubeadm сбросить
sudo apt-get install kubelet = 1.15.4-00 kubectl = 1.15.4-00 kubeadm = 1.15.4-00
sudo kubeadm init --pod-network-cidr = 10.244.10.0 / 16 --apiserver-Advertise-address = xxxx --apiserver-cert-extra-sans = xxxx --kubernetes-version "1.15.4"
--pod-network-cidr = 10.244.10.0 / 16 - фланель
--apiserver-Advertise-address = xxxx - частный IP-адрес вашей виртуальной машины (Master)
--apiserver-cert-extra-sans = xxxx - общедоступный IP-адрес вашей виртуальной машины (мастер) (это необходимо, если вы пытаетесь получить доступ к своему мастеру с локального компьютера.
Примечание. Перейдите по ссылке ниже, чтобы настроить файл kubeconfig для автономного кластера Kubernetes (http://docs.shippable.com/deploy/tutorial/create-kubeconfig-for-self-hosted-kubernetes-cluster/)
Дайте мне знать, если у вас останутся вопросы.Спасибо @UmamaheshMaxwell за ваш терпеливый ответ
У меня уже есть установка Kubernetes 1.16. Не могли бы вы подтвердить, могу ли я попробовать выполнить эти шаги?
Да @cyrilthank , даже у нас был kubernetes 1.16.1, но нам пришлось откатить его до 1.15.4
, ниже ссылка, если вы хотите настроить его с нуля.
Версия ОС ВМ
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
Очистить куберенетес
kubeadm reset
sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni kube*
sudo apt-get autoremove
sudo rm -rf ~/.kube
Настройка Kubernetes (как мастер, так и узел)
https://www.howtoforge.com/tutorial/how-to-install-kubernetes-on-ubuntu/
(вам лучше автоматизировать шаги, предложенные в приведенной выше ссылке, насколько это возможно, чтобы сэкономить ваше время)
Дайте мне знать, если вам все еще понадобится помощь. Счастливого пути с откатом :), надеюсь, у вас все пройдет гладко.
Возможно, вам потребуется изменить расположение образа на gcr.azk8s.cn/kubernetes-helm/ tiller : v2.14.3 расположение gcr.io кажется заблокированным.
Несмотря на то, что проблема является полностью допустимой, она немного ортогональна проблеме, присутствующей в этом выпуске, к сожалению,
gcr.io
заблокирован в Китае. См. Helm / charts # 14607 для получения дополнительной информации.
Я не в Китае, а в США. Но я думаю, что мой VPN заблокировал этот сайт. В любом случае, я выполнил все шаги, описанные в этой теме, и не мог заставить его работать, пока не попытался получить изображение вручную и не увидел, что он не отвечает - просто что-то еще, чтобы попробовать, если кто-то застрянет в том же месте, что и меня.
Я тоже получаю сообщение об ошибке:
$ helm init
$HELM_HOME has been configured at C:\Users\user\.helm.
Error: error installing: the server could not find the requested resource
Я пробую решение, предложенное в этой проблеме, особенно в этом . Однако после соответствующего изменения файла tiller.yaml я не могу обновить конфигурацию. Я пытаюсь выполнить следующую команду, чтобы применить изменения / обновить конфигурацию:
$ kubectl apply -f tiller.yaml
deployment.apps/tiller-deploy configured
service/tiller-deploy configured
Но тогда, если я побегу:
$ helm init --output yaml > tiller2.yaml
Файл tiller2.yaml показывает:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: helm
name: tiller
name: tiller-deploy
namespace: kube-system
spec:
replicas: 1
strategy: {}
template:
В основном изменения не отражаются. Поэтому я предполагаю, что я неправильно обновляю конфигурацию. Как правильно это сделать?
РЕДАКТИРОВАТЬ : мне удалось запустить его. Я использую Minikube, и, чтобы запустить его, сначала я понизил версию Kubernetes до 1.15.4.
minikube delete
minikube start --kubernetes-version=1.15.4
Затем я использовал прокси, поэтому мне пришлось добавить IP Minikube в список NO_PROXY: в моем случае 192.168.99.101
. См .: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
Примечание: после некоторого дальнейшего тестирования, возможно, в переходе на более раннюю версию нет необходимости, и, возможно, все, что мне не хватало, это шаг NO_PROXY. Я добавил все 192.168.99.0/24
, 192.168.39.0/24
и 10.96.0.0/12
в настройку NO_PROXY, и теперь, похоже, все работает нормально.
helm init --service-account tiller --override spec.selector.matchLabels.'name '=' tiller ', spec.selector.matchLabels.'app' = 'helm' --output yaml | @ apiVersion sed : расширения / v1beta1 @ apiVersion : apps / v1 @ '| kubectl apply -f -
Это сработало для меня, большое спасибо
По мере развития Kubernetes API периодически реорганизуется или обновляется. По мере развития API старый API устаревает и в конечном итоге удаляется.
Выпуск v1.16 перестанет обслуживать следующие устаревшие версии API в пользу более новых и более стабильных версий API:
NetworkPolicy (in the extensions/v1beta1 API group)
Migrate to use the networking.k8s.io/v1 API, available since v1.8. Existing persisted data can be retrieved/updated via the networking.k8s.io/v1 API.
PodSecurityPolicy (in the extensions/v1beta1 API group)
Migrate to use the policy/v1beta1 API, available since v1.10. Existing persisted data can be retrieved/updated via the policy/v1beta1 API.
DaemonSet, Deployment, StatefulSet, and ReplicaSet (in the extensions/v1beta1 and apps/v1beta2 API groups)
Migrate to use the apps/v1 API, available since v1.9. Existing persisted data can be retrieved/updated via the apps/v1 API.
Выпуск v1.20 перестанет обслуживать следующие устаревшие версии API в пользу более новых и более стабильных версий API:
Ingress (in the extensions/v1beta1 API group)
Migrate to use the networking.k8s.io/v1beta1 API, serving Ingress since v1.14. Existing persisted data can be retrieved/updated via the networking.k8s.io/v1beta1 API.
Ссылаться на :
Как рулевой n00b, использующий minikube, я смог обойти эту проблему, установив версию kubernetes следующим образом:
$ minikube delete
$ minikube start --kubernetes-version=1.15.4
Надеюсь, поможет!
@PierreF Я использовал ваше решение (https://github.com/helm/helm/issues/6374#issuecomment-533186177) с k8s v1.16.1 и helm v2.15.0, и румпель не работает.
Readiness probe failed: Get http://10.238.128.95:44135/readiness: dial tcp 10.238.128.95:44135: connect: connection refused
@ joshprzybyszewski-wf Я использовал следующую команду
minikube start --memory=16384 --cpus=4 --kubernetes-version=1.15.4
kubectl create -f istio-1.3.3/install/kubernetes/helm/helm-service-account.yaml
helm init --service-account tiller
helm install istio-1.3.3/install/kubernetes/helm/istio-init --name istio-init --namespace istio-system
helm install istio-1.3.3/install/kubernetes/helm/istio --name istio --namespace istio-system
А теперь получи,
Error: validation failed: [unable to recognize "": no matches for kind "DestinationRule" in version "networking.istio.io/v1alpha3", unable to recognize "": no matches for kind "DestinationRule" in version "networking.istio.io/v1alpha3", unable to recognize "": no matches for kind "attributemanifest" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "attributemanifest" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "handler" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "handler" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "instance" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "instance" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "instance" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "instance" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "instance" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "instance" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "instance" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "instance" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "instance" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "rule" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "rule" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "rule" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "rule" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "rule" in version "config.istio.io/v1alpha2", unable to recognize "": no matches for kind "rule" in version "config.istio.io/v1alpha2"]
Вот краткосрочный обходной путь:
helm init --output yaml | sed 's<strong i="7">@apiVersion</strong>: extensions/v1beta1<strong i="8">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
На самом деле этого недостаточно. Я все еще получаю сообщение об ошибке:
error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec
Это можно исправить с помощью:
/usr/local/bin/kubectl patch --local -oyaml -f - -p '{"spec":{"selector": {"app":"helm","name":"tiller"}}}'
вы пропустили добавление селектора публикации macthLabels
.
Меня перенаправили на решение @jbrette . Это то, что я получил, когда запустил его
error: error parsing STDIN: error converting YAML to JSON: yaml: line 11: mapping values are not allowed in this context
Это было исправлено в Helm 2.16.0 .
Меня перенаправили на решение @jbrette . Это то, что я получил, когда запустил его
error: error parsing STDIN: error converting YAML to JSON: yaml: line 11: mapping values are not allowed in this context
Проверьте файлы yaml, в большинстве случаев в указанной строке есть {} или [], но в ней все еще определены другие элементы, вызывающие ошибку. В большинстве случаев проблема заключается в файле values.yaml, в противном случае проверьте раздел шаблонов диаграммы.
Просто примечание к решению @PierreF и @mihivagyok . Это не сработало для меня, когда я использовал частные репозитории Helm.
$ helm repo add companyrepo https://companyrepo
Error: Couldn't load repositories file (/home/username/.helm/repository/repositories.yaml).
Я предполагаю, что это происходит из-за того, что helm init не запускается, а просто генерирует файл yaml. Я исправил это, запустив helm init -c
в качестве дополнения.
в k8s v1.16.6 для команды helm init otput требуется spec.selector fyi.
Текущий обходной путь выглядит примерно так:
helm init --output yaml> tiller.yaml
и обновите tiller.yaml:
- изменить на apps / v1
- добавить поле селектора
--- apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: helm name: tiller name: tiller-deploy namespace: kube-system spec: replicas: 1 strategy: {} selector: matchLabels: app: helm name: tiller ....
Это работает, поскольку кубернеты меняют apiVersion apps / v1 на для развертывания, нужно изменить одну вещь: нам нужно добавить селектор matchLabels для спецификации
Другой обходной путь может заключаться в использовании Helm 3, в котором не используется румпель.
helm init --output yaml | @ apiVersion sed : расширения / v1beta1 @ apiVersion : apps / v1 @ '| kubectl apply -f -
Привет, пока я пытаюсь это сделать, я получаю следующее:
jenkins @ jenkin : ~ / .kube $ helm init --output yaml | @ apiVersion sed : расширения / v1beta1 @ apiVersion : apps / v1 @ '| kubectl apply -f -
Команда kubectl не найдена, но ее можно установить с помощью:
оснастить kubectl
Обратитесь к своему администратору.
jenkins @ jenkin : ~ / .kube $
Вывод
helm version
: v2.14.3
Выводkubectl version
: клиент: v1.15.3, сервер: v1.16.0-rc.1
Облачный провайдер / платформа (AKS, GKE, Minikube и т. Д.): IBM Cloud Kubernetes Service$ helm init --service-account tiller $HELM_HOME has been configured at /Users/xxxx/.helm. Error: error installing: the server could not find the requested resource $ helm init --debug --service-account tiller --- apiVersion: extensions/v1beta1 kind: Deployment metadata: creationTimestamp: null labels: app: helm name: tiller name: tiller-deploy namespace: kube-system spec: . . .
Похоже, что helm пытается создать
tiller
Deployment с помощью:apiVersion: extensions/v1beta1
Согласно: https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16
это больше не поддерживается.
получаю эту ошибку: как я могу ее решить ???
root @ jenkin : ~ # helm init - сервис-аккаунт tiller
$ HELM_HOME настроен в /root/.helm.
Ошибка: ошибка при установке: неизвестно (post deployments.extensions)
корень @ jenkin : ~ #
Вот краткосрочный обходной путь:
helm init --output yaml | sed 's<strong i="7">@apiVersion</strong>: extensions/v1beta1<strong i="8">@apiVersion</strong>: apps/v1@' | kubectl apply -f -
На самом деле этого недостаточно. Я все еще получаю сообщение об ошибке:
error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec
Это можно исправить с помощью:
/usr/local/bin/kubectl patch --local -oyaml -f - -p '{"spec":{"selector": {"app":"helm","name":"tiller"}}}'
Я получаю эту ошибку:
jenkins @ jenkin : ~ / .helm $ helm init --output yaml | @ apiVersion sed : расширения / v1beta1 @ apiVersion : apps / v1 @ '| kubectl apply -f -
Команда kubectl не найдена, но ее можно установить с помощью:
оснастить kubectl
Обратитесь к своему администратору.
jenkins @ jenkin : ~ / .helm $
Обходной путь с использованием jq
:
helm init -o json | jq '(select(.apiVersion == "extensions/v1beta1") .apiVersion = "apps/v1")' | jq '(select(.kind == "Deployment") .spec.selector.matchLabels.app = "helm")' | jq '(select(.kind == "Deployment") .spec.selector.matchLabels.name = "tiller")' | kubectl create -f -
Обходной путь с использованием
jq
:
helm init -o json | jq '(select(.apiVersion == "extensions/v1beta1") .apiVersion = "apps/v1")' | jq '(select(.kind == "Deployment") .spec.selector.matchLabels.app = "helm")' | jq '(select(.kind == "Deployment") .spec.selector.matchLabels.name = "tiller")' | kubectl create -f -
Вы не можете обновить ресурс с помощью kubectl create
@ikarlashov достаточно просто заменить «создать» на «применить». Приведенный выше однострочный текст предполагает, что вы еще не пробовали создавать ресурсы.
Самый полезный комментарий
Для меня работает следующий sed:
Проблема с решением @mattymo (с использованием kubectl patch --local) заключается в том, что оно, похоже, не работает, когда его входные данные содержат несколько ресурсов (здесь развертывание и служба).