Для развертывания Kubernetes мы можем указать imagePullSecrets, чтобы позволить ему извлекать образы Docker из нашего частного реестра. Но насколько я могу судить, StatefulSet этого не поддерживает?
Как я могу предоставить pullsecret для своего StatefulSet?
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
namespace: {{ .Values.namespace }}
labels:
app: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
serviceName: redis-service
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app: redis
spec:
terminationGracePeriodSeconds: 10
# imagePullSecrets not valid here for StatefulSet :-(
containers:
- image: {{ .Values.image }}
StatefulSet
поддерживает imagePullSecrets
. Вы можете проверить это следующим образом.
$ kubectl explain statefulset.spec.template.spec --api-version apps/v1
:
imagePullSecrets <[]Object>
ImagePullSecrets is an optional list of references to secrets in the same
namespace to use for pulling any of the images used by this PodSpec. If
specified, these secrets will be passed to individual puller
implementations for them to use. For example, in the case of docker, only
DockerConfig type secrets are honored. More info:
https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
:
Например, вы можете попробовать, может ли следующий образец StatefulSet
сначала создаться в вашем кластере.
$ kubectl create -f - <<EOF
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
imagePullSecrets:
- name: YOUR-PULL-SECRET-NAME
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
EOF
$ kubectl get pod web-0 -o yaml | \
grep -E '^[[:space:]]+imagePullSecrets:' -A1
imagePullSecrets:
- name: YOUR-PULL-SECRET-NAME
Я попытался добавить это снова и не могу заставить его работать. Я использую Jetbrains Webstorm с плагином Kubernetes, чтобы получить подсветку синтаксиса в файлах yaml, и я получаю следующее предупреждение при добавлении imagePullSecrets: Key 'imagePullSecrets' is not ожидается здесь. core.v1.PodTemplateSpec <Kubernetes v1.19.x>. Я также получил сообщение об ошибке при попытке обновления с помощью helm: UPGRADE FAILED: ошибка синтаксического анализа YAML в vn-redis/templates/statefulset.yml: ошибка преобразования YAML в JSON: yaml: строка 21: найден символ, который не может запускать какой-либо токен. Любая идея о том, что здесь происходит? " = "
Мне удалось обойти это, добавив свой pullsecret в учетную запись службы по умолчанию: kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "pullsecret"}]}'. Но я бы предпочел определить этот секрет в моей диаграмме Шлема.
Это странно. Я также проверил и добавил вывод в свой ответ. Я мог без проблем создать образец statefulset моего ответа на моем k8s 1.19.
Я думаю, что что-то не так с моим редактором. Кажется, он вставляет табуляции вместо пробелов в файле yaml. Редактирование файла в другом редакторе исправило это. + intellisense из моего плагина kubernetes должен быть отключен. Ваш ответ работает при использовании другого редактора.
Странно.. Я не знал эту команду объяснения, это очень полезно, спасибо!