使用第三方镜像
操作场景
第三方镜像是指由除官方镜像仓库和SWR镜像仓库外,其他组织或个人提供的容器镜像。这些镜像通常包含自定义应用程序、工具或特定版本的操作系统,能够满足用户特定的业务需求。在CCE Autopilot集群中,用户可以通过密钥认证的方式拉取第三方镜像,进而创建工作负载,满足业务需要。
前提条件
使用第三方镜像时,请确保CCE Autopilot集群可以正常访问其仓库所在的网络环境,具体分为三种情况:
- 内网访问:当第三方镜像仓库支持内网访问时,存在以下情况:
- 当第三方镜像仓库位于集群所在的VPC内时,Pod可以通过内网访问直接拉取镜像,无需额外配置。
- 当第三方镜像仓库与集群处于同一区域的不同VPC时,可以通过对等连接打通两个VPC之间的网络,之后Pod可以通过内网访问直接拉取镜像。关于对等连接的具体操作,请参见对等连接。
- 公网访问:当第三方镜像仓库支持公网访问时,Pod可以通过公网拉取镜像。此时,需确保Pod具备访问公网的能力。您可以通过以下方式,确保Pod具备访问公网的能力:
当使用公网访问方式拉取镜像时,请确保EIP的带宽充足,以避免因带宽不足导致镜像拉取失败或拉取速度过慢。
- 云专线或VPN访问:当需要使用云下镜像仓库时,您需要通过云专线或VPN的方式,提前将第三方镜像仓库所在的网络环境与集群所在VPC打通。网络环境打通后,无需额外配置。
使用第三方镜像
使用第三方镜像时,需先创建镜像拉取密钥,并在工作负载中引用该密钥以授权访问。本文共提供两种配置方式,即控制台方式和kubectl命令行方式。
本节将详细介绍如何通过控制台创建密钥,并基于该密钥拉取第三方镜像以创建工作负载。
- 如果第三方镜像仓库存在账号和密码,则需要在集群中创建相关密钥,作为拉取镜像的身份凭证。
- 在左侧导航栏中,单击“工作负载”,在右上角单击“创建工作负载”。“创建工作负载”页面中,在“容器配置 > 容器信息 > 基本信息 > 镜像名称”中直接填写第三方镜像地址。并在“镜像访问凭证”中选择1中创建的密钥。
图2 填写第三方镜像地址
- (仅当需要为Pod配置EIP时,涉及该步骤)在“高级配置 > 标签与注解 > Pod注解”中依次填写表2中参数。本步骤以为Pod配置独占带宽类型的EIP为例,如果需要配置共享带宽类型的EIP,请参见为Pod配置EIP。
图3 增加注解
表2 独占带宽EIP跟随Pod创建的annotation配置 annotation
是否可选
默认值
参数说明
取值范围
yangtse.io/pod-with-eip
必选
false
是否需要跟随Pod创建EIP并绑定到该Pod。
"false"或"true"。
yangtse.io/eip-bandwidth-size
可选
5
带宽大小,单位为Mbit/s。
具体范围以各区域配置为准,根据带宽的计费类型不同可能存在差异,详情请参见弹性公网IP控制台的购买页面。
例如,“华东-上海一”区域按带宽计费类型的带宽大小范围为1Mbit/s~2000Mbit/s、按流量计费类型的带宽大小范围为1Mbit/s~300Mbit/s。
yangtse.io/eip-network-type
可选
5_bgp
公网IP类型。
具体类型以各区域配置为准,详情请参见弹性公网IP控制台的购买页面。
例如,“华东-上海一”区域支持以下类型:
- 5_bgp:全动态BGP
- 5_sbgp:静态BGP
yangtse.io/eip-charge-mode
可选
空
按流量计费或按带宽计费。
建议填写该参数。若该参数为空,表示不指定计费模式,则以该区域下弹性公网IP接口的默认值为准。
- bandwidth:按带宽计费
- traffic:按流量计费
yangtse.io/eip-bandwidth-name
可选
Pod名称
带宽名称。
1-64个字符,支持数字、字母、中文、_(下划线)、-(中划线)、.(点)。
- 填写其他参数后,单击“创建工作负载”。待工作负载状态变为运行中时,则说明第三方镜像拉取成功。
本节将详细介绍如何通过kubectl命令行方式创建密钥,并基于该密钥拉取第三方镜像以创建工作负载。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 如果第三方镜像仓库存在账号和密码,则需要在集群中创建相关密钥,作为拉取镜像的身份凭证。
- 执行以下命令,创建认证密钥。该密钥类型默认为kubernetes.io/dockerconfigjson类型,表示该密钥是拉取第三方镜像时所需要的认证信息。
kubectl create secret docker-registry test -n default --docker-server=www.example.com --docker-username=ssl --docker-password=xxx --docker-email=example@123.com
其中,test为密钥名称,default为密钥所在的命名空间,其余参数如下所示。
表3 密钥参数说明 参数
示例
参数说明
docker-server
www.example.com
请填入第三镜像仓库的地址。
docker-username
ssl
请填入第三方镜像仓库的账号。
docker-password
xxx
请填入第三方镜像仓库的密码
docker-email
example@123.com
请填入第三方镜像仓库的邮箱,非必填项。
回显结果如下:
secret/test created
- 执行以下命令,检查密钥是否创建成功。
kubectl get secret
回显结果如下,则说明该密钥已成功创建。
NAME TYPE DATA AGE default-secret kubernetes.io/dockerconfigjson 1 41h paas.elb cfe/secure-opaque 1 41h test kubernetes.io/dockerconfigjson 1 16s
- 执行以下命令,创建认证密钥。该密钥类型默认为kubernetes.io/dockerconfigjson类型,表示该密钥是拉取第三方镜像时所需要的认证信息。
- 使用第三方镜像创建工作负载,具体步骤请参见如下。
- 执行以下命令,创建YAML文件deployment.yaml,用于配置工作负载,文件名称可自定义。
vim deployment.yaml
文件内容如下:apiVersion: apps/v1 kind: Deployment metadata: name: foo namespace: default spec: replicas: 1 selector: matchLabels: app: foo strategy: type: RollingUpdate template: metadata: labels: app: foo annotations: # 仅当需要为Pod配置EIP时,涉及annotations中的参数 yangtse.io/eip-bandwidth-name: test yangtse.io/eip-bandwidth-size: '5' yangtse.io/eip-charge-mode: bandwidth yangtse.io/eip-network-type: 5_bgp yangtse.io/pod-with-eip: 'true' spec: containers: - image: www.example.com/janedoe/awesomeapp:v1 # 第三方镜像地址 imagePullPolicy: Always name: foo imagePullSecrets: - name: test # 使用上面创建的密钥,作为拉取镜像的身份认证
仅当需要为Pod配置EIP时,涉及annotations中的参数。本文以为Pod配置独占带宽类型的EIP为例,如果需要配置共享带宽类型的EIP,请参见为Pod配置EIP。
表4 独占带宽EIP跟随Pod创建的annotation配置 annotation
是否可选
默认值
参数说明
取值范围
yangtse.io/pod-with-eip
必选
false
是否需要跟随Pod创建EIP并绑定到该Pod。
"false"或"true"。
yangtse.io/eip-bandwidth-size
可选
5
带宽大小,单位为Mbit/s。
具体范围以各区域配置为准,根据带宽的计费类型不同可能存在差异,详情请参见弹性公网IP控制台的购买页面。
例如,“华东-上海一”区域按带宽计费类型的带宽大小范围为1Mbit/s~2000Mbit/s、按流量计费类型的带宽大小范围为1Mbit/s~300Mbit/s。
yangtse.io/eip-network-type
可选
5_bgp
公网IP类型。
具体类型以各区域配置为准,详情请参见弹性公网IP控制台的购买页面。
例如,“华东-上海一”区域支持以下类型:
- 5_bgp:全动态BGP
- 5_sbgp:静态BGP
yangtse.io/eip-charge-mode
可选
空
按流量计费或按带宽计费。
建议填写该参数。若该参数为空,表示不指定计费模式,则以该区域下弹性公网IP接口的默认值为准。
- bandwidth:按带宽计费
- traffic:按流量计费
yangtse.io/eip-bandwidth-name
可选
Pod名称
带宽名称。
1-64个字符,支持数字、字母、中文、_(下划线)、-(中划线)、.(点)。
- 执行以下命令,创建工作负载。
kubectl create -f deployment.yaml
回显如下,表示已经开始创建工作负载。
deployment.apps/foo created
- 执行以下命令,查看工作负载状态。
kubectl get deployment
回显如下,如果工作负载创建的Pod皆为可用状态,则表示创建成功。
NAME READY UP-TO-DATE AVAILABLE AGE foo 1/1 1 1 4m59s
- 执行以下命令,创建YAML文件deployment.yaml,用于配置工作负载,文件名称可自定义。