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
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?