概述

本文介绍如何通过创建Secret来拉取私有镜像仓库的镜像,从而完成Deployment的创建。

使用私有仓库的问题

  1. 拉取镜像时需要认证

​ 使用私有仓库时需要通过用户名和密码进行认证。所以,若是直接配置镜像仓库的地址,无法拉取到镜像文件,会报拉取镜像的错误。

  1. 可能由于网络问题导致镜像拉取失败

​ 若是通过公网来拉取镜像,可能会由于网络原因导致惊醒拉取失败。

使用方式说明

在使用私有仓库时,需要进行认证。可以通过以下步骤来使用私有仓库:

  1. 在对应命名空间下创建一个Secret对象

创建secret的命令如下:

kubectl create secret docker-registry myregistrykey \
--docker-server=mycluster.icp:8500 \
--docker-username=<user_name> \
--docker-password=<user_password> \
--docker-email=<user_email> \
--namespace mynamespace
  1. 在创建pod或deployment的配置文件中引用该Secret对象

也就是在选项imagePullSecrets中指定myregistrykey。

apiVersion: apps/v1beta2
  kind: Deployment
  metadata:
    name: nginx-demo
  spec:
    replicas: 1
    selector:
      matchLabels:
        app: nginx
    template:
      metadata:
        labels:
          app: nginx
      spec:
        hostNetwork: false
        containers:
        - name: nginx
          image: mycluster.icp:8500/developer/nginx
          ports: []
          resources:
            limits: {}
        imagePullSecrets:
        - name: myregistrykey

这里一定要注意imagePullSecrets选项的位置,不要搞错了。其name,就是第1步我们创建的secret对象的名称。

使用Secret的实战步骤

创建secret
kubectl create secret docker-registry node-9005-pull-secret \
    --docker-server=xxx-vpc.cn-beijing.cr.aliyuncs.com \
    --docker-username=myuser \
    --docker-password=mypass \
    --docker-email=myuser@126.com \
    --namespace mytest
创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-9005-dep
  namespace: mytest
spec:
  replicas: 2
  selector:
    matchLabels:
      app: node-9005
  template:
    metadata:
      name: node-9005
      labels:
        app: node-9005
    spec:
      containers:
      - name: nodejs
        image: xxx-vpc.cn-beijing.cr.aliyuncs.com/others/node-9005:20230505
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: node-9005-pull-secret

注意:我这里用的是阿里云的仓库,所以使用了vpc的域名来拉取惊醒,这样镜像拉取会容易。

参考文献

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐