在K8s编程中如何使用Go

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 一文带你了解在K8s编程中如何使用Go

1. 环境准备

安装Go语言环境

  • 访问Go官网下载并安装适合你操作系统的Go版本。
  • 设置GOPATH和GOROOT环境变量。GOPATH是你的工作空间,GOROOT是Go的安装目录。

安装Docker

  • 访问Docker官网下载并安装Docker Desktop(对于Mac和Windows用户)或Docker Engine(对于Linux用户)。

安装Kubectl

设置Kubernetes集群

  • 如果你没有现成的Kubernetes集群,可以使用Minikube来快速搭建一个单节点的集群。访问Minikube官网查看安装和启动指南。

2. 编写Go应用程序

在GOPATH下的src目录中创建一个新的Go模块(假设你的模块名为github.com/yourusername/myapp),并在该模块下创建main.go文件。

go复制代码
package main  
import (  
"fmt"
"net/http"
)  
func handler(w http.ResponseWriter, r *http.Request) {  
    fmt.Fprintf(w, "Hello, Kubernetes from Go! This is version 1.0 of my app.")  
}  
func main() {  
    http.HandleFunc("/", handler)  
    fmt.Println("Server is listening on port 8080...")  
if err := http.ListenAndServe(":8080", nil); err != nil {  
panic(err)  
    }  
}

3. 构建Docker镜像

在同一目录下创建Dockerfile,并添加以下内容:

Dockerfile复制代码
# 使用官方的Golang镜像作为基础镜像  
FROM golang:1.17-alpine AS build-env
# 设置工作目录  
WORKDIR /app  
# 将当前目录下的所有文件复制到容器中的/app目录下  
COPY . .  
# 安装依赖(如果有的话)  
# RUN go mod tidy  
# 编译Go应用程序  
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp .  
# 使用一个轻量级的Alpine Linux镜像来运行编译好的程序  
FROM alpine:latest  
# 将编译好的程序从build-env阶段复制到当前镜像  
COPY --from=build-env /app/myapp /usr/local/bin/myapp  
# 设置容器启动时运行的命令  
ENTRYPOINT ["/usr/local/bin/myapp"]  
# 暴露端口  
EXPOSE 8080

注意:这里使用了多阶段构建来减小最终镜像的大小。

在包含main.goDockerfile的目录下运行以下命令来构建Docker镜像:

bash复制代码
docker build -t myapp:latest .

4. 编写K8s部署文件

在项目根目录下创建deployment.yaml文件,并添加以下内容:

yaml复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 8080

5. 部署应用到K8s集群

确保你的kubectl已经配置好并指向了你的Kubernetes集群。然后,使用以下命令部署应用:

bash复制代码
kubectl apply -f deployment.yaml

6. 验证应用运行状态

通过以下命令检查Pod的状态:

bash复制代码
kubectl get pods -l app=myapp

查看Pod的日志以确认应用是否正常运行:

bash复制代码
kubectl logs <pod-name>

其中<pod-name>myapp-deployment部署的Pod名称,你可以通过上面的get pods命令获取。

7. 访问应用

由于Pod的IP地址在集群内部是动态分配的,并且通常不会直接暴露给外部网络,你需要创建一个Service来将Pod的端口映射到集群的一个固定IP和端口上。

创建一个名为service.yaml的文件,并添加以下内容:

yaml复制代码
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
selector:
app: myapp
ports:
- port: 8080
targetPort: 8080
nodePort: 30080

然后,使用以下命令应用Service配置:

bash复制代码
kubectl apply -f service.yaml

现在,你可以通过访问http://<任一集群节点IP>:30080来访问你的应用了。<任一集群节点IP>是Kubernetes集群中任一节点的IP地址。

总结

通过以上详细步骤,我们成功地将一个使用Go编写的简单HTTP服务器应用程序部署到了Kubernetes集群中,并通过Service将其暴露给外部网络。这个案例涵盖了从环境准备、代码编写、镜像构建、部署到验证的完整流程,为在Kubernetes中使用Go语言开发应用程序提供了详尽的参考。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
7天前
|
数据采集 监控 Java
go语言编程学习
【11月更文挑战第3天】
23 7
|
13天前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。
|
21天前
|
Java 大数据 Go
Go语言:高效并发的编程新星
【10月更文挑战第21】Go语言:高效并发的编程新星
44 7
|
29天前
|
Go 数据处理 调度
Go语言中的并发模型:解锁高效并行编程的秘诀
本文将探讨Go语言中独特的并发模型及其在现代软件开发中的应用。通过深入分析 Goroutines 和 Channels,我们将揭示这一模型如何简化并行编程,提升应用性能,并改变开发者处理并发任务的方式。不同于传统多线程编程,Go的并发方法以其简洁性和高效性脱颖而出,为开发者提供了一种全新的编程范式。
|
1月前
|
并行计算 算法 搜索推荐
探索Go语言的高并发编程与性能优化
【10月更文挑战第10天】探索Go语言的高并发编程与性能优化
|
2月前
|
存储 缓存 Go
go语言编程系列(五)
go语言编程系列(五)
|
2月前
|
搜索推荐 Java 编译器
go语言编程系列(四)
go语言编程系列(四)
|
2月前
|
存储 JSON 安全
go语言编程系列(七)
go语言编程系列(七)
|
2月前
|
存储 安全 编译器
go语言编程系列(六)
go语言编程系列(六)
|
2月前
|
自然语言处理 Java 测试技术
go语言编程系列(二)
go语言编程系列(二)