K3S 的第一个测试Demo
背景介绍
我们已经完成了一个单 Server 的 K3S 集群的搭建,现在开始部署第一个应用。
创建部署文件
创建一个 nginx-demo.yaml
文件,包含以下资源配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3 # 创建3个Pod副本
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginxdemos/hello:latest # 使用nginx演示镜像
ports:
- containerPort: 80 # 容器内暴露80端口
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx # 选择所有带有app=nginx标签的Pod
ports:
- protocol: TCP
port: 80 # 服务暴露的端口
targetPort: 80 # 目标Pod的端口
type: ClusterIP # 创建集群内部IP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
traefik.ingress.kubernetes.io/service.loadbalancer.method: drr # 使用轮询负载均衡
traefik.ingress.kubernetes.io/service.sticky: "false" # 禁用会话粘性
spec:
rules:
- host: example.com # 设置访问域名
http:
paths:
- path: / # 根路径
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
部署应用
执行以下命令部署应用:
kubectl apply -f nginx-demo.yaml
成功部署后,将看到类似以下输出:
deployment.apps/nginx-deployment created
service/nginx-service created
ingress.networking.k8s.io/nginx-ingress created
验证部署状态
检查 Pod 状态
kubectl get pods -o wide
输出示例:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-5ccd6fdc5b-dmwml 1/1 Running 0 2m51s 10.42.2.8 agent-jp-claw <none> <none>
nginx-deployment-5ccd6fdc5b-np6mj 1/1 Running 0 2m51s 10.42.1.8 agent-hk-claw <none> <none>
nginx-deployment-5ccd6fdc5b-nscrm 1/1 Running 0 2m51s 10.42.0.15 master-hk-fox <none> <none>
可以看到已创建了三个容器实例,分布在三个节点上。
检查 Service 状态
kubectl get svc
输出示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 12h
nginx-service ClusterIP 10.43.225.46 <none> 80/TCP 4m29s
检查 Ingress 状态
kubectl get ingress
输出示例:
NAME CLASS HOSTS ADDRESS PORTS AGE
nginx-ingress traefik example.com 100.113.225.35,100.120.219.98,100.68.209.88 80 4m35s
访问应用
将域名解析到任一已部署 Pod 的节点 IP 上,即可访问应用。

轮询展示