将Go语言开发的Web程序部署到K8S

搭建K8S基础环境

如果已经有K8S环境的同学可以跳过,如果没有,推荐你看看我的《Ubuntu22加Minikue搭建K8S环境》,课程目录如下:
在这里插入图片描述

Ubuntu22安装Vscode

下载:https://code.visualstudio.com/Download
在这里插入图片描述

安装命令:

sudo dpkg -i code_1.85.1-1702462158_amd64.deb

Ubuntu22搭建Golang开发环境

下载:https://studygolang.com/dl

在这里插入图片描述
将其上传到Downloads目录下。
解压:

tar -xzvf go1.21.5.linux-amd64.tar.gz

将其移动到特定目录:

mv go /usr/local/go1.21

配置环境变量:

vim ~/.bashrc# 添加如下配置
export GOROOT=/usr/local/go1.21
export GOPATH=/home/zhangdapeng/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
export GOPROXY=https://goproxy.io,direct

激活环境变量并测试:

source ~/.bashrc
go version

Vscode配置Golang环境

第一步:安装Go插件
在这里插入图片描述

第二步:安装Golang依赖

go install golang.org/x/tools/cmd/guru@latest
go install golang.org/x/tools/cmd/gorename@latest
go install golang.org/x/tools/cmd/fiximports@latest
go install golang.org/x/tools/cmd/gopls@latest
go install golang.org/x/tools/cmd/godex@latest

编写第一个Go程序

第一步:创建项目目录

mkdir -p ~/zdpgo/zdpgo_k8s

第二步:创建mod

cd ~/zdpgo/zdpgo_k8s
go mod init zdpgo_k8s

第三步:使用vscode打开目录

code .

第四步:创建main.go

package mainimport "fmt"func main(){fmt.Println("你好,张大鹏")
}

运行Go程序:

go run main.go

编写Golang HTTP应用

main.go

package mainimport ("fmt""log""net/http"
)func main() {http.HandleFunc("/", handleIndex)log.Fatal(http.ListenAndServe(":18888", nil))
}func handleIndex(writer http.ResponseWriter, request *http.Request) {fmt.Fprintln(writer, "你好,张大鹏")
}

运行:

go run main.go

浏览器访问:http://localhost:18888/

使用Docker部署Web应用

创建Dockerfile

FROM golang:1.21-alpine AS build# 第一次构建容器
WORKDIR /src/
COPY main.go go.* /src/
RUN export GOPROXY=https://goproxy.io && CGO_ENABLED=0 go build -o /bin/demo# 第二次构建容器
FROM scratch
COPY --from=build /bin/demo /bin/demo
EXPOSE 18888
ENTRYPOINT ["/bin/demo"]

如果已经存在镜像,删除原来的镜像,否则可以跳过:

docker rmi myhello

构建镜像:

docker build -t myhello .

运行容器:

docker run --name myhello -p 9998:18888 -d myhello

浏览器访问:http://localhost:9998

使用K8S部署Docker镜像

登录Docker Hub

先注册一个Docker Hub的账号 ,然后执行下面的命令登录:

docker login

命名和推送镜像

# 给镜像命名
docker image tag myhello zhangdapeng520/myhello# 将镜像推送到Docker Hub
docker image push zhangdapeng520/myhello

K8S部署镜像

如果之前的容器没有删除,则先删除之前的容器:

docker stop myhello
docker rm myhello

使用K8S部署myhello:

# 从远程拉取镜像并部署
kubectl run demo --image=zhangdapeng520/myhello --port 18888 --labels app=demo# 部署本地镜像 imagePullPolicy: Never
kubectl run demo --image=zhangdapeng520/myhello --image-pull-policy=IfNotPresent --port 18888 --labels app=demo

查看K8S部署的容器状态

部署以后,通过以下命令,可以查看我们部署的容器的状态:

kubectl get pods --selector app=demo

启用K8S的端口转发

此时,我们访问 http://localhost:18888/ 是没有办法成功的。因为我们在使用Docker进行部署的时候,也需要做端口转发才能够正常访问,部署到K8S的时候,也需要进行端口转发才能够正常访问。

通过以下命令,可以实现K8S的端口转发:

kubectl port-forward pod/demo 9998:18888

这里的 pod/demo 是我们K8S部署的时候,指定的run demo。这里的9998:18888就和Docker的映射方式类似了,将宿主机的9998端口映射到K8S的18888端口。

端口转发以后,我们访问 http://localhost:9998/ 就可以成功了。

删除容器

使用以下命令,可以删除部署到K8S的容器:

kubectl delete pod demo

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

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

相关文章

【Cisco Packet Tracer】综合实践题-校园网仿真

本题的目的: 理论与实践结合:Cisco Packet Tracer是一个网络模拟软件,通过模拟真实的网络环境,可以让学生在实际操作中加深对理论知识的理解和掌握。问题解决能力:综合实验题可以考察学生分析和解决问题的能力。在实验…

新版IDEA中Git的使用(二)

说明:前面介绍了在新版IDEA中Git的基本操作,本文介绍关于分支合并、拉取等操作; 例如,现在有一个项目,分支如下: main:主分支; dev:开发分支; test&#x…

第11章 GUI Page435 降低画面闪烁感

运行效果: 画一个圆的过程中出现 如果把窗口最小化,再恢复,则又恢复成了一个圆 关键代码: 进入wxSmith界面,为ScrolledWindow1添加一个EVT_ERASE_BACKGROUND响应事件 这是一个空处理函数:什么也不做&…

读算法霸权笔记03_操控与恐吓

1. 市场失灵 1.1. 探索市场失灵现象就像寻宝游戏,很有意思 1.2. 建立一种算法来预测这个循环出现差错——多找回的两枚硬币——的可能性并对此下注 1.2.1. 盈利模式消失了,或者市场中的其他人也了解了这个模式,先行者优势消失 1.3. 在很多…

LLM大语言模型(三):使用ChatGLM3-6B的函数调用功能前先学会Python的装饰器

目录 ChatGLM3-6B的函数调用模式示例 本地启动ChatGLM3-6B工具模式 如何在ChatGLM3-6B里新增一个自定义函数呢? get_weather基于Python的装饰器实现 函数注解register_tool 现在我们来自定义一个kuakuawo()函数 ChatGLM3-6B的函数调用模式示例 ChatGLM3-6B目前…

OAuth 2.0 入门指南:掌握授权码模式

一、授权码模式 (1)spring-security-oauth2 从2.4.x版本开始,EnableAuthorizationServer注解就弃用过时了 (2)当前演示Demo版本:springboot的1.5.x版本与spring-security-oauth2的2.3.8.RELEASE整合&#…

CASA认证记录

前一阵我们的应用在申请Google Fit API时,被要求进行安全性评估。 收到的通知邮件部分内容如下: You are required to complete a TIER 2 CASA security assessment for your application by the following date: xxx. This assessment is required annually; to le…

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力 代码CrissCrossAttention注意力ECAAttention通道注意力EMAU期望最大化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset资源清单文件编写技巧2.1、查看定义Statefulset资源需要的字段2.2、查看statefulset.spec字段如何定义2.3、查看statefulset的spec.template字段如何定义 三、Statefulset使用案例:部署web站点3.1、编写一个Statefulset资…

LeetCode——1954. 收集足够苹果的最小花园周长

通过万岁!!! 题目:这个题目比较复杂,就是给你一个坐标轴,然后让你以0,0为中心选择一个边长为整数的正方形,使得正方形中所有点坐标的绝对值之和要大于给定的neededApples。但是我们需要输出的是…

OpenHarmony之内核层解析~

OpenHarmony简介 技术架构 OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件…

C++ 比 C语言增加的新特性 2

1.C新增了带默认值参数的函数 1.1 格式 格式:返回值 函数名(参数1初始值1,..........){} 例如:void function(int a10){} 调用:不需要更改参数的值:function&#x…