kubernetes如何为连接卷的有状态应用程序提供HA?

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

我无法将我的有状态应用程序配置为对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 -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对于需要以下一项或多项的应用程序很有价值

  • 稳定、唯一的网络标识符
  • 稳定、持久的存储
  • 有序、优雅的部署和扩展
  • 有序、自动的滚动更新

对于非托管Kubernetes群集,这是一个难题,适用于所有类型的RWO卷

Kubernetes社区对此进行了多次讨论,总结如下:

当前的思想过程是借助NodeTolerations提出解决方案,并通过CSI驱动程序实现该解决方案


在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