基于Linux内核实现一个最精简的k3s部署环境,实现一个Golang web应用部署

基于Linux内核实现一个最精简的k3s部署环境,实现一个Golang web应用部署

基于搜索结果,我为你提供一个在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
# 安装k3s(单节点集群)
curl -sfL https://get.k3s.io | sh -

# 验证安装
sudo k3s kubectl get nodes

# 配置kubectl
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

# 创建main.go
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模块
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
# 创建部署YAML
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
# 获取Ingress地址
kubectl get ingress

# 如果是本地环境,可以直接访问
curl http://localhost

# 或者通过端口转发
kubectl port-forward svc/go-web-app-service 8080:80 &
curl http://localhost:8080

环境优化建议

  1. 资源限制:k3s默认配置已经非常轻量,但可以进一步优化:

    1
    2
    # 安装时禁用不必要的组件
    curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik --disable=servicelb" sh -
  2. 镜像优化:使用更小的基础镜像,最终容器大小可控制在10MB以内。

  3. 监控:使用k3s内置的metrics-server监控资源使用情况。

  4. 持久化:如需持久化存储,k3s支持local-path-provisioner,无需额外配置。

这个方案提供了最精简的k8s环境(k3s)和完整的Go应用部署流程,适合开发测试环境,也适用于资源受限的生产环境。 整个环境启动时间通常在1-2分钟内,内存占用仅需500MB左右。

基于Linux内核实现一个最精简的k3s部署环境,实现一个Golang web应用部署

https://www.wdft.com/ab528300.html

Author

Jaco Liu

Posted on

2025-05-04

Updated on

2025-12-10

Licensed under