Я запускаю приложение в виде StatefulSet с 2 пакетами.Недавно я обнаружил проблему, которая требует очистки некоторого содержимого на диске и перезапуска приложения.
Я хотел бы свести к минимуму влияние на клиента, запустив хотя бы один Pod.
Это довольно тривиально для pod-1
, так как я могу уменьшить его и сделать необходимое и масштабировать резервное копирование.Однако StatefulSets не будет запускаться pod-1
, если pod-0
не запущен, поэтому я не могу просто вывести pod-0
из Службы.
Я знаю, что, возможно, есть способ переименовать Pod ввыведите pod-0
из Службы.К сожалению, это не вариант, так как он вызовет новый pod-0
(из того, что я понимаю).
Есть ли способ выставить выбранный Pod через Сервис или удалить его из конечных точек Сервиса и повторно-адд?
Пример файла спецификации
spec:
podManagementPolicy: OrderedReady
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
app: myapp
serviceName: myapp-headless
template:
metadata:
creationTimestamp: null
labels:
app: myapp
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: NotIn
values:
- confluence
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- myapp
topologyKey: kubernetes.io/hostname
containers:
- env:
- name: JVM_MINIMUM_MEMORY
value: 4g
- name: JVM_MAXIMUM_MEMORY
value: 4g
- name: CATALINA_CONNECTOR_PROXYNAME
value: myapp.dev.example.com
- name: CATALINA_CONNECTOR_PROXYPORT
value: "443"
- name: CATALINA_CONNECTOR_SCHEME
value: https
- name: CATALINA_CONNECTOR_SECURE
value: "true"
- name: CLUSTER
value: "true"
- name: CLUSTER_DOMAIN
value: myapp-headless.proteus.svc.cluster.local
- name: CROWD_SSO
value: "false"
- name: CROWD_APP_NAME
value: myapp
- name: CROWD_APP_PASSWORD
value: xxx
- name: CROWD_BASEURL
value: https://crowd.dev.example.com
image: xxx
imagePullPolicy: IfNotPresent
name: myapp
ports:
- containerPort: 8080
name: http
protocol: TCP
- containerPort: 40001
name: ehcache
protocol: TCP
resources:
limits:
memory: 8Gi
requests:
memory: 4Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/vendor/application-data/myapp-home
name: home
- mountPath: /var/vendor/application-data/myapp-home/shared
name: shared
- mountPath: /var/vendor/application-data/myapp-home/dbconfig.xml
name: myapp-db-config
subPath: dbconfig.xml
- mountPath: /opt/vendor/myapp/logs
name: tomcat-logs
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: ecr
restartPolicy: Always
schedulerName: default-scheduler
securityContext:
fsGroup: 2
runAsUser: 2
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: myapp-dbconfig-cm
name: myapp-db-config
- name: shared
persistentVolumeClaim:
claimName: myapp-shared
- emptyDir: {}
name: tomcat-logs
updateStrategy:
type: OnDelete
volumeClaimTemplates:
- metadata:
creationTimestamp: null
name: home
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: myapp-home-volume