在K8S上部署使用NATS消息传递的Go应用程序

Kubernetes,NATS消息传递,部署Go应用程序,Docker容器化

在K8S上部署使用NATS消息传递的Go应用程序

前提条件

在开始之前,请确保您满足以下:

  • 已在计算机上安装Docker。

  • 已安装Minikube和kubectl以设置本地Kubernetes集群。

步骤1:编写部署YAML文件

首先,我们需要为Go应用程序和NATS消息传递系统定义部署YAML文件。让我们创建以下YAML文件:

app-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-go-img-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app-go
  template:
    metadata:
      labels:
        app: app-go
    spec:
      containers:
        - name: app-go-container
          image: app-go
          imagePullPolicy: Never
          ports:
            - containerPort: 8080

nats-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nats
spec:
  replicas: 1
  strategy: {}
  selector:
    matchLabels:
      app: nats
  template:
    metadata:
      labels:
        app: nats
    spec:
      containers:
        - name: nats
          image: nats:2.7.0-alpine
          ports:
            - containerPort: 4222
              targetPort: 4222

nats-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nats-service
spec:
  selector:
    app: nats
  ports:
    - name: client
      port: 4222
      targetPort: 4222
      protocol: TCP

步骤2:编写Go应用程序代码

接下来,我们需要编写Go应用程序的代码。创建一个名为`main.go`的文件,并添加以下代码:

package main
import (
"fmt"
"log"
"os"
"time"
"github.com/nats-io/nats.go"
)
func main() {
url := os.Getenv("NATS_URL")
if url == "" {
url = nats.DefaultURL
// url = "nats://nats-service.default.svc.cluster.local:4222"
// works fine in case of interpod communication
// another way is to use the service-url directly
url = "nats-service:4222"
}
nc, err := nats.Connect(url)
if err != nil {
log.Fatalln(err)
}
defer nc.Drain()
nc.Publish("greet.joe", []byte("hello"))
sub, _ := nc.SubscribeSync("greet.*")
msg, _ := sub.NextMsg(10 * time.Millisecond)
fmt.Println("subscribed after a publish...")
fmt.Printf("msg is nil? %v\n", msg == nil)
nc.Publish("greet.joe", []byte("hello"))
nc.Publish("greet.pam", []byte("hello"))
msg, _ = sub.NextMsg(10 * time.Millisecond)
fmt.Printf("msg data: %q on subject %q\n", string(msg.Data), msg.Subject)
msg, _ = sub.NextMsg(10 * time.Millisecond)
fmt.Printf("msg data: %q on subject %q\n", string(msg.Data), msg.Subject)
nc.Publish("greet.bob", []byte("hello"))
msg, _ = sub.NextMsg(10 * time.Millisecond)
fmt.Printf("msg data: %q on subject %q\n", string(msg.Data), msg.Subject)
}

该代码将连接到NATS消息传递系统,发布和订阅消息,并演示了基本功能。

步骤3:构建Docker镜像

现在,让我们构建Go应用程序的Docker镜像。我们将使用多阶段的Dockerfile来确保获得一个轻量且优化的镜像。创建一个名为`Dockerfile`的文件,并添加以下代码:

### 阶段1:构建Go二进制文件
FROM golang:1.17 AS builder
### 在容器内设置工作目录
WORKDIR /app
### 复制Go模块文件并下载依赖项
COPY go.mod go.sum ./
RUN go mod download
### 将应用程序源代码复制到容器中
COPY . .
### 构建Go应用程序
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
# 阶段2:创建最终镜像
FROM alpine:latest
# 在容器内设置工作目录
WORKDIR /app
# 从构建阶段复制Go二进制文件
COPY --from=builder /app/main .
# 暴露应用程序监听的端口
EXPOSE 8080
# 定义容器启动时运行应用程序的命令
CMD ["./main"]

在Mac上构建镜像,请执行以下命令:

docker buildx build --platform linux/amd64 -t app-go-container .

完成后,您的文件夹结构应如下所示:

- app-deployment.yaml
- nats-deployment.yaml
- nats-service.yaml
- main.go
- Dockerfile

步骤4:在Kubernetes上部署应用程序

有了我们准备好的Docker镜像,让我们使用Minikube在Kubernetes上部署应用程序。

首先,执行以下命令确保Minikube正在运行:

minikube start

接下来,将Docker镜像加载到Minikube的镜像存储库中:

minikube image load app-go-container

最后,应用部署和服务的YAML文件以在Kubernetes上创建所需的资源:

kubectl apply -f app-deployment.yaml
kubectl apply -f nats-deployment.yaml
kubectl apply -f nats-service.yaml

文章总结

本文介绍了如何在Kubernetes上部署使用NATS消息传递的Go应用程序。

我们涵盖了编写部署YAML文件、编写Go应用程序代码、构建Docker镜像以及使用Minikube在Kubernetes上部署应用程序的过程。

通过按照这些步骤,您可以轻松地在Kubernetes集群上部署使用NATS消息传递的Go应用程序,充分利用容器化和编排的强大功能。

请随意根据您的特定需求自定义配置并扩展本文介绍的概念。文章来源地址https://www.toymoban.com/diary/golang/663.html

到此这篇关于在K8S上部署使用NATS消息传递的Go应用程序的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/golang/663.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
如何高效优化Go中cipher.AEAD.Seal()的内存使用
上一篇 2024年01月03日 01:54
分享一篇站长圈子的干货揭秘,年入百万站长如何诞生
下一篇 2024年01月03日 12:07

相关文章

  • Python应用程序部署至K8s——循序渐进版

    (1)Pod处于一直Pending状态 解决方法参考:0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn‘t-CSDN博客 (2)Pod处于CrashLoopBackOff状态 原因:python不能够常驻,只能运行一次,且是后台运行情况,则会出错。 解决方法:将程序设置成能够常驻的,并且

    2024年03月22日
    浏览(47)
  • 【Go】K8s 管理系统项目[Jenkins Pipeline K8s环境–应用部署]

    考虑到实际工作中前后端可能是不同的同学完成,一般Api部分完成后改动会比较小,web部分改动会比较频繁.于是将api和web分了2个pipeline实现 docker目录存放镜像构建相关文件 k8s-plantform-api 存放api部分代码 Jenkinsfile用作pipeline配置 yaml用作生成k8s下k8s-plantform-api相关资源 1.1.1 docker目

    2023年04月08日
    浏览(21)
  • 阿里云K8S部署Go+Vue项目

            Kubernetes是一个可以移植、可扩展的开源平台,使用声明式的配置并依据配置信息自动地执行容器化应用程序的管理。在所有的容器编排工具中(类似的还有 docker swarm / mesos等),Kubernetes的生态系统更大、增长更快,有更多的支持、服务和工具可供用户选择。 优势

    2024年01月16日
    浏览(23)
  • 将Go语言开发的Web程序部署到K8S

    如果已经有K8S环境的同学可以跳过,如果没有,推荐你看看我的《Ubuntu22加Minikue搭建K8S环境》,课程目录如下: 下载:https://code.visualstudio.com/Download 安装命令: 下载:https://studygolang.com/dl 将其上传到Downloads目录下。 解压: 将其移动到特定目录: 配置环境变量: 激活环境变

    2024年02月03日
    浏览(23)
  • 使用kubekey部署k8s集群和kubesphere、在已有k8s集群上部署kubesphere

    环境: centos 7.6、k8s 1.22.17、kubesphere v3.3.0 本篇以kubesphere v3.3.0版本讲解。 kubesphere 愿景是打造一个以 kubernetes 为内核的云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一

    2024年02月04日
    浏览(32)
  • 【k8s完整实战教程4】使用kubesphere部署项目到k8s

    系列文章:这个系列已完结,如对您有帮助,求点赞收藏评论。 读者寄语: 再小的帆,也能远航! 【k8s完整实战教程0】前言 【k8s完整实战教程1】源码管理-Coding 【k8s完整实战教程2】腾讯云搭建k8s托管集群 【k8s完整实战教程3】k8s集群部署kubesphere 【k8s完整实战教程4】使用

    2023年04月18日
    浏览(27)
  • 使用docker 部署k8s集群

    目录 一、环境准备: 二、master节点修改hosts, 配置主机可达 三、将桥接的IPv4流量传递到iptables的链 四、配置 daemon.json,设置cgroup的管理方式为systemd及配置阿里云镜像加速 五、添加yum源 六、安装 kubeadm,kubelet 和 kubectl 七、master部署k8s 八、将kubeadm join 复制到两个node节点执

    2024年02月12日
    浏览(24)
  • Jenkins使用k8s部署应用

    1、jenkins在k8s内部署(请参考其他人的文章) 2、jenkins安装kubenents相关插件 3、配置k8s云         非常重要,目的是实现jenkins可以远程调用k8s进行部署,并可实现安装jenkins-slave进行构建。使得不再依赖jenkins单机能力进行构建,比较适合一定规模的公司。  插件安装后,打开

    2024年02月15日
    浏览(20)
  • 持续集成部署-K8s 简单使用

    这里将 HTTPD 服务映射到 Kubernetes 集群的 8080 端口上,直接在Master节点上操作即可。 创建一个名为 httpd-deployment.yaml 的 YAML 文件,内容如下:

    2024年02月12日
    浏览(24)
  • 使用kubeadm快速部署一个K8s集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更

    2024年02月09日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包