4.k8s部署私人仓库并且部署java服务案例

news2024/11/19 1:30:41

文章目录

  • 前言
  • 一、搭建私人仓库
    • 1.1 拉取仓库镜像
    • 1.2 创建一个文件夹用来放用户名密码,然后在新创建一个账户
    • 1.3 Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。然后将宿主机的/var/auth目录挂载到镜像的/auth目录下,然后指定这个目录下的htpasswd文件来进行认证
    • 1.4 推送镜像
      • 1.5 k8s创建秘钥
  • 二、制作镜像
    • 2.1.编写dockerfile文件
    • 2.2.编写deployment文件
    • 2.3 创建depoymont
  • 三、测试
  • 总结


前言

前面已经安装好了k8s集群,并且k8s管理页面使用密码,域名登录,现在开始使用k8s部署java服务。


一、搭建私人仓库

私人仓库有多种,用得比较多的是habor,我这里就不用这么复杂了,就直接用docker提供的私人仓库即可。

1.1 拉取仓库镜像

docker pull registry:2.6.2

latest: Pulling from library/registry
79e9f2f55bf5: Pull complete 
0d96da54f60b: Pull complete 
5b27040df4a2: Pull complete 
e2ead8259a04: Pull complete 
3790aef225b9: Pull complete 
Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

1.2 创建一个文件夹用来放用户名密码,然后在新创建一个账户

mkdir /var/auth
docker run --entrypoint htpasswd registry:2.6.2 -Bbn jiangbingsong 123456 >/var/auth/htpasswd
cat /var/auth/htpasswd

修改/etc/docker 下的deamon.json添加下面的内容,这个json的修改和重启docker在所有节点都执行。

  "insecure-registries":["192.168.184.129:5000"]

重新加载docker

sudo systemctl daemon-reload
sudo systemctl restart docker

1.3 Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。然后将宿主机的/var/auth目录挂载到镜像的/auth目录下,然后指定这个目录下的htpasswd文件来进行认证

docker run -d -v /opt/registry:/var/lib/registry -v /var/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  -p 5000:5000 --restart=always --name registry registry:2.6.2

-p 5000:5000,指定registry的端口是5000并映射成主机的5000端口。
-v /opt/registry:/var/lib/registry,将本地的/opt/registry挂载到镜像默认存储路径 /var/lib/registry。

-v /var/auth:/auth 将第二步生成auth文件夹挂在到镜像auth目录。

-e REGISTRY_AUTH=htpasswd, -e REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm,这两个参数组合启动基本身份验证。
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd,指定使用的密码认证文件是/auth/htpasswd。(注意,使用的是容器里面的路径,前面我们已经将/var/auth挂在到/auth)

如果有https证书,可以加上以下参数:
-v /usr/local/nginx/conf/cert:/certs,如果有https认证,将宿主机保存的认证文件挂到容器里。
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.pem,-e REGISTRY_HTTP_TLS_KEY=/certs/server.key 指定https证书和key。
–restart=always,重启方式为always。
–name registry,指定容器名称。
registry,镜像名称

1.4 推送镜像

#先登录
docker login 192.168.184.129:5000
#推送镜像
docker tag registry:2.6.2 192.168.184.129:5000/registry:2.6.2
docker push 192.168.184.129:5000/registry:2.6.2
#查看镜像
curl -u jiangbingsong:123456 192.168.184.129:5000/v2/_catalog

1.5 k8s创建秘钥

创建webservice空间

kubectl create namespace webservice
kubectl create secret docker-registry registry-secret-name --docker-server=192.168.184.129:5000 --docker-username=jiangbingsong --docker-password=123456 -n webservice

二、制作镜像

demo-0.0.1-SNAPSHOT.jar 为自己打包的jar包这里就不展示了

2.1.编写dockerfile文件

#java:8 是使用jdk版本
FROM openjdk:8-jdk-alpine

#指定了临时文件目录为/tmp。
VOLUME /tmp/service

#添加jar到容器并重命名
ADD demo-0.0.1-SNAPSHOT.jar /app.jar

#执行jar文件
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

生成image并且推送私人仓库
在这里插入图片描述

docker build -t springbootdemo .
#先登录
docker login 192.168.184.129:5000
docker tag springbootdemo 192.168.184.129:5000/springbootdemo#推送镜像
docker push 192.168.184.129:5000/springbootdemo 
curl -u jiangbingsong:123456 192.168.184.129:5000/v2/_catalog #查看镜像

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.2.编写deployment文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springbootdeploy
  namespace: webservice
spec:
  replicas: 3
  selector:
    matchLabels:
      run: springbootdemo
  template:
    metadata:
      labels:
        run: springbootdemo
    spec:
      containers:
        - name: springbootdemo
          image: 192.168.184.129:5000/springbootdemo
          volumeMounts:
            - name: host-time
              mountPath: /etc/localtime
          ports:
            - containerPort: 8008
          resources:
            requests:
              cpu:  1
              memory: 1024Mi
            limits:
              cpu:  1
              memory: 1024Mi

      imagePullSecrets:
        - name: registry-secret-name
      volumes:
        - name: host-time
          hostPath:
            path: /etc/localtime
---
apiVersion: v1
kind: Service
metadata:
  name: springbootdemo
  namespace: webservice
  labels:
    run: springbootdemo
spec:
  type: NodePort
  ports:
    - port: 8008
  selector:
    run: springbootdemo

  imagePullSecrets:
    - name: registry-secret-name

这里secrets为刚刚创建的秘钥,image为刚刚推送到私人仓库的image

2.3 创建depoymont

kubectl apply -f springbootDeployment.yaml
kubectl get svc --all-namespaces

查看开放的端口
在这里插入图片描述
这里使用nodeport方式暴露服务,这里可以看到端口为30952
http://192.168.184.129:30952为我暴露的服务。接口如下,正常返回应该是“你好”
在这里插入图片描述

三、测试

测试结果如下图
http://192.168.184.129:30952/hello
在这里插入图片描述

总结

服务部署相对简单一些但是也要注意几点,

  1. docker registry安装相对harbor简单,但是对于镜像的管理就没有habor友好了,需要使用指令 docker rmi docker镜像名字去删除。habor提供界面方式操作,方便很多。
  2. 推送镜像的时候,要先登录仓库再进行推送,否则会找不到镜像。

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

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

相关文章

多线程-锁的种类

1 作用 Java中的锁主要用于保障多并发线程情况下数据的一致性。在多线程编程中为了保障数据的一致性,我们通常需要在使用对象或者方法之前加锁,这时如果有其他线程也需要使用该对象或者该方法,则首先要获得锁,如果某个线程发现锁正在被其他线程使用,就会…

案例研究|农业信息化企业天演维真的堡垒机选型思路与落地实践

浙江天演维真网络科技股份有限公司(以下简称为“天演维真”)成立于2004年,是中国领先的乡村振兴数字化服务整体解决方案提供商。作为中国品牌农业信息化服务的先行者、中国农产品数字身份识别技术开创者,天演维真的产品已助力全国…

【Python】Python基础语法

总感慨万千,虽只道寻常 文章目录 前言1. python与Java的主要区别2. 数据类型3. 输入与输出3.1 输入3.2 输出 4. 注释5. 运算符6. 条件语句7. 循环8. 函数9. 列表9.1 创建9.2 根据下标访问元素9.3 列表切片9.4 遍历9.5 插入元素9.6 查找元素下标9.7 删除元素9.8 列表…

Spring Boot - Junit4 / Junit5 / Spring Boot / IDEA 关系梳理

文章目录 PreJunit4 / Junit5 / Spring Boot / IDEAIDEA版本Spring-Boot-Older-Release-NotesSpringBootTest 起源 & Spring-Boot-1.4-Release-Notes2.0.0.RELEASE ----- 2.0.9.RELEASE2.1.0.RELEASE ----- 2.1.18.RELEASE2.2.0.RELEASE ~ 2.2.13.RELEASE2.3.0.RELEASE ~ 2…

记一次线程堵塞(挂起)导致消息队列积压

1 背景 A服务作为生产者,每天发送上千万的mq消息,每一个消息包含500个用户ids数据。B服务作为消费者,接受MQ消息并通过http调用第三方请求进行业务处理,消费组启用了rabbitmq的多线程消费组,一个实例并发40个mq消费者…

索尼mp4变成rsv修复案例(ILME-FX3)

索尼mp4的修复案例讲过很多,这次是索尼的ILME-FX3也算是一个畅销的机型,一般索尼没有封装的文件是RSV文件,但是极少遇到有多个RSV文件的,下边我们来讲下这个特殊案例。 故障文件:4个RSV文件,大小在1.78G~28G多 故障现…

(测评补单)Lazada、Shopee、Zalora:探索东南亚电商市场

随着互联网的发展,电子商务在东南亚地区迅速崛起。在这个充满活力和潜力的市场中,Lazada、Shopee和Zalora成为了三大领先的电商平台。它们以其独特的商业模式和创新的服务,吸引了数百万用户。本文将深入探讨这三家电商巨头的发展历程、核心竞…

一文讲透机器学习超参数调优!

公众号:尤而小屋作者:Peter编辑:Peter 大家好,我是Peter~ 本文的主题:机器学习建模的超参数调优。开局一张图: 文章很长,建议直接收藏~ 一、什么是机器学习超参数? 机器学习超参数…

代码随想录训练营 打家劫舍

代码随想录训练营 dp 198. 打家劫舍🌸code 213. 打家劫舍 II🌸分析code 337.打家劫舍 III🌸 198. 打家劫舍🌸 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素…

FastChat工作原理解析

在了解FastChat如何完成大模型部署前,先了解下Huggingface提供的Transformer库。Hugggingface提供的Transformer库 Hugging Face 的 Transformers 库是一个用于自然语言处理(NLP)任务的 Python 库,旨在简化和加速使用预训练语言模…

Vue3 中的几个坑,你都见过吗?

Vue3 目前已经趋于稳定,不少代码库都已经开始使用它,很多项目未来也必然要迁移至 Vue3。本文记录我在使用 Vue3 时遇到的一些问题,希望能为其他开发者提供帮助。 1. 使用 reactive 封装基础数据类型 传统开发模式中,数据声明很简…

[论文阅读]Visual Attention Network原文翻译

[论文链接]https://arxiv.org/abs/2202.09741 摘要 虽然一开始是被设计用于自然语言处理任务的,但是自注意力机制在多个计算机视觉领域掀起了风暴。然而,图像的二维特性给自注意力用于计算机视觉带来了三个挑战。(1)将图像视作一…

怎样获取字符串数组的长度_使用sizeof(array) / sizeof(array[0])

使用sizeof() C、C中没有提供直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢? 其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在使用时…

Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例

Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例 点击封面跳转到Unity国际版下载页面 简介 在Unity中,性能优化是游戏开发过程中非常重要的一环。其中,Shader的优化对于游戏的性能提升起着至关重要的作用。…

redis缓存详解

一、Redisson分布式锁存在问题 1、基于redis实现的分布式锁,如果redis集群出现master宕机,而从节点没有接收到锁对应的key,被选举成新的master就可能存在被其它线程加锁成功则存在加锁问题 2、 基于上面的问题,可以把redis分为多…

SpringBoot国际化配置组件支持本地配置和数据库配置

文章目录 0. 前言i18n-spring-boot-starter1. 使用方式0.引入依赖1.配置项2.初始化国际化配置表3.如何使用 2. 核心源码实现一个拦截器I18nInterceptorI18nMessageResource 加载国际化配置 3.源码地址 0. 前言 写个了原生的SpringBoot国际化配置组件支持本地配置和数据库配置 背…

口袋参谋:99.99%商家都学的防骗技巧!

​99%的淘宝天猫商家,必然都要解决一个问题!!! 如何让自己不被敲诈勒索且骗钱! 直接看真实案例 看这个骗子,是如何赤裸裸诈骗商家的! 如果你不想再当冤大头,告诉你一个99.99%有效…

SSM - Springboot - MyBatis-Plus 全栈体系(六)

第二章 SpringFramework 四、SpringIoC 实践和应用 3. 基于 注解 方式管理 Bean 3.1 实验一:Bean 注解标记和扫描 (IoC) 3.1.1 注解理解 和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框…

分类预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入分类预测

分类预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入分类预测 目录 分类预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于SVM-Adaboost支持向量机结合Ada…

Python 图形化界面基础篇:理解 Tkinter 主事件循环

Python 图形化界面基础篇:理解 Tkinter 主事件循环 引言什么是 Tkinter 主事件循环? Tkinter 主事件循环的使用步骤1:导入 Tkinter 模块步骤2:创建 Tkinter 窗口对象步骤3:设置窗口标题和添加 GUI 元素步骤4&#xff1…