Обычно, когда вам нужно kubectl run
, это потому, что вы тестируете что-то временное в пространстве имен, в котором уже есть секрет реестра докеров для доступа к частному реестру. Поэтому проще всего отредактировать учетную запись службы по умолчанию, чтобы дать ей секрет извлечения, который будет использоваться, когда секрет извлечения отсутствует (что будет иметь место для kubectl run
):
kubectl edit serviceaccount default
Редактирование покажет что-то похожее на это:
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: "2019-04-16T14:48:17Z"
name: default
namespace: integration-testing
resourceVersion: "60516585"
selfLink: /api/v1/namespaces/integration-testing/serviceaccounts/default
uid: ab7b767d-6056-11e9-bba8-0ecf3bdac4a0
secrets:
- name: default-token-4nnk4
Просто добавьте imagePullSecrets
:
imagePullSecrets:
- name: <name-of-your-docker-registry-password-secret>
так это будет выглядеть так:
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: "2019-04-16T14:48:17Z"
name: default
namespace: integration-testing
resourceVersion: "60516585"
selfLink: /api/v1/namespaces/integration-testing/serviceaccounts/default
uid: ab7b767d-6056-11e9-bba8-0ecf3bdac4a0
secrets:
- name: default-token-4nnk4
imagePullSecrets:
- name: <name-of-your-docker-registry-password-secret>
Скажем, имя YOUR_PWD_SECRET
, тогда этот секрет должен существовать в пространстве имен контекста kubectl:
tooluser:/host $ kubectl get secret YOUR_PWD_SECRET
NAME TYPE DATA AGE
YOUR_PWD_SECRET kubernetes.io/dockerconfigjson 1 186d
Если его не существует, вы должны создать его либо с нуля, либо скопировать из другого пространства имен (лучший способ сделать это - ответить NicoKowe по адресу https://stackoverflow.com/a/58235551/869951).
С секретом, содержащим ваш пароль реестра докеров, секретом в том же пространстве имен, где будет выполняться kubectl run
, и с учетной записью службы по умолчанию, в которой указан секрет как imagePullSecrets, kubectl run
будет работать.
person
Oliver
schedule
31.01.2020