我正在使用EKS,并从存储类和持久卷声明动态创建持久卷。以下是我的演示yaml:-
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: test-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
zones: us-east-1b
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
- debug
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: test-storage
resources:
requests:
storage: 1Gi
我正在测试当持久卷所连接的节点“死亡”时会发生什么(我正在关闭AWS控制台中的EC2示例)。
我注意到的是,持久卷不会从死节点分离并重新连接到集群中的活动节点,直到该节点被删除。使用kubectl delete node
或通过EKS自动(大约20分钟后)。
我想知道的是,有没有一种方法可以改变这种默认行为?减少EKS从集群中自动删除节点所需的时间,或者更改分离-连接控制器何时启动以将持久卷移动到活动节点。
先谢谢你了。
- 编辑--
最初,我意识到pod不会上线,因为两个节点(2节点集群)位于不同的可用性区域,因此卷无法连接到集群中的其他节点,并且必须等待EKS在同一可用性区域中启动新节点。
我启动了与另一个节点位于同一可用性组中的另一个节点,并再次运行测试。
pod仍尝试在新pod上出现,但由于卷仍连接到旧pod而处于挂起状态
Multi-Attach error for volume "pvc-xxxxxxxx" Volume is already used by pod(s) podname-xxxxx"
是否可以更改EKS终止死节点上的pod所需的默认时间,以便释放卷并将其连接到新pod挂起的新节点?
默认情况下,EKS需要20分钟从群集中删除死节点,然后释放卷。
2条答案
按热度按时间uz75evzq1#
您可以将删除宽限期设置为0。在你的吊舱规格中。这可能有助于您快速删除Pod。
在您pod规范部分添加以下内容:
llew8vvj2#
如果您的EKS集群存在不同可用区的节点,且持久卷无法挂接到不同可用区的节点,您可以采取以下步骤解决此问题:
1.创建多AZ EKS群集:确保您的EKS集群是使用Terraform或EKS配置中指定的多个可用性区域创建的。这可确保节点分布在不同的可用性区域中。
1.利用节点标签和pod亲和性:配置您的Pod使用节点亲和规则,并根据节点的可用区对节点进行标记。这样,pod将仅在与持久卷相同的可用性区域内的节点上被调度。您可以在pod部署YAML文件中指定节点选择器和pod关联规则。
1.使用支持跨AZ卷连接的存储资源调配程序:您kubernetes.io/aws-ebs可以考虑使用支持跨AZ卷连接的存储预配程序(如kubernetes.io/aws-ebs-csi-driver预配程序。CSI(容器存储接口)驱动程序允许在跨可用性区域连接卷时具有更大的灵活性。
通过执行这些步骤,您可以确保仅在与持久卷位于同一可用区的节点上调度Pod。这样,当节点发生故障或终止时,可以在同一可用性区内的另一个节点上重新调度pod,并且可以正确地附接持久卷。
我还在GitHub上找到了这个开源项目-Awesome-CloudOps-Automation。他们正在创建一个开源框架,用于使用Jupyter Notebooks编写Runbook。他们有many EKS actions,可用于自动执行一些与AWS EKS相关的任务。