change kubernetes to hyperkube

Change-Id: I7c3892ebee4c0ccb334960d8864a956b9c480259
diff --git a/kubernetes/files/kube-addons/dashboard/dashboard-controller.yaml b/kubernetes/files/kube-addons/dashboard/dashboard-controller.yaml
index c2eba63..562866b 100644
--- a/kubernetes/files/kube-addons/dashboard/dashboard-controller.yaml
+++ b/kubernetes/files/kube-addons/dashboard/dashboard-controller.yaml
@@ -3,7 +3,7 @@
 metadata:
   # Keep the name in sync with image version and
   # gce/coreos/kube-manifests/addons/dashboard counterparts
-  name: kubernetes-dashboard-v1.1.0-beta2
+  name: kubernetes-dashboard-v1.1.0
   namespace: kube-system
   labels:
     k8s-app: kubernetes-dashboard
@@ -20,7 +20,7 @@
     spec:
       containers:
       - name: kubernetes-dashboard
-        image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.1.0-beta2
+        image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.1.0
         resources:
           # keep request = limit to keep this container in guaranteed class
           limits:
diff --git a/kubernetes/files/manifest/kube-apiserver.manifest b/kubernetes/files/manifest/kube-apiserver.manifest
index db870d8..09835a2 100644
--- a/kubernetes/files/manifest/kube-apiserver.manifest
+++ b/kubernetes/files/manifest/kube-apiserver.manifest
@@ -11,11 +11,10 @@
   terminationGracePeriodSeconds: 30
   containers:
   - name: kube-apiserver
-    image: {{ master.registry.host }}/kube-master:{{ master.version }}
+    image: {{ master.registry.host }}/hyperkube:{{ master.version }}
     command:
-    - /bin/sh
-    - -c
-    - kube-apiserver
+    - /hyperkube
+    - apiserver
       --insecure-bind-address={{ master.apiserver.insecure_address }}
       --etcd-servers={% for member in master.etcd.members %}http://{{ member.host }}:4001{% if not loop.last %},{% endif %}{% endfor %}
       --admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota
diff --git a/kubernetes/files/manifest/kube-controller-manager.manifest b/kubernetes/files/manifest/kube-controller-manager.manifest
index 3cbbbd2..873d73e 100644
--- a/kubernetes/files/manifest/kube-controller-manager.manifest
+++ b/kubernetes/files/manifest/kube-controller-manager.manifest
@@ -11,11 +11,10 @@
   terminationGracePeriodSeconds: 30
   containers:
   - name: kube-controller-manager
-    image: {{ master.registry.host }}/kube-master:{{ master.version }}
+    image: {{ master.registry.host }}/hyperkube:{{ master.version }}
     command:
-    - /bin/sh
-    - -c
-    - kube-controller-manager
+    - /hyperkube
+    - controller-manager
       --master={{ master.apiserver.insecure_address }}:8080
       --cluster-name=kubernetes
       --service-account-private-key-file=/etc/kubernetes/ssl/kubernetes-server.key
diff --git a/kubernetes/files/manifest/kube-proxy.manifest.pool b/kubernetes/files/manifest/kube-proxy.manifest.pool
index 359d9f7..3cf1c84 100644
--- a/kubernetes/files/manifest/kube-proxy.manifest.pool
+++ b/kubernetes/files/manifest/kube-proxy.manifest.pool
@@ -8,14 +8,13 @@
   hostNetwork: true
   containers:
   - name: kube-proxy
-    image: {{ pool.registry.host }}/kube-pool:{{ pool.version }}
+    image: {{ pool.registry.host }}/hyperkube:{{ pool.version }}
     resources:
       requests:
         cpu: 200m
     command:
-    - /bin/sh
-    - -c
-    - kube-proxy
+    - /hyperkube
+    - proxy
       --logtostderr=true
       --v=2
       --kubeconfig=/etc/kubernetes/proxy.kubeconfig
diff --git a/kubernetes/files/manifest/kube-scheduler.manifest b/kubernetes/files/manifest/kube-scheduler.manifest
index a0977a1..e2d5ba0 100644
--- a/kubernetes/files/manifest/kube-scheduler.manifest
+++ b/kubernetes/files/manifest/kube-scheduler.manifest
@@ -12,12 +12,11 @@
   terminationGracePeriodSeconds: 30
   containers:
   - name: kube-scheduler
-    image: {{ master.registry.host }}/kube-master:{{ master.version }}
+    image: {{ master.registry.host }}/hyperkube:{{ master.version }}
     imagePullPolicy: IfNotPresent
     command:
-    - /bin/sh
-    - -c
-    - kube-scheduler
+    - hyperkube
+    - scheduler
       --master={{ master.apiserver.insecure_address }}:8080
       --v=2
       --leader-elect=true
diff --git a/kubernetes/files/systemd/kube-apiserver.service b/kubernetes/files/systemd/kube-apiserver.service
new file mode 100644
index 0000000..bfe7bd8
--- /dev/null
+++ b/kubernetes/files/systemd/kube-apiserver.service
@@ -0,0 +1,30 @@
+[Unit]
+Description=Kubernetes API Server
+Documentation=https://github.com/kubernetes/kubernetes
+Documentation=man:kube-apiserver
+After=network.target
+After=etcd.service
+Wants=etcd.service
+
+[Service]
+EnvironmentFile=-/etc/kubernetes/config
+EnvironmentFile=-/etc/default/%p
+User=root
+ExecStart=/usr/bin/hyperkube \
+    apiserver \
+    $KUBE_LOGTOSTDERR \
+    $KUBE_LOG_LEVEL \
+    $KUBE_ALLOW_PRIV \
+        $KUBE_API_ADDRESS \
+        $KUBE_API_PORT \
+        $KUBELET_PORT \
+        $KUBE_ETCD_SERVERS \
+        $KUBE_SERVICE_ADDRESSES \
+        $KUBE_ADMISSION_CONTROL \
+        $DAEMON_ARGS
+Restart=on-failure
+Type=notify
+LimitNOFILE=65536
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/kubernetes/files/systemd/kube-controller-manager.service b/kubernetes/files/systemd/kube-controller-manager.service
new file mode 100644
index 0000000..19c56fb
--- /dev/null
+++ b/kubernetes/files/systemd/kube-controller-manager.service
@@ -0,0 +1,21 @@
+[Unit]
+Description=Kubernetes Controller Manager
+Documentation=https://github.com/kubernetes/kubernetes
+Documentation=man:kube-controller-manager
+After=network.target
+
+[Service]
+Environment=KUBE_MASTER=--master=127.0.0.1:8080
+EnvironmentFile=-/etc/kubernetes/config
+EnvironmentFile=-/etc/default/%p
+User=root
+ExecStart=/usr/bin/hyperkube \
+    controller-manager \
+    $KUBE_LOGTOSTDERR \
+    $KUBE_LOG_LEVEL \
+        $DAEMON_ARGS
+Restart=on-failure
+LimitNOFILE=65536
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/kubernetes/files/systemd/kube-proxy.service b/kubernetes/files/systemd/kube-proxy.service
new file mode 100644
index 0000000..0620223
--- /dev/null
+++ b/kubernetes/files/systemd/kube-proxy.service
@@ -0,0 +1,22 @@
+[Unit]
+Description=Kubernetes Kube-Proxy Server
+Documentation=https://github.com/kubernetes/kubernetes
+Documentation=man:kube-proxy
+After=network.target
+
+[Service]
+Environment=KUBE_MASTER=--master=127.0.0.1:8080
+EnvironmentFile=-/etc/kubernetes/config
+EnvironmentFile=-/etc/default/%p
+User=root
+ExecStart=/usr/bin/hyperkube \
+    proxy \
+    $KUBE_LOGTOSTDERR \
+    $KUBE_LOG_LEVEL \
+    $KUBE_MASTER \
+        $DAEMON_ARGS
+Restart=on-failure
+LimitNOFILE=65536
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/kubernetes/files/systemd/kube-scheduler.service b/kubernetes/files/systemd/kube-scheduler.service
new file mode 100644
index 0000000..d29f9c9
--- /dev/null
+++ b/kubernetes/files/systemd/kube-scheduler.service
@@ -0,0 +1,22 @@
+[Unit]
+Description=Kubernetes Scheduler Plugin
+Documentation=https://github.com/kubernetes/kubernetes
+Documentation=man:kube-scheduler
+After=network.target
+
+[Service]
+Environment=KUBE_MASTER=--master=127.0.0.1:8080
+EnvironmentFile=-/etc/kubernetes/config
+EnvironmentFile=-/etc/default/%p
+User=root
+ExecStart=/usr/bin/hyperkube \
+    scheduler \
+    $KUBE_LOGTOSTDERR \
+    $KUBE_LOG_LEVEL \
+    $KUBE_MASTER \
+        $DAEMON_ARGS
+Restart=on-failure
+LimitNOFILE=65536
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/kubernetes/files/systemd/kubelet.service b/kubernetes/files/systemd/kubelet.service
new file mode 100644
index 0000000..5d5f7dc
--- /dev/null
+++ b/kubernetes/files/systemd/kubelet.service
@@ -0,0 +1,30 @@
+[Unit]
+Description=Kubernetes Kubelet Server
+Documentation=https://github.com/kubernetes/kubernetes
+Documentation=man:kubelet
+After=network.target
+After=docker.service
+Requires=docker.service
+Conflicts=cadvisor.service
+
+[Service]
+EnvironmentFile=-/etc/kubernetes/config
+EnvironmentFile=-/etc/default/%p
+User=root
+ExecStart=/usr/bin/hyperkube \
+    kubelet \
+    $KUBE_LOGTOSTDERR \
+    $KUBE_LOG_LEVEL \
+    $KUBE_ALLOW_PRIV \
+        $KUBELET_ADDRESS \
+        $KUBELET_PORT \
+        $KUBELET_HOSTNAME \
+        $KUBELET_API_SERVER \
+        $DOCKER_ENDPOINT \
+        $CADVISOR_PORT \
+        $DAEMON_ARGS
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
+Alias=cadvisor.service
\ No newline at end of file
diff --git a/kubernetes/map.jinja b/kubernetes/map.jinja
index ac5d008..8b60d65 100644
--- a/kubernetes/map.jinja
+++ b/kubernetes/map.jinja
@@ -1,6 +1,6 @@
 {% set common = salt['grains.filter_by']({
     'Debian': {
-        'pkgs': ['curl', 'git', 'apt-transport-https', 'python-apt', 'nfs-common', 'socat', 'netcat-traditional', 'openssl', 'kubernetes-client', 'kubernetes-node', 'python-etcd'],
+        'pkgs': ['curl', 'git', 'apt-transport-https', 'python-apt', 'nfs-common', 'socat', 'netcat-traditional', 'openssl', 'python-etcd'],
         'services': [],
     },
     'RedHat': {
@@ -11,7 +11,7 @@
 
 {% set master = salt['grains.filter_by']({
     'Debian': {
-        'pkgs': ['kubernetes-master'],
+        'pkgs': [],
         'services': ['kube-apiserver','kube-scheduler','kube-controller-manager'],
     },
     'RedHat': {
diff --git a/kubernetes/master/calico.sls b/kubernetes/master/calico.sls
index e2833b4..ec20328 100644
--- a/kubernetes/master/calico.sls
+++ b/kubernetes/master/calico.sls
@@ -11,25 +11,25 @@
     - dir_mode: 755
     - template: jinja
 
-/etc/systemd/system/calico-node.service:
-  file.managed:
-    - source: salt://kubernetes/files/calico/calico-node.service
-    - user: root
-    - group: root
+# /etc/systemd/system/calico-node.service:
+#   file.managed:
+#     - source: salt://kubernetes/files/calico/calico-node.service
+#     - user: root
+#     - group: root
 
 /usr/bin/calicoctl:
   file.managed:
-     - source: https://github.com/projectcalico/calico-containers/releases/download/{{ master.network.version }}/calicoctl
+     - source: {{ master.network.get('source', 'https://github.com/projectcalico/calico-containers/releases/download/') }}{{ master.network.version }}/calicoctl
      - source_hash: md5={{ master.network.hash }}
      - mode: 751
      - user: root
      - group: root
 
-calico_node:
-  service.running:
-  - name: calico-node
-  - enable: True
-  - watch:
-    - file: /etc/systemd/system/calico-node.service
+# calico_node:
+#   service.running:
+#   - name: calico-node
+#   - enable: True
+#   - watch:
+#     - file: /etc/systemd/system/calico-node.service
 
 {%- endif %}
\ No newline at end of file
diff --git a/kubernetes/master/controller.sls b/kubernetes/master/controller.sls
index 4526ed7..2d54236 100644
--- a/kubernetes/master/controller.sls
+++ b/kubernetes/master/controller.sls
@@ -92,6 +92,30 @@
     - mode: 644
     - contents: DAEMON_ARGS=" --master={{ master.apiserver.insecure_address }}:8080 --v=2 --leader-elect=true"
 
+/etc/systemd/system/kube-apiserver.service:
+  file.managed:
+  - source: salt://kubernetes/files/systemd/kube-apiserver.service
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 644
+
+/etc/systemd/system/kube-scheduler.service:
+  file.managed:
+  - source: salt://kubernetes/files/systemd/kube-scheduler.service
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 644
+
+/etc/systemd/system/kube-controller-manager.service:
+  file.managed:
+  - source: salt://kubernetes/files/systemd/kube-controller-manager.service
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 644
+
 master_services:
   service.running:
   - names: {{ master.services }}
@@ -105,9 +129,18 @@
 
 {%- if not pillar.kubernetes.pool is defined %}
 
-/etc/default/kubelet:
+/usr/bin/hyperkube:
   file.managed:
-  - source: salt://kubernetes/files/kubelet/default.master
+     - source: {{ master.hyperkube.get('source', 'http://apt.tcpcloud.eu/kubernetes/bin/') }}{{ master.version }}/hyperkube
+     - source_hash: md5={{ master.hyperkube.hash }}
+     - mode: 751
+     - makedirs: true
+     - user: root
+     - group: root
+
+/etc/systemd/system/kubelet.service:
+  file.managed:
+  - source: salt://kubernetes/files/systemd/kubelet.service
   - template: jinja
   - user: root
   - group: root
@@ -116,6 +149,14 @@
 /etc/kubernetes/config:
   file.absent
 
+/etc/default/kubelet:
+  file.managed:
+  - source: salt://kubernetes/files/kubelet/default.master
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 644
+
 kubelet_service:
   service.running:
   - name: kubelet
diff --git a/kubernetes/master/etcd.sls b/kubernetes/master/etcd.sls
index 3e297e2..492ec8f 100644
--- a/kubernetes/master/etcd.sls
+++ b/kubernetes/master/etcd.sls
@@ -21,10 +21,6 @@
 
 {%- else %}
 
-etcd_pkg:
-  pkg.installed:
-  - name: etcd
-
 /etc/default/etcd:
   file.managed:
     - source: salt://kubernetes/files/etcd/default
@@ -33,6 +29,10 @@
     - group: root
     - mode: 644
 
+etcd_pkg:
+  pkg.installed:
+  - name: etcd
+
 etcd_service:
   service.running:
   - name: etcd
diff --git a/kubernetes/master/kube-addons.sls b/kubernetes/master/kube-addons.sls
index b5e04ff..2996916 100644
--- a/kubernetes/master/kube-addons.sls
+++ b/kubernetes/master/kube-addons.sls
@@ -82,6 +82,13 @@
     - dir_mode: 755
     - makedirs: True
 
+create_dashboard:
+  cmd.run:
+  - name: hyperkube kubectl create -f /etc/kubernetes/addons/dashboard/
+  - unless: hyperkube kubectl describe rc kubernetes-dashboard-v1.1.0 --namespace=kube-system
+  - require:
+    - service: kubelet
+
 {%- if master.network.engine == "opencontrail" %}
 
 /etc/kubernetes/addons/dashboard/dashboard-address.yaml:
diff --git a/kubernetes/master/service.sls b/kubernetes/master/service.sls
index b3ed467..46ada4d 100644
--- a/kubernetes/master/service.sls
+++ b/kubernetes/master/service.sls
@@ -5,8 +5,4 @@
 include:
 - kubernetes._common
 
-kubernetes_master_pkgs:
-  pkg.installed:
-  - names: {{ master.pkgs }}
-
 {%- endif %}
diff --git a/kubernetes/pool/calico.sls b/kubernetes/pool/calico.sls
index adcfb4d..864b48e 100644
--- a/kubernetes/pool/calico.sls
+++ b/kubernetes/pool/calico.sls
@@ -3,7 +3,7 @@
 
 /usr/bin/calicoctl:
   file.managed:
-     - source: https://github.com/projectcalico/calico-containers/releases/download/{{ pool.network.version }}/calicoctl
+     - source: {{ pool.network.get('source', 'https://github.com/projectcalico/calico-containers/releases/download/') }}{{ pool.network.version }}/calicoctl
      - source_hash: md5={{ pool.network.hash }}
      - mode: 751
      - user: root
@@ -11,7 +11,7 @@
 
 /opt/cni/bin/calico:
   file.managed:
-     - source: https://github.com/projectcalico/calico-cni/releases/download/{{ pool.network.cni.version }}/calico
+     - source: {{ pool.network.cni.get('source', 'https://github.com/projectcalico/calico-cni/releases/download/') }}{{ pool.network.cni.version }}/calico
      - source_hash: md5={{ pool.network.cni.hash }}
      - mode: 751
      - makedirs: true
@@ -20,7 +20,7 @@
 
 /opt/cni/bin/calico-ipam:
   file.managed:
-     - source: https://github.com/projectcalico/calico-cni/releases/download/{{ pool.network.ipam.version }}/calico-ipam
+     - source: {{ pool.network.ipam.get('source', 'https://github.com/projectcalico/calico-cni/releases/download/') }}{{ pool.network.ipam.version }}/calico-ipam
      - source_hash: md5={{ pool.network.ipam.hash }}
      - mode: 751
      - makedirs: true
@@ -47,17 +47,17 @@
     - dir_mode: 755
     - template: jinja
 
-/etc/systemd/system/calico-node.service:
-  file.managed:
-    - source: salt://kubernetes/files/calico/calico-node.service
-    - user: root
-    - group: root
+# /etc/systemd/system/calico-node.service:
+#   file.managed:
+#     - source: salt://kubernetes/files/calico/calico-node.service
+#     - user: root
+#     - group: root
 
-calico_node:
-  service.running:
-  - name: calico-node
-  - enable: True
-  - watch:
-    - file: /etc/systemd/system/calico-node.service
+# calico_node:
+#   service.running:
+#   - name: calico-node
+#   - enable: True
+#   - watch:
+#     - file: /etc/systemd/system/calico-node.service
 
 {%- endif %}
\ No newline at end of file
diff --git a/kubernetes/pool/kube-proxy.sls b/kubernetes/pool/kube-proxy.sls
index d461af1..3e39c37 100644
--- a/kubernetes/pool/kube-proxy.sls
+++ b/kubernetes/pool/kube-proxy.sls
@@ -13,6 +13,8 @@
     - makedirs: true
     - dir_mode: 755
 
+{%- else %}
+
 /etc/kubernetes/proxy.kubeconfig:
   file.managed:
     - source: salt://kubernetes/files/kube-proxy/proxy.kubeconfig
@@ -22,7 +24,13 @@
     - mode: 644
     - makedirs: true
 
-{%- else %}
+/etc/systemd/system/kube-proxy.service:
+  file.managed:
+  - source: salt://kubernetes/files/systemd/kube-proxy.service
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 644
 
 /etc/default/kube-proxy:
   file.managed:
diff --git a/kubernetes/pool/kubelet.sls b/kubernetes/pool/kubelet.sls
index bfacbb8..7a976c8 100644
--- a/kubernetes/pool/kubelet.sls
+++ b/kubernetes/pool/kubelet.sls
@@ -48,6 +48,23 @@
 
 {%- endif %}
 
+/usr/bin/hyperkube:
+  file.managed:
+     - source: {{ pool.hyperkube.get('source', 'http://apt.tcpcloud.eu/kubernetes/bin/') }}{{ pool.version }}/hyperkube
+     - source_hash: md5={{ pool.hyperkube.hash }}
+     - mode: 751
+     - makedirs: true
+     - user: root
+     - group: root
+
+/etc/systemd/system/kubelet.service:
+  file.managed:
+  - source: salt://kubernetes/files/systemd/kubelet.service
+  - template: jinja
+  - user: root
+  - group: root
+  - mode: 644
+
 kubelet_service:
   service.running:
   - name: kubelet
diff --git a/tests/pillar/master_cluster.sls b/tests/pillar/master_cluster.sls
index 670e56a..ca67790 100644
--- a/tests/pillar/master_cluster.sls
+++ b/tests/pillar/master_cluster.sls
@@ -63,3 +63,5 @@
     namespace:
       kube-system:
         enabled: True
+    hyperkube:
+      hash: hnsj0XqABgrSww7Nqo7UVTSZLJUt2XRd
diff --git a/tests/pillar/pool_cluster.sls b/tests/pillar/pool_cluster.sls
index b792326..d58a25d 100644
--- a/tests/pillar/pool_cluster.sls
+++ b/tests/pillar/pool_cluster.sls
@@ -44,3 +44,5 @@
           port: 4001
         - host: 127.0.0.1
           port: 4001
+    hyperkube:
+      hash: hnsj0XqABgrSww7Nqo7UVTSZLJUt2XRd