kubernetes - 尝试在 AWS Fargate 上调度 Pod 时卡在 Pending 状态
问题描述
我有一个 EKS 集群,我已向其中添加了在混合模式下工作的支持(换句话说,我已向其中添加了 Fargate 配置文件)。我的意图是仅在 AWS Fargate 上运行特定的工作负载,同时将 EKS 工作程序节点保留用于其他类型的工作负载。
为了测试这一点,我的 Fargate 配置文件定义为:
- 仅限于特定的命名空间(比方说:mynamespace)
- 具有特定标签,因此 pod 需要匹配它才能在 Fargate 上安排(标签为:fargate: myvalue)
为了测试 k8s 资源,我正在尝试部署简单的 nginx 部署,如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: mynamespace
labels:
fargate: myvalue
spec:
selector:
matchLabels:
app: nginx
version: 1.7.9
fargate: myvalue
replicas: 1
template:
metadata:
labels:
app: nginx
version: 1.7.9
fargate: myvalue
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
当我尝试应用此资源时,我得到以下信息:
$ kubectl get pods -n mynamespace -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-596c594988-x9s6n 0/1 Pending 0 10m <none> <none> 07c651ad2b-7cf85d41b2424e529247def8bda7bf38 <none>
Pod 保持在 Pending 状态,它永远不会被调度到 AWS Fargate 实例。
这是一个 pod 描述输出:
$ kubectl describe pod nginx-deployment-596c594988-x9s6n -n mynamespace
Name: nginx-deployment-596c594988-x9s6n
Namespace: mynamespace
Priority: 2000001000
PriorityClassName: system-node-critical
Node: <none>
Labels: app=nginx
eks.amazonaws.com/fargate-profile=myprofile
fargate=myvalue
pod-template-hash=596c594988
version=1.7.9
Annotations: kubernetes.io/psp: eks.privileged
Status: Pending
IP:
Controlled By: ReplicaSet/nginx-deployment-596c594988
NominatedNodeName: 9e418415bf-8259a43075714eb3ab77b08049d950a8
Containers:
nginx:
Image: nginx:1.7.9
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-784d2 (ro)
Volumes:
default-token-784d2:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-784d2
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: <none>
我可以从这个输出中得出的结论是选择了正确的 Fargate 配置文件:
eks.amazonaws.com/fargate-profile=myprofile
另外,我看到一些值被添加到 NOMINATED NODE 字段,但不确定它代表什么。
发生的任何想法或常见问题,在这种情况下可能值得排除故障?谢谢
解决方案
事实证明,问题一直存在于与 Fargate 配置文件关联的私有子网的网络设置中。
为了提供更多信息,这是我最初拥有的:
- 具有多个工作节点的 EKS 集群,我仅将公共子网分配给 EKS 集群本身
- 当我尝试将 Fargate 配置文件添加到 EKS 集群时,由于 Fargate 当前的限制,无法将配置文件与公共子网关联。为了解决这个问题,我创建了与公共子网具有相同标签的私有子网,以便 EKS 集群知道它们
我忘记了我需要启用从 vpc 私有子网到外部世界的连接(我缺少 NAT 网关)。因此,我在与 EKS 关联的公共子网中创建了 NAT 网关,并将其关联的路由表中的附加条目添加到私有子网中,如下所示:
0.0.0.0/0 nat-xxxxxxxx
这解决了我上面遇到的问题,尽管我不确定 AWS Fargate 配置文件只需要与私有子网关联的真正原因。
推荐阅读
- html - CGI 脚本在 Apache2 (localhost) 中显示为纯文本
- c# - 反射铸造
- php - PHP从对象中删除空项目
- android - CropActivity 未在 Fragment 内的 onActivityResult 中启动
- python - Django 单元测试 - 客户端登录似乎不起作用
- python - urllib.requests.urlopen() 在 MacOS 上导致 CERTIFICATE_VERIFY_FAILED
- html - CSS重叠div在另一个具有相对位置/内联块的div上?
- google-bigquery - 正则表达式-如何在 BigQuery 中匹配单词 apple 而不是 pine_apple
- android - Firebase 使用电子邮件和密码验证登录失败,凭据正确
- javascript - 检查类是否添加到元素