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

2024-06-14 05:04

本文主要是介绍在 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 私有仓库中拉取镜像并部署了我们的应用。使用私有镜像仓库有助于提高镜像的安全性和管理效率。希望这篇博文对你有所帮助!

这篇关于在 Kubernetes 上拉取 Harbor 私有仓库镜像并部署服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059451

相关文章

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

MongoDB搭建过程及单机版部署方法

《MongoDB搭建过程及单机版部署方法》MongoDB是一个灵活、高性能的NoSQL数据库,特别适合快速开发和大规模分布式系统,本文给大家介绍MongoDB搭建过程及单机版部署方法,感兴趣的朋友跟随... 目录前言1️⃣ 核心特点1、文档存储2、无模式(Schema-less)3、高性能4、水平扩展(Sh

Docker + Redis 部署集群的实现步骤

《Docker+Redis部署集群的实现步骤》本文详细介绍了在三台服务器上部署高可用Redis集群的完整流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、环境准备1. 服务器规划(3 台服务器)2. 防火墙配置(三台服务器均执行)3. 安装 docke

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景