阿里云Codeup云效使用flow+k8s部署go语言项目
codeup云效flow制作DockerfileFROM golang:alpine AS builderADD ./ /data/app/WORKDIR /data/app/ENV GO111MODULE=on \CGO_ENABLED=0 \GOOS=linux \GOARCH=amd64 \GOPROXY=https://goproxy.io,directEXPOSE 8888RUN CGO
文章目录
codeup云效flow
制作Dockerfile
FROM golang:alpine AS builder
ADD ./ /data/app/
WORKDIR /data/app/
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64 \
GOPROXY=https://goproxy.io,direct
EXPOSE 8888
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o scheduler_linux_amd64 main.go
CMD ["./scheduler_linux_amd64"]
可以在本地跑一下,项目是否正常启动
docker build -t schedulersd:v1 .
docker run -it -p 8888:8888 schedulersd:v1
代码提交codeup
创建flow ci/cd流程
1. 镜像创建
需要创建docker register,指定授权服务
2.kubectl构建
deployemnt.yaml可以参考这个, ${version} 就是指定的镜像version
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-go
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
app: k8s-go
revisionHistoryLimit: 10
template:
metadata:
labels:
app: k8s-go
spec:
containers:
- name: k8s-go
image: ${version}
resources:
requests:
memory: '256Mi'
cpu: '100m'
limits:
memory: '1024Mi'
cpu: '500m'
ports:
- containerPort: 8080
imagePullPolicy: Always
imagePullSecrets:
- name: registry-secret
---
apiVersion: v1
kind: Service
metadata:
name: k8s-go
namespace: dev
spec:
selector:
app: k8s-go
type: ClusterIP
ports:
- port: 80
targetPort: 8080
3.可以查看构建的记录 等信息,跟gitlab类似
tips:云效连接k8s用公网,将192...71:6443 apiserver内网端点替换为公网
[18:22:06] Unable to connect to the server: dial tcp 192.*.*.71:6443: i/o timeout
[18:22:06] [ERROR] 连接集群失败
[18:22:06] [ERROR] BUILD ERROR
项目有依赖的内部代码仓库,怎么办?
https://blog.huoding.com/2021/08/24/944
1.golang构建 下载所有的依赖到vendor中
export GOPRIVATE="*.aliyun.com"
export GOPROXY=https://goproxy.cn
git config --global url."https://${GIT_USERNAME}:${GIT_PASSWORD}@code.aliyun.com".insteadOf "https://code.aliyun.com"
go mod tidy && go mod vendor
cp deploy/* .
2.docker build
${CI_COMMIT_REF_NAME}-${CI_COMMIT_ID}-${DATETIME}
tips: 镜像仓库可以直接用 “+” 创建
Dockerfile
# 构建最小运行时镜像
FROM golang:alpine AS builder
WORKDIR /build
COPY . .
RUN go build -mod=vendor main.go
# 我们创建一个 /dist 目录, 仅包含运行时必须的文件
# 然后,他会被复制到输出镜像的 / (根目录)
WORKDIR /data
RUN cp /build/main /data && cp -r /build/config /data
# 构建最小运行时镜像
FROM alpine
ENV TZ=Asia/Shanghai
# 设置应用程序以 /data 文件夹中的非 root 用户身份运
# User ID 65534 通常是 'nobody' 用户.
# 映像的执行者仍应在安装过程中指定一个用户。
COPY --from=builder /data /data
WORKDIR /data
EXPOSE 8080
ENV env=test
CMD ["./main"]
3.拉取镜像验证
docker run -it registry.cn-beijing.aliyuncs.com/***_dev/ad-distribution-srv:test-fe3f2fe4-2022-01-18-17-15-39
阿里云k8s 部署go项目
在工作负载 namespace == dev 中可以看见pod的信息,已经运行成功
配置service
配置ingress
注意,如果你的k8s有设置的路径,路由里一定要有,否则报503找不到
成功设置
中间遇到困难,记得提工单!
更换k8s集群
更改云效的集群地址,重新使用deployment.yaml生成pod
修改service,在容器中 开放端口即可,service只对应服务端口,一般用80:port
手动部署k8s
1.使用Dockerfile 打镜像、打tag
2.push 到私有仓库
3.本地使用deployment.yaml文件,或者阿里云控制台手动部署
知识点
如何使用子模块(gitsubmoudle)
如何在k8s集群中配置连接 Mysql 外网
内网连接:
需要把节点和pod 网段添加到RDS 的白名单中,
外网连接:
需要把NAT 网关的IP 添加到RDS 的白名单中
怎ram 么给serverless集群配置公网访问域名
开业通过slb暴露服务,然后给slbip配置解析到xxx.com呢 https://help.aliyun.com/document_detail/86384.html?spm=a2c4g.11186623.6.1066.53fb6da8TT8iu9
istio、knative功能
istio主要是服务网格的,参考文档介绍 https://istio.io/latest/docs/concepts/what-is-istio/
knative https://help.aliyun.com/knowledge_detail/184832.html?spm=a2c4g.11186631.2.2.7bd761f7XLHcAp
集群中指定了class,但是集群中并没有部署ingress-controller
在自己在ASK中部署ingress-controller
如果使用ASK默认的ingress,可以参考这个
gitlab build 阿里镜像
webhook
钉钉
镜像,需要镜像服务的token
http://cr-callback.console.aliyun.com/sourceRepo/doGitLabCallBack.json?site=china
更多推荐
所有评论(0)