Kubernetes部署golang服务
# 前提
- 需要在docker hub 注册一个账号,用于上传镜像使用
# 创建web应用
# web应用代码如下:
package main
import (
"fmt"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello world")
}
func main() {
http.HandleFunc("/", index)
fmt.Println("server start")
http.ListenAndServe(":3000", nil)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建docker 镜像
# Dockerfile如下
FROM golang:alpine
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN go mod init app
RUN go build -o main .
CMD ["/app/main"]
1
2
3
4
5
6
7
2
3
4
5
6
7
# 构建这个镜像
//calm2020 是我的docker hub账号
docker build -t calm2020/go-app-img .
1
2
2
# 运行
docker run -d -p 3333:3000 --name go-app-container calm2020/go-app-img
1
# 镜像推送到docker hub镜像站
# 1.本地使用docker login 命令登陆
# 2.使用如下命令推送
//calm2020 是我的docker hub账号
docker push calm2020/go-app-img:latest
1
2
2
# k8s部署golang服务
部署yaml文件如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-go-app
spec:
replicas: 1
selector:
matchLabels:
app: go-app
template:
metadata:
labels:
app: go-app
spec:
containers:
- name: go-app-container
image: calm2020/go-app-img
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 3000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 执行部署命令
kubectl create -f deployment.yaml
1
# 查看部署结果
kubectl get deployments
kubectl get pods
1
2
3
2
3
# 暴漏服务端口(exposing the go-app pod)
kubectl expose deployment my-go-app --type=NodePort --name=go-app-svc --target-port=3000
1
上次更新: 2023/01/11