多くの人がすでに同様の質問をしていることを知っています。そのうちのいくつかを読みましたが、実際に私がこれまで助けたものは何も見つかりませんでした。
プライベートリポジトリを有効にしたgitlabがあり、Google Kubernetes Engineも使用しています。プライベートリポジトリにいくつかのDockerコンテナーがあり、そのうちの1つをKubernetes Engineにデプロイします。
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
でシークレットを作成しました。kubectl create secret docker-registry name --docker-server=registry.xy.z --docker-username=google --docker-password=xyz [email protected]
も試しました。次に、Deploymentファイルを作成しました。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: backend-test
labels:
app: 13371337
spec:
replicas: 1
template:
metadata:
labels:
app: 13371337
spec:
containers:
- name: backend
image: registry.xy.z/group/project/backend:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
imagePullSecrets:
- name: db-user-pass or name
実行する方法はありますか?
kubectl create secret docker-registry name
の使用は 正しい方法 であり、プライベートDockerレジストリの資格情報を提供します。
Docker-Registryシークレットの名前を指定すると、imagePullSecrets
オプションも適切に見えます。
したがって、Kubernetesのパスからは、見栄えの良いものがすべて見つかります。
Deploymentによって作成されるポッドのイベントを確認してください。kubectl get pods
でポッドを見つけてkubectl describe pod $name_of_your_pod
を呼び出すだけで、イメージをプルできない実際の理由がわかります。
また、預託機関が安全でないか、自己署名証明書を持っている場合は、 そのガイド に従って、そこから画像を取得するdockerデーモンを許可してください。
シークレットを作成するには、次のコマンドを使用できます:(名前を付けたことに注意してください)
kubectl create secret docker-registry my_registry \
--docker-server=registry.xy.z \
--docker-username=google \
--docker-password=xyz \
[email protected]
またはyamlを使用:
apiVersion: v1
kind: Secret
metadata:
name: my_registry
type: Opaque
data:
docker-server: registry.xy.z
docker-username: google
docker-password: xyz
docker-email: [email protected]
そしてあなたの展開は秘密の名前を使用する必要があります:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: backend-test
labels:
app: 13371337
spec:
replicas: 1
template:
metadata:
labels:
app: 13371337
spec:
containers:
- name: backend
image: registry.xy.z/group/project/backend:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
imagePullSecrets:
- name: my_registry
注意:名前空間ごとにシークレットを作成する必要があります。