云原生之容器编排实践-minikube传递秘钥使用阿里云私有镜像仓库

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 云原生之容器编排实践-minikube传递秘钥使用阿里云私有镜像仓库

6}V(7FXR4AG@5P27BAW{3XI.png

我正在参加「掘金·启航计划」

背景


前面我们提到:


有了私有的容器镜像仓库后,当在 minikube 或者 Kubernetes 中拉取私有容器镜像仓库的镜像时,并不能直接拉取,还需要进行认证秘钥信息的配置,这在后续文章中会专门介绍到。

那么,今天在这里就实践下通过 kubectl run 命令与 以YAML描述文件部署pod 两种方式下如何指定镜像拉取的密钥,完成从阿里云私有镜像仓库的拉取操作,然后部署到 minikube


OJ779@EKW8941{IQ{Q}P@5O.png


直接拉取报错


直接通过 kubectl run 命令运行一个 pod ,镜像来自我们前面上传到阿里云私有镜像仓库。然后报错了 ErrImagePull ,通过查看事件信息了解具体的报错信息。

Note:如果你的镜像仓库是公开的,那么直接 kubectl run 没啥问题。

# 直接kubectl run
[root@k8s0 ~]# kubectl run cloud-native --image=registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT
pod/cloud-native created
# 查看pod,发现拉取镜像错误ErrImagePull
[root@k8s0 ~]# kubectl get pods
NAME                              READY   STATUS         RESTARTS        AGE
cloud-native                      0/1     ErrImagePull   0               14s
hello-minikube-58647b77b8-srpbq   1/1     Running        5 (2m43s ago)   30d
# 查看事件,了解到底发生了什么
[root@k8s0 ~]# kubectl get events
LAST SEEN   TYPE      REASON                                             OBJECT                                MESSAGE
25s         Normal    Scheduled                                          pod/cloud-native                      Successfully assigned default/cloud-native to minikube
10s         Normal    Pulling                                            pod/cloud-native                      Pulling image "registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT"
9s          Warning   Failed                                             pod/cloud-native                      Failed to pull image "registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT": rpc error: code = Unknown desc = Error response from daemon: pull access denied for registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
9s          Warning   Failed                                             pod/cloud-native                      Error: ErrImagePull

从错误信息看:requested access to the resource is denied,是说我们对镜像资源的访问被拒绝了。


添加私有镜像仓库认证信息


显然,我们需要将私有镜像仓库的认证信息以某种方式告诉 minikube 或者 Kubernetes 。以下命令可以帮我们做这件事: kubectl create secret

# 添加认证信息
[root@k8s0 ~]# kubectl create secret docker-registry aliyunregistry --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=heartsuit --docker-password=YourDocker --docker-email=youremail
secret/aliyunregistry created
# 查看我们添加的认证信息:aliyunregistry
[root@k8s0 ~]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
aliyunregistry        kubernetes.io/dockerconfigjson        1      17m
default-token-xgvrt   kubernetes.io/service-account-token   3      30d

kubectl run使用我们添加的秘钥


minikube 或者 Kubernetes 添加好了私有镜像仓库认证信息, kubectl run 时能否自动知道这个秘钥信息吗?不幸的是,答案是否定的。但是查看 kubectl run 命令的帮助文档( kubectl run --help ),我并没有看到一个选项来指定拉取镜像的密钥,好像无法将镜像的密钥作为运行命令的一部分进行传递。不过,有个强大参数 --overrides 可以用来传递秘钥信息。


--overrides='{ "spec": { "template": { "spec": { "imagePullSecrets": [{"name": "your-registry-secret"}] } } } }'


完整的 kubectl run 命令如下,完成携带秘钥从阿里云私有镜像仓库的拉取、部署操作,成功:


kubectl run cloud-native1 --image=registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT --overrides='{ "spec": { "template": { "spec": { "imagePullSecrets": [{"name": "aliyunregistry"}] } } } }'

yaml描述文件中使用我们添加的秘钥


其实,上述 --overrides 传递参数的方式就是 yaml 描述文件中使用的格式,不过是以单行命令的形式出现。实际我们使用 yaml 描述时,是以下形式,重点关注 imagePullSecrets


  • cloud-native.yaml


apiVersion: v1
kind: Pod
metadata:
  name: cloud-native
spec:
  containers:
    - name: cloud-native
      image: registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT
  imagePullSecrets:
    - name: aliyunregistry

然后,应用以上描述文件 kubectl apply -f cloud-native.yaml 即可根据指定的秘钥完成从阿里云私有镜像仓库的拉取操作,然后部署到 minikube

Note:

  1. 为防止pod重名,可删除已有pod重新部署或换个名字再部署 kubectl delete pod cloud-native
  2. 这里示例的 yaml是使用Pod类型来运行的,其他类型的比如:Deployment, Service运行时关于私有镜像仓库秘钥的指定方式同样是通过imagePullSecrets实现的。

Reference


minikube.sigs.k8s.io/docs/handbo…


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
22天前
|
消息中间件 Cloud Native 开发者
电子好书发您分享《阿里云云原生开源开发者沙龙北京站 PPT 合集 》
**阿里云开源沙龙PPT合集:北京站聚焦云原生技术** 探索云原生领域的深度与广度,[阿里云](https://developer.aliyun.com/ebook/8334/116563?spm=a2c6h.26392459.ebook-detail.5.da096cf6t38G15)分享了北京开发者沙龙的精彩内容,涵盖微服务、消息队列等主题,助力开发者洞悉行业趋势。![image](https://ucc.alicdn.com/pic/developer-ecology/cok6a6su42rzm_67b12f6cad6e4b2786859b3a668b3351.png)
19 3
|
20天前
|
Cloud Native Serverless 开发者
阿里云助力开发者创新:探索云原生技术的新境界
阿里云开发者社区推动云原生技术发展,提供丰富产品(如容器服务、Serverless、微服务架构、服务网格)与学习平台,助力企业数字化转型。开发者在此探索实践,共享资源,参与技术活动,共同创新,共创云原生技术新篇章。一起加入,开启精彩旅程!
|
4天前
|
运维 Kubernetes Cloud Native
构建高效云原生运维体系:Kubernetes最佳实践
【5月更文挑战第9天】 在动态和快速演变的云计算环境中,高效的运维是确保应用稳定性与性能的关键。本文将深入探讨在Kubernetes环境下,如何通过一系列最佳实践来构建一个高效且响应灵敏的云原生运维体系。文章不仅涵盖了容器化技术的选择与优化、自动化部署、持续集成/持续交付(CI/CD)流程的整合,还讨论了监控、日志管理以及灾难恢复策略的重要性。这些实践旨在帮助运维团队有效应对微服务架构下的复杂性,确保系统可靠性及业务的连续性。
|
15天前
|
Cloud Native 关系型数据库 OLAP
云原生数据仓库产品使用合集之阿里云云原生数据仓库AnalyticDB PostgreSQL版的重分布时间主要取决的是什么
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
5天前
|
Java Linux 数据安全/隐私保护
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
|
6天前
|
消息中间件 人工智能 监控
|
6天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
7天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
29 1
|
8天前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
50 1
|
14天前
|
存储 Cloud Native 大数据
国内独家|阿里云瑶池发布ClickHouse企业版:云原生Serverless新体验
全面升级为云原生架构,支持云原生按需弹性Serverless能力,解决了长期困扰用户的集群扩展效率和平滑性问题。
国内独家|阿里云瑶池发布ClickHouse企业版:云原生Serverless新体验

热门文章

最新文章