编写Go程序
确保你的Go项目在GitHub(或其他Git服务)上有版本控制。以下是一个简单的hello.go示例:
go复制代码
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, Kubernetes!")
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("Server is listening on 8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
panic(err)
}
}
步骤三:Dockerfile编写
在项目根目录下创建Dockerfile,用于构建镜像:
Dockerfile复制代码
使用官方Go运行时作为父镜像
FROM golang:1.16
设置工作目录
WORKDIR /app
将当前目录内容复制到位于/app中的容器中
COPY . .
构建Go应用
RUN go build -o hello-app
指定容器运行时执行的命令
CMD ["./hello-app"]
暴露端口
EXPOSE 8080
步骤四:使用CI/CD工具(以GitHub Actions为例)
在GitHub仓库中创建.github/workflows/ci-cd.yml文件,配置CI/CD流程:
yaml复制代码
name: CI/CD
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${
{ secrets.DOCKER_USERNAME }}
password: ${
{ secrets.DOCKER_PASSWORD }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
tags: yourusername/hello-app:latest
- name: Deploy to Kubernetes cluster
uses: azure/k8s-deploy@v1
with:
namespace: default
manifests: |
deployment.yaml
image-pull-secrets: |
name: regcred
kubectl-version: latest
注意:你需要配置secrets.DOCKER_USERNAME和secrets.DOCKER_PASSWORD在GitHub仓库设置中。
步骤五:编写Kubernetes部署文件
在项目根目录下创建deployment.yaml:
yaml复制代码
//代码效果参考:http://www.mwgw.cn/sitemap.xml
//代码效果参考:https://www.h3cw.com/sitemap.xml
//代码效果参考:https://www.weibow.com/sitemap.xml
//代码效果参考:https://www.vipwb.com/sitemap.xml
//代码效果参考:https://www.uagu.cn/sitemap.xml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-app
spec:
replicas: 1
selector:
matchLabels:
app: hello-app
template:
metadata:
labels:
app: hello-app
spec:
containers:
- name: hello-app
image: yourusername/hello-app:latest
ports:
- containerPort: 8080
步骤六:运行流水线
每次将代码推送到main分支时,GitHub Actions将自动触发CI/CD流程,包括构建Docker镜像、推送镜像到Docker Hub,并在Kubernetes集群中部署应用。
这只是一个基础的示例,根据你的具体需求,你可能需要调整Dockerfile、Kubernetes配置文件或CI/CD流程。
效果: