kubernetes如何为连接卷的有状态应用程序提供HA?
我无法将我的有状态应用程序配置为对kubernetes worker故障(我的应用程序pod所在的故障)具有恢复能力kubernetes如何为连接卷的有状态应用程序提供HA?,kubernetes,high-availability,Kubernetes,High Availability,我无法将我的有状态应用程序配置为对kubernetes worker故障(我的应用程序pod所在的故障)具有恢复能力 $kk获取pod-owide 名称就绪状态重新启动老化IP节点指定节点就绪门 示例-openebs-97767f45f-xbwp6 1/1运行0 6m21s 192.168.207.233 new-kube-worker1 一旦我取下工人,kubernetes注意到pod没有响应,并将其安排给其他工人 marek649@new-kube-master:~$ kk get pod
$kk获取pod-owide
名称就绪状态重新启动老化IP节点指定节点就绪门
示例-openebs-97767f45f-xbwp6 1/1运行0 6m21s 192.168.207.233 new-kube-worker1
一旦我取下工人,kubernetes注意到pod没有响应,并将其安排给其他工人
marek649@new-kube-master:~$ kk get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
example-openebs-97767f45f-gct5b 0/1 ContainerCreating 0 22s <none> new-kube-worker2 <none> <none>
example-openebs-97767f45f-xbwp6 1/1 Terminating 0 13m 192.168.207.233 new-kube-worker1 <none> <none>
marek649@new-kube大师:~$kk获得pod-owide
名称就绪状态重新启动老化IP节点指定节点就绪门
示例-openebs-97767f45f-gct5b 0/1集装箱创建0 22s new-kube-worker2
示例-openebs-97767f45f-xbwp6 1/1端接0 13m 192.168.207.233新-kube-worker1
这很好,但新容器无法启动,因为它试图连接旧容器使用的相同pvc,并且kubernetes不会释放到旧(无响应)节点的绑定
$kk描述pod示例-openebs-97767f45f-gct5b
注释:
状态:待定
知识产权:
IPs:
控制人:ReplicaSet/example-openebs-97767f45f
容器:
开场白示例:
容器ID:
图片:nginx
图像ID:
端口:80/TCP
主机端口:0/TCP
国家:等待
原因:集装箱制造
就绪:错误
重新启动计数:0
环境:
挂载:
/来自演示声明(rw)的usr/share/nginx/html
/来自default-token-4xmvf(ro)的var/run/secrets/kubernetes.io/serviceCount
条件:
类型状态
初始化为True
准备错误
集装箱准备好了吗
播客预定为真
卷数:
演示声明:
类型:PersistentVolumeClaim(对同一命名空间中PersistentVolumeClaim的引用)
索赔名称:示例pvc
只读:false
默认-token-4xmvf:
类型:Secret(由Secret填充的卷)
SecretName:default-token-4xmvf
可选:false
QoS等级:最佳努力
节点选择器:
容差:node.kubernetes.io/未就绪:不执行300秒
node.kubernetes.io/不可访问:不执行300秒
活动:
从消息中键入原因年龄
---- ------ ---- ---- -------
正常计划的2m9s默认计划程序已成功将default/example-openebs-97767f45f-gct5b分配给new-kube-worker2
警告失败连接卷2m9s attachdetach控制器“pvc-911f94a9-b43a-4cac-be94-838b0e7376e8”卷的多连接错误已由pod示例-openebs-97767f45f-xbw使用
p6
警告FailedMount 6s kubelet,new-kube-worker2无法附加或装载卷:未安装的卷=[demo claim],未连接的卷=[demo claim default-token-4xmvf]:超时waiti
对这种情况的怀疑
我可以通过手动强制删除容器、解除PV绑定并重新创建容器来解决这种情况,但这远远不是我所期望的高可用性
我正在使用openEBS jiva卷,在手动干预后,我能够使用PV上的正确数据恢复容器,这意味着数据可以正确复制到其他节点
有人能解释一下我做错了什么,以及如何实现附加卷的k8s应用程序的容错性吗
我发现这是相关的,但我不知道;看不到任何解决此问题的建议它最终会释放卷,通常限制因素是网络存储系统检测卷卸载速度慢。但你是对的,这是一个限制。通常的解决方法是使用支持多装载的卷类型,例如NFS或CEPFS。部署有状态应用程序kubernetes has object with,在这种情况下可能会对您有所帮助 statefulset对于需要以下一项或多项的应用程序很有价值
- 稳定、唯一的网络标识符
- 稳定、持久的存储
- 有序、优雅的部署和扩展
- 有序、自动的滚动更新
在openebs上,当我们查看云提供商如何处理这种情况时,我们发现当一个节点关闭时,其相应的节点对象将从集群中删除。此操作不会造成任何伤害,因为当节点重新联机时,将重新创建节点对象。在这种情况下,它没有帮助。如果您想要4个副本,每个副本都有自己的存储空间,那么StS是很好的选择,但是每个pod都会遇到同样的问题,即在出现故障时重启缓慢。我还应该补充一点,真正的解决方案是让您的应用程序能够承受一定数量的pod停机。但这个问题仍然影响MTTR,而不是正常运行时间。
marek649@new-kube-master:~$ kk get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
example-openebs-97767f45f-gct5b 0/1 ContainerCreating 0 22s <none> new-kube-worker2 <none> <none>
example-openebs-97767f45f-xbwp6 1/1 Terminating 0 13m 192.168.207.233 new-kube-worker1 <none> <none>
$ kk describe pod example-openebs-97767f45f-gct5b
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/example-openebs-97767f45f
Containers:
example-openebs:
Container ID:
Image: nginx
Image ID:
Port: 80/TCP
Host Port: 0/TCP
State: Waiting
Reason: ContainerCreating
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/usr/share/nginx/html from demo-claim (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-4xmvf (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
demo-claim:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: example-pvc
ReadOnly: false
default-token-4xmvf:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-4xmvf
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m9s default-scheduler Successfully assigned default/example-openebs-97767f45f-gct5b to new-kube-worker2
Warning FailedAttachVolume 2m9s attachdetach-controller Multi-Attach error for volume "pvc-911f94a9-b43a-4cac-be94-838b0e7376e8" Volume is already used by pod(s) example-openebs-97767f45f-xbw
p6
Warning FailedMount 6s kubelet, new-kube-worker2 Unable to attach or mount volumes: unmounted volumes=[demo-claim], unattached volumes=[demo-claim default-token-4xmvf]: timed out waiti
ng for the condition