K3s测试应用部署
在 K3s 集群中创建一个简单的应用,比如一个 Nginx 服务器,并通过 IP 访问它。
1. 部署一个 Nginx 应用
创建一个 nginx-deployment.yaml 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
应用部署:
kubectl apply -f nginx-deployment.yaml
创建 Service 以暴露应用
创建 nginx-service.yaml 文件,K3s 自带的 klipper-lb(基于 Traefik),可以直接创建一个 LoadBalancer 类型的服务:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
应用:
kubectl apply -f nginx-service.yaml
获取IP地址
kubectl get svc nginx-service
查看 EXTERNAL-IP,然后访问该 IP。
http://<EXTERNAL-IP>
常用命令
查看pod状态
kubectl get pods
查看pod日志
kubectl logs <pod-name>
查看pod详细信息
kubectl describe pod <pod-name>
K3s执行日志
journalctl -u k3s -f
附
Pod 常见状态解析
状态 | 说明 |
---|---|
Pending | Pod 已创建,但至少有一个容器还没启动(可能是镜像未拉取、调度问题等)。 |
ContainerCreating | Pod 正在创建容器,通常是镜像下载中或容器准备中。 |
Running | Pod 及其中所有容器都已正常运行。 |
Completed | Pod 运行完成(通常是 Job 类型的 Pod)。 |
CrashLoopBackOff | Pod 不断崩溃并重启(可能是应用错误或配置错误)。 |
ImagePullBackOff | 无法拉取镜像(可能是网络问题或镜像不存在)。 |
ErrImagePull | 拉取镜像失败(一般是认证失败或镜像不存在)。 |
CreateContainerConfigError | 容器创建失败,通常是环境变量、资源请求等配置错误。 |
OOMKilled | 容器因为 内存不足(Out Of Memory, OOM) 而被终止。 |
Evicted | Pod 被 驱逐(可能是因为节点资源不足)。 |
Terminating | Pod 正在删除(可能因 kubectl delete pod 或 节点重启)。 |
NodeLost | 节点丢失,导致 Pod 无法访问。 |