分享
  1. 首页
  2. 文章

如何使用Kubernetes部署Golang的Http服务

大漠胡萝卜 · · 1710 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

制作镜像


cd $GOPATH/src/github.com/hapiman # 这是我的账号, 请更换为自己的github账号
mkdir goappk8s # 项目名称
cd goappk8s
vim main.go # 创建文件,内容在下面
dep init # 初始化管理工具
dep ensure -add github.com/gin-gonic/gin # 安装依赖包
go run main.go # 测试你的程序没有问题
vim Dockerfile # 创建Dockerfile, 内容在下面
vim start.sh # 创建制作镜像命令, 内容在下面
sh start.sh # 构建镜像
docker tag goappk8s:latest pengj/goappk8s:v1.0.0 # 增加一个标准格式的镜像, 请更换为自己的仓库名字
docker run -p 8080:8080 pengj/goappk8s:v1.0.0 # 测试你的镜像没有问题
# 这里需要在你的docker仓库新建镜像,之后执行下面的操作; 我的地址为: https://hub.docker.com/u/pengj
# 如果先登录再创建,则推送会报仓库不存在
docker login # 登录, 输入账号和密码
docker push pengj/goappk8s:v1.0.0 # 推送镜像

main.go内容


package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.String(http.StatusOK, "PONG")
})
router.Run(":8080")
}

Dockerfile内容


FROM fuyufjh/go-alpine
WORKDIR $GOPATH/src/github.com/hapiman/goappk8s
COPY . $GOPATH/src/github.com/hapiman/goappk8s
EXPOSE 8080
CMD ["./goappk8s"]

start.sh内容


CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -a -installsuffix cgo -o goappk8s .
docker build -t goappk8s .

部署镜像

前提

如果你没有搭建k8s集群,可以参考k8s搭建

部署


# 新增名字为`kube-apps`的namespace, 文件内容在下面,在goapp-k8s.yaml会使用
kubectl apply -f kube-apps.yaml
# 在master机器上创建goapp-k8s.yaml,内容在下面,你需要更换`pengj/goappk8s:v1.0.0`为你自己的镜像仓库或者直接使用(省事)
vim goapp-k8s.yaml
# 部署配置, 如果多次部署会存在重复文件, 可以使用kubectl delete -f goapp-k8s.yaml删除
kubectl apply -f goapp-k8s.yaml
# 执行成功会输出
# deployment "goapp-deploy" created
# service "goapp-svc" created
# ingress "goapp-ingress" created

校验


# 可能会出现0/2, 1/2的情况, 等一会儿就OK
kubectl get deployments -n kube-apps |grep goapp
# goapp-deploy 2/2 2 2 109m
kubectl get svc -n kube-apps |grep goapp
# goapp-svc NodePort 10.97.144.116 <none> 8080:31000/TCP 109m
kubectl get ingress -n kube-apps |grep goapp
# goapp-ingress goappk8s.local 80 110m
kubectl get pods -n kube-apps |grep goapp
# goapp-deploy-5c84c9d676-m7zwc 1/1 Running 0 110m
# goapp-deploy-5c84c9d676-v8r6g 1/1 Running 0 110m

两种访问方式:

1.使用集群之间可见ip访问, 只能够在集群部署的机器上可用: curl http://10.97.144.116:8080/ping

2.使用通用的ip访问, 但是需要使用配置文件中31000端口才行

详细代码在这里

goapp-k8s.yaml文件中定义了3类资源DeploymentServiceIngress;

Deployment设置了replicas: 2,表示会运行两个POD,strategy的滚动策略为RollingUpdate,resources区域定义了一个POD的资源限制,通过livenessProbereadinessProbe设置了健康检查

kube-apps.yaml内容


apiVersion: v1
kind: Namespace
metadata:
 name: kube-apps
 labels:
 name: kube-apps

goapp-k8s.yaml内容


---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 name: goapp-deploy
 namespace: kube-apps
 labels:
 k8s-app: goappk8s
spec:
 replicas: 2
 revisionHistoryLimit: 10
 minReadySeconds: 5
 strategy:
 type: RollingUpdate
 rollingUpdate:
 maxSurge: 1
 maxUnavailable: 1
 template:
 metadata:
 labels:
 k8s-app: goappk8s
 spec:
 containers:
 - image: pengj/goappk8s:v1.0.0
 imagePullPolicy: Always
 name: goappk8s
 ports:
 - containerPort: 8080
 protocol: TCP
 resources:
 limits:
 cpu: 100m
 memory: 100Mi
 requests:
 cpu: 50m
 memory: 50Mi
 livenessProbe:
 tcpSocket:
 port: 8080
 initialDelaySeconds: 10
 timeoutSeconds: 3
 readinessProbe:
 httpGet:
 path: /ping
 port: 8080
 initialDelaySeconds: 10
 timeoutSeconds: 2
---
apiVersion: v1
kind: Service
metadata:
 name: goapp-svc
 namespace: kube-apps
 labels:
 k8s-app: goappk8s
spec:
 type: NodePort
 ports:
 - name: api
 port: 8080
 targetPort: 8080
 nodePort: 31000
 selector:
 k8s-app: goappk8s
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: goapp-ingress
 namespace: kube-apps
spec:
 rules:
 - host: goappk8s.local
 http:
 paths:
 - path: /
 backend:
 serviceName: goapp-svc
 servicePort: api

参考文档

手摸手教你写 Kubernetes 的 golang 服务

欢迎关注公号:程序员的金融圈

一个探讨技术,金融,赚钱的小圈子,为你提供最有味道的内容,日日更新!

image

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:大漠胡萝卜

查看原文:如何使用Kubernetes部署Golang的Http服务

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1710 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏