繁体   English   中英

如何从 Kubernetes 中的 dockerhub 中提取图像?

[英]How to pull image from dockerhub in kubernetes?

我计划在我的 kubernetes-clustering 基础设施中部署一个应用程序。 我将图像推送到 dockerhub repo。 如何从 dockerhub 中提取图像?

一行命令创建Docker注册表机密

kubectl create secret docker-registry regcred --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email> -n <your-namespace>

然后,您可以在规范下的部署文件中使用它

spec:
  containers:
  - name: private-reg-container-name
    image: <your-private-image>
  imagePullSecrets:
  - name: regcred

更多细节: https//kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#create-a-secret-in-the-cluster-that-holds-your-authorization-代币

Kubernetes运行docker docker pull pseudo/your-image:latest引擎盖下。 Kubernetes资源中的image字段只是要运行的docker图像。

spec:
  containers:
  - name: app
    image: pseudo/your-image:latest
[...]

由于docker镜像名称不包含特定的docker注册表URL,因此默认为docker.io 你的形象实际上是docker.io/pseudo/your-image:latest

如果您的映像托管在私有docker hub repo中 ,则需要在spec字段中指定image pull secret。

spec:
  containers:
  - name: app
    image: pseudo/your-image:latest
  imagePullSecrets:
  - name: dockerhub-credential

以下是创建包含docker hub登录的秘密的文档: https//kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

使用kubectl set image docker pullkubectl set image

yaml 部署示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

使用kubectl get deployments启动容器并显示部署状态

结果

 NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           18s

现在使用set image更新 kubernetes 中的set image

kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1

并显示带有rollout状态更新图像

kubectl rollout status deployment/nginx-deployment

注意: ngnixcontainer ->name

  containers:
      - name: nginx
        image: nginx:1.14.2

nginx:1.16.1nginx:1.16.1中的镜像版本,是推荐的更新版本

如果您决定删除更新并回滚到以前的版本,请使用rollout undo

kubectl rollout undo deployment/nginx-deployment

有关更多信息,请使用文档

  1. 创建一个 docker 注册表秘密:
#!/bin/bash

for ns in $(kubectl get namespaces |grep -v NAME|awk '{print $1}')
do
   kubectl create secret docker-registry docker.registry \
       --docker-username=<MyAccountName> \
       --docker-password='MyDockerHubPassword' -n $ns
done
  1. 使用您在步骤 1 中创建的密钥修补所有命名空间中的所有动态服务帐户
for ns in $(kubectl get namespaces|grep -v NAME|awk '{print $1}')
do
        for sa in $(kubectl -n $ns get sa|grep -v SECRETS|awk '{print $1}')
        do
           kubectl patch serviceaccount $sa -p '{"imagePullSecrets": [{"name": "docker.registry"}]}' -n $ns
           if [ $? -eq 0 ]; then
                echo $ns $sa patched
           else
                echo Error patching $ns $sa
           fi
        done
done

如果您愿意,您可以只修补特定的命名空间。

让我知道事情的后续。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM