k8s作为目前容器化管理和编排最热门的项目,我们无疑需要马上去学习它,而实践是能够帮助我们快速入门一项技术,在实践的过程中,我们可以理解大致的使用,了解相关的概念,并在过程中遇到大量的问题,从而不断的深入去了解k8s,废话少说,下面我们通过如下几步,可以将自己的go应用部署到k8s上。
准备go项目
需要先准备一个go的项目,用于部署到k8s中,然后我们再对项目进行访问,从而对部署结果进行验证。如果自己已经有可以使用的项目了,可以直接使用自己的项目,我用gin创建了一个简单的演示项目,大家自取。
该项目提供了两个访问接口:
-
/ 用于返回固定的hello
-
/test 用于返回当前的时间
编译镜像
接下来,编写Dockerfile将项目编译成一个docker image,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
|
FROM golang:1.19.1-alpine as builder
ENV GOPROXY=https://goproxy.cn
WORKDIR /build
COPY . .
RUN go mod tidy
RUN go build -o helloGin main.go
FROM alpine:latest
RUN mkdir -p /cmd
WORKDIR /cmd
COPY --from=builder /build .
EXPOSE 8888
CMD ["./helloGin"]
|
生成镜像,执行命令
1
|
docker build -t hellogin:1.0.0 -f Dockerfile .
|
执行
可以看到生成的hellogin:1.0.0镜像已经存在了
推送镜像
因为k8s集群的pod在启动的时候,需要先拉取到目标镜像,所以需要把自己的镜像推到镜像服务器,我这里选用阿里的容器镜像服务个人版。自己进行开通此处不再展开,或者使用其他的镜像服务都可以,不影响后续操作。
先登陆->将自己生成的镜像打tag->推到镜像服务器
1
2
3
|
$ docker login --username=阿里云账户 registry.cn-shanghai.aliyuncs.com
$ docker tag hellogin:1.0.0 registry.cn-shanghai.aliyuncs.com/命名空间/hellogin:1.0.0
$ docker push registry.cn-shanghai.aliyuncs.com/命名空间/hellogin:1.0.0
|
编写部署配置yaml
编写deployment和service配置文件,用于将image镜像如何部署到k8s中。
deployment.yaml文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
apiVersion: apps/v1
kind: Deployment
metadata:
name: hellogin
spec:
replicas: 3 # 启动3个pod
selector:
matchLabels:
app: hello-gin
template:
metadata:
labels:
app: hello-gin
spec:
containers:
- name: go-app-container
image: registry.cn-shanghai.aliyuncs.com/bysimon/hellogin:1.0.0
imagePullPolicy: IfNotPresent
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "100m"
ports:
- containerPort: 8888 # 程序端口
imagePullSecrets:
- name: aliyun-registry # aliyun镜像拉取的秘钥
|
service.yaml内容如下
1
2
3
4
5
6
7
8
9
10
11
|
apiVersion: v1
kind: Service
metadata:
name: hellogin-service
spec:
type: NodePort
ports:
- port: 8888
nodePort: 30088
selector:
app: hello-gin
|
需要对外提供服务所以type选NodePort
port:8888是对应pod的端口号
nodePort:30088是service对外提供的调用端口号
另外,如果使用的是阿里云的镜像服务,在部署之前需要创建镜像拉取的秘钥,否则会拉取镜像失败,导致pod启动失败
1
2
3
4
5
6
|
kubectl create secret docker-registry aliyun-registry \
--namespace=default \
--docker-server=registry.cn-shanghai.aliyuncs.com \
--docker-username=aliyun账户 \
--docker-password=密码 \
--docker-email=邮箱(非必选)
|
创建成功后,使用 kubectl get secrets
查看。
部署到k8s
配置文件准备就绪后,可以开始部署到k8s中,使用命令:
1
2
|
kubectl create -f ./k8s/deployment.yaml
kubectl create -f ./k8s/service.yaml
|
查看pod和service状况
1
|
kubectl get pod,svc -n default
|
可以看到如下
1
2
3
4
5
6
7
8
|
NAME READY STATUS RESTARTS AGE
pod/hellogin-599968cc59-69qk6 1/1 Running 0 61m
pod/hellogin-599968cc59-bmdkb 1/1 Running 0 61m
pod/hellogin-599968cc59-tnqjz 1/1 Running 0 61m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/hellogin-service NodePort 10.109.104.154 <none> 8888:30088/TCP 60m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 69m
|
三个pod(hellogin-xxxxxx-xxxx)处在Running状态,service的Port30088对外提供服务
访问确认
查看任何一个node的物理IP地址,通过访问node主机的IP:30088/test会返回当前时间,表示整个流程已经跑通