在 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

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务