golang服务部署到kubernetes
本篇主要讲解如何将golang的服务部署到kubernetes集群里,附带相关的golang的demo和yml文件内容。纯新手入门方式,生产服务需要完整的ci/cd流程来支持。
golang服务代码
这里简单写一个k8s-demo的服务,提供两个接口ping和version接口,main.go文件代码如下:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func statusokhandler(c *gin.context) {
c.json(http.statusok, gin.h{"status": "success"})
}
func versionhandler(c *gin.context) {
c.json(http.statusok, gin.h{"version": "v1.0"})
}
func main() {
router := gin.new()
router.use(gin.recovery())
router.get("/ping", statusokhandler)
router.get("/version", versionhandler)
router.run(":8080")
}
构建命令:cgo_enabled=0 goos=linux goarch=amd64 go build -o k8s-demo main.go
dockerfile文件
这里只提供最基础的demo写法,如果有额外的需求在dockerfile文件内补充就行,dockerfile文件内容如下:
from alpine add k8s-demo /data/app/ workdir /data/app/ cmd ["/bin/bash","-c","./k8s-demo"]
ci构建脚本
写一个build.sh,用于编译二进制文件,然后进行docker镜像打包和推送进行到镜像仓库:
#!/bin/bash set -e cgo_enabled=0 goos=linux goarch=amd64 go build -o k8s-demo main.go docker build -t www.5bug.wang/docker/k8s-demo:1.0 . docker push www.5bug.wang/docker/k8s-demo:1.0
执行build.sh脚本文件即可,请确保此步骤成功将镜像推送到你的镜像仓库里。
kubernetes部署
准备创建deployment的yaml文件
kubernetes版本1.18,我这里使用yaml文件创建deployment来部署k8s-demo服务到k8s集群里,k8s-demo.yaml文件内容如下:
---
apiversion: apps/v1
kind: deployment
metadata:
name: k8s-demo
namespace: default
labels:
app: k8s-demo
spec:
selector:
matchlabels:
app: k8s-demo
replicas: 4
revisionhistorylimit: 10
minreadyseconds: 5
strategy:
type: rollingupdate
rollingupdate:
maxsurge: 1
maxunavailable: 1
template:
metadata:
labels:
app: k8s-demo
spec:
containers:
- image: www.5bug.wang/docker/k8s-demo:1.0
imagepullpolicy: ifnotpresent
name: k8s-demo
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: k8s-demo-svc
namespace: default
labels:
app: k8s-demo
spec:
ports:
- name: api
port: 8080
protocol: tcp
targetport: 8080
selector:
app: k8s-demo
---
apiversion: extensions/v1beta1
kind: ingress
metadata:
name: k8s-demo-ingress
namespace: default
spec:
rules:
- host: k8s-demo.local
http:
paths:
- path: /
backend:
servicename: k8s-demo-svc
serviceport: api
此yaml文件里主要定义了三种资源:deployment、service、ingress,都配置在默认的namespace里,yaml文件里的每项内容做什么用的下一篇再补充,这里先把服务部署起来找找成就感!
k8s部署
在已经搭建好k8s环境的master节点里使用kubectl命令来执行部署,命令如下:
kubectl apply -f k8s-demo.yaml
执行效果如下:
稍等会通过通过查询pods列表的命令:kubectl get pods 来查看pod运行状态,如下图:
配置外部访问
k8s的服务支持外部访问的方式有好几种,我这里我采用了ingress的方式,由于是本地使用,所以这里需要绑下host文件,通过查询ingress的命令查询ingress列表可以得知host绑什么ip地址,如下::
5bug.wang-macbook:~/codes/projects/k8s-demo$ kubectl get ingress name class hosts address ports age k8s-demo-ingress <none> k8s-demo.local 192.168.99.103 80 7m26s
修改/etc/hosts文件,增加:192.168.99.103 k8s-demo.local即可。
浏览器里访问:http://k8s-demo.local/ping即可看到ping接口的返回值了,到这里k8s-demo成功部署到k8s集群里了。
转自:https://www.cnblogs.com/5bug/p/12733738.html
推荐阅读
-
Golang从文件服务器获取图片显示到客户端
-
Vue项目webpack打包部署到服务器的实例详解
-
Spring boot项目部署到云服务器小白教程详解
-
服务器win2008server R2 x64 部署.net core到IIS 并解决ASP .NET Core HTTP Error 502.5 – Process Failure 的问题等
-
thinkphp5 部署到iis服务器url重写
-
vue、react等单页面项目部署到服务器的方法及vue和react的区别
-
将Django项目部署到CentOs服务器中
-
将ASP.NET网站部署到服务器IIS上
-
详解Node项目部署到云服务器上
-
Vue.js项目部署到服务器的详细步骤