2

我编写了如下部署文件,这给了我错误unknown field "platform"。关于指定什么以便它基于体系结构部署的任何想法?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
        platform:
          architecture: amd64
          os: linux
      - name: nginx
        image: ppc64le/nginx:1.7.9
        ports:
        - containerPort: 80
        platform:
          architecture: ppc64le
          os: linux
4

3 回答 3

3

您必须在部署规范中使用 nodeAffinity 定义。这是我用来将任务固定到 amd64 或 arm 主机的示例:

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: beta.kubernetes.io/arch
            operator: In
            values:
            - amd64

您可以使用任意键和值。这是记录在案的示例

于 2018-05-18T06:31:05.703 回答
2

如果您查看容器的规范- 没有定义字段 platform- 所以您的错误与部署 YAML 中的错误有关。您必须从 YAML 中删除以下块才能使其正常工作(前提是清单中没有其他问题):

platform:
          architecture: ppc64le
          os: linux

其次,AFAIK,您尝试做的事情是不可能的。我可以建议两种方法作为替代方法:

  1. 如果您使用 helm,您可以参数化 Nginx 映像的版本,然后根据您对目标 OS 架构的了解动态传递它。

    • 名称:nginx 映像:nginx:{{ version }} 端口:- containerPort:80
  2. 第二种方法是使用污点和容忍度或节点亲和性在具有适当操作系统的节点上调度 pod。这也意味着您将不得不潜在地进行多个部署 - 每个架构一个。

污点和容忍文档的 详细信息可以在这里找到节点和pod 亲和性的详细信息可以在这里找到

于 2018-05-18T06:30:35.363 回答
0

在导航对 kubernetes 集群状态建模的资源时,了解kubectl explain很有用。

因此,对于模板下的规范中字段的描述以描述部署规范中的 pod,您可以运行命令

kubectl explain deployment.spec.template.spec

并得到

KIND:     Deployment
VERSION:  apps/v1

RESOURCE: spec <Object>

DESCRIPTION:
     Specification of the desired behavior of the pod. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

     PodSpec is a description of a pod.

FIELDS:
   activeDeadlineSeconds        <integer>
     Optional duration in seconds the pod may be active on the node relative to
     StartTime before the system will actively try to mark it failed and kill
     associated containers. Value must be a positive integer.

   affinity     <Object>
     If specified, the pod's scheduling constraints

   automountServiceAccountToken <boolean>
     AutomountServiceAccountToken indicates whether a service account token
     should be automatically mounted.

   containers   <[]Object> -required-
     List of containers belonging to the pod. Containers cannot currently be
     added or removed. There must be at least one container in a Pod. Cannot be
     updated

我已经剪掉了上面的输出,还有很多要读的。

如果您只想要字段名称,请使用--recursive标志

kubectl explain deployment.spec.template.spec --recursive 

输出的摘录...

 podAffinity       <Object>
     preferredDuringSchedulingIgnoredDuringExecution        <[]Object>
        podAffinityTerm     <Object>
           labelSelector    <Object>
              matchExpressions      <[]Object>
                 key        <string>
                 operator   <string>
                 values     <[]string>
              matchLabels   <map[string]string>
           namespaces       <[]string>
           topologyKey      <string>
        weight      <integer>
     requiredDuringSchedulingIgnoredDuringExecution <[]Object>
        labelSelector       <Object>
           matchExpressions <[]Object>
              key   <string>
              operator      <string>
              values        <[]string>
           matchLabels      <map[string]string>
        namespaces  <[]string>
        topologyKey <string> 

以上内容适用于在命令行下工作。

在编辑器中,您可以使用YAML Language Server进行自动完成和验证。

于 2021-03-31T08:39:34.280 回答