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

简介: 快速学习阿里云容器镜像服务

开发者学堂课程【企业级运维之云原生与 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 拉取镜像。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
471 2
|
供应链 安全 Cloud Native
阿里云飞天企业版获【可信云·容器平台安全能力】先进级认证
阿里云飞天企业版容器系列产品获中国信息通信研究院【可信云·容器平台安全能力】先进级认证,这是飞天企业版容器产品获得《等保四级PaaS平台》和《 云原生安全配置基线规范V2.0》之后,本年度再一次获得行业权威认可,证明飞天企业版的容器解决方案具备符合行业标准的最高等级容器安全能力。
347 8
阿里云飞天企业版获【可信云·容器平台安全能力】先进级认证
|
运维 Kubernetes Java
阿里云容器计算服务ACS ,更普惠易用、更柔性、更弹性的容器算力
ACS是阿里云容器服务团队推出的一款面向Serverless场景的子产品,基于K8s界面提供符合容器规范的CPU及GPU算力资源。ACS采用Serverless形态,用户无需关注底层节点及集群运维,按需申请使用,秒级按量付费。该服务旨在打造更普惠易用、更柔性、更弹性的新一代容器算力,简化企业上云门槛,加速业务创新。ACS支持多种业务场景,提供通用型、性能型及BestEffort算力质量,帮助客户更从容应对流量变化,降低综合成本。
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
10月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
351 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
11月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
11月前
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)
|
人工智能 运维 Kubernetes
阿里云容器服务AI助手2.0 - 新一代容器智能运维能力
2024年11月,阿里云容器服务团队进一步深度融合现有运维可观测体系,在场景上覆盖了K8s用户的全生命周期,正式推出升级版AI助手2.0,旨在更好地为用户使用和运维K8S保驾护航。
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
10月前
|
人工智能 Kubernetes Serverless
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%

相关产品

  • 容器镜像服务