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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 云原生之容器编排实践-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!

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
13 2
|
3天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
1天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
2天前
|
Cloud Native API 持续交付
云原生之旅:从容器到微服务的演进之路
【10月更文挑战第39天】在这篇文章中,我们将一起探索云原生技术的奥秘。通过浅显易懂的语言和生动的比喻,我们将了解云原生技术如何改变软件开发的世界。文章将带领读者从容器的基本概念出发,逐步深入到微服务架构的实践,揭示这些技术如何助力现代应用的快速迭代与可靠部署。准备好,让我们启程进入云原生的精彩世界吧!
|
3天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
18 1
|
4天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
6天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
6天前
|
Kubernetes 负载均衡 调度
Kubernetes集群管理与编排实践
Kubernetes集群管理与编排实践
|
6天前
|
Kubernetes Cloud Native 前端开发
Kubernetes入门指南:从基础到实践
Kubernetes入门指南:从基础到实践
15 0
|
5天前
|
消息中间件 存储 Cloud Native
云原生架构下的数据一致性挑战与应对策略####
本文探讨了在云原生环境中,面对微服务架构的广泛应用,数据一致性问题成为系统设计的核心挑战之一。通过分析云原生环境的特点,阐述了数据不一致性的常见场景及其对业务的影响,并深入讨论了解决这些问题的策略,包括采用分布式事务、事件驱动架构、补偿机制以及利用云平台提供的托管服务等。文章旨在为开发者提供一套系统性的解决方案框架,以应对在动态、分布式的云原生应用中保持数据一致性的复杂性。 ####