概述

本文主要介绍在Kubernetes集群,如何使用私有镜像编排容器。

 

详细信息

Kubernetes集群支持使用私有镜像编排容器。首先需创建密钥用于编排容器,并且可实现无密钥编排。

 

使用密钥编排容器

  1. 使用kubectl连接Kubernetes集群的Master节点,详情请参见通过kubectl连接Kubernetes集群
  2. 执行如下命令,创建拉取私有镜像的密钥。
    kubectl create secret docker-registry [$Reg_Secret] --docker-server=[$Registry] --docker-username=[$Username] --docker-password=[$Password] --docker-email=[$Email]
    注:
    • [$Reg_Secret]为密钥的键名称,可自行定义。
    • [$Registry]为Docker仓库地址。
    • [$Username]为登录Docker仓库的用户名。
    • [$Password]为登录Docker仓库的密码。
    • [$Email]为邮件地址,该配置项可选填。
  3. 在编排的YAML文件中加入密钥相关配置项,完成后YAML文件类似如下。
    containers:
        - name: foo
          image: [$Registry]/abc/test:1.0
    imagePullSecrets:
        - name: [$Reg_Secret]
    注:
    • imagePullSecrets 配置为在声明拉取镜像时指定的密钥。
    • 详情信息参见官方文档使用私有仓库

 

实现无密钥编排

为了避免每次使用私有镜像部署时,都需要引用密钥,您可将secret添加到namespace的default service account中,参见Add ImagePullSecrets to a service account

本例中采用手动配置的方式,修改命名空间的默认服务帐户default,从而将此secret作为imagePullSecret。

  1. 执行如下命令,查看之前创建的密钥。
    kubectl get secret [$Reg_Secret]
    系统显示类似如下。
    NAME          TYPE                             DATA      AGE
    [$Reg_Secret] kubernetes.io/dockerconfigjson   1         13m
  2. 依次执行如下命令,将服务账号default的配置导出到sa.yaml文件并查看该文件。
    kubectl get serviceaccounts default -o yaml > ./sa.yaml
    cat sa.yaml
    系统显示类似如下。
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      creationTimestamp: 2015-08-07T22:02:39Z
      name: default
      namespace: default
      resourceVersion: "243024"             ##注意该项
      selfLink: /api/v1/namespaces/default/serviceaccounts/default
      uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
    secrets:
    - name: default-token-uudge
  3. 编辑sa.yaml文件,删除原resourceVersion配置项,增加拉取镜像的密钥配置项imagePullSecrets。修改后的配置如下所示。
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      creationTimestamp: 2015-08-07T22:02:39Z
      name: default
      namespace: default
      selfLink: /api/v1/namespaces/default/serviceaccounts/default
      uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
    secrets:
    - name: default-token-uudge
    imagePullSecrets:                 ##增加该项
    - name: regsecret
  4. 执行如下命令,用sa.yaml配置文件更新default服务账号。
    kubectl replace serviceaccount default -f ./sa.yaml
    系统显示类似如下。
    serviceaccount "default" replaced
  5. 本文以编排tomcat为例,执行kubectl create -f命令创建Pod。该配置文件如下所示。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tomcat-deployment
      labels:
        app: tomcat
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: tomcat
      template:
        metadata:
          labels:
            app: tomcat
        spec:
          containers:
          - name: tomcat
            image: [$Registry]/abc/test:1.0
            ports:
            - containerPort: 8080
  6. 若配置正确,Pod会启动成功。执行如下命令,查看配置项。
    kubectl get pod tomcat-XXX -o yaml
    系统显示类似如下,确认无密钥编排成功。
    spec:
      imagePullSecrets:
      - nameregsecretey

 

适用于

  • 容器服务 Kubernetes 版