用Helm和GitHub行动向Kubernetes集群部署应用程序

220 阅读1分钟

在这个例子中,我们将使用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