Amazon web services 在kubernetes中运行pod定义文件时出错

Amazon web services 在kubernetes中运行pod定义文件时出错,amazon-web-services,docker,kubernetes,amazon-ecs,amazon-eks,Amazon Web Services,Docker,Kubernetes,Amazon Ecs,Amazon Eks,创建“pod defination.yml”时出错: pod“myapp”被禁止:pod没有 “kubernetes.io/config.mirror”注释,节点 “ip-172-31-38-73.us-east-2.compute.internal”只能创建镜像 豆荚 请尝试以下操作,因为图像元素不是数组 apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: container

创建“pod defination.yml”时出错:

pod“myapp”被禁止:pod没有 “kubernetes.io/config.mirror”注释,节点 “ip-172-31-38-73.us-east-2.compute.internal”只能创建镜像 豆荚


请尝试以下操作,因为图像元素不是数组

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: nginx-container
    image: nginx

这里有三个问题。不幸的是,这是部分答案

1) @Dinesh的形象绝对正确

   containers:
      - name: nginx-container
      - image: nginx
在您的配置中,它尝试使用两个图像-
nginx容器
nginx
。您只需要名为nginx container的
nginx

正确的是

spec:
  containers:
  - name: nginx-container
    image: nginx
2) 您应该始终在元数据中设置
名称:
——这是必填字段。如果不指定.metadata.name,您将获得的
资源名称不能为空

Object: &{map["apiVersion":"v1" "kind":"Pod" "metadata":map["annotations":map["kubectl.kubernetes.io/last-applied-configuration":""] "labels":map["app":"myapp"] "namespace":"default"] "spec":map["containers":[map["image":"nginx" "name":"nginx-container"]]]]}
from server for: "pod-defination.yml": resource name may not be empty
依照

在要创建的Kubernetes对象的.yaml文件中,您将 需要为以下字段设置值:

  • apiVersion-用于创建此对象的Kubernetes API的哪个版本
  • 种类-要创建什么类型的对象
  • 元数据—帮助唯一标识对象的数据,包括名称字符串、UID和可选命名空间
  • 规格-您希望对象处于什么状态
也按照

每个对象类型在嵌套对象中都必须具有以下元数据 名为“元数据”的字段:

  • 名称空间:名称空间是对象细分为的DNS兼容标签。默认名称空间为“default”。查看名称空间 更多文档
  • 名称:在当前名称空间中唯一标识此对象的字符串(请参阅标识符文档)。此值在中使用 检索单个对象时的路径
  • uid:时间和空间上唯一的值(通常是RFC 4122生成的标识符,请参阅标识符文档),用于区分 在已删除且具有相同名称的对象之间 重建
3) pod没有“kubernetes.io/config.mirror”注释

豆荚“布拉布拉”是禁止的:豆荚没有 “kubernetes.io/config.mirror”注释,节点“blabla”只能 创建镜像吊舱

上述错误在[NodeRestriction Allocation plugin]{}出现问题的情况下是典型的

准入控制器是一段代码,用于截获对许可证的请求 对象持久化之前的Kubernetes API服务器,但是 请求经过身份验证和授权后。[……]接纳 控制器可能是“验证”、“变异”或两者兼而有之。变异 控制器可以修改其允许的对象;验证控制器 可能不会。[…]如果任一阶段的任何控制器拒绝 请求时,整个请求将立即被拒绝,并显示一个错误 返回给最终用户

节点限制接纳控制器:

此准入控制器将节点和Pod对象限制为kubelet 可以修改。为了受此准入控制器的限制, kubelets必须在system:nodes组中使用凭据,并带有 表单系统中的用户名:节点:。这样的kubelets只会 允许修改自己的节点API对象,并且只修改Pod 绑定到其节点的API对象。在Kubernetes 1.11+中, 不允许kubelets从其节点更新或删除污染 API对象

根据我们可以看到,
节点限制
是启用的准入控制器的一部分

​NamespaceLifecycle、LimitRanger、ServiceAccount、DefaultStorageClass、, ResourceQuota、DefaultTolerationSeconds、NodeRestriction、, 变更许可Webhook、验证许可Webhook、PodSecurityPolicy

3个月前已经有了,但没有任何回复

由于EKS由AWS控制平面管理,似乎不可能修改内置的许可控制器,但您可以查看动态许可控制器和许可Webhook。更多信息可在中找到

As-EKS支持动态准入控制器,允许客户部署自定义Webhook,从而支持额外的开源工具来控制网络流量和监控AWS上的Kubernetes群集

我建议您使用手动创建包含所有所需选项的集群

希望能有帮助

Object: &{map["apiVersion":"v1" "kind":"Pod" "metadata":map["annotations":map["kubectl.kubernetes.io/last-applied-configuration":""] "labels":map["app":"myapp"] "namespace":"default"] "spec":map["containers":[map["image":"nginx" "name":"nginx-container"]]]]}
from server for: "pod-defination.yml": resource name may not be empty