ubuntu 22.04 minikube 部署 应用测试

准备环境

参考:https://blog.csdn.net/qq_52397471/article/details/133979727?spm=1001.2014.3001.5501

编写 Golang 应用

代码

package mainimport ("fmt""log""net/http"
)func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "Hello World!")})log.Fatalln(http.ListenAndServe(":80", nil))
}

编译

go mod init

go mod tidy

GOOS=linux GOARCH=386 go build -ldflags '-s -w' -o webserver

部署测试

1. 打包 Docker 镜像

# docker build -t leo/webserver .
# 为了减小体积,使用scratch,实际使用golang官方镜像
FROM scratchCOPY ./webserver /webserverCMD ["/webserver"]

2. 构建镜像

# 1.本机制作go镜像
docker build -t yuluo/webserver .    (名称必须是 Dockerfile)
docker image save yuluo/webserver > webserver.tar
# 2.上传到minikube虚拟机中docker镜像库
minikube image load webserver.tar

3. 部署 Pod

1. 编写 Pod yaml 资源文件
apiVersion: v1
kind: Pod
metadata:name: webserverlabels:name: webserver
spec:containers:- name: webserverimage: yuluo/webserverimagePullPolicy: Neverresources:limits:memory: "128Mi"cpu: "500m"ports:- containerPort: 80hostPort: 8080

该字段设置imagePullPolicy: Never使用本地的镜像,否则会从镜像仓库拉取最新导致失败Error: ErrImagePull

同时 因为设置 hostPort,可以在 minikube node 上访问 minikubeIp:8080

2. 部署
kubectl apply -f webserver-pod.yaml# 出现如下表明部署成功
root@yuluo-ubuntu:/home/yuluo/app/test-deploy-app# kubectl get pods -A | grep webserver
NAMESPACE     NAME                               READY   STATUS    RESTARTS       AGE
default       webserver                          1/1     Running   0              7s
3. 查看状态
# 查看 pod 状态
kubectl get pods webserver
kubectl describe pods webserver# 测试 pod 访问
kubectl get pods webserver
root@yuluo-ubuntu:/home/yuluo/app/test-deploy-app# kubectl describe pod webserver
Name:             webserver
Namespace:        default
Priority:         0
Service Account:  default
Node:             minikube/192.168.49.2						# 节点 ip
Start Time:       Sat, 21 Oct 2023 04:22:54 +0000
Labels:           name=webserver
Annotations:      <none>
Status:           Running
IP:               10.244.0.10								# pod ip
4. 访问验证
# 使用 minikube ssh 到此 节点 上访问 pod 验证
`minikube ssh --node minikube``curl 10.244.0.10`# 最终结果如下
```shell
docker@minikube:~$ curl 10.244.0.10
Hello World!

4. 创建 service 暴露服务

1. 编写 yaml 文件
apiVersion: v1
kind: Service
metadata:name: webserver-svc
spec:selector:name: webserverports:- port: 80targetPort: 80protocol: TCP

上面的示例定义了一个ClusterIP Service。到 ClusterIP 上端口 80 的流量将转发到你的Pod 上的端口 8080 (targetPort配置项),携带 name: webserver 标签的 Pod 将被添加到 Service中作为作为服务的可用端点。

2. 查看 svc
# kubectl describe service  webserver-svc 通过此命令查看 service 和 pod 的关系 
root@yuluo-ubuntu:/home/yuluo/app/test-deploy-app# kubectl describe service  webserver-svc
Name:              webserver-svc
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          name=webserver
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.103.70.226
IPs:               10.103.70.226
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.0.10:80
Session Affinity:  None
Events:            <none>
3. 访问测试
kubectl get svc
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP   27h
webserver-svc   ClusterIP   10.103.70.226   <none>        80/TCP    76sminikube ssh --node minikube# 显示如下
docker@minikube:~$ curl 10.244.0.10
Hello World!

5. 创建 Ingress 暴露资源

1. 环境准备

为了在 minikube 中使用 nginx-ingress ,必须执行以下命令启用
minikube addons enable ingress

Note: 可能创建失败,因为 镜像 拉取失败,此时需要设置代理。
参考:https://blog.csdn.net/qq_52397471/article/details/133979528?spm=1001.2014.3001.5501
设置完成之后,重启 MiniKube 重试。

kubectl get pods -A 查看 ingress-nginx 是否启动成功,如没有 使用以下命令重试
kubectl get pod podName -n nameSpace -o yaml | kubectl replace --force - f -

如下所示即为成功状态:

root@yuluo-ubuntu:/home/yuluo/app/test-deploy-app# kubectl get pods -n ingress-nginx | grep ingress-nginx-controller
ingress-nginx-controller-7799c6795f-29dnh   1/1     Running     0          21h

使用如下命名查看创建 pod 信息

kubectl describe pods podName -n nameSpace

1. 编写 yaml 文件
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: webserver-ingress
spec:ingressClassName: nginx-ingressrules:- host: "webserver.com"http:paths:- path: "/"pathType: Prefixbackend:service:name: webserver-svcport:number: 80

Ingress 实际上是与Service完全不同的资源,算是Service上面的一层代理,通常在 Service前使用Ingress来提供HTTP路由配置。它让我们可以设置外部 URL、基于域名的虚拟主机、SSL 和负载均衡。此处使用nginx-ingress作为控制器,它使用NGINX服务器作为反向代理来把流量路由给后面的Service。

2. 查看状态信息
# 通过 kubectl describe ingress webserver-ingress 查看 service 和 ingress 的关系
root@yuluo-ubuntu:/home/yuluo/app/test-deploy-app# kubectl describe ingress webserver-ingress
Name:             webserver-ingress
Labels:           <none>
Namespace:        default
Address:          
Ingress Class:    nginx-ingress
Default backend:  <default>
Rules:Host           Path  Backends----           ----  --------webserver.com  /   webserver-svc:80 (10.244.0.10:80)
Annotations:     <none>
Events:          <none>
3. 访问测试
# 设置 hosts 文件创建映射关系
vim /etc/hosts<minikube ip> webserver.com# 测试
curl webserver.com:8080root@yuluo-ubuntu:/home/yuluo/app/test-deploy-app# curl webserver.com:8080
Hello World!

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

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

相关文章

laravel框架介绍(二)

方法1.windows 可以直接下载 Composer-Setup.exe 方法2.配置php.exe目录环境变量,下载 composer.phar和php.exe平级目录, 新建 composer.bat 文件编辑以下内容 php "%~dp0composer.phar" %* 运行composer.bat ,出现版本号为成功 执行 composer self-update 以保持 Co…

Power BI 傻瓜入门 1. 数据分析术语:Power BI风格

本章内容包括&#xff1a; 了解Power BI可以处理的不同类型的数据了解您的商业智能工具选项熟悉Power BI术语 数据无处不在。从你醒来的那一刻到你睡觉的时候&#xff0c;某个系统会代表你收集数据。即使在你睡觉的时候&#xff0c;也会产生与你生活的某些方面相关的数据。如…

react封装一个简单的upload组件(待完善)

目录 react封装一个简单的upload组件component / uploadImg / uploadImg.jsx使用效果 react封装一个简单的upload组件 component / uploadImg / uploadImg.jsx import React, { useState } from react; import { LoadingOutlined, PlusOutlined } from ant-design/icons; imp…

强化学习问题(六)--- 无法安装gym 0.21.0

1.问题 新版gym0.26.2&#xff0c;无法执行以下代码 from gym.envs.toy_text import discrete 故将gym0.26.2改成gym0.21.0&#xff0c;但遇到以下错误 Preparing metadata (setup.py) ... errorerror: subprocess-exited-with-error python setup.py egg_info did not run s…

基于SpringBoot的家具商城管理系统

基于SpringBoot的家具商城管理系统的设计与实现【文末源码】 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 家具详情 通知公告 登录界面 管理员界面 摘要 一段关于基于…

Vue3踩坑指南

vue.config.ts不起作用 关于项目 项目使用的还是vue-cli搭建的&#xff0c;底层还是webpack&#xff0c;没有使用新的vite搭建。 踩坑1&#xff1a;vue.config.ts不起作用 我本着既然是vue3 ts的项目&#xff0c;那么为了规范&#xff0c;项目中所有的js文件都得替换成ts文…

浅析人脸活体检测技术的功能及几种分类

在日常生活工作中&#xff0c;出现了人脸验证、人脸支付、人脸乘梯、人脸门禁等等常见的应用场景。这说明人脸识别技术已经在门禁安防、金融行业、教育医疗等领域被广泛地应用&#xff0c;人脸识别技术的高速发展与应用同时也出现不少质疑。其中之一就是人脸识别很容易被照片、…

03、Python 字符串高级用法

目录 Python 字符串高级用法转义字符字符串格式化序列相关的方法大小写相关的方法dir 可以查看某个类的所有方法删除空白查找、替换相关方法 Python 字符串高级用法 转义字符 字符串格式化 序列相关的方法 字符串本质就是由多个字符组成&#xff0c;字符串的本质就是不可变序…

为什么spring默认采用单例bean

概 述 熟悉 Spring开发的朋友都知道 Spring 提供了 5种 scope&#xff0c;分别是&#xff1a; singleton: 单例模式&#xff0c;当spring创建applicationContext容器的时候&#xff0c;spring会欲初始化所有的该作用域实例&#xff0c;加上lazy-init就可以避免预处理&#xf…

antd组件onChange回调,需要立即执行改变value与防抖节省接口开销。

文章目录 普通使用使用防抖节省开销页面功能复杂需要value受控回调需要部分代码立即执行&#xff0c;部分代码防抖延时执行useRefuseCallback 小结 普通使用 当我们使用Antd的input或者select进行搜索时&#xff0c;onChange回调会即时执行。 import { Input } from "an…

C语言之通讯录的实现篇优化版

目录 动态内存管理 通讯录声明 静态版本 动态版本 ​初始化通讯录 静态版本 动态版本 Add增加通讯录 静态版本 动态版本 Checkcapacity增容 DestroyContact释放动态空间 文件操作 SaveContact保存信息到文件中 初始化通讯录 旧版本 文件版本 LoadContact加载…

PyTorch JIT和TorchScript,一个API提升推理性能50%

PyTorch支持两种模式&#xff1a;eager模式和script模式。eager模式主要用于模型的编写、训练和调试&#xff0c;script模式主要是针对部署的&#xff0c;其包含PytorchJIT和TorchScript&#xff08;一种在 PyTorch 中执行高效的序列化代码格式&#xff09;。 script模式使用t…

Openssl数据安全传输平台008:业务数据分析+工厂方法

文章目录 UML图1.1 客户端1.2 服务器端 UML图 1.1 客户端 // 准备要发送的数据 struct RequestMsg {//1 密钥协商 //2 密钥校验; // 3 密钥注销int cmdType; // 报文类型string clientId; // 客户端编号string serverId; // 服务器端编号string sign;string data; };1.2 服务器…

Unity之ShaderGraph如何实现UV抖动

前言 今天我们通过噪波图来实现一个UV抖动的效果。 如下图所示&#xff1a; 关键节点 Time&#xff1a;提供对着色器中各种时间参数的访问 UV&#xff1a;提供对网格顶点或片段的UV坐标的访问。可以使用通道下拉参数选择输出值的坐标通道。 SimpleNoise&#xff1a;根据…

GEE图表——利用chirps降水数据进行某个区域累计降水量的图表绘制

简介 以下是在GEE云平台利用chirps降水数据进行某个区域累计降水量的图表绘制的具体步骤: 1. 打开GEE云平台的网站(https://code.earthengine.google.com)并登录账户。 2. 在左上角的搜索栏中输入“Chirps”,点击回车以搜索Chirps降水数据集。 3. 点击搜索结果中的Chir…

Windows Server 2019 搭建FTP站点

目录 1.添加IIS及FTP服务角色 2.创建FTP账户&#xff08;用户名和密码&#xff09;和组 3.设置共享文件夹的权限 4.添加及设置FTP站点 5.配置FTP防火墙支持 6.配置安全组策略 7.客户端测试 踩过的坑说明&#xff1a; 1.添加IIS及FTP服务角色 a.选择【开始】→【服务器…

电流监测芯片SGM8199A2应用电路设计

SGM8199是一系列具有电压输出功能的双向电流监测芯片&#xff0c;用于监测共模电压范围内分流电阻上的压降&#xff0c;而不受电源电压的影响。该器件具有-0.1V至26V的宽共模电压范围输入。低偏移使得在监测电流时允许分流器上的满量程最大压降为10mV。SGM8199系列提供三种固定…

关于vant 的tabbar功能

1、想要实现tabbar页面A&#xff0c;其他的页面B&#xff08;非tabbar页面&#xff09;。 从A页面进入B页面&#xff0c;底部的active选中效果应该被取消掉&#xff0c;但是还是选中A。 按照官网的说法有两个方法 一、根据path路径 二、自定义的model 但是&#xff01;但是…

贪吃蛇项目实践

游戏背景&#xff1a; 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯⽅块&#xff0c;扫雷等游戏位列经典游戏的⾏列。 实现基本的功能&#xff1a; 贪吃蛇地图绘制 蛇吃⻝物的功能 &#xff08;上、下、左、右⽅向键控制蛇的动作&#xff09; 蛇撞墙死亡 蛇撞⾃⾝死亡 计…

rust学习——栈、堆、所有权

文章目录 栈、堆、所有权栈(Stack)与堆(Heap)栈堆性能区别所有权与堆栈 所有权原则变量作用域所有权与函数返回值与作用域 栈、堆、所有权 栈(Stack)与堆(Heap) 栈和堆是编程语言最核心的数据结构&#xff0c;但是在很多语言中&#xff0c;你并不需要深入了解栈与堆。 但对于…