#cloud-config --- hostname: kubernetes-master users: - name: core ssh-authorized-keys: - "" groups: - sudo shell: /bin/bash write_files: - path: /opt/bin/kubernetes-install.sh owner: root permissions: 0755 content: | #! /usr/bin/bash if [ ! -f /opt/bin/kubelet ]; then echo "Kubenetes not installed - installing." # Extract the Kubernetes binaries. sudo wget -N -P /opt/bin http://storage.googleapis.com/kubernetes-release/release/v1.1.3/bin/linux/amd64/kubectl sudo wget -N -P /opt/bin http://storage.googleapis.com/kubernetes-release/release/v1.1.3/bin/linux/amd64/kubelet sudo chmod +x /opt/bin/kubelet /opt/bin/kubectl fi - path: /opt/bin/calico-install.sh owner: root permissions: 0755 content: | #! /usr/bin/bash if [ ! -f /opt/bin/calicoctl ]; then echo "Calico not installed - installing." # Install the `calicoctl` binary wget https://github.com/projectcalico/calico-containers/releases/download/v0.14.0/calicoctl chmod +x calicoctl sudo mv calicoctl /opt/bin # Fetch the calico/node container sudo docker pull calico/node:v0.14.0 fi - path: /opt/bin/install-manifests.sh owner: root permissions: 0755 content: | #! /usr/bin/bash # Ensure directories exists. sudo mkdir -p /etc/kubernetes/manifests/ sudo mkdir -p /etc/kubernetes/ssl/ sudo mkdir -p /etc/kubernetes/addons/ if [ ! -f /etc/kubernetes/manifests/kubernetes-master.manifest -o ! -f /etc/kubernetes/manifests/calico-etcd.manifest ]; then echo "Manifests not installed - installing." # Download config. sudo wget -N -P /etc/kubernetes/manifests/ https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/kubernetes-master.manifest sudo wget -N -P /etc/kubernetes/manifests/ https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/calico-etcd.manifest sudo wget -N -P /etc/kubernetes/addons/ https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/dns/skydns.yaml fi # Insert the master's IP address into the manifest. echo "DEFAULT_IPV4: $DEFAULT_IPV4" sudo sed -i -e "s//$DEFAULT_IPV4/g" /etc/kubernetes/manifests/calico-etcd.manifest coreos: update: reboot-strategy: off units: - name: setup-network-environment.service runtime: true command: start content: | [Unit] Description=Setup Network Environment Documentation=https://github.com/kelseyhightower/setup-network-environment Requires=network-online.target After=network-online.target [Service] ExecStartPre=-/usr/bin/mkdir -p /opt/bin ExecStartPre=-/usr/bin/wget -N -P /opt/bin https://github.com/kelseyhightower/setup-network-environment/releases/download/1.0.1/setup-network-environment ExecStartPre=-/usr/bin/chmod +x /opt/bin/setup-network-environment ExecStart=/opt/bin/setup-network-environment RemainAfterExit=yes Type=oneshot - name: manifest-install.service runtime: true command: start content: | [Unit] Description=Installs Manifests After=setup-network-environment.service Requires=setup-network-environment.service [Service] EnvironmentFile=/etc/network-environment ExecStart=/opt/bin/install-manifests.sh RemainAfterExit=yes Type=oneshot - name: kubernetes-install.service runtime: true command: start content: | [Unit] Description=Installs Kubernetes tools After=manifest-install.service Requires=manifest-install.service [Service] ExecStart=/opt/bin/kubernetes-install.sh RemainAfterExit=yes Type=oneshot - name: kubelet.service runtime: true command: start content: | [Unit] Description=Kubernetes Kubelet Documentation=https://github.com/kubernetes/kubernetes Requires=docker.service kubernetes-install.service After=kubernetes-install.service [Service] ExecStart=/opt/bin/kubelet \ --register-node=false \ --allow-privileged=true \ --config=/etc/kubernetes/manifests \ --cluster-dns=10.100.0.10 \ --cluster_domain=cluster.local \ --logtostderr=true Restart=always RestartSec=10 [Install] WantedBy=multi-user.target - name: calico-install.service runtime: true command: start content: | [Unit] Description=Installs Calico tools After=kubelet.service Requires=kubelet.service [Service] ExecStart=/opt/bin/calico-install.sh RemainAfterExit=yes Type=oneshot - name: calico-node.service runtime: true command: start content: | [Unit] Description=Calico per-node agent Documentation=https://github.com/projectcalico/calico-docker After=docker.service Requires=docker.service [Service] User=root EnvironmentFile=/etc/network-environment Environment="ETCD_AUTHORITY=127.0.0.1:6666" PermissionsStartOnly=true ExecStart=/opt/bin/calicoctl node --ip=${DEFAULT_IPV4} --detach=false Restart=always RestartSec=10 [Install] WantedBy=multi-user.target