云原生部署手册02:将本地应用部署至k8s集群
(一)部署集群镜像仓库
1. 集群配置
首先看一下集群配置:
(base) ➜ ~ multipass ls
Name State IPv4 Image
master Running 192.168.64.5 Ubuntu 22.04 LTS10.42.0.010.42.0.1
nfs Running 192.168.64.4 Ubuntu 22.04 LTS
worker Running 192.168.64.7 Ubuntu 22.04 LTS10.42.1.010.42.1.1
(base) ➜ ~ kubectl get node
NAME STATUS ROLES AGE VERSION
worker Ready <none> 140m v1.28.7+k3s1
master Ready control-plane,master 149m v1.28.7+k3s1
(base) ➜ ~ kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/registry-pv 1Gi RWX Retain Bound default/registry-pvc registry-pv 116mNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/registry-pvc Bound registry-pv 1Gi RWX registry-pv 116m
(base) ➜ ~ showmount -e 192.168.64.4
Exports list on 192.168.64.4:
/home/ubuntu/nfs 10.0.0.0/1 192.0.0.1/1
当前有三个节点,1个是nfs服务器,另两个是k8s集群节点。
nfs挂载点是192.168.64.4:/home/ubuntu/nfs。
k8s上创建了pv和pvc持久存储资源,pv了绑定nfs。
2. 使用helm安装registry
Helm是k8s集群上的包管理工具,类似于mac的brew和ubuntu的apt。Registry是docker的私有镜像仓库。
在mac宿主机上,通过 brew install helm可以一键安装helm。
到heml官网https://artifacthub.io/packages/helm搜索docker-registry,找到repo地址为https://helm.twun.io,添加repo并安装registry
(base) ➜ ~ helm repo add twun https://helm.twun.io #添加helm repo
(base) ➜ ~ helm repo list #查看当前repos
NAME URL
twun https://helm.twun.io
(base) ➜ ~ helm search repo twun/docker-registry #列出指定repo内发布的包
NAME CHART VERSION APP VERSION DESCRIPTION
twun/docker-registry 2.2.2 2.8.1 A Helm chart for Docker Registry
(base) ➜ ~ helm install registry twun/docker-registry \
--namespace system \
--set service.type=NodePort \
--set service.nodePort=31500 \
--set persistence.existingClaim=registry-pvc
安装docker-registry时指定了pvc参数,用于持久化存储,也指定了外部访问的端口31500。关于docker-registry支持的配置参数,可到官网查看文档:https://artifacthub.io/packages/helm/twuni/docker-registry
至此,registry安装完毕。
(二)向仓库推送镜像和拉取镜像
1. 修改docker安全策略
我们安装registry时未配置ssl证书,只能通过http访问。
docker使用私有仓库时,默认需要通过https访问,若通过http访问,需要修改docker配置文件daemon.json,将私有库IP添加到insecure-registries:
{"insecure-registries": ["192.168.64.5:31500"]
}
2. 修改k8s节点的registry配置
逐个登录k8s master节点,创建/etc/rancher/k3s/registries.yaml文件,写入配置内容,并重启k3s服务:
ubuntu@master:~$ sudo vim /etc/rancher/k3s/registries.yaml
mirrors:"192.168.64.5:31500":endpoint:- "http://192.168.64.5:31500"
ubuntu@master:~$ sudo service k3s restart
逐个登录k8s worker节点,创建/etc/rancher/k3s/registries.yaml文件,写入配置内容,并重启k3s-agent服务:
ubuntu@worker:~$ sudo vim /etc/rancher/k3s/registries.yaml
mirrors:"192.168.64.5:31500":endpoint:- "http://192.168.64.5:31500"
ubuntu@worker:~$ sudo service k3s-agent restart
3. 拉取测试镜像并重新打标签
在宿主机上利用docker拉取一个nginx镜像作为测试。
(base) ➜ ~ docker pull nginx:latest
(base) ➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 92b11f67642b 4 weeks ago 187MB
使用tag命令修改镜像名,将私有仓库的地址作为镜像的前缀。
(base) ➜ ~ docker tag nginx:latest 192.168.64.5:31500/nginx:latest
(base) ➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.64.5:31500/nginx latest 92b11f67642b 4 weeks ago 187MB
nginx latest 92b11f67642b 4 weeks ago 187MB
4. 向私有仓库推送镜像和拉取镜像
向私有仓库推送镜像:
(base) ➜ ~ docker push 192.168.64.5:31500/nginx:latest
删除本地测试镜像:
(base) ➜ ~ docker image rm 192.168.64.5:31500/nginx:latest
(base) ➜ ~ docker image rm nginx:latest
(base) ➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
从私有仓库拉取镜像:
(base) ➜ ~ docker pull 192.168.64.5:31500/nginx:latest
(base) ➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.64.5:31500/nginx latest 92b11f67642b 4 weeks ago 187MB
测试成功。
(三) 使用Dockerfile打包镜像
1. 打包镜像方法
在制作镜像时,首先准备好需要复制到镜像中的文件,包括程序文件和配置文件。再通过Dockerfile中的指令进行文件复制、程序运行和启动配置。
Dockefile的主体包括如下几个部分:
FROM rackspacedot/python37:latest #指明基础镜像包
COPY xxx /xxx/ #将Dockerfile同目录下的xxx文件或目录拷贝到生成镜像中的/xxx/目录下
RUN xxx #这里相当于在bash里执行指令,每条指令用一个RUN来标记,完成service文件的chmod修改等
MAINTAINER name email #留下你的大名和邮箱
EXPOSE 10000 #暴露端口号
ENTRYPOINT xxx #这个是启动执行命令,只能有一条
CMD xxx #这个也是启动执行命令(或给ENTRYPOINT传递默认参数),若启动容器时附加了参数,则CMD中的命令会被忽略
2. 实操
Dockerfile文件:
vue3项目打包后生成dist目录,在与dist平级的目录下新建文件Dockerfile,编辑内容:
FROM 192.168.64.5:31500/nginx:latest
COPY dist/ /usr/share/nginx/html/
其中,我们基于上一步推送到私有仓库的nginx镜像为基础,将dist目录下的内容拷贝到nginx镜像的web目录下。
打包镜像:
(base) ➜ ~ docker build -t 192.168.64.5:31500/frontend:1.0 .
推送到集群中的私有仓库:
(base) ➜ ~ docker push 192.168.64.5:31500/frontend:1.0
(四) 启动服务
编写yaml文件frontend.yaml:
---
apiVersion: apps/v1
kind: Deployment
metadata:name: vue3-deployment
spec:replicas: 2selector:matchLabels:app: vue3template:metadata:labels:app: vue3spec:containers:- name: vue3image: 192.168.64.5:31500/frontend:1.0
---
# 通过service暴露端口:
apiVersion: v1
kind: Service
metadata:name: vue3namespace: defaultlabels:app: vue3
spec:ports:- port: 80targetPort: 80nodePort: 30080protocol: TCPselector: app: vue3type: NodePort
该文件指定k8s使用刚才上传的镜像生成容器,并通过Service将pod的服务通过30080端口开放给集群外使用。
启动服务:
(base) ➜ ~ kubectl create -f frontend.yaml
(base) ➜ .kube kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 7h6m
vue3 NodePort 10.43.207.91 <none> 80:30080/TCP 17m
(base) ➜ ~ kubectl get pod
NAME READY STATUS RESTARTS AGE
vue3-deployment-86469c7667-npxm2 1/1 Running 0 25s
vue3-deployment-86469c7667-5t69q 1/1 Running 0 25s
yaml文件中为服务配置了两个pod,如上所示,可看到服务的确被部署到两个pod上。生产环境下有多个worker节点时,可为服务配置更多的pod,这些pod会被调度到不同物理节点上,可起到负载均衡的作用。
浏览器访问集群任一node的30080端口(192.168.64.5:30080或192.168.64.7:30080),可看到本地应用已经成功部署到k8s集群。

相关文章:
云原生部署手册02:将本地应用部署至k8s集群
(一)部署集群镜像仓库 1. 集群配置 首先看一下集群配置: (base) ➜ ~ multipass ls Name State IPv4 Image master Running 192.168.64.5 Ubuntu 22.04 LTS1…...
AJAX——JSON
目录 一、JSON概述 二、JSON对象语法 三、JSON序列化方法 四、JSON与XML比较 五、Java对象与Json对象的转换 六、Js解析服务器发送过来的JSON字符串 七、$.getJSON() 一、JSON概述 JSON简介:JSON的全称为JavaScript Object Nation(JavaScript 对象表示语法),…...
Nexus3 Docker 私有仓库
Nexus3 Docker 私有仓库 安装并部署 Nexus3 $ docker search nexus3$ docker pull sonatype/nexus3$ mkdir /home/tester/data/docker/nexus3/sonatype-work $ sudo chown -R 200 /home/tester/data/docker/nexus3/sonatype-work$ docker run -d --namenexus3 \ --restartalw…...
Element UI el-dialog自由拖动功能
1.创建drag .js文件 /*** 拖拽移动* param {elementObjct} bar 鼠标点击控制拖拽的元素* param {elementObjct} target 移动的元素* param {function} callback 移动后的回调*/ export function startDrag(bar, target, callback) {var params {top: 0,left: 0,currentX: …...
RPC浅析,加密数据解析
个人总结 其实就是HOOK注入wbsocket 链接创建服务端和客户端进行通信,直接调用js代码中的加密方法 将结果通过浏览器客户端传入服务端。一种比较好实用的一种技术 https://blog.csdn.net/qq_36759224/article/details/123082574 (搬运记录下ÿ…...
光速论文能用吗 #媒体#知识分享#学习方法
光速论文是一个非常有效的论文写作、查重降重工具,它的使用非常简单方便,而且功能强大,是每个写作者必备的利器。 首先,光速论文具有强大的查重降重功能,能够快速检测论文中的抄袭部分,帮助作者避免不必要的…...
智慧工地解决方案,智慧工地项目管理系统源码,支持大屏端、PC端、手机端、平板端
智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合,为工程项目管理提供先进技术手段,构建工地现场智能监控和控制体系,弥补传统方法在监管中的缺陷,最线实现项目对人、机、料、法、环的全…...
【前端寻宝之路】学习和使用label标签
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| 💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-2nm9oQQVtSL8hDS1 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…...
项目————网络聊天室
服务器 #include <myhead.h> typedef struct msg{char flag;char name[20];char cont[128]; }msg_t;typedef struct link{struct sockaddr_in cin;struct link* next; }link_t;void do_login(int sfd,msg_t msg,link_t *L,struct sockaddr_in cin){link_t* pL;if(sendto…...
【计算机网络】基本概念
基本概念 IP 地址端口号协议协议分层封装分用客户端服务器请求和响应两台主机之间的网络通信流程 IP 地址 概念:IP 地址主要是用于唯一标识网络主机、其他网络设备(如路由器)的网络地址。简单来说,IP地址用来唯一定位主机。格式&…...
Redis入门到实战-第七弹
Redis实战热身Sets篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的(采用BSD许可证),用作数据库、缓存、消息代理和流…...
图像处理学习笔记(一)
本文主要介绍,以供读者能够理解该技术的定义、原理、应用。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:ISP处理 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就…...
duckdb学习-1
DuckDB is a fast in-process analytical database DuckDB supports a feature-rich SQL dialect complemented with deep integrations into client APIs 在notebook中使用duckdb 安装 pip install duckdb 示例代码: #> pip install jupysql #> pip install duckdb-en…...
GEE高阶案例——Landsat/Sentinel/MODIS影像进行缨帽变换一行代码实现
本教程的主要目的是利用eemont中的tasseledCap()的函数进行缨帽变换实现。 在 eemont 中,可使用扩展到 ee.Image 和 ee.ImageCollection 对象的 tasseledCap 方法计算缨帽亮度、绿度和湿度组件。只需从支持的平台加载图像,然后使用 tasseledCap 添加分量带即可。 代码: !p…...
数独游戏(c++题解)
题目描述 给出一个的表格,部分格子已经填好数。请填完所有空白格子,使得表格每一行、每一列、每个的九宫格,都恰好填满这9个数字。 输入格式 9行9列的方阵状态,0代表空格。 输出格式 输出完成后的方阵状态,每一个…...
【开发方案】Android 应用双卡搜网功能
一、功能简介 需求:开机自动开始搜网并显示网络列表 那么就不能将相关类做成单例,不能将subId、phoneId等卡相关的属性作为UI、服务的全局变量。 二、流程设计 NetworkSelectReceiver:监听开机广播,触发拉起搜网服务 NetworkOperatorService:搜网服务,完成后调起用户…...
图论基础|深度优先dfs、广度优先bfs
dfs 与 bfs 区别 提到深度优先搜索(dfs),就不得不说和广度优先搜索(bfs)有什么区别 先来了解dfs的过程,很多录友可能对dfs(深度优先搜索),bfs(广度优先搜索…...
Python从入门到精通秘籍十七
一、Python的构造方法 在Python中,构造方法是一个特殊的方法,用于创建和初始化类的实例。构造方法的名称是__init__(),它在创建对象时自动调用。 下面是一个示例代码来详细解释Python的构造方法: class Person:def __init__(se…...
Java——抽象类和接口
目录 1.抽象类 1.概念: 2.语法 3.特性 2.接口 1.概念 2.语法 3.特性 1.抽象类 1.概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的…...
React—— props校验(非typescript校验类型)
非typescript环境下,当我们在封装组件的时候,接受props时传入的内容,需要做类型检测,那我们可以用props校验进行类型的检查。 props校验允许在创建组件的时候,就约定props的格式、类型等 实现步骤: 导入 …...
Windows 11系统优化工具:让你的电脑更高效、更私密
Windows 11系统优化工具:让你的电脑更高效、更私密 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and custo…...
如何用obs-multi-rtmp解决多平台直播重复编码问题?超高效方案分享
如何用obs-multi-rtmp解决多平台直播重复编码问题?超高效方案分享 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp obs-multi-rtmp是一款开源的OBS插件,通过单次编…...
Pixel Language Portal 助力Java面试:高频八股文深度解析与延伸
Pixel Language Portal 助力Java面试:高频八股文深度解析与延伸 1. Java面试准备的痛点与解决方案 对于Java开发者来说,面试准备往往陷入"死记硬背"的困境。传统的八股文学习方式存在三大核心问题:答案过于标准化缺乏深度理解、知…...
手把手教你用树莓派GPIO点个灯:从Python到C语言三种方法全搞定
树莓派GPIO实战:Python与C语言点亮LED的三种经典方案 第一次拿到树莓派时,最让人兴奋的莫过于那些整齐排列的GPIO引脚——它们就像通往物理世界的大门。而点亮一个LED,无疑是推开这扇门最经典的"Hello World"。但你知道吗ÿ…...
C#的LINQ查询表达式编译原理与性能优化
C#的LINQ查询表达式编译原理与性能优化 LINQ(Language Integrated Query)是C#中强大的数据查询工具,它将查询能力直接集成到语言中,使开发者能够以声明式方式操作数据。理解其编译原理与性能优化技巧,对于编写高效代码…...
模型轻量化探索:尝试量化cv_unet_image-colorization以适应边缘设备
模型轻量化探索:尝试量化cv_unet_image-colorization以适应边缘设备 最近在做一个智能相册的项目,需要把老照片自动上色。用上色模型效果不错,但一放到手机或者树莓派这类小设备上,问题就来了:模型太大,跑…...
Phi-3-vision-128k-instruct 生成效果鉴赏:复杂信息图表的自动化摘要
Phi-3-vision-128k-instruct 生成效果鉴赏:复杂信息图表的自动化摘要 1. 当AI遇见数据图表:一场视觉理解的革命 想象一下这样的场景:你面前摊开一份50页的上市公司年报,里面充斥着各种复杂的柱状图、折线图和饼图。作为分析师&a…...
Multi-Agent在金融投研中的应用:从信息整合到报告生成实战
Multi-Agent在金融投研中的应用:从信息整合到报告生成实战 摘要/引言 开门见山 各位金融界的朋友、AI领域的探索者们,不知道你们有没有注意到一个现象:2023年以来,全球顶尖资管机构(如贝莱德、桥水、摩根大通)的投研团队中,“AI Agent协作小组”的曝光率突然暴涨——…...
LinkFinder收集接口
LinkFinder可以自动化收集站点的api接口先用linkfinder爬去该js文件中所有的接口,再用正则表达式进行数据清洗,得到我们想要的api接口python3 linkfinder.py -i "https://example.com/static/js/example.js" -o cli > api.txt接着我们需要去…...
Riffusion API完全解析:构建自定义音乐生成应用
Riffusion API完全解析:构建自定义音乐生成应用 【免费下载链接】riffusion-app Stable diffusion for real-time music generation (web app) 项目地址: https://gitcode.com/gh_mirrors/ri/riffusion-app Riffusion API是一项革命性的音乐生成技术…...
