将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 main

import "fmt"

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

运行Go程序:

go run main.go

编写Golang HTTP应用

main.go

package main

import (
	"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

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-27 08:56:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-27 08:56:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-27 08:56:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-27 08:56:01       20 阅读

热门阅读

  1. AutoSAR(基础入门篇)3.1-Autosar中RTE的概述

    2023-12-27 08:56:01       35 阅读
  2. Pillow库画图用法记录python

    2023-12-27 08:56:01       39 阅读
  3. LeetCode453. Minimum Moves to Equal Array Elements

    2023-12-27 08:56:01       32 阅读
  4. C语言中的结构体和联合体:异同及应用

    2023-12-27 08:56:01       37 阅读
  5. Go语言入门:Go程序的基础结构

    2023-12-27 08:56:01       27 阅读
  6. C++入门【16-C++ 从函数返回数组】

    2023-12-27 08:56:01       33 阅读
  7. Ansible的变量

    2023-12-27 08:56:01       36 阅读
  8. 【EasyExcel】使用技巧

    2023-12-27 08:56:01       38 阅读
  9. Mybatis-Plus基础之Mapper的映射规则

    2023-12-27 08:56:01       30 阅读
  10. C++设计模式:单例模式(饿汉式、懒汉式)

    2023-12-27 08:56:01       40 阅读
  11. 【数据库】postgressql设置数据库执行超时时间

    2023-12-27 08:56:01       38 阅读
  12. 黑客常用端口利用总结

    2023-12-27 08:56:01       32 阅读