基于搜索结果,我为你提供一个在Linux上实现最精简k8s部署环境并部署Go web应用的完整方案。k3s 是最轻量级的Kubernetes发行版,特别适合资源有限的环境。
第一步:Linux系统环境说明
选择一个轻量级Linux发行版(如Ubuntu、Debian Server等),确保满足基本要求:
- 64位Linux系统
- 至少512MB内存
- root或sudo权限
服务器系统版本:Debian 6.1.129-1 (2025-03-06) x86_64 GNU/Linux
基础环境配置:
1 2 3 4 5 6 7 8
| sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget vim
sudo ufw disable
|
第二步:安装k3s(最精简k8s)
k3s简介(参见官网介绍)
- k3s是一个高可用的、经过CNCF认证的Kubernetes发行版,专为无人值守、资源受限、偏远地区或物联网设备内部的生产工作负载而设计。
- k3s被打包成单个小于60MB的二进制文件,从而减少了运行安装、运行和自动更新生产Kubernetes集群所需的依赖性和步骤。
- ARM64和ARMv7都支持二进制文件和多源镜像。k3s在小到树莓派或大到 AWS a1.4xlarge 32GiB服务器的环境中均能出色工作。
k3s以其单二进制文件部署方式而闻名,是实现最精简Kubernetes环境的理想选择。
1 2 3 4 5 6 7 8 9 10 11 12 13
| curl -sfL https://get.k3s.io | sh -
sudo k3s kubectl get nodes
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config sudo chown $USER:$USER ~/.kube/config export KUBECONFIG=~/.kube/config
kubectl get pods -A
|
k3s会自动安装以下核心组件:
- kube-apiserver
- kube-controller-manager
- kube-scheduler
- kubelet
- containerd(替代docker)
- CoreDNS
- Traefik(Ingress控制器)
第三步:创建Go web应用
创建一个简单的Go web应用:
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
| mkdir -p ~/go-web-app && cd ~/go-web-app
cat > main.go << EOF package main
import ( "fmt" "net/http" "os" )
func main() { port := os.Getenv("PORT") if port == "" { port = "8080" }
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello from Go on Kubernetes! Host: %s", r.Host) })
fmt.Printf("Server starting on port %s\n", port) http.ListenAndServe(":"+port, nil) } EOF
go mod init go-web-app
|
第四步:Docker化Go应用
为Go应用创建Dockerfile,使用多阶段构建优化镜像大小:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| cat > Dockerfile << EOF # 构建阶段 FROM golang:1.21-alpine AS builder
WORKDIR /app COPY go.mod go.sum ./ RUN go mod download
COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o web-app
# 运行阶段 FROM alpine:latest
WORKDIR /root/ COPY --from=builder /app/web-app .
EXPOSE 8080 CMD ["./web-app"] EOF
|
构建并测试Docker镜像:
1 2 3 4 5 6 7
| docker build -t go-web-app:latest .
docker run -d -p 8080:8080 --name test-app go-web-app:latest curl http://localhost:8080 docker stop test-app && docker rm test-app
|
第五步:部署到k3s
创建Kubernetes部署文件:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| cat > deployment.yaml << EOF apiVersion: apps/v1 kind: Deployment metadata: name: go-web-app spec: replicas: 2 selector: matchLabels: app: go-web-app template: metadata: labels: app: go-web-app spec: containers: - name: go-web-app image: go-web-app:latest ports: - containerPort: 8080 env: - name: PORT value: "8080" resources: limits: memory: "128Mi" cpu: "100m" requests: memory: "64Mi" cpu: "50m" --- apiVersion: v1 kind: Service metadata: name: go-web-app-service spec: selector: app: go-web-app ports: - port: 80 targetPort: 8080 type: ClusterIP --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: go-web-app-ingress annotations: kubernetes.io/ingress.class: traefik spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: go-web-app-service port: number: 80 EOF
|
部署应用:
1 2 3 4 5 6 7 8 9 10
| kubectl apply -f deployment.yaml
kubectl get pods kubectl get svc kubectl get ingress
kubectl logs -l app=go-web-app --tail=10
|
第六步:访问应用
由于k3s自带Traefik Ingress控制器,你可以通过以下方式访问:
1 2 3 4 5 6 7 8 9
| kubectl get ingress
curl http://localhost
kubectl port-forward svc/go-web-app-service 8080:80 & curl http://localhost:8080
|
环境优化建议
资源限制:k3s默认配置已经非常轻量,但可以进一步优化:
1 2
| curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik --disable=servicelb" sh -
|
镜像优化:使用更小的基础镜像,最终容器大小可控制在10MB以内。
监控:使用k3s内置的metrics-server监控资源使用情况。
持久化:如需持久化存储,k3s支持local-path-provisioner,无需额外配置。
这个方案提供了最精简的k8s环境(k3s)和完整的Go应用部署流程,适合开发测试环境,也适用于资源受限的生产环境。 整个环境启动时间通常在1-2分钟内,内存占用仅需500MB左右。