当前位置: 首页 > article >正文

运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南

64ef1dda34f00e5c5fbd0a7826aa782a.gif

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]


Docker与Kubernetes集群拉取Harbor私有容器镜像仓库配置

描述:在现在微服务、云原生的环境下,通常我们会在企业中部署Docker和Kubernetes集群,并且会在企业内部搭建Harbor私有镜像仓库以保证开发源码安全,以及加快CI/CD流水线速度,从而实现更快的构建与交付,就以作者公司为例,要迭代一个开发的微服务只需要简短的几分钟即可搞定。

我们知道如果你拉取一个公共的镜像仓库中的镜像,例如,拉取一个最新的nginx镜像,那么你只需要在服务器上执行docker pull nginx 命令,但是若是要拉取一个私有镜像仓库中的镜像,例如,docker pull harbor.weiyigeek.top/project/CMS-SpringBoot:latest 命令,那么你可能会遇到无法拉取镜像的问题,那么如何分别在Docker与Kubernetes集群拉取私有容器镜像仓库Harbor? 这便是本文将要分享的内容,希望对大家有所帮助。

假设,作者搭建部署了一套启用了HTTPS的Harbor私有镜像仓库,其域名是https://harbor.weiyigeek.top,项目名称是project,私有镜像名称是CMS-SpringBoot:lastest

f60348f1eac16d0218149c152391548c.png

Docker 环境

  • 步骤01.在Docker客户端配置中添加Harbor仓库地址

# 新增 insecure-registries 字段,表示允许不安全的仓库。
vim /etc/docker/daemon.json
"insecure-registries": ["harbor.weiyigeek.top","192.168.12.111:5000"]
  • 步骤02. 从官方文档可知客户端要使用tls与Harbor通信使用的还是自签证书,那么必须建立一个目录:/etc/docker/certs.d,如果配置可能会出现x509: certificate signed by unknown authority 错误提示

# 创建证书目录
mkdir -vp /etc/docker/certs.d/harbor.weiyigeek.top

# 将 harbor.pem 证书文件复制到创建的目录中
cp -a /deployapp/harbor/harbor.pem  /etc/docker/certs.d/harbor.weiyigeek.top/harbor.crt

# 将镜像仓库证书文件的所属和所属组设置为root,以及其证书文件的权限设置为600
chown root:root /etc/docker/certs.d/certs.d/harbor.weiyigeek.top/*
chmod -R 600  /etc/docker/certs.d/certs.d/harbor.weiyigeek.top/
  • 步骤03.重载 systemd 以及重启Docker服务

systemctl daemon-reload
systemctl restart docker
  • 步骤04.配置访问私有镜像仓库Harbor的认证信息,验证从私有仓库上传/拉取镜像。

docker login harbor.weiyigeek.top
  # Username: weiyigeek
  # Password:
  # WARNING! Your password will be stored unencrypted in /home/weiyigeek/.docker/config.json.Configure a credential helper to remove this warning. See
  # https://docs.docker.com/engine/reference/commandline/login/#credentials-store
  # Login Succeeded

# 测试上传
$ docker pull nginx
$ docker tag nginx:latest harbor.weiyigeek.top/project/nginx:latest
$ docker push harbor.weiyigeek.top/project/nginx:latest
  # The push refers to repository [harbor.weiyigeek.top/project/nginx:latest]
  # 7b5417cae114: Pushed
  # aee208b6ccfb: Pushed
  # 2f57e21e4365: Pushed
  # 2baf69a23d7a: Pushed
  # d0fe97fa8b8c: Pushed
  # v1.1: digest: sha256:34f3f875e745861ff8a37552ed7eb4b673544d2c56c7cc58f9a9bec5b4b3530e size: 1362

# 测试拉取
$ docker pull harbor.weiyigeek.top/project/nginx:latest

Kubernetes 集群环境

描述:在Kubernetes集群中,我们可以通过部署资源控制器配置的imagePullSecrets 字段,或者使用为serviceaccount 方式来拉取私有镜像仓库中的镜像。

步骤 01.值得注意的是,在Kubernetes集群中不同的容器运行时(CRI)中,配置方式是不同的,例如

  • 若你使用Dockershim作为容器运行时(即Docker环境),那么你需要修改Docekr守护配置文件/etc/docker/daemon.json,按照上一章节步骤进行配置即可。

  • 若你使用Containerd作为容器运行时,修改/etc/containerd/config.toml文件,按照如下方式配置即可。

# 例如, 私有的 harbor.weiyigeek.top 镜像仓库配置
$ mkdir -vp charbor.weiyigeek.top/
$ touch /etc/containerd/certs.d/harbor.weiyigeek.top/hosts.toml
$ vim /etc/containerd/certs.d/harbor.weiyigeek.top/hosts.toml
server = "https://harbor.weiyigeek.top"
[host."https://harbor.weiyigeek.top"]
  capabilities = ["pull", "resolve", "push"]
  skip_verify = true

# 重启containerd服务
systemctl restart containerd

步骤 02.在集群中使用 secret 资源清单存储镜像仓库的认证信息。

# 方式1.docker-configjson 方式来创建 secret,前提是使用dockershim容器运行时
kubectl create secret generic harbor-secret  \
  --from-file=.dockerconfigjson=/root/.docker/config.json \
  --type=kubernetes.io/dockerconfigjson \
  --namespace default

## 方式2.docker-registry 方式来创建 secret(当前主流)
kubectl create secret docker-registry harbor-secret \
  --docker-server=harbor.weiyigeek.top \
  --docker-username=weiyigeek \
  --docker-password=Harbor12345 \
  --docker-email=master@weiyigeek.top \
  --namespace default

之后,在Kubernetes集群中部署资源时,配置imagePullSecrets 字段即可,操作如下:

apiVersion: v1 
kind: Pod 
metadata:
  name: cms-app
spec:
  containers:
    - name: cms-app
      image: harbor.weiyigeek.top/project/CMS-SpringBoot:lastest  # 私有镜像
  imagePullSecrets:   # 关键点
    - name: harbor-secret

或者,你也可以创建并使用serviceaccount 方式来拉取私有镜像仓库中的镜像,操作如下:

# 1.创建一个serviceaccount账户
kubectl create serviceaccount harbor-sa --namespace default

# 2.通过补丁的方式将该服务帐户与 前面创建的 harbor-Secret 关联起来
kubectl patch serviceaccount harbor-sa  -p '{"imagePullSecrets": [{"name": "harbor-secret"}]}'

# 或者,你也可以使用 kubectl edit,或者如下所示手动编辑 YAML 清单,打开 sa.yaml 文件,删除带有键名 resourceVersion 的行,添加带有 imagePullSecrets: 的行,最后保存文件。
$ kubectl get serviceaccounts harbor-sa -o yaml > ./sa.yaml
$ vim sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: 2024-08-07T22:02:39Z
  name: harbor-sa 
  namespace: default
  uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
secrets:
- name: harbor-sa-token-uudge
imagePullSecrets:
- name: harbor-sa
# 最后,用新的更新的 sa.yaml 文件替换服务账号。
kubectl replace serviceaccount harbor-sa -f ./sa.yaml

然后,在创建的资源清单中,配置serviceAccountName: harbor-sa 字段即可,例如

apiVersion: v1 
kind: Pod 
metadata:
  name: cms-app
spec:
  serviceAccountName: harbor-sa   # 关键点

  containers:
    - name: cms-app
      image: harbor.weiyigeek.top/project/CMS-SpringBoot:lastest  # 私有镜像

好了,今天的分享到此结束,如果觉得文章对你有点帮助,请关注我,点赞分享并留言,谢谢。

若文章写得不错,不要吝惜手中转发,点赞、在看,若有疑问的小伙伴,可在评论区留言你想法哟💬!

温馨提示:作者最近10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者账号[WeiyiGeeker],当前价格¥199,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

be2bba7b31494e84e7d7fb581cf62cdb.png


如果此篇文章对你有帮助,请你将它转发给更多的人!

 学习推荐 往期文章

  • 🔥【最新】运维必学 | 1.从零开始学Shell脚本编程之基础介绍

  • 🔥【最新】运维必学 | 2.从零开始学Shell脚本编程之变量

  • 💡【相关】GitOps实践 | 快速在银河麒麟KylinOS国产系统部署最新Harbor企业私有镜像仓库

  • 💡【相关】记一次在k8s集群搭建的Harbor私有仓库无法提供服务之镜像迁移恢复实践

3bfc2c0b0a2f5ea492a62449a741fa71.gif

dc98e446c5b92a76537b371f6cc3f630.gif


http://www.kler.cn/a/408213.html

相关文章:

  • 【Opencv学习】PART1-图像基础处理
  • Linux中,防火墙基本操作指令
  • 【AI系统】GPU 架构回顾(从2018年-2024年)
  • 【电源专题】BUCK电源SW电压的平均值为什么等于输出电压?
  • git使用(二)
  • react中useMemo的使用场景
  • 《泰拉瑞亚》PC+手机版安装教程
  • ubuntu 安装 yum 无法定位问题
  • 云计算-华为HCIA-学习笔记
  • 经验笔记:Git 中的远程仓库链接及上下游关系管理
  • mybatis学习(一)
  • Transformer详解及衍生模型GPT|T5|LLaMa
  • 写时复制,读时加载
  • 从零开始学习数据库 day0(基础)
  • JavaEE-线程安全专题
  • Tessy学习笔记—一些零散知识点
  • 昇腾CANN环境下Whisper.cpp安装指南
  • Windows 软件之 FFmpeg
  • Pytorch使用手册-Save and Load the Model(专题八)
  • 亚太杯数学建模竞赛介绍
  • 11.21作业
  • 【jvm】AOT编译器
  • git仓库推送到远端
  • window系统下使用open-webui+ollama部署大模型
  • LCR-003比特位计数
  • 电子电气架构 -- ASIL D安全实现策略