在这个例子中,我们将使用GitHub行动,使用Helm将我们的Golang应用部署到Kubernetes集群中。我将使用一个本地的Minikube集群,所以下面会有一个 "设置 "部分,用Ngrok把它暴露给公众。
我的本地Kubernetes设置如下,但我们只需使用nonprod 集群和develop 名称空间。
CLUSTER NAMESPACES
结构
├── Makefile
文件
制作文件
这仅用于本地使用。
TAG := $(shell git rev-parse --short HEAD)
.dockerignore
.dockerignore
.gitignore
main.go
package main
main_test.go
package main
Docker文件
FROM golang:1.17.5-alpine3.15 as build
.Helmignore
.DS_Store
Chart.yaml
apiVersion: v2
values.yaml
namespace: default
configmap.yaml
apiVersion: v1
部署.yaml
apiVersion: apps/v1
service.yaml
apiVersion: v1
cd.yaml
# Trigger the workflow to deploy to "nonprod" cluster using "develop" environment only when:
ci.yaml
# Trigger the workflow only when:
调试
运行以下命令,看看Helm是如何解释Kubernetes文件的。
$ helm template ./infra/helm/
设置
在GitHub上添加Docker机密和Kube配置
这将使你的工作流程能够将图像推送到DockerHub注册处。
DOCKERHUB_USERNAME
这将使你的工作流程能够将应用程序部署到你的本地K8S集群中。
// Enable routing public requests to K8S API.
// Expose kubectl proxy to the Internet with ngrok.
// Create a modified copy of your local kube config.
最后,你应该在GitHub中拥有这些秘密。
DOCKERHUB_USERNAME
准备好本地集群
$ minikube start -p prod --vm-driver=virtualbox
测试
持续集成
持续部署
验证部署
集群信息
$ helm list --kube-context nonprod --all-namespaces
访问应用程序
$ kubectl --context nonprod --namespace develop port-forward service/rest 8080:8080
请求示例
$ curl --request GET 'http://localhost:8080/' --header 'X-Request-ID: 123'
日志
$ kubectl --context nonprod --namespace develop logs -f service/rest