首页 > 其他分享 >golang项目用k8s部署的流程

golang项目用k8s部署的流程

时间:2024-03-07 21:23:26浏览次数:23  
标签:K8S 流程 golang 镜像 Pod k8s my app

摘要:本文将详细介绍如何使用Kubernetes(K8S)部署一套Golang微服务项目,并给出了完整的实施步骤和相应代码示例,旨在指导刚入行的开发者完成这一任务。

一、整体流程
下面是使用K8S部署Golang微服务项目的整体流程,我们将在接下来的内容中详细介绍每一步骤。

1. 准备容器镜像
2. 创建K8S集群
3. 部署Pod、Deployment和Service
4. 水平扩展和负载均衡
5. 监控和日志
6. 整体流程概览

二、具体步骤及代码示例

1. 准备容器镜像
在开始部署之前,我们需要将Golang微服务项目编译为容器镜像。

1.1 编写Dockerfile
首先,在项目的根目录下创建一个名为Dockerfile的文件,并在其中编写以下内容:

```Dockerfile
FROM golang:1.16 AS build
ENV CGO_ENABLED=0
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o app

FROM scratch
COPY --from=build /app/app /app
ENTRYPOINT ["/app"]
```

以上Dockerfile使用了多阶段构建的方式,首先在golang:1.16镜像中编译项目,然后将编译结果复制到最终的scratch镜像中。

1.2 构建容器镜像
在终端中执行以下命令,构建容器镜像:

```bash
docker build -t my-golang-app:latest .
```

2. 创建K8S集群
在部署之前,需要先创建一个K8S集群。

2.1 安装K8S集群管理工具
推荐使用Minikube来快速搭建本地K8S集群。可以在终端中执行以下命令来安装Minikube:

```bash
brew install minikube
```

2.2 启动Minikube集群
执行以下命令启动Minikube集群:

```bash
minikube start
```

3. 部署Pod、Deployment和Service
在K8S中,我们使用Pod来承载容器,Deployment来管理Pod的生命周期,Service来对外暴露微服务。

3.1 创建Deployment
创建名为my-golang-app的Deployment,并指定容器镜像为我们之前创建的my-golang-app:latest。执行以下命令:

```bash
kubectl create deployment my-golang-app --image=my-golang-app:latest --port=8080
```

3.2 创建Service
创建名为my-golang-app的Service,并将请求转发到Pod的8080端口。执行以下命令:

```bash
kubectl expose deployment my-golang-app --type=LoadBalancer --port=8080
```

4. 水平扩展和负载均衡
K8S支持水平扩展Pod和实现负载均衡。

4.1 水平扩展Pod
执行以下命令,将my-golang-app的Pod副本数扩展到3个:

```bash
kubectl scale deployment my-golang-app --replicas=3
```

4.2 验证负载均衡
执行以下命令,获取my-golang-app的Service的IP地址:

```bash
minikube service my-golang-app --url
```

在浏览器中访问该地址,可以看到请求被均衡地转发到不同的Pod上。

5. 监控和日志
K8S提供了多种监控和日志解决方案,可以根据实际需求选择适合的工具。

5.1 监控
推荐使用Prometheus+Grafana的监控方案。可以部署Prometheus和Grafana来监控K8S集群和微服务应用。

5.2 日志
推荐使用EFK(Elasticsearch+Fluentd+Kibana)的日志方案。可以将应用的日志发送到Elasticsearch,然后使用Kibana来查看和分析日志。

6. 整体流程概览
通过上述步骤,我们成功地使用K8S部署了一个Golang微服务项目。我们完成了如下任务:

- 准备容器镜像
- 创建K8S集群
- 部署Pod、Deployment和Service
- 实现水平扩展和负载均衡
- 实施监控和日志


总结:通过本文的指导,我们详细介绍了使用K8S部署Golang微服务项目的完整流程。通过准备容器镜像、创建K8S集群、部署Pod、Deployment和Service、实现水平扩展和负载均衡以及实施监控和日志,我们成功地完成了这一任务。希望这篇文章对刚入行的开发者有所帮助,让他们更好地理解和应用K8S进行微服务部署。

标签:K8S,流程,golang,镜像,Pod,k8s,my,app
From: https://www.cnblogs.com/peteremperor/p/18059781

相关文章

  • 万字长文讲解Golang pprof 的使用
    往期好文推荐⭐️⭐️⭐️:#golangpprof监控系列(1)——gotrace统计原理与使用#golangpprof监控系列(2)——memory,block,mutex使用#golangpprof监控系列(3)——memory,block,mutex统计原理#golangpprof监控系列(4)——goroutinethread统计原理#golangpprof......
  • K8S的HPA原理
    在Kubernetes(简称K8s)中,HorizontalPodAutoscaler(HPA)是一种自动扩展Pod副本数量的机制,其原理是基于集群中运行的应用程序资源使用情况动态调整Pod副本的数量。 HPA的工作原理可以概括为以下几个步骤:监控指标:HPA通过与KubernetesMetricsAPI交互,持续监控指定目标对象(如De......
  • K8S - 配置资源管理
    配置资源管理ConfigMap资源(简称给cm)用于保存配置文件,环境变量等不需要加密的信息。它可以实现将配置信息与应用程序解耦    kubectlrunpod-demo--image=soscscs/myapp--port=80--dry-run=client-oyaml>pod-demo.yaml  kubectlcreatecmcm-de......
  • Golang 执行shell命令
    Golang执行shell命令参考:golang执行shell命令大全https://saucer-man.com/backend_development/571.html1.执行命令并获得输出结果CombinedOutput()  返回standardoutputandstandarderrorfuncmain(){cmd:=exec.Command("ls","-lah")out,err:=......
  • golang 时间比对时,time.Now()与time.Parse()的使用注意
    在11:28时执行以下代码nowTime:=time.Now()t1,err:=time.Parse("2006-01-0215:04","2024-03-0708:00:00")result:=nowTime.Before(t1)本以为result应该是false,结果竟然是true。  调试下看看两者的区别发现:time.Parse()是UTC时间,无时区信息,如:time.Time(2024-0......
  • 流程图制作工具和绘图软件Visio2019下载
    Visio2019专业版是微软公司推出的功能强大的专业流程绘制工具,旨在以直观的方式工作,轻松绘制流程图。它可以创建各种流程图、网络图、组织结构图、工程设计以及其他使用现代形状和模板的内容。主要特点:协作共赢:支持多人同时编辑Visio图表,并轻松合并更改。获取实际见解......
  • k8s集群安装nfs持久化存储
    k8s集群安装nfs-server服务下载并修改yamlmkdir-p/root/yaml/addons/nfscd/root/yaml/addons/nfswgethttps://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/nfs-provisioner/nfs-server.yaml修改yaml内容,添加namespace[root@ku......
  • [转]Golang atomic.CompareAndSwapInt64()实例讲解
     原文: http://www.manongjc.com/detail/30-anadyrrwgsoebxp.html-------------- 在Go语言中,原子包提供lower-level原子内存,这对实现同步算法很有帮助。Go语言中的CompareAndSwapInt64()函数用于对int64值执行比较和交换操作。此函数在原子包下定义。在这里,您需要导入“syn......
  • K8S-Pod控制器
    Pod控制器Pod控制器及其功用Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。pod控制器有多种类型1、ReplicaSet:代用户创建指定数量的pod副本,确保pod......
  • Golang使用Goroutine实现筛素数
    //Copyright2009TheGoAuthors.Allrightsreserved.//UseofthissourcecodeisgovernedbyaBSD-style//licensethatcanbefoundintheLICENSEfile.packagemainpackagemainimport"fmt"//Sendthesequence2,3,4,...tochannel&......