我有一个EKS集群,我在其中添加了支持以在混合模式下工作(换句话说,我在其中添加了Fargate配置文件)。我的意图是仅在AWS Fargate上运行特定的工作负载,而将EKS辅助节点保留用于其他类型的工作负载。
要对此进行测试,我的Fargate个人资料定义为:
为了测试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保持待定状态,并且从未安排到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字段中,但不确定其表示什么。
在这种情况下,是否有任何想法或通常出现的问题值得我们进行故障排除?谢谢
答案 0 :(得分:5)
事实证明,问题始终出在与Fargate配置文件关联的专用子网的网络设置中。
要提供更多信息,这是我最初拥有的内容:
我忘记的是,我需要启用从vpc专用子网到外部世界的连接(我缺少NAT网关)。因此,我在与EKS关联的公共子网中创建了NAT网关,并在其关联的路由表中将如下所示的其他条目添加到了私有子网中:
0.0.0.0/0 nat-xxxxxxxx
这解决了我上面遇到的问题,尽管我不确定AWS Fargate配置文件仅需要与私有子网相关联的真正原因。
答案 1 :(得分:0)
如果您使用社区模块,则可以通过以下配置来解决所有这些问题:
_FuncPtr