What is causing this Kubernetes manifest validation to fail?

5/19/2017

I am trying to install Helm (v2.4.1) Tiller into a Kubernetes cluster (v1.5.7). This needs to be able to be done in a non-internet environment, so I want to get the manifest for the Tiller deployment from helm init --dry-run --debug. However, when I copy the manifest into a file called tiller.yaml and then run kubectl create -f tiller.yaml I get the validation error shown below. What's wrong with the file please?

error validating "tiller.yaml": error validating data: [found invalid field labels for v1beta1.Deployment, found invalid field name for v1beta1.Deployment, found invalid field namespace for v1beta1.Deployment, found invalid field Spec for v1beta1.Deployment, found invalid field Status for v1beta1.Deployment, found invalid field creationTimestamp for v1beta1.Deployment]; if you choose to ignore these errors, turn validation off with --validate=false

tiller.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
Spec:
  MinReadySeconds: 0
  Paused: false
  ProgressDeadlineSeconds: null
  Replicas: 1
  RevisionHistoryLimit: null
  RollbackTo: null
  Selector: null
  Strategy:
    RollingUpdate: null
    Type: ""
  Template:
    Spec:
      ActiveDeadlineSeconds: null
      Affinity: null
      AutomountServiceAccountToken: null
      Containers:
      - Args: null
        Command: null
        Env:
        - Name: TILLER_NAMESPACE
          Value: kube-system
          ValueFrom: null
        EnvFrom: null
        Image: gcr.io/kubernetes-helm/tiller:v2.4.1
        ImagePullPolicy: IfNotPresent
        Lifecycle: null
        LivenessProbe:
          Exec: null
          FailureThreshold: 0
          HTTPGet:
            HTTPHeaders: null
            Host: ""
            Path: /liveness
            Port: 44135
            Scheme: ""
          InitialDelaySeconds: 1
          PeriodSeconds: 0
          SuccessThreshold: 0
          TCPSocket: null
          TimeoutSeconds: 1
        Name: tiller
        Ports:
        - ContainerPort: 44134
          HostIP: ""
          HostPort: 0
          Name: tiller
          Protocol: ""
        ReadinessProbe:
          Exec: null
          FailureThreshold: 0
          HTTPGet:
            HTTPHeaders: null
            Host: ""
            Path: /readiness
            Port: 44135
            Scheme: ""
          InitialDelaySeconds: 1
          PeriodSeconds: 0
          SuccessThreshold: 0
          TCPSocket: null
          TimeoutSeconds: 1
        Resources:
          Limits: null
          Requests: null
        SecurityContext: null
        Stdin: false
        StdinOnce: false
        TTY: false
        TerminationMessagePath: ""
        TerminationMessagePolicy: ""
        VolumeMounts: null
        WorkingDir: ""
      DNSPolicy: ""
      Hostname: ""
      ImagePullSecrets: null
      InitContainers: null
      NodeName: ""
      NodeSelector: null
      RestartPolicy: ""
      SchedulerName: ""
      SecurityContext:
        FSGroup: null
        HostIPC: false
        HostNetwork: false
        HostPID: false
        RunAsNonRoot: null
        RunAsUser: null
        SELinuxOptions: null
        SupplementalGroups: null
      ServiceAccountName: ""
      Subdomain: ""
      TerminationGracePeriodSeconds: null
      Tolerations: null
      Volumes: null
    creationTimestamp: null
    labels:
      app: helm
      name: tiller
Status:
  AvailableReplicas: 0
  Conditions: null
  ObservedGeneration: 0
  ReadyReplicas: 0
  Replicas: 0
  UnavailableReplicas: 0
  UpdatedReplicas: 0
creationTimestamp: null
labels:
  app: helm
  name: tiller
name: tiller-deploy
namespace: kube-system
---
apiVersion: v1
kind: Service
Spec:
  ClusterIP: ""
  ExternalIPs: null
  ExternalName: ""
  LoadBalancerIP: ""
  LoadBalancerSourceRanges: null
  Ports:
  - Name: tiller
    NodePort: 0
    Port: 44134
    Protocol: ""
    TargetPort: tiller
  Selector:
    app: helm
    name: tiller
  SessionAffinity: ""
  Type: ClusterIP
Status:
  LoadBalancer:
    Ingress: null
creationTimestamp: null
labels:
  app: helm
  name: tiller
name: tiller-deploy
namespace: kube-system
-- John
kubernetes
kubernetes-helm

1 Answer

5/19/2017

All your attributes should start with a lowercase letter, and creationTimestamp/labels/etc should all appear within a "metadata" stanza. How was this manifest formed?

-- Jordan Liggitt
Source: StackOverflow