diff --git a/cfg/config.yaml b/cfg/config.yaml
index 8ad2e89acf585f7482c8abc9ff0f793d3130e6f1..e7c2e4fbe11218c6a6df369689fc3a7ffe6c4f9a 100644
--- a/cfg/config.yaml
+++ b/cfg/config.yaml
@@ -26,42 +26,54 @@ master:
       - "hyperkube apiserver"
       - "apiserver"
     confs:
-      - /etc/kubernetes/manifests/kube-apiserver.yaml
       - /etc/kubernetes/apiserver.conf
       - /etc/kubernetes/apiserver
     defaultconf: /etc/kubernetes/apiserver
 
+    podspecs:
+      - /etc/kubernetes/manifests/kube-apiserver.yaml
+    defaultpodspec: /etc/kubernetes/manifests/kube-apiserver.yaml
+
   scheduler:
     bins:
       - "kube-scheduler"
       - "hyperkube scheduler"
       - "scheduler"
     confs: 
-      - /etc/kubernetes/manifests/kube-scheduler.yaml
       - /etc/kubernetes/scheduler.conf
       - /etc/kubernetes/scheduler
     defaultconf: /etc/kubernetes/scheduler
 
+    podspecs:
+      - /etc/kubernetes/manifests/kube-scheduler.yaml
+    defaultpodspec: /etc/kubernetes/manifests/kube-scheduler.yaml
+
   controllermanager:
     bins:
       - "kube-controller-manager"
       - "hyperkube controller-manager"
       - "controller-manager"
     confs:
-      - /etc/kubernetes/manifests/kube-controller-manager.yaml
       - /etc/kubernetes/controller-manager.conf
       - /etc/kubernetes/controller-manager
     defaultconf: /etc/kubernetes/controller-manager
 
+    podspecs:
+      - /etc/kubernetes/manifests/kube-controller-manager.yaml
+    defaultpodspec: /etc/kubernetes/manifests/kube-controller-manager.yaml
+
   etcd:
     optional: true
     bins:
       - "etcd"
     confs:
-      - /etc/kubernetes/manifests/etcd.yaml
       - /etc/etcd/etcd.conf
     defaultconf: /etc/etcd/etcd.conf
 
+    podspecs:
+      - /etc/kubernetes/manifests/etcd.yaml
+    defaultpodspec: /etc/kubernetes/manifests/etcd.yaml
+
   flanneld:
     optional: true
     bins:
diff --git a/cmd/common.go b/cmd/common.go
index b618cff550dffaeb82a082c113eefe58af5753c6..e9cc610c1cee10e4a0cc16c8212389c50c7746fa 100644
--- a/cmd/common.go
+++ b/cmd/common.go
@@ -67,6 +67,7 @@ func runChecks(t check.NodeType) {
 	// checks that the executables we need for the node type are running.
 	binmap := getBinaries(typeConf)
 	confmap := getConfigFiles(typeConf)
+	podspecmap := getPodSpecFiles(typeConf)
 
 	switch t {
 	case check.MASTER:
@@ -88,6 +89,7 @@ func runChecks(t check.NodeType) {
 	s := string(in)
 	s = makeSubstitutions(s, "bin", binmap)
 	s = makeSubstitutions(s, "conf", confmap)
+	s = makeSubstitutions(s, "podspec", podspecmap)
 
 	glog.V(1).Info(fmt.Sprintf("Using config file: %s\n", viper.ConfigFileUsed()))
 	glog.V(1).Info(fmt.Sprintf("Using benchmark file: %s\n", path))
diff --git a/cmd/util.go b/cmd/util.go
index 7524eaf595e6d0964c129f1a3c1c25a0ce3207aa..5dd23038fdf50cd9be9dbb300a3ec96fc9a21a91 100644
--- a/cmd/util.go
+++ b/cmd/util.go
@@ -147,6 +147,37 @@ func getConfigFiles(v *viper.Viper) map[string]string {
 	return confmap
 }
 
+// getPodSpecFiles finds which of the set of candidate podspec files exist
+func getPodSpecFiles(v *viper.Viper) map[string]string {
+	podspecmap := make(map[string]string)
+
+	for _, component := range v.GetStringSlice("components") {
+		s := v.Sub(component)
+		if s == nil {
+			continue
+		}
+
+		// See if any of the candidate podspec files exist
+		podspec := findConfigFile(s.GetStringSlice("podspecs"))
+		if podspec == "" {
+			if s.IsSet("defaultpodspec") {
+				podspec = s.GetString("defaultpodspec")
+				glog.V(2).Info(fmt.Sprintf("Using default podspec file name '%s' for component %s", podspec, component))
+			} else {
+				// Default the config file name that we'll substitute to the name of the component
+				printlnWarn(fmt.Sprintf("Missing podspec file for %s", component))
+				podspec = component
+			}
+		} else {
+			glog.V(2).Info(fmt.Sprintf("Component %s uses podspec file '%s'", component, podspec))
+		}
+
+		podspecmap[component] = podspec
+	}
+
+	return podspecmap
+}
+
 // verifyBin checks that the binary specified is running
 func verifyBin(bin string) bool {