我使用版本1.6.6在GKE集群中运行Kubernetes,使用1.6.4运行另一个集群。两者都遇到了GCE计算磁盘故障的问题。
我一直在使用容器内的kill 1或直接杀死GCE节点来模拟失败。有时我很幸运,pod将再次在同一节点上创建。但大多数时候情况并非如此。
查看事件日志,它显示尝试挂载3次的错误,但无法执行任何操作。没有人为干预,它永远不会纠正它自己。我被迫多次杀死pod,直到它工作。在维护期间,这是一个巨大的痛苦。
如何让Kubernetes正确地进行故障转移?有没有办法告诉部署在失败时尝试新节点?有没有办法删除3次重试限制?
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: dev-postgres
namespace: jolene
spec:
revisionHistoryLimit: 0
template:
metadata:
labels:
app: dev-postgres
namespace: jolene
spec:
containers:
- image: postgres:9.6-alpine
imagePullPolicy: IfNotPresent
name: dev-postgres
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: postgres-data
env:
[ ** Removed, irrelevant environment variables ** ]
ports:
- containerPort: 5432
livenessProbe:
exec:
command:
- sh
- -c
- exec pg_isready
initialDelaySeconds: 30
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
exec:
command:
- sh
- -c
- exec pg_isready --host $POD_IP
initialDelaySeconds: 5
timeoutSeconds: 3
periodSeconds: 5
volumes:
- name: postgres-data
persistentVolumeClaim:
claimName: dev-jolene-postgres
我在使用和不使用PersistentVolume / PersistentVolumeClaim时尝试了这个。
apiVersion: "v1"
kind: "PersistentVolume"
metadata:
name: dev-jolene-postgres
spec:
capacity:
storage: "1Gi"
accessModes:
- "ReadWriteOnce"
claimRef:
namespace: jolene
name: dev-jolene-postgres
gcePersistentDisk:
fsType: "ext4"
pdName: "dev-jolene-postgres"
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dev-jolene-postgres
namespace: jolene
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
答案 0 :(得分:1)
默认情况下,每个节点都是可调度的,因此无需在部署中明确提及它。可以提及重试限制的功能仍在进行中,可以在此处跟踪https://github.com/kubernetes/kubernetes/issues/16652