以下是实现通过域名访问 Kubernetes StatefulSet Pod 的完整配置:
bash
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
clusterIP: None
selector:
app: nginx
ports:
- port: 80
name: web
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
namespace: default
spec:
serviceName: "nginx"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "standard"
resources:
requests:
storage: 1Gi
- 创建无头服务(Headless Service):通过设置
clusterIP: None实现 DNS 解析,不使用负载均衡。 - 定义 StatefulSet:关联无头服务
serviceName: "nginx",自动为每个 Pod 生成唯一 DNS 名称。 - 生成 DNS 域名:Pod 名称格式为
web-0.nginx.default.svc.cluster.local,支持直接通过域名访问。 - 持久化存储:通过
volumeClaimTemplates自动为每个 Pod 绑定独立 PV,确保数据持久化。 - 有序部署:StatefulSet 按序号创建 Pod,确保依赖关系正确处理。
使用说明:
- 部署后,可通过
web-0.nginx.default.svc.cluster.local访问第一个 Pod。 - 支持 DNS 解析,无需手动配置 IP 地址。
- 适用于需要稳定网络标识的有状态应用(如数据库集群)。