在 Kubernetes 上拉取 Harbor 私有仓库镜像并部署服务

上一篇讲解了IntelliJ IDEA和Jib Maven插件配合,镜像一键推送到Harbor私服仓库,今天来讲解下怎么让k8s直接拉取Harbor 私有仓库上面的镜像

创建 Kubernetes Secret 用于拉取镜像

因为 Harbor 仓库是私有的,我们需要创建一个 Kubernetes Secret 来存储我们的 Docker 仓库的认证信息。

kubectl create secret docker-registry harbor-secret \--docker-server=192.168.10.229 \--docker-username=admin \--docker-password=123456

创建 Kubernetes 部署文件

接下来,我们需要创建一个 Kubernetes 部署文件,使用我们从 Harbor 拉取的镜像。我们将指定使用我们创建的 secret 来拉取私有镜像。

创建一个名为 gateway-deployment.yaml 的文件,并添加以下内容:

apiVersion: apps/v1
# 声明一个Deployment资源对象 表示这是一个部署资源。
kind: Deployment
#Deployment的元数据 如名称和标签
metadata:#Deployment的名称    name: dtb-gateway-deployment#定义了Deployment所属的命名空间为 "default"。namespace: default#labels 字段用于给Deployment添加标签,这里的标签是 app: dtb-gateway。labels:app: dtb-gateway
#spec 部分定义了Deployment的规范,包括副本数量、Pod模板等  
spec:# 通过replicas声明pod个数是1 这表示Deployment将确保只有一个副本的Pod在运行。replicas: 1# 定义了如何选择要由Deployment管理的Pod。在这里,它使用标签选择器 app: dtb-gateway 来选择匹配该标签的Pod。selector:matchLabels:app: dtb-gateway# 字段为空对象,表示没有定义特定的滚动升级策略,使用默认的策略。    strategy: {}# 部分定义了要创建的Pod的模板。template:#字段用于定义Pod模板的元数据。metadata:#labels 字段给Pod模板的Pod添加了一个标签 app: dtb-gateway,这个标签与Deployment的选择器匹配。 给pod打上标签app=myapp   labels:app: dtb-gateway# 部分定义了Pod的规范,包括容器的配置。    spec:containers:- image: 192.168.10.229/dtb/dtb-gateway:2.0.1-snapshotname: dtb-gateway#字段为空对象,表示未指定容器的资源请求和限制。resources: {}#字段定义了容器的端口映射,将容器的8088端口映射到Pod的端口ports:- containerPort: 8088env:# 指定环境- name: spring.profiles.activevalue: fenlan# 指定时区- name: TZvalue: Asia/ShanghaivolumeMounts:- mountPath: /opt/logsname: log-volumeimagePullPolicy: Always# 这里加上创建的SecretsimagePullSecrets:- name: harbor-secretvolumes:- name: log-volumehostPath:path: /opt/logs/dtb-gatewaytype: DirectoryOrCreate
#表示当前的部署状态        
status: {}

应用部署文件

使用 kubectl 命令来应用这个部署文件,从而在 Kubernetes 集群上创建和运行我们的应用。

kubectl apply -f gateway-deployment.yaml

报错!!:

Failed to pull image "192.168.10.229/dtb/dtb-gateway:2.0.1-snapshot": failed to pull and unpack image "192.168.10.229/dtb/dtb-gateway:2.0.1-snapshot": failed to resolve reference "192.168.10.229/dtb/dtb-gateway:2.0.1-snapshot": failed to do request: Head "https://192.168.10.229/v2/dtb/dtb-gateway/manifests/2.0.1-snapshot": dial tcp 192.168.10.229:443: connect: connection refused

在这里插入图片描述
这用的是https啊
然后上网搜 好像是说在创建secret 的时候指定

kubectl create secret docker-registry harbor-secret \--docker-server=http://192.168.10.229 \--docker-username=admin \--docker-password=123456

然后删除deployment重新apply,还是不行!

网上找不到办法问下chtgpt吧 它这样说:
1.配置 Docker 允许使用 HTTP(如前所述)
前面在做一键推送镜像到harbor已经做过
配置 Kubernetes 使用 HTTP
编辑 kubelet 配置:
在每个节点上,编辑 kubelet 的配置文件,通常位于 /var/lib/kubelet/config.yaml 或 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf。你需要确保 --insecure-registry 参数被添加到 kubelet 启动参数中。
然后 sudo systemctl daemon-reload; sudo systemctl restart kubelet
也是不行 -_-
在这里插入图片描述

醉了!!

解决:配置containerd支持私服

咱们的k8s运行时用的是containerd,k8s默认的,网上k8s都是docker docker docker… k8s最新部署参考。k8s使用私有harbor,containerd需要配置仓库信任,修改containerd的配置:

vim /etc/containerd/config.toml
    [plugins."io.containerd.grpc.v1.cri".registry]config_path = ""[plugins."io.containerd.grpc.v1.cri".registry.auths][plugins."io.containerd.grpc.v1.cri".registry.configs][plugins."io.containerd.grpc.v1.cri".registry.configs.'192.168.10.229'.tls] #新增加的insecure_skip_verify = true   #新增加的[plugins."io.containerd.grpc.v1.cri".registry.headers][plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors.'192.168.10.229'] #新增加的endpoint = ["http://192.168.10.229"]   #新增加的[plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]tls_cert_file = ""tls_key_file = ""

这里的配置没有添加账号密码,如果添加了账号密码就是这样:

    [plugins."io.containerd.grpc.v1.cri".registry]config_path = ""[plugins."io.containerd.grpc.v1.cri".registry.auths][plugins."io.containerd.grpc.v1.cri".registry.configs][plugins."io.containerd.grpc.v1.cri".registry.configs.'192.168.10.229'.tls] #新增加的insecure_skip_verify = true   #新增加的[plugins."io.containerd.grpc.v1.cri".registry.configs.'192.168.10.229'.auth] #新增加的 username  = "admin" #新增加的password  = "123456" #新增加的[plugins."io.containerd.grpc.v1.cri".registry.headers][plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors.'192.168.10.229'] #新增加的endpoint = ["http://192.168.10.229"]   #新增加的[plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]tls_cert_file = ""tls_key_file = ""

这样的话 gateway-deployment.yaml就不用配置imagePullSecrets了 那也不用生成harbor-secret了

接下来重新启动containerd:

systemctl restart containerd.service

再次重新部署

 kubectl delete -f gateway-deployment.yamlkubectl apply -f gateway-deployment.yaml

验证部署

应用成功部署后,我们可以验证 Pod 是否已成功拉取镜像并运行:

kubectl get pod -n default

在这里插入图片描述

通过上述步骤,我们已经成功地在 Kubernetes 集群上从 Harbor 私有仓库中拉取镜像并部署了我们的应用。使用私有镜像仓库有助于提高镜像的安全性和管理效率。希望这篇博文对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript面向对象

一、编程思想 面向过程介绍 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些一步一步实现,使用的时候再一个一个依次调用就可以了。 面向过程,就是按照我们分析好了的步骤,按照步骤解决问题。 面向对象编程&#xf…

阻抗控制(Impedance Control)和导纳控制(Admittance Control)例子

阻抗控制(Impedance Control)和导纳控制(Admittance Control) 是两种用于机械臂或机器人交互控制的策略。阻抗控制定义的是机器人端部的力和位置之间的关系,而导纳控制则定义的是外力和运动之间的关系。导纳控制常用于处理机器人与环境交互中的力控制问题。 适用场景对比…

185.二叉树:二叉搜索树的最近公共祖先(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution { public:// 函数用于寻找二叉搜索树中节点 p 和 q 的最低…

Honor of Kings 2024.06.13 (2)

【第一局】准确的说,其实对面优势更加明显,可惜黄忠和墨子喜欢杀人,而我又是不喜欢杀人的,打了好几次失误 【第二局】阵容本来很有优势,这个二呆射手跟第一局黄忠一样爱杀人,应该说三路的输出都爱杀人&…

小主机折腾记26

双独立显卡调用问题 前两天将tesla p4从x99大板上拆了下来,将880G5twr上的rx480 4g安装到了x99大板上,预计是dg1输出,rx480做3d运算。安装完驱动后,还想着按照之前tesla p4的设置方法去设置rx480,结果果然&#xff0c…

Serverless 使用OOS将http文件转存到对象存储

目录 背景介绍 系统运维管理OOS 文件转存场景 前提条件 实践步骤 附录 示例模板 背景介绍 系统运维管理OOS 系统运维管理OOS(CloudOps Orchestration Service)提供了一个高度灵活和强大的解决方案,通过精巧地编排阿里云提供的OpenAPI…

AcWing 477:神经网络 ← 拓扑排序+链式前向星

【题目来源】https://www.acwing.com/problem/content/479/【题目描述】 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。 对神经网络的研究…

Rust : windows下protobuf和压缩传输方案

此前dbpystream库是用python开发 web api。今天在rust中试用一下protobuf。 本文关键词:编译器、protobuf、proto文件、序列化、zstd压缩,build。 一、 protobuf编译器下载 具体见相关文章。没有编译器,protobuf无法运行。 windows参见&am…

【皇帝的新衣】虚拟小组长的团队管理

团队有时候会需要设立虚拟小组长来分组帮忙管理,那么,虚拟小组的负责人应当怎么做好管理动作? 目前很多大厂追求团队管理上的扁平化,但真正有实职的领导们一般管理30人数,此时需要一个虚拟小组长来分组帮忙管理。 一、…

字节出品SDXL-Lightning:文生图开放模型新突破

生成模型的研究中,文本到图像的生成一直是一个充满挑战的任务。传统的扩散模型虽然在生成质量上取得了显著的成果,但其生成过程往往需要大量的迭代步骤,这不仅导致计算成本高昂,而且生成速度缓慢,难以满足实时或近实时…

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算。

操作环境: MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分:显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏(Edit Text):位于界面顶部中央,用于显示用户输入的表达式和…

没有特斯拉的开源专利,就没有中国电动车产业今天的成就?

原文链接:没有特斯拉的开源专利,就没有中国电动车产业今天的成就? 特斯拉的开源专利,对中国电动车产业的影响有多大? 2014年6月12日(June 12, 2014),特斯拉(TESLA&…

nodejs 某音douyin网页端搜索接口及x_bogus、a_bogus(包含完整源码)(2024-06-13)

前言 x_bogus或a_bogus算法大概是对数据、ua、时间戳、浏览器的几个指纹进行计算,拿到一个110位大数组,然后转字符,在头部再添加十二位随机字符,再进行魔改的base64加密。 问:抖音的x_bogus、a_bogus值有什么用&#x…

网工内推 | 外企、上市公司运维工程师,有软考中高项证书优先

01 优尼派特(苏州)物流有限公司 🔷招聘岗位:软件运维测试工程师 🔷任职要求: 1、负责公司自主研发的软件售后服务工作, 包括软件的安装, 调试, 升级,培训, 参数配置, 需求与Bug的处理; 2、负责数据库升级及…

远程主机强迫关闭了一个现有的连接redis

引言 在使用 Redis 进行开发和运维过程中,我们可能会遇到 Redis 连接被远程主机强制关闭的情况。本文将介绍造成这种情况的原因,并给出一些处理方法和建议。 远程主机强制关闭连接的原因 远程主机强制关闭连接通常是由于网络不稳定、连接超时、Redis 配…

数据质量测试:测试数据有效性和准确性的方法

以下为作者观点,来看看你认同吗? 如果西西弗斯(编者注:希腊神话中的人物)是一个数据分析师或数据科学家,他在山上滚动的巨石将是他的数据质量保障。即使所有获取、处理和建模的工程流程都无懈可击&#xf…

HarmonyOs修改应用名称和图标方法

最近在开发Harmony应用,发现修改app.json5下的lable:app_name和icon不生效 后来经过查找,原来还需要更改entry下的src/main/module.json5才行,具体操作路径是: 更改后生效:

Vue31-自定义指令:总结

一、自定义函数的陷阱 1-1、自定义函数名 自定义函数名,不能用驼峰式!!! 示例1: 示例2: 1-2、指令回调函数的this 【回顾】: 所有由vue管理的函数,里面的this直接就是vm实例对象。…

Linux发邮件的工具推荐有哪些?如何配置?

Linux发邮件的功能怎么样?Linux系统如何设置服务器? 在Linux操作系统中,有多种工具可供选择用来发送电子邮件,每种工具都有其独特的特点和适用场景。AokSend将介绍几种常用的Linux发邮件工具,并分析它们的优缺点和适用…

Linux部署mysql8.0.28数据库

目录 1.基础准备 (1)首先去官网下载二进制安装包 (2)下载好之后上传至服务器 (3)禁用关闭selinux和防火墙 (4)挂载光盘搭建本地yum仓库 2.解压到指定目录 3.检查系统是否安装mariadb 4.安装MySQL数据库 (1)进入MySQL目录 看到‘完毕’就说面mysql已经安装成功了 4.初…