kubernetes - 让序数索引为 0 的 Kuberentes StatefulSet Pod 停止服务?
问题描述
我正在将应用程序作为带有 2 个 Pod 的 StatefulSet 运行。我最近发现了一个问题,需要清除磁盘上的一些内容并重新启动应用程序。
我想通过至少运行一个 Pod 来最大程度地减少对客户的影响。
这是相当微不足道的,pod-1
因为我可以缩小它并做必要的事情并扩大它的备份。pod-1
但是,如果没有运行, StatefulSets 将不会运行,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
解决方案
推荐阅读
- kotlin - 领域:如何通过 DynamicRealm 判断一个字段是否可以为空?
- excel - Countifs 多列
- php - 自引用表上的 Laravel Eloquent Inner Join
- sql-server - 用户定义类型的 SQL Server 2016 列
- c# - 如何在鼠标位置发射子弹
- java - 用于女性语音中文本到语音的 Java 代码
- java - 路由前如何在 Play 1.2.x 中调用 servlet 过滤器
- c++ - 如何使用 C++ 在 Ubuntu 上强制用户注销?
- python - 我的热图在 Pandas 中看起来不正确
- python - 使用 matplotlib animate 和 patch 为正方形和箭头设置动画