阿里云容器镜像服务 | 学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习阿里云容器镜像服务

开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程:阿里云容器镜像服务 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/913/detail/14500


阿里云容器镜像服务

本章目标

Ÿ 阿里云容器镜像服务的基础使用和最佳实践,常见问题排查手段

Ÿ 熟悉阿里云容器服务集群应用管理(创建、更新、删除)

Ÿ 掌握 Kubernetes 调度和资源管理、路由和负载均衡

Ÿ 掌握阿里云容器服务集群存储、容器服务集群日志和监控

 

本章目录

1. 阿里云容器镜像

2. 阿里云容器服务集群应用管理

3. Kubernetes 调度和资源管理

4. 负载均衡和路由

5. 阿里云容器服务集群集群存储

6. 阿里云容器服务集群日志和监控

7. 实验二:应用部署进阶

 

第二章第1讲 阿里云容器镜像服务

 

目录

Ÿ 容器镜像仓库介绍

Ÿ 阿里云容器镜像服务 ACR 优势

Ÿ ACR 基础操作

Ÿ ACR 使用实践

Ÿ 常见问题

 

一、容器镜像仓库介绍

1. 为什么需要容器镜像仓库

Ÿ 镜像仓库是一个无状态的、高度可扩展的服务器端应用程序,它存储并允许分发 Docker 镜像;

Ÿ 和 yum 源、apt 源类似,容器镜像存储在仓库里,需要从仓库里拉取到本地再运行为一个容器;

Ÿ 镜像仓库分为公共仓库和私有仓库,目前最大的容器镜像公共仓库是 Docker 官方的 Dockerhub。当然自己也可以在本地搭建容器镜像仓库服务,这称为私有仓库;

Ÿ 容器镜像仓库的设计理念和 Github 很相似,也分为远程库和本地库,可以把远程镜像仓库的镜像拉取到本地镜像仓库,也可以把本地镜像仓库的镜像推送到远程镜像仓库;

2. 容器镜像仓库使用步骤

Ÿ 开发者从公共镜像仓库 pull 拉取基础镜像;

Ÿ 构建完成包含业务应用的容器镜像,再 push 推送到自己的私有镜像仓库;

Ÿ 业务环境从私有镜像仓库拉取镜像部署到集群中;

如执行命令:docker pull busybox( busybox 为公共镜像仓库的镜像),然后编写 dockerfile,构建镜像后推送到私有仓库,执行docker run xxx命令或者kubectl creat deployment xxx(xxx为镜像地址),就完成了镜像的部署。

image.png

Docker Registry

Registry 可以理解为仓库,它是用来保存所有创建好的镜像统一存储的位置。根据它的权限分为私有仓库 ( Private Registry ) 和公共仓库 ( Public Registry ) 。公共仓库不需要用户名验证,就可以 pull 拉取镜像,但不能 push 推送镜像,私有仓库需要验证用户名和密码后,才可以 pull 拉取和 push 推送镜像。

阿里云提供的容器镜像的仓库服务:ACR。

 

二、阿里云容器镜像服务 ACR

1. 阿里云容器镜像服务 ACR 优势

Ÿ 简单易用:

无需自行搭建及运维,一键创建镜像仓库 支持多地域,提供稳定快速的镜像上传、下载服务;

Ÿ 安全可控:

完善的镜像权限管理体系,确保镜像的分享安全,团队的协作便利提供镜像安全扫描功能,保证镜像漏洞可识别,漏洞级别可提示;

Ÿ 云产品间无缝集成:

整合容器服务,实现新应用镜像生成后的持续部署,整合云 Code CodePipeline,实现源代码到编译测试后,自动生成应用镜像;

2. Dockerhub

Ÿ 速度慢:镜像仓库服务器在大陆外,上传下载慢;

Ÿ 安全性低:没有镜像安全扫描功能;

Ÿ 衔接性差:webhook 触发器钩子设置繁琐,与其他产品和服务对接不方便。

image.png

3. 三种容器镜像方案对比

image.png

a. 企业版

适用于企业客户、对安全及性能需求高、业务全球多地域、有大规模节点部署要求的集群,其特点如下:

Ÿ 支持容器镜像,加密托管;

Ÿ 支持 Helm Char,加密托管;

Ÿ 支持双引擎开源及云安全中心扫描;

Ÿ 支持镜像加签;

Ÿ 支持公网/ VPC 网络控制(通过添加白名单的方式)、支持关闭公网、添加 ACL条目;

Ÿ 支持操作审计;

Ÿ 支持千节点大规模 P2P 分发;

Ÿ 应用分发全球地域+自动同步、支持全链路可观测、可追踪、可自主设置;

Ÿ 费用及运维成本:收费、提供 SLA 保障;

b. 默认实例

适用于个人开发者,其特点如下:

Ÿ 支持开源扫描;

Ÿ 应用分发仅国内地域+手动触发;

Ÿ 费用及运维成本:免费;

c. Harbor

开源镜像仓库,无限制,其特点如下:

Ÿ 支持 Helm Char;

Ÿ 支持容器镜像;

Ÿ 支持开源扫描;

Ÿ 支持镜像加签;

Ÿ 应用分发多套自建,打通网络;

Ÿ 费用及运维成本:无 SLA 保障。

 

三、ACR 基础操作

1. ACR 的基础操作分两个步骤:

a. 登录镜像仓库;

docker login --username=xxx registry.cn-shenzhen.aliyuncs.com

Ÿ username 为阿里云账号(包括子账号),password 为对应账号的仓库密码(非阿里云账号密码);

Ÿ 使用 docker login 命令,点击 ACK 产品可以找到登录仓库的命令及地址,登录成功后,可以使用命令 cat /root/.docker/config.json 查看,包含了镜像仓库的地址、auth( base 64加密后用户名和密码);

b. 拉取或推送镜像

Ÿ 镜像仓库地址格式

image.png

使用 docker push/pull 命令进行镜像的拉取或推送,仓库地址格式,依次为domain、命名空间、镜像名。

Ÿ 镜像拉取

docker pull registry.cn-shenzhen.aliyuncs.com/<namespace>/registry:[镜像版本号]

私有镜像拉取必须先 docker login ,然后进行权限校验才能拉取,公开镜像可以直接拉取;

Ÿ 镜像推送

docker tag [ImageId]registry.cn-shenzhen.aliyuncs.com/<namespace>/registry:[镜像版本号]

docker push registry.cn-shenzhen.aliyuncs.com/<namespace>/registry:[镜像版本号]

push 镜像必须先 docker login ,然后进行权限校验才能 push,docker login 的域名和 push 的域名必须一致。

2. ACR 授权子账号使用

镜像仓库可以授权给多个子账号同时共享使用,子账号和主账号是互相独立的,仓库授权遵循RAM授权策略。

a. AliyunContainerRegistryFullAccess

子用户拥有该授权后,对于镜像资源的权限等同于主账号,可以做任意管理操作。

{

"Statement": [

{

"Action": "cr:*",

"Effect": "Allow",

"Resource": "*"

}

],

"Version": "1"

}

b. AliyunContainerRegistryReadOnlyAccess

子用户拥有该授权后,对于所有容器镜像资源有只读权限,比如:可以查看仓库列表, Pull 镜像等。

{

"Statement": [

{

"Action": [

"cr:Get*",

"cr:List*",

"cr:PullRepository"

],

"Effect": "Allow",

"Resource": "*"

}

],

"Version": "1"

}

其他自定义权限参考:https://help.aliyun.com/document_detail/67992.html

 

四、ACR 使用实践

1. ConfigMap

a. 定义

ConfigMap 是用来存储配置文件的 kubernetes 资源对象,所有的配置内容都存储在 etcd 中。

b. 用途

ConfigMap 核心作用是让配置信息和镜像解耦(微服务思想)。

c. 特点

Pod 可以使用 ConfigMap 的数据生成配置文件。如果 Pod 配置文件要改变时,只需要修改 ConfigMap 里面的数据,然后会动态改变 Pod 容器里面的配置信息。 ConfigMap 的数据是以键值的形式存在。

d. 命令示例

Ÿ 使用 yaml 创建 ConfigMap:kubectl apply -f xxx(xxx为 configmap 的 yaml 文件)

Ÿ 查看 ConfigMap:kubectl get cm xxx(xxx为 configmap 服务名) -o yaml

e. 使用 ConfigMap

如下示例的 yaml 文件中,envFrom 字段内通过 ConfigMapRef 指定需要用到的ConfigMap,还可以在 Pod 命令中使用 ConfigMap 定义的环境变量、以及将  ConfigMap 数据添加到一个卷中在 Pod 中挂载该数据卷的方式。

yaml 文件示例:

apiversion: v1

kind:Pod

metadata:

name:test-pod

spec:

containers

-name: test-container

image: k8s.gcr.io/busybox

command: I"Nbin/sh","_C","env"

envFrom:

-configMapRef:

name:test-config4

restartPolicy: Never

参考《配置Pod使用ConfigMap》:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-pod-configmap/

2. Secret

a. 定义

Ÿ Secret 结构与 ConfigMap 类似,均是键/值对的映射,使用方法也与 ConfigMap 相同;

Ÿ Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。 Secret 可以以 Volume 或者环境变量的方式使用;

Ÿ Secret 的大小被限制为 1MB。当 Secret 挂载到 Pod 上时, 是以 tmpfs 的形式挂载,即这些内容都是保存在节点的内存中,而不是写入磁盘,通过这种方式来确保信息的安全性。

b. Secret 类型

image.png

Ÿ Opaque:用户自定义的任意数据;

Ÿ kubernetes.io/dockerconfigjson:用来存储私有 docker registry 的认证信息;

Ÿ kubernetes.io/service-account-token:用于被 serviceaccount 引用。 serviceaccout 创建时 Kubernetes 会默认创建对应的 secret;

注:Pod 如果使用了 serviceaccount ,对应的 secret 会自动挂载到 Pod 目录 /run/secrets/kubernetes.io/serviceaccount 中。

3. Kubernetes 中如何使用私有镜像仓库创建应用

步骤1:生成私有镜像的密钥;

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] 为邮件地址,该配置项可选填;

步骤2:在编排的 YAML 文件中加入密钥相关配置项,完成后 YAML 文件类似如下

containers:

-name:foo

image: [$Registry]/abc/test: 1.0

imagePullSecrets:

name: [$Reg Secret]

说明:

imagePullSecrets 配置为在声明拉取镜像时指定的密钥。

另一种用法,将镜像拉取密钥放到命名空间下的默认 ServicAccount 中:

a. Kubectl create secret docker-registry mysecret--docker-server=xiniao-registry.cn-zhangjiakou.cr.aliyuncs.comdocker-username=xiniaoetest.com --docker-passrord=mYpassWd***

b. kubectl patch serviceaccount default -p ‘{"imasepuIISecrets":[f"name":mysecret")]’

4. ACR 免密组件

拉取私有仓库的镜像都需要 docker login 登录验证,而且经常遇到验证问题,如何省略这一步?

a. 免密组件 aliyun-acr-credential-helper

aliyun-acr-credential-helper 是一个可以在 ACK 集群中免密拉取 ACR 默认版或企业版私有镜像的组件,该组件会默认安装在所有 ACK 集群中。

b. acr-configuration 配置

免密组件通过读取 ACK 集群内的 kube-system 命名空间中的 acr-configuration 的配置,进行私有镜像拉取。当前支持针对私有镜像仓库使用以下三种权限之一的策略进行配置:

Ÿ 使用默认的 ACK Worker RAM 角色权限进行拉取(默认策略);

Ÿ 使用自定义 RAM 角色的 AccessKey ID 和 AccessKey Secret 的权限进行拉取;

Ÿ 通过配置 RAM AssumeRole 权限,使用其他用户的权限进行拉取。RoleARN 是角色的全局资源描述符,用来指定具体角色。比如,某个云账号下的 devops 角色的 ARN 为:acs:ram::1234567890123456:role/samplerole。

image.png

免密组件 acr-configuration 配置项示例

c. 免密组件常见场景:

场景一:配置当前账号拉取权限

步骤:

Ÿ 登录容器服务管理控制台;

Ÿ 在控制台左侧导航栏中,单击集群;

Ÿ 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情;

Ÿ 在集群信息页面,单击集群资源页签,单击 Worker RAM 角色右侧链接;

Ÿ 在 RAM 角色基本信息的权限管理页签,单击目标权限策略名称.

Ÿ 单击修改策略内容;

Ÿ 在策略内容区域增加以下字段后,单击确定。

{

"Action": [

"cr: Get*",

"cr: List*"

"cr: PullRepository"

],

"Resource":"*",

"Effect": A11ow"

}

场景二:配置跨地域拉取镜像权限

如果需要拉取的镜像与当前 ACK 集群不属于同一地域的时候,需要修改配置项 acr-configuration 中的 configMap。

例如,默认仓库同时拉取北京地域与杭州地域的镜像,配置如下:

data:

service-account: "default"

watch-namespace: "a11"

expiring-threshold: "15m"

notify-email: "cs@aliyuncs.com"

acr-registry-info:

- instanceId: ""

regionId: cn-beijing

- instanceId: ""

regionId: cn-hangzhou

场景三:配置跨账号拉取权限

使用角色扮演进行跨账号拉取配置原则如下:

Ÿ B 用户( RAM 角色)可以拉取指定私有仓库下的私有镜像( B 用户 RAM 角色有 cr.* 相关的权限);

Ÿ B 用户( RAM 角色)允许让 A 用户下的 ACK Worker RAM 角色扮演(信任策略);

Ÿ A 用户下的 ACK 集群的 Worker RAM 角色有扮演 B 用户( RAM 角色)的权限(AliyunAssumeRoleAccess);

Ÿ 设置 A 用户下的 Worker RAM 角色扮演B用户( configMap 中的assumeRoleARN );

步骤4需要调整组件配置,新增 assumeRoleARN 配置,指定扮演哪个角色。 配置内容为 B 用户 Worker RAM 角色的 ARN。

data:

service-account: "default"

watch-namespace: "a11"

expiring-threshoid: "15m"

notify-email: "cs@aIiyuncs.com"

acr-registry-info:

-instanceId: ""

regionId: cn-beijing

domains: registry.cn-beijing.aliyuncs.com

assumeRoleARN: acs: ram::.*:role/kubernetesworkerrole-test

场景四:同时拉取默认实例和企业实例的私有镜像

如需同时拉取默认实例和企业版实例的私有镜像,按照以下方式修改配置项 ACR-configuration 中的 configMap:

data:

seryice-account="detaIt"

watch-namespace:"all"

expiring-threshold:"15m"

notiEy-emaiI:"cs@aliyuncs.com"

acr-registry-info:

- instanceId:""

- instanceId:"cri-xxxx"

 

五、常见问题

1. 拉取镜像失败,报错镜像不存在或者没有权限

Ÿ 确认镜像本身是否存在,镜像地址是否填写正确;

Ÿ 确认镜像是否是私有镜像,私有镜像必须配置密钥拉取(是否使用免密组件);

Ÿ 如果没有使用免密组件,可以手动 docker login 后测试拉取镜像情况,确认 secret 中的镜像地址和 development 中的镜像地址域名是否一致;

Ÿ 如果使用免密组件,查看免密组件 Pod 日志确认是否有异常,检查 ACR-configuration 配置是否有问题;

Ÿ 检查免密组件的 RAM Role 权限策略是否正确。

2. 镜像拉取失败,报错 timeout

检查镜像地址是否正确,镜像地址是否可达,如果是公网地址,确认 ECS 是否有绑定 EIP 或者 ECS 所在交换机是否有绑定 SNAT 保证公网能力,如果是 VPC 地址,检查镜像地址 Region 是否和 ECS 是相同 Region ,默认相同 Region 地址才能 VPC 拉取镜像。

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
3月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
279 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
4月前
|
Kubernetes 容器
要获取ACK(阿里云容器服务)集群中的Deployment
要获取ACK(阿里云容器服务)集群中的Deployment【1月更文挑战第8天】【1月更文挑战第40篇】
65 4
|
2月前
阿里云配置dcoker镜像仓库
阿里云配置dcoker镜像仓库
112 0
|
4月前
|
Kubernetes 监控 调度
阿里云容器服务ACK
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)提供高性能、可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。在ACK中,利用cGPU(Containerized GPU)技术可以实现GPU资源的共享,提高GPU利用率,降低整体成本。
68 6
|
2天前
|
Java Linux 数据安全/隐私保护
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
|
12天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里云函数计算中,容器运行过程中的最大内存使用量获取如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
33 2
|
12天前
|
运维 IDE Serverless
Serverless 应用引擎产品使用之阿里函数计算中,阿里云容器镜像服务(Container Registry)中创建自定义镜像,然后将其部署到FC上如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
27 0
|
14天前
|
人工智能 边缘计算 Kubernetes
阿里云边缘容器云帮助AI推理应用快速落地
2024全球分布式云大会·北京站,阿里云徐若晨演讲内容分享
27 0
|
16天前
|
弹性计算 运维 Kubernetes
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考
轻量应用服务器是深受个人和普通企业用户亲耐的一款轻量级云服务器产品,提供精品应用一键部署,支持一站式的域名、网站、安全、运维、应用管理等服务,极大优化搭建简单应用的体验,降低了入门级用户使用云计算产品的门槛。轻量容器服务是专为学生、个人开发者等用户打造的轻量级容器服务,帮助您在云上快速了解容器和Kubernetes(简称K8s)相关的基础概念和轻松进行入门实践。本文为大家介绍一下阿里云轻量应用服务器与轻量容器服务的区别以及收费标准,以供参考。
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考

相关产品

  • 容器镜像服务