- 创建Headless Service
- Headless Service: 为Statefulset中的每个pod提供Pod id解析,使得客户端可以访问Service后端的所有Pod资源。
- 创建Headless Service时,YAML的
kind
还是Service
,只要把clusterIP
的值设置为None
即可将Service
定义为Headless
。
apiVersion: v1
kind: Service
metadata:
namespace: string
name: string
spec:
clusterIP: None
ports:
- name: string
port: int
targetPort: int
selector:
string: string
- 创建Statefulset
- Statefulset:管理有状态的应用,提供唯一的网络id、有序的扩展、删除和更新等功能。
- Statefulset的
kind
为StatefulSet
。 - 要在
serviceName
字段关联上述创建的Headless Service - 默认的pod创建和删除是串行的,要改成并行,把
podManagementPolicy
设置为Parallel
一个使用StatefulSet创建Eureka集群的示例如下:
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: eureka
name: eureka
namespace: string
spec:
podManagementPolicy: Parallel
replicas: 3
serviceName: eureka
selector:
matchLabels:
app: eureka
template:
metadata:
labels:
app: eureka
spec:
containers:
- env:
- name: EUREKA_INSTANCE_HOSTNAME
value: '${MY_POD_NAME}.eureka'
- name: MY_POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
image:
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 7001
scheme: HTTP
initialDelaySeconds: 120
periodSeconds:5
successThreshold: 1
timeoutSeconds: 5
name: eureka
ports:
- containerPort: 7001
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /
port: 7001
scheme: HTTP
initialDelaySeconds: 120
periodSeconds: 60
successThreshold:1
timeoutSeconds: 5
resources:
limits:
cpu: '1'
memory: 1Gi
访问:
curl eureka-0.eureka:7001
curl eureka-1.eureka:7001
curl eureka-2.eureka:7001
或通过Service的方式访问:
curl eureka:7001
向此Headless Service发送的请求,不再由Service资源代理转发,而是由DNS服务器接到查询请求时以轮询的方式返回IP地址,请求直接根据IP地址接入到具体的POD。
网友评论