From 9bc0d205f56d02537a0d4a693c7e1c7c17b664a0 Mon Sep 17 00:00:00 2001 From: Mark Burnett Date: Tue, 23 May 2017 13:40:43 -0500 Subject: [PATCH 1/6] delete ansible-based approach --- .gitignore | 3 - README.md | 237 ------------- docs/README.md | 2 - hosts.yaml | 38 --- img/self-hosted-moving-parts.png | Bin 36201 -> 0 bytes img/self-hosted.png | Bin 229962 -> 0 bytes roles/deploy-addons/tasks/addon-ceph.yaml | 26 -- .../deploy-addons/tasks/addon-dashboard.yaml | 10 - roles/deploy-addons/tasks/addon-helm.yaml | 20 -- roles/deploy-addons/tasks/addon-maas.yaml | 59 ---- roles/deploy-addons/tasks/addon-osh.yaml | 39 --- roles/deploy-addons/tasks/main.yaml | 6 - .../templates/kube-controller-manager.json.j2 | 75 ---- .../tasks/deploy-bootkube.yaml | 15 - roles/deploy-bootstrap/tasks/main.yaml | 6 - .../deploy-bootstrap/tasks/prep-bootkube.yaml | 22 -- roles/deploy-bootstrap/tasks/prep-host.yaml | 23 -- .../tasks/prep-kubernetes.yaml | 29 -- .../deploy-bootstrap/tasks/prep-network.yaml | 14 - .../templates/bootkube.service | 10 - roles/deploy-bootstrap/templates/calico.yaml | 267 --------------- .../templates/kube-calico-cfg.yaml.j2 | 144 -------- .../templates/kube-calico.yaml.j2 | 1 - .../templates/kube-controller-manager.json | 75 ---- .../templates/kube-controller-manager.yaml | 45 --- roles/deploy-kubelet/handlers/main.yaml | 3 - .../tasks/deploy-cluster-ha.yaml | 95 ------ .../tasks/deploy-kubernetes.yaml | 64 ---- roles/deploy-kubelet/tasks/main.yaml | 6 - roles/deploy-kubelet/tasks/prep-cni.yaml | 11 - roles/deploy-kubelet/tasks/prep-host.yaml | 19 -- .../deploy-kubelet/tasks/prep-hyperkube.yaml | 10 - .../deploy-kubelet/templates/calico-peer.yaml | 8 - .../templates/calico-peer2.yaml | 8 - roles/deploy-kubelet/templates/calico.yaml | 323 ------------------ roles/deploy-kubelet/templates/cluster-ha.j2 | 23 -- .../templates/kube-calico-cfg.yaml.j2 | 53 --- .../templates/kube-calico.yaml.j2 | 286 ---------------- .../deploy-kubelet/templates/kubelet.service | 27 -- roles/group_vars/all.yaml | 26 -- site.yaml | 27 -- 41 files changed, 2155 deletions(-) delete mode 100644 .gitignore delete mode 100644 README.md delete mode 100644 docs/README.md delete mode 100644 hosts.yaml delete mode 100644 img/self-hosted-moving-parts.png delete mode 100644 img/self-hosted.png delete mode 100644 roles/deploy-addons/tasks/addon-ceph.yaml delete mode 100644 roles/deploy-addons/tasks/addon-dashboard.yaml delete mode 100644 roles/deploy-addons/tasks/addon-helm.yaml delete mode 100644 roles/deploy-addons/tasks/addon-maas.yaml delete mode 100644 roles/deploy-addons/tasks/addon-osh.yaml delete mode 100644 roles/deploy-addons/tasks/main.yaml delete mode 100644 roles/deploy-addons/templates/kube-controller-manager.json.j2 delete mode 100644 roles/deploy-bootstrap/tasks/deploy-bootkube.yaml delete mode 100644 roles/deploy-bootstrap/tasks/main.yaml delete mode 100644 roles/deploy-bootstrap/tasks/prep-bootkube.yaml delete mode 100644 roles/deploy-bootstrap/tasks/prep-host.yaml delete mode 100644 roles/deploy-bootstrap/tasks/prep-kubernetes.yaml delete mode 100644 roles/deploy-bootstrap/tasks/prep-network.yaml delete mode 100644 roles/deploy-bootstrap/templates/bootkube.service delete mode 100644 roles/deploy-bootstrap/templates/calico.yaml delete mode 100644 roles/deploy-bootstrap/templates/kube-calico-cfg.yaml.j2 delete mode 100644 roles/deploy-bootstrap/templates/kube-calico.yaml.j2 delete mode 100644 roles/deploy-bootstrap/templates/kube-controller-manager.json delete mode 100644 roles/deploy-bootstrap/templates/kube-controller-manager.yaml delete mode 100644 roles/deploy-kubelet/handlers/main.yaml delete mode 100644 roles/deploy-kubelet/tasks/deploy-cluster-ha.yaml delete mode 100644 roles/deploy-kubelet/tasks/deploy-kubernetes.yaml delete mode 100644 roles/deploy-kubelet/tasks/main.yaml delete mode 100644 roles/deploy-kubelet/tasks/prep-cni.yaml delete mode 100644 roles/deploy-kubelet/tasks/prep-host.yaml delete mode 100644 roles/deploy-kubelet/tasks/prep-hyperkube.yaml delete mode 100644 roles/deploy-kubelet/templates/calico-peer.yaml delete mode 100644 roles/deploy-kubelet/templates/calico-peer2.yaml delete mode 100644 roles/deploy-kubelet/templates/calico.yaml delete mode 100644 roles/deploy-kubelet/templates/cluster-ha.j2 delete mode 100644 roles/deploy-kubelet/templates/kube-calico-cfg.yaml.j2 delete mode 100644 roles/deploy-kubelet/templates/kube-calico.yaml.j2 delete mode 100644 roles/deploy-kubelet/templates/kubelet.service delete mode 100644 roles/group_vars/all.yaml delete mode 100644 site.yaml diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 85648dc2..00000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.retry -hosts-deploy.yaml -roles/deploy-kubelet/templates/kubeconfig diff --git a/README.md b/README.md deleted file mode 100644 index 5d8d8fb3..00000000 --- a/README.md +++ /dev/null @@ -1,237 +0,0 @@ -# Promenade: Manually Self-hosted Kubernetes via Bootkube -A small howto on how to bring up a self-hosted kubernetes cluster - -We'll use [bootkube](https://github.com/kubernetes-incubator/bootkube) to initiate the master-components. First we'll render the assets necessary for bringing up the control plane (apiserver, controller-manger, scheduler, etc). Then we'll start the kubelets which job is it to start the assets but can't do much, because there's no API-server yet. Running `bootkube` once will kick things off then. At a high-level the bootstrapping process looks like this: - -![Self-Hosted](./img/self-hosted-moving-parts.png?raw=true "Self-hosted-moving-parts") - -Image taken from the [self-hosted proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/self-hosted-kubernetes.md). - - -This is how the final cluster looks like from a `kubectl` perspective: - -![Screenshot](./img/self-hosted.png?raw=true "Screenshot") - -Let's start! -## Temporary apiserver: `bootkube` -### Download -``` -wget https://github.com/kubernetes-incubator/bootkube/releases/download/v0.3.9/bootkube.tar.gz -tar xvzf bootkube.tar.gz -sudo cp bin/linux/bootkube /usr/bin/ -``` - -### Render the Assets -Exchange `10.7.183.59` with the node you are working on. If you have DNS available group all master node IP addresses behind a CNAME Record and provide this insted. -``` -bootkube render --asset-dir=assets --experimental-self-hosted-etcd --etcd-servers=http://10.3.0.15:2379 --api-servers=https://10.7.183.59:443 -``` -This will generate several things: -- manifests for running apiserver, controller-manager, scheduler, flannel, etcd, dns and kube-proxy -- a `kubeconfig` file for connecting to and authenticating with the apiserver -- TLS assets - -## Start the Master Kubelet -### Download `hyperkube` -``` -wget http://storage.googleapis.com/kubernetes-release/release/v1.5.3/bin/linux/amd64/hyperkube -O ./hyperkube -sudo mv hyperkube /usr/bin/hyperkube -sudo chmod 755 /usr/bin/hyperkube -``` - -### Install CNI -``` -sudo mkdir -p /opt/cni/bin -wget https://github.com/containernetworking/cni/releases/download/v0.4.0/cni-amd64-v0.4.0.tbz2 -sudo tar xjf cni-amd64-v0.4.0.tbz2 -C /opt/cni/bin/ -``` - -### Copy Configuration Files -``` -sudo cp assets/auth/kubeconfig /etc/kubernetes/ -sudo cp -a assets/manifests /etc/kubernetes/ -``` -### Start the Kubelet -``` -sudo hyperkube kubelet --kubeconfig=/etc/kubernetes/kubeconfig \ - --require-kubeconfig \ - --cni-conf-dir=/etc/kubernetes/cni/net.d \ - --network-plugin=cni \ - --lock-file=/var/run/lock/kubelet.lock \ - --exit-on-lock-contention \ - --pod-manifest-path=/etc/kubernetes/manifests \ - --allow-privileged \ - --node-labels=master=true \ - --minimum-container-ttl-duration=6m0s \ - --cluster_dns=10.3.0.10 \ - --cluster_domain=cluster.local \ - --hostname-override=10.7.183.59 -``` -The TLS credentials generated by `bootkube render` in assets/tls/ are copied to a secret: assets/manifests/kube-apiserver-secret.yaml. - -### Start the Temporary API Server -bootkube will serve as the temporary apiserver so the kubelet from above can start the real apiserver in a pod -``` -sudo bootkube start --asset-dir=./assets --experimental-self-hosted-etcd --etcd-server=http://127.0.0.1:12379 -``` -bootkube should exit itself after successfully bootstrapping the master components. It's only needed for the very first bootstrapping - -### Check the Output -``` -watch hyperkube kubectl get pods -o wide --all-namespaces -``` - -## Join Nodes to the Cluster -Copy the information where to find the apiserver and how to authenticate: -``` -scp 10.7.183.59:assets/auth/kubeconfig . -sudo mkdir -p /etc/kubernetes -sudo mv kubeconfig /etc/kubernetes/ -``` -install cni binaries and download hyperkube -``` -sudo mkdir -p /opt/cni/bin -wget https://github.com/containernetworking/cni/releases/download/v0.4.0/cni-amd64-v0.4.0.tbz2 -sudo tar xjf cni-amd64-v0.4.0.tbz2 -C /opt/cni/bin/ -wget http://storage.googleapis.com/kubernetes-release/release/v1.5.3/bin/linux/amd64/hyperkube -O ./hyperkube -sudo mv hyperkube /usr/bin/hyperkube -sudo chmod 755 /usr/bin/hyperkube -``` -### Master Nodes -Start the kubelet: -``` -sudo hyperkube kubelet --kubeconfig=/etc/kubernetes/kubeconfig \ - --require-kubeconfig \ - --cni-conf-dir=/etc/kubernetes/cni/net.d \ - --network-plugin=cni \ - --lock-file=/var/run/lock/kubelet.lock \ - --exit-on-lock-contention \ - --pod-manifest-path=/etc/kubernetes/manifests \ - --allow-privileged \ - --node-labels=master=true \ - --minimum-container-ttl-duration=6m0s \ - --cluster_dns=10.3.0.10 \ - --cluster_domain=cluster.local \ - --hostname-override=10.7.183.60 -``` - -### Worker Nodes - -Note the only difference is the removal of `--node-labels=master=true`: -``` -sudo hyperkube kubelet --kubeconfig=/etc/kubernetes/kubeconfig \ - --require-kubeconfig \ - --cni-conf-dir=/etc/kubernetes/cni/net.d \ - --network-plugin=cni \ - --lock-file=/var/run/lock/kubelet.lock \ - --exit-on-lock-contention \ - --pod-manifest-path=/etc/kubernetes/manifests \ - --allow-privileged \ - --minimum-container-ttl-duration=6m0s \ - --cluster_dns=10.3.0.10 \ - --cluster_domain=cluster.local\ - --hostname-override=10.7.183.60 -``` - -## Scale Etcd -kubectl apply doesn't work for TPR at the moment. See https://github.com/kubernetes/kubernetes/issues/29542. As a workaround, we use cURL to resize the cluster. - -``` -hyperkube kubectl --namespace=kube-system get cluster.etcd kube-etcd -o json > etcd.json && \ -vim etcd.json && \ -curl -H 'Content-Type: application/json' -X PUT --data @etcd.json http://127.0.0.1:8080/apis/etcd.coreos.com/v1beta1/namespaces/kube-system/clusters/kube-etcd -``` -If that doesn't work, re-run until it does. See https://github.com/kubernetes-incubator/bootkube/issues/346#issuecomment-283526930 - -## Challenges - -### Node setup -Some Broadcom NICs panic'ed with the default Ubuntu kernel -- upgrade kernel to >`4.8` because of brcm nic failure -- move to `--storage-driver=overlay2` instead of `aufs` as docker driver -- disable swap on the node (will be a fatal error in kube-1.6) - - -## ToDo Items: -### apiserver resiliance -the master apiservers need to have a single address only. Possible solutions: -- use LB from the DC -- use DNS from the DC with programmable API (e.g. powerdns) -- use something like kube-keepalive-vip? -- bootstrap DNS itself (skydns, coredns) - -### Etcd Challenges -- backup strategies (https://github.com/coreos/etcd-operator/blob/master/doc/user/spec_examples.md#three-members-cluster-that-restores-from-previous-pv-backup) -- etcd-operator failures (e.g. https://github.com/coreos/etcd-operator/issues/851) -- partial failure (loosing quorum) -- permament failure (state gone completely) -- etcd needs ntp available (or another mechanism so that every node is in sync) - - -## Notes -### clean up docker -``` -sudo su - -docker rm -f $(docker ps -a -q) -exit -``` - -### Compile Bootkube -``` -sudo docker run --rm -it -v $(pwd)/golang/src:/go/src/ -w /go/src golang:1.7 bash -go get -u github.com/kubernetes-incubator/bootkube -cd $GOPATH/src/github.com/kubernetes-incubator/bootkube -make -``` - -### RBAC -``` -./bootkube-rbac render --asset-dir assets-rbac --experimental-self-hosted-etcd --etcd-servers=http://10.3.0.15:2379 --api-servers=https://10.7.183.59:443 -sudo rm -rf /etc/kubernetes/* -sudo cp -a assets-rbac/manifests /etc/kubernetes/ -sudo cp assets-rbac/auth/kubeconfig /etc/kubernetes/ -sudo ./bootkube-rbac start --asset-dir=./assets-rbac --experimental-self-hosted-etcd --etcd-server=http://127.0.0.1:12379 -``` - -### Containerized Kubelet -The benefit here is using a docker container instead of a kubelet binary. Also the hyperkube docker image packages and installs the cni binaries. The downside would be that in either case something needs to start the container upon a reboot of the node. Usually the something is systemd and systemd is better managing binaries than docker containers. Either way, this is how you would run a containerized kubelet: -``` -sudo docker run \ - --rm \ - -it \ - --privileged \ - -v /dev:/dev \ - -v /run:/run \ - -v /sys:/sys \ - -v /etc/kubernetes:/etc/kubernetes \ - -v /usr/share/ca-certificates:/etc/ssl/certs \ - -v /var/lib/docker:/var/lib/docker \ - -v /var/lib/kubelet:/var/lib/kubelet \ - -v /:/rootfs \ - quay.io/coreos/hyperkube:v1.5.3_coreos.0 \ - ./hyperkube \ - kubelet \ - --network-plugin=cni \ - --cni-conf-dir=/etc/kubernetes/cni/net.d \ - --cni-bin-dir=/opt/cni/bin \ - --pod-manifest-path=/etc/kubernetes/manifests \ - --allow-privileged \ - --hostname-override=10.7.183.60 \ - --cluster-dns=10.3.0.10 \ - --cluster-domain=cluster.local \ - --kubeconfig=/etc/kubernetes/kubeconfig \ - --require-kubeconfig \ - --lock-file=/var/run/lock/kubelet.lock \ - --containerized -``` -Not quite working yet though. The node comes up, registeres successfully with the master and starts daemonsets. Everything comes up except flannel: -``` -main.go:127] Failed to create SubnetManager: unable to initialize inclusterconfig: open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory -``` - -## Resources and References -- https://github.com/kubernetes/community/blob/master/contributors/design-proposals/self-hosted-kubernetes.md -- https://github.com/kubernetes-incubator/bootkube -- https://github.com/coreos/etcd-operator/ -- http://blog.kubernetes.io/2017/01/stronger-foundation-for-creating-and-managing-kubernetes-clusters.html -- https://github.com/kubernetes/kubeadm/issues/127 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 563ada3c..00000000 --- a/docs/README.md +++ /dev/null @@ -1,2 +0,0 @@ -## Instructions: -ansible-playbook -e bootstrap_enabled=true -i hosts-deploy.yaml site.yaml diff --git a/hosts.yaml b/hosts.yaml deleted file mode 100644 index 45032e48..00000000 --- a/hosts.yaml +++ /dev/null @@ -1,38 +0,0 @@ -#Sample Hosts File with variables - -#For Single node deployments, make sure that the bootstrap node is listed as a master and worker node as well. -[bootstrap] -192.168.0.1 - -[master] -#Make sure bootstrap node is first master node -192.168.0.1 -192.168.0.2 - -[workers] -192.168.0.3 - - -[bootstrap:vars] -node_master=true -bootstrap_enabled=false -boot_kube_version="v0.3.12" - - -[master:vars] -node_master=true -cni_version="v0.5.1" -hyperkube_version="v1.5.6" -kubelet_version="v1.5.6" -calicoctl_version="v1.1.0" -calico_peer1="192.168.0.4" -calico_peer2="192.168.0.5" -deploy_pods_master=true - -[all:vars] -ansible_user="ubuntu" -ansible_ssh_pass="password" -#API Server FQDN is required for SkyDNS to resolve -api_server_fqdn="cluster-ha.default.svc.cluster.local" -kube_labels="openstack-control-plane" -kube_controller_manager_version="v1.5.6" diff --git a/img/self-hosted-moving-parts.png b/img/self-hosted-moving-parts.png deleted file mode 100644 index 423add2e196bd712d3ff76ed1a9d214037fd650a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36201 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 diff --git a/img/self-hosted.png b/img/self-hosted.png deleted file mode 100644 index 5446d6bfb27cf1cce0f3e8d3c6f67b51beca63a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229962 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 m;$ukl0Ir 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 aj`)9w*-h|-uXZ&60000 /root/get_helm.sh - when: addons_enabled and "{{addons.ceph is defined}}" and helm_installed.stat.exists == False - -- name: Set file properties - file: - path: /root/get_helm.sh - mode: 0700 - when: addons_enabled and "{{addons.ceph is defined}}" and helm_installed.stat.exists == False - -- name: Install helm - shell: sh /root/get_helm.sh - when: addons_enabled and "{{addons.ceph is defined}}" and helm_installed.stat.exists == False diff --git a/roles/deploy-addons/tasks/addon-maas.yaml b/roles/deploy-addons/tasks/addon-maas.yaml deleted file mode 100644 index 7070dc43..00000000 --- a/roles/deploy-addons/tasks/addon-maas.yaml +++ /dev/null @@ -1,59 +0,0 @@ ---- -- name: Check if MAAS is Running - shell: hyperkube kubectl describe pod maas-region --namespace=maas - ignore_errors: true - register: maas_deployed - when: addons_enabled and "{{addons.maas is defined}}" - -- name: Check if Postgres is Running - shell: hyperkube kubectl describe pod postgresql-0 --namespace=maas - ignore_errors: true - register: postgres_deployed - when: addons_enabled and "{{addons.maas is defined}}" - -#Check every 15 seconds to make sure the tiller pod has fully come up. -- action: shell hyperkube kubectl get pods --all-namespaces | grep tiller - register: tiller_output - until: tiller_output.stdout.find("Running") != -1 - retries: 20 - delay: 15 - when: addons_enabled and "{{addons.maas is defined}}" - -- name: Run Make on all Helm charts - shell: make - environment: - HELM_HOME: /opt/openstack-helm/repos/openstack-helm/.helm - args: - chdir: /opt/openstack-helm/repos/openstack-helm/ - when: addons_enabled and "{{addons.maas is defined}}" and maas_deployed | failed - -- name: Deploy Postgres - shell: helm install postgresql --namespace=maas - environment: - HELM_HOME: /opt/openstack-helm/repos/openstack-helm/.helm - args: - chdir: /opt/openstack-helm/repos/openstack-helm/ - when: addons_enabled and "{{addons.maas is defined}}" and postgres_deployed | failed - -- action: shell hyperkube kubectl get pods --namespace maas - register: postgres_output - until: postgres_output.stdout.find("Running") != -1 - retries: 20 - delay: 15 - when: addons_enabled and "{{addons.maas is defined}}" - -- name: Deploy MaaS - shell: helm install maas --namespace=maas - environment: - HELM_HOME: /opt/openstack-helm/repos/openstack-helm/.helm - args: - chdir: /opt/openstack-helm/repos/openstack-helm/ - when: addons_enabled and "{{addons.maas is defined}}" and maas_deployed | failed - -#Check every 15 seconds until MaaS comes up -- action: shell hyperkube kubectl get pods --namespace maas - register: maas_output - until: maas_output.stdout.find("Running") != -1 - retries: 20 - delay: 15 - when: addons_enabled and "{{addons.maas is defined}}" diff --git a/roles/deploy-addons/tasks/addon-osh.yaml b/roles/deploy-addons/tasks/addon-osh.yaml deleted file mode 100644 index bec2f24f..00000000 --- a/roles/deploy-addons/tasks/addon-osh.yaml +++ /dev/null @@ -1,39 +0,0 @@ ---- -- name: Create directories for OpenStack Helm - file: - path: /opt/openstack-helm/repos/openstack-helm - state: directory - when: addons_enabled and "{{addons.osh is defined}}" - -- name: Checkout OpenStack-Helm - git: - repo: https://github.com/att-comdev/openstack-helm.git - dest: /opt/openstack-helm/repos/openstack-helm - update: true - when: addons_enabled and "{{addons.osh is defined}}" - -- name: Check for Helm/Tiller - shell: hyperkube kubectl get pods --namespace kube-system | grep tiller - ignore_errors: true - register: helm_running - when: addons_enabled and "{{addons.osh is defined}}" - -- name: Initialize Helm/Tiller - shell: helm init --home /opt/openstack-helm/repos/openstack-helm/.helm - environment: - HELM_HOME: /opt/openstack-helm/repos/openstack-helm/.helm - when: addons_enabled and "{{addons.osh is defined}}" and helm_running | failed - -- name: Helm Serve - shell: nohup helm serve --repo-path /opt/openstack-helm/repos/openstack-helm/.helm/repository/local & - environment: - HELM_HOME: /opt/openstack-helm/repos/openstack-helm/.helm - args: - chdir: /opt/openstack-helm/repos/openstack-helm/.helm - when: addons_enabled and "{{addons.osh is defined}}" and helm_running | failed - -- name: Add helm repositories - shell: helm repo add local http://localhost:8879/charts --home /opt/openstack-helm/repos/openstack-helm/.helm - args: - chdir: /opt/openstack-helm/repos/openstack-helm/.helm - when: addons_enabled and "{{addons.osh is defined}}" and helm_running | failed diff --git a/roles/deploy-addons/tasks/main.yaml b/roles/deploy-addons/tasks/main.yaml deleted file mode 100644 index 488c7f09..00000000 --- a/roles/deploy-addons/tasks/main.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- include: addon-dashboard.yaml -- include: addon-helm.yaml -- include: addon-osh.yaml -- include: addon-ceph.yaml -- include: addon-maas.yaml diff --git a/roles/deploy-addons/templates/kube-controller-manager.json.j2 b/roles/deploy-addons/templates/kube-controller-manager.json.j2 deleted file mode 100644 index 9e8b4c56..00000000 --- a/roles/deploy-addons/templates/kube-controller-manager.json.j2 +++ /dev/null @@ -1,75 +0,0 @@ -{ - "kind": "Pod", - "apiVersion": "v1", - "metadata": { - "name": "kube-controller-manager", - "namespace": "kube-system", - "creationTimestamp": null, - "labels": { - "component": "kube-controller-manager", - "tier": "control-plane" - } - }, - "spec": { - "volumes": [ - { - "name": "k8s", - "hostPath": { - "path": "/etc/kubernetes" - } - }, - { - "name": "certs", - "hostPath": { - "path": "/etc/ssl/certs" - } - } - ], - "containers": [ - { - "name": "kube-controller-manager", - "image": "quay.io/attcomdev/kube-controller-manager:{{ kube_controller_manager_version }}", - "command": [ - "kube-controller-manager", - "--address=127.0.0.1", - "--leader-elect", - "--master=127.0.0.1:8080", - "--cluster-name=kubernetes", - "--root-ca-file=/etc/kubernetes/pki/ca.pem", - "--service-account-private-key-file=/etc/kubernetes/pki/apiserver-key.pem", - "--cluster-signing-cert-file=/etc/kubernetes/pki/ca.pem", - "--cluster-signing-key-file=/etc/kubernetes/pki/ca-key.pem", - "--insecure-experimental-approve-all-kubelet-csrs-for-group=system:kubelet-bootstrap" - ], - "resources": { - "requests": { - "cpu": "200m" - } - }, - "volumeMounts": [ - { - "name": "k8s", - "readOnly": true, - "mountPath": "/etc/kubernetes/" - }, - { - "name": "certs", - "mountPath": "/etc/ssl/certs" - } - ], - "livenessProbe": { - "httpGet": { - "path": "/healthz", - "port": 10252, - "host": "127.0.0.1" - }, - "initialDelaySeconds": 15, - "timeoutSeconds": 15, - "failureThreshold": 8 - } - } - ], - "hostNetwork": true - }, - "status": {} -} diff --git a/roles/deploy-bootstrap/tasks/deploy-bootkube.yaml b/roles/deploy-bootstrap/tasks/deploy-bootkube.yaml deleted file mode 100644 index f13307e0..00000000 --- a/roles/deploy-bootstrap/tasks/deploy-bootkube.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -- name: Setup bootkube.service - when: - bootstrap_enabled - template: - src: bootkube.service - dest: /etc/systemd/system/bootkube.service - -- name: Run bootkube - when: - bootstrap_enabled - systemd: - name: bootkube - state: started - daemon_reload: yes diff --git a/roles/deploy-bootstrap/tasks/main.yaml b/roles/deploy-bootstrap/tasks/main.yaml deleted file mode 100644 index 3b2db9d4..00000000 --- a/roles/deploy-bootstrap/tasks/main.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- include: prep-host.yaml -- include: prep-bootkube.yaml -- include: prep-network.yaml -- include: prep-kubernetes.yaml -- include: deploy-bootkube.yaml diff --git a/roles/deploy-bootstrap/tasks/prep-bootkube.yaml b/roles/deploy-bootstrap/tasks/prep-bootkube.yaml deleted file mode 100644 index ee5b1ab7..00000000 --- a/roles/deploy-bootstrap/tasks/prep-bootkube.yaml +++ /dev/null @@ -1,22 +0,0 @@ ---- -- name: Ensures bootkube dir exists - when: - bootstrap_enabled - file: - path: /tmp/bootkube - state: directory - -- name: Extract bootkube binaries - when: - bootstrap_enabled - unarchive: - src: "https://github.com/kubernetes-incubator/bootkube/releases/download/{{ boot_kube_version }}/bootkube.tar.gz" - dest: /tmp/bootkube - remote_src: True - -- name: Render bootkube manifests - when: - bootstrap_enabled - command: "/tmp/bootkube/bin/linux/bootkube render --asset-dir=/tmp/bootkube/assets --experimental-self-hosted-etcd --etcd-servers=http://10.3.0.15:2379 --api-servers=https://{{ api_server_fqdn }}:443" - args: - creates: /etc/kubernetes/kubeconfig diff --git a/roles/deploy-bootstrap/tasks/prep-host.yaml b/roles/deploy-bootstrap/tasks/prep-host.yaml deleted file mode 100644 index 01a816c8..00000000 --- a/roles/deploy-bootstrap/tasks/prep-host.yaml +++ /dev/null @@ -1,23 +0,0 @@ ---- -- name: Install base packages - when: - bootstrap_enabled - apt: - name: "{{ item }}" - state: present - with_items: - - "docker.io" - - "vim" - - "ethtool" - - "traceroute" - - "git" - - "build-essential" - - "lldpd" - -- name: Insert Temporary Hosts File Entry for FQDN Resolution - when: - bootstrap_enabled - lineinfile: - dest: /etc/hosts - line: "{{ hostvars[groups['master'][0]]['ansible_default_ipv4']['address'] }} {{ api_server_fqdn }}" - state: present diff --git a/roles/deploy-bootstrap/tasks/prep-kubernetes.yaml b/roles/deploy-bootstrap/tasks/prep-kubernetes.yaml deleted file mode 100644 index d28d5fc9..00000000 --- a/roles/deploy-bootstrap/tasks/prep-kubernetes.yaml +++ /dev/null @@ -1,29 +0,0 @@ ---- -- name: Ensures /etc/kubernetes dir exists - when: - bootstrap_enabled - file: - path: /etc/kubernetes - state: directory - -- name: copy kubeconfig credentials - when: - bootstrap_enabled - command: cp /tmp/bootkube/assets/auth/kubeconfig /etc/kubernetes/kubeconfig - args: - creates: /etc/kubernetes/kubeconfig - -- name: copy kubernetes manifests - when: - bootstrap_enabled - command: cp -a /tmp/bootkube/assets/manifests /etc/kubernetes/ - args: - creates: /etc/kubernetes/manifests - -- name: fetch kubeconfig - when: - bootstrap_enabled - fetch: - src: /etc/kubernetes/kubeconfig - dest: roles/deploy-kubelet/templates/kubeconfig - flat: yes diff --git a/roles/deploy-bootstrap/tasks/prep-network.yaml b/roles/deploy-bootstrap/tasks/prep-network.yaml deleted file mode 100644 index 77c977d0..00000000 --- a/roles/deploy-bootstrap/tasks/prep-network.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -- name: Inject Custom manifests - kube-calico.yaml - when: - bootstrap_enabled - template: - src: kube-calico.yaml.j2 - dest: "/tmp/bootkube/assets/manifests/kube-flannel.yaml" - -- name: Inject Custom manifests - kube-calico-cfg.yaml - when: - bootstrap_enabled - template: - src: kube-calico-cfg.yaml.j2 - dest: "/tmp/bootkube/assets/manifests/kube-flannel-cfg.yaml" diff --git a/roles/deploy-bootstrap/templates/bootkube.service b/roles/deploy-bootstrap/templates/bootkube.service deleted file mode 100644 index 2f5dc7b6..00000000 --- a/roles/deploy-bootstrap/templates/bootkube.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=Kubernetes Control Plane Bootstrapping -Documentation=https://github.com/kubernetes-incubator/bootkube - -[Service] -ExecStart=/tmp/bootkube/bin/linux/bootkube start --asset-dir=/tmp/bootkube/assets/ --experimental-self-hosted-etcd --etcd-server=http://127.0.0.1:12379 -Restart=on-failure - -[Install] -WantedBy=multi-user.target diff --git a/roles/deploy-bootstrap/templates/calico.yaml b/roles/deploy-bootstrap/templates/calico.yaml deleted file mode 100644 index 61371f0a..00000000 --- a/roles/deploy-bootstrap/templates/calico.yaml +++ /dev/null @@ -1,267 +0,0 @@ -# This ConfigMap is used to configure a self-hosted Calico installation. -kind: ConfigMap -apiVersion: v1 -metadata: - name: calico-config - namespace: kube-system -data: - # The location of your etcd cluster. This uses the Service clusterIP - # defined below. - etcd_endpoints: "http://10.96.232.136:6666" - - # Configure the Calico backend to use. - calico_backend: "bird" - - # The CNI network configuration to install on each node. - cni_network_config: |- - { - "name": "k8s-pod-network", - "type": "calico", - "etcd_endpoints": "__ETCD_ENDPOINTS__", - "log_level": "info", - "ipam": { - "type": "calico-ipam" - }, - "policy": { - "type": "k8s", - "k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__", - "k8s_auth_token": "__SERVICEACCOUNT_TOKEN__" - }, - "kubernetes": { - "kubeconfig": "/etc/cni/net.d/__KUBECONFIG_FILENAME__" - } - } - ---- - -# This manifest installs the Calico etcd on the kubeadm master. This uses a DaemonSet -# to force it to run on the master even when the master isn't schedulable, and uses -# nodeSelector to ensure it only runs on the master. -apiVersion: extensions/v1beta1 -kind: DaemonSet -metadata: - name: calico-etcd - namespace: kube-system - labels: - k8s-app: calico-etcd -spec: - template: - metadata: - labels: - k8s-app: calico-etcd - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - # Only run this pod on the master. - nodeSelector: - kubeadm.alpha.kubernetes.io/role: master - hostNetwork: true - containers: - - name: calico-etcd - image: gcr.io/google_containers/etcd:2.2.1 - env: - - name: CALICO_ETCD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - command: ["/bin/sh","-c"] - args: ["/usr/local/bin/etcd --name=calico --data-dir=/var/etcd/calico-data --advertise-client-urls=http://$CALICO_ETCD_IP:6666 --listen-client-urls=http://0.0.0.0:6666 --listen-peer-urls=http://0.0.0.0:6667"] - volumeMounts: - - name: var-etcd - mountPath: /var/etcd - volumes: - - name: var-etcd - hostPath: - path: /var/etcd - ---- - -# This manfiest installs the Service which gets traffic to the Calico -# etcd. -apiVersion: v1 -kind: Service -metadata: - labels: - k8s-app: calico-etcd - name: calico-etcd - namespace: kube-system -spec: - # Select the calico-etcd pod running on the master. - selector: - k8s-app: calico-etcd - # This ClusterIP needs to be known in advance, since we cannot rely - # on DNS to get access to etcd. - clusterIP: 10.96.232.136 - ports: - - port: 6666 - ---- - -# This manifest installs the calico/node container, as well -# as the Calico CNI plugins and network config on -# each master and worker node in a Kubernetes cluster. -kind: DaemonSet -apiVersion: extensions/v1beta1 -metadata: - name: calico-node - namespace: kube-system - labels: - k8s-app: calico-node -spec: - selector: - matchLabels: - k8s-app: calico-node - template: - metadata: - labels: - k8s-app: calico-node - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - hostNetwork: true - containers: - # Runs calico/node container on each Kubernetes node. This - # container programs network policy and routes on each - # host. - - name: calico-node - image: quay.io/calico/node:v1.1.0 - env: - # The location of the Calico etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # Enable BGP. Disable to enforce policy only. - - name: CALICO_NETWORKING_BACKEND - valueFrom: - configMapKeyRef: - name: calico-config - key: calico_backend - # Disable file logging so `kubectl logs` works. - - name: CALICO_DISABLE_FILE_LOGGING - value: "true" - # Set Felix endpoint to host default action to ACCEPT. - - name: FELIX_DEFAULTENDPOINTTOHOSTACTION - value: "ACCEPT" - # Configure the IP Pool from which Pod IPs will be chosen. - - name: CALICO_IPV4POOL_CIDR - value: "192.168.0.0/16" - - name: CALICO_IPV4POOL_IPIP - value: "always" - # Disable IPv6 on Kubernetes. - - name: FELIX_IPV6SUPPORT - value: "false" - # Set Felix logging to "info" - - name: FELIX_LOGSEVERITYSCREEN - value: "info" - # Auto-detect the BGP IP address. - - name: IP - value: "" - securityContext: - privileged: true - resources: - requests: - cpu: 250m - volumeMounts: - - mountPath: /lib/modules - name: lib-modules - readOnly: true - - mountPath: /var/run/calico - name: var-run-calico - readOnly: false - # This container installs the Calico CNI binaries - # and CNI network config file on each node. - - name: install-cni - image: quay.io/calico/cni:v1.6.1 - command: ["/install-cni.sh"] - env: - # The location of the Calico etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # The CNI network config to install on each node. - - name: CNI_NETWORK_CONFIG - valueFrom: - configMapKeyRef: - name: calico-config - key: cni_network_config - volumeMounts: - - mountPath: /host/opt/cni/bin - name: cni-bin-dir - - mountPath: /host/etc/cni/net.d - name: cni-net-dir - volumes: - # Used by calico/node. - - name: lib-modules - hostPath: - path: /lib/modules - - name: var-run-calico - hostPath: - path: /var/run/calico - # Used to install CNI. - - name: cni-bin-dir - hostPath: - path: /opt/cni/bin - - name: cni-net-dir - hostPath: - path: /etc/cni/net.d - ---- - -# This manifest deploys the Calico policy controller on Kubernetes. -# See https://github.com/projectcalico/k8s-policy -apiVersion: extensions/v1beta1 -kind: Deployment -metadata: - name: calico-policy-controller - namespace: kube-system - labels: - k8s-app: calico-policy -spec: - # The policy controller can only have a single active instance. - replicas: 1 - strategy: - type: Recreate - template: - metadata: - name: calico-policy-controller - namespace: kube-system - labels: - k8s-app: calico-policy-controller - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - # The policy controller must run in the host network namespace so that - # it isn't governed by policy that would prevent it from working. - hostNetwork: true - containers: - - name: calico-policy-controller - image: quay.io/calico/kube-policy-controller:v0.5.4 - env: - # The location of the Calico etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # The location of the Kubernetes API. Use the default Kubernetes - # service for API access. - - name: K8S_API - value: "https://kubernetes.default:443" - # Since we're running in the host namespace and might not have KubeDNS - # access, configure the container's /etc/hosts to resolve - # kubernetes.default to the correct service clusterIP. - - name: CONFIGURE_ETC_HOSTS - value: "true" diff --git a/roles/deploy-bootstrap/templates/kube-calico-cfg.yaml.j2 b/roles/deploy-bootstrap/templates/kube-calico-cfg.yaml.j2 deleted file mode 100644 index 45850e3e..00000000 --- a/roles/deploy-bootstrap/templates/kube-calico-cfg.yaml.j2 +++ /dev/null @@ -1,144 +0,0 @@ -# This ConfigMap is used to configure a self-hosted Calico installation without ETCD -kind: ConfigMap -apiVersion: v1 -metadata: - name: calico-config - namespace: kube-system -data: - # The CNI network configuration to install on each node. - cni_network_config: |- - { - "name": "k8s-pod-network", - "type": "calico", - "log_level": "debug", - "datastore_type": "kubernetes", - "hostname": "__KUBERNETES_NODE_NAME__", - "ipam": { - "type": "host-local", - "subnet": "usePodCidr" - }, - "policy": { - "type": "k8s", - "k8s_auth_token": "__SERVICEACCOUNT_TOKEN__" - }, - "kubernetes": { - "k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__", - "kubeconfig": "__KUBECONFIG_FILEPATH__" - } - } - ---- - -# This manifest installs the calico/node container, as well -# as the Calico CNI plugins and network config on -# each master and worker node in a Kubernetes cluster. -kind: DaemonSet -apiVersion: extensions/v1beta1 -metadata: - name: calico-node - namespace: kube-system - labels: - k8s-app: calico-node -spec: - selector: - matchLabels: - k8s-app: calico-node - template: - metadata: - labels: - k8s-app: calico-node - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - hostNetwork: true - containers: - # Runs calico/node container on each Kubernetes node. This - # container programs network policy and routes on each - # host. - - name: calico-node - image: quay.io/calico/node:v1.1.0 - env: - # Use Kubernetes API as the backing datastore. - - name: DATASTORE_TYPE - value: "kubernetes" - # Enable felix debug logging. - - name: FELIX_LOGSEVERITYSCREEN - value: "debug" - # Don't enable BGP. - - name: CALICO_NETWORKING_BACKEND - value: "none" - # Disable file logging so `kubectl logs` works. - - name: CALICO_DISABLE_FILE_LOGGING - value: "true" - # Set Felix endpoint to host default action to ACCEPT. - - name: FELIX_DEFAULTENDPOINTTOHOSTACTION - value: "ACCEPT" - # Disable IPV6 on Kubernetes. - - name: FELIX_IPV6SUPPORT - value: "false" - # Wait for the datastore. - - name: WAIT_FOR_DATASTORE - value: "true" - # The Calico IPv4 pool to use. This should match `--cluster-cidr` - - name: CALICO_IPV4POOL_CIDR - value: "10.244.0.0/16" - # Set based on the k8s node name. - - name: NODENAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - # No IP address needed. - - name: IP - value: "" - securityContext: - privileged: true - resources: - requests: - cpu: 250m - volumeMounts: - - mountPath: /lib/modules - name: lib-modules - readOnly: true - - mountPath: /var/run/calico - name: var-run-calico - readOnly: false - # This container installs the Calico CNI binaries - # and CNI network config file on each node. - - name: install-cni - image: quay.io/calico/cni:v1.6.1 - command: ["/install-cni.sh"] - env: - # The CNI network config to install on each node. - - name: CNI_NETWORK_CONFIG - valueFrom: - configMapKeyRef: - name: calico-config - key: cni_network_config - # Set the hostname based on the k8s node name. - - name: KUBERNETES_NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - volumeMounts: - - mountPath: /host/opt/cni/bin - name: cni-bin-dir - - mountPath: /host/etc/cni/net.d - name: cni-net-dir - volumes: - # Used by calico/node. - - name: lib-modules - hostPath: - path: /lib/modules - - name: var-run-calico - hostPath: - path: /var/run/calico - # Used to install CNI. - - name: cni-bin-dir - hostPath: - path: /opt/cni/bin - - name: cni-net-dir - hostPath: - path: /etc/cni/net.d diff --git a/roles/deploy-bootstrap/templates/kube-calico.yaml.j2 b/roles/deploy-bootstrap/templates/kube-calico.yaml.j2 deleted file mode 100644 index a9c0abcc..00000000 --- a/roles/deploy-bootstrap/templates/kube-calico.yaml.j2 +++ /dev/null @@ -1 +0,0 @@ -#Nothing To Be Seen Here. Prevents Bootkube from coming up diff --git a/roles/deploy-bootstrap/templates/kube-controller-manager.json b/roles/deploy-bootstrap/templates/kube-controller-manager.json deleted file mode 100644 index 9e8b4c56..00000000 --- a/roles/deploy-bootstrap/templates/kube-controller-manager.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "kind": "Pod", - "apiVersion": "v1", - "metadata": { - "name": "kube-controller-manager", - "namespace": "kube-system", - "creationTimestamp": null, - "labels": { - "component": "kube-controller-manager", - "tier": "control-plane" - } - }, - "spec": { - "volumes": [ - { - "name": "k8s", - "hostPath": { - "path": "/etc/kubernetes" - } - }, - { - "name": "certs", - "hostPath": { - "path": "/etc/ssl/certs" - } - } - ], - "containers": [ - { - "name": "kube-controller-manager", - "image": "quay.io/attcomdev/kube-controller-manager:{{ kube_controller_manager_version }}", - "command": [ - "kube-controller-manager", - "--address=127.0.0.1", - "--leader-elect", - "--master=127.0.0.1:8080", - "--cluster-name=kubernetes", - "--root-ca-file=/etc/kubernetes/pki/ca.pem", - "--service-account-private-key-file=/etc/kubernetes/pki/apiserver-key.pem", - "--cluster-signing-cert-file=/etc/kubernetes/pki/ca.pem", - "--cluster-signing-key-file=/etc/kubernetes/pki/ca-key.pem", - "--insecure-experimental-approve-all-kubelet-csrs-for-group=system:kubelet-bootstrap" - ], - "resources": { - "requests": { - "cpu": "200m" - } - }, - "volumeMounts": [ - { - "name": "k8s", - "readOnly": true, - "mountPath": "/etc/kubernetes/" - }, - { - "name": "certs", - "mountPath": "/etc/ssl/certs" - } - ], - "livenessProbe": { - "httpGet": { - "path": "/healthz", - "port": 10252, - "host": "127.0.0.1" - }, - "initialDelaySeconds": 15, - "timeoutSeconds": 15, - "failureThreshold": 8 - } - } - ], - "hostNetwork": true - }, - "status": {} -} diff --git a/roles/deploy-bootstrap/templates/kube-controller-manager.yaml b/roles/deploy-bootstrap/templates/kube-controller-manager.yaml deleted file mode 100644 index 49f6673d..00000000 --- a/roles/deploy-bootstrap/templates/kube-controller-manager.yaml +++ /dev/null @@ -1,45 +0,0 @@ ---- -apiVersion: extensions/v1beta1 -kind: Deployment -metadata: - name: kube-controller-manager - namespace: kube-system - labels: - k8s-app: kube-controller-manager -spec: - replicas: 2 - template: - metadata: - labels: - k8s-app: kube-controller-manager - spec: - nodeSelector: - master: "true" - containers: - - name: kube-controller-manager - image: quay.io/attcomdev/kube-controller-manager:{{ kube_controller_manager_version }} - command: - - ./hyperkube - - controller-manager - - --allocate-node-cidrs=true - - --configure-cloud-routes=false - - --cluster-cidr=10.2.0.0/16 - - --root-ca-file=/etc/kubernetes/secrets/ca.crt - - --service-account-private-key-file=/etc/kubernetes/secrets/service-account.key - - --leader-elect=true - - --cloud-provider= - volumeMounts: - - name: secrets - mountPath: /etc/kubernetes/secrets - readOnly: true - - name: ssl-host - mountPath: /etc/ssl/certs - readOnly: true - volumes: - - name: secrets - secret: - secretName: kube-controller-manager - - name: ssl-host - hostPath: - path: /usr/share/ca-certificates - dnsPolicy: Default # Don't use cluster DNS. diff --git a/roles/deploy-kubelet/handlers/main.yaml b/roles/deploy-kubelet/handlers/main.yaml deleted file mode 100644 index ebdb9576..00000000 --- a/roles/deploy-kubelet/handlers/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -- name: restart kubelet - service: name=kubelet state=restarted diff --git a/roles/deploy-kubelet/tasks/deploy-cluster-ha.yaml b/roles/deploy-kubelet/tasks/deploy-cluster-ha.yaml deleted file mode 100644 index 5d7241db..00000000 --- a/roles/deploy-kubelet/tasks/deploy-cluster-ha.yaml +++ /dev/null @@ -1,95 +0,0 @@ ---- -- name: Grab the ETCD IP - shell: hyperkube kubectl get services --all-namespaces | grep "etcd-service" | awk '{ print $3 }' - register: etcd_service_ip - -# - name: Deploy Calico manifest template -# template: -# src: calico.yaml -# dest: /opt/openstack-helm/manifests/calico.yaml -# register: calico_changed -# -# - name: Install calicoctl tool -# get_url: -# url: "https://github.com/projectcalico/calicoctl/releases/download/{{ calicoctl_version }}/calicoctl" -# dest: /usr/bin/calicoctl -# validate_certs: false -# mode: 0755 -# -# - name: Check for Calico deployment -# shell: hyperkube kubectl get services --all-namespaces | grep calico -# ignore_errors: True -# register: calico_deployed -# -# - name: Deploy BGP Peer Manifest (1) -# template: -# src: calico-peer.yaml -# dest: /opt/openstack-helm/manifests/calico-peer.yaml -# -# - name: Deploy BGP Peer Manifest (2) -# template: -# src: calico-peer2.yaml -# dest: /opt/openstack-helm/manifests/calico-peer2.yaml -# -# - name: Create Calico Pods -# shell: hyperkube kubectl create -f /opt/openstack-helm/manifests/calico.yaml -# when: calico_deployed | failed and "{{ inventory_hostname }} in groups['bootstrap']" -# -# - action: shell hyperkube kubectl get pods --all-namespaces | grep calico -# register: calico_output -# until: calico_output.stdout.find("Running") != -1 -# retries: 20 -# delay: 15 -# -# - name: Create BGP Peering(1) -# shell: calicoctl create -f /opt/openstack-helm/manifests/calico-peer.yaml --skip-exists -# environment: -# ETCD_ENDPOINTS: "http://{{ etcd_service_ip.stdout }}:2379" -# when: calico_deployed | failed and "{{ inventory_hostname }} in groups['bootstrap']" -# -# - name: Create BGP Peering(2) -# shell: calicoctl create -f /opt/openstack-helm/manifests/calico-peer2.yaml --skip-exists -# environment: -# ETCD_ENDPOINTS: "http://{{ etcd_service_ip.stdout }}:2379" -# when: calico_deployed | failed and "{{ inventory_hostname }} in groups['bootstrap']" - -- name: Check ClusterHA in KubeDNS - shell: hyperkube kubectl get services --all-namespaces | grep cluster-ha - ignore_errors: true - register: cluster_ha_present - -- name: Install ClusterHA ConfigMaps - template: - src: cluster-ha.j2 - dest: /opt/openstack-helm/manifests/cluster-ha.yaml - register: cluster_ha_configmaps - -- name: Delete ClusterHA if present - shell: hyperkube kubectl delete -f /opt/openstack-helm/manifests/cluster-ha.yaml - when: cluster_ha_present | succeeded and cluster_ha_configmaps | changed - ignore_errors: true - -- name: Deploy ClusterHA ConfigMaps - shell: hyperkube kubectl create -f /opt/openstack-helm/manifests/cluster-ha.yaml - when: cluster_ha_configmaps | changed - -- name: Determine KubeDNS Server - shell: hyperkube kubectl get svc kube-dns --namespace=kube-system | awk '{print $2}' | sed -n '$p' - register: kube_dns_server - -- name: Add KubeDNS to /etc/resolv.conf - lineinfile: - dest: /etc/resolv.conf - insertafter: "^# DO" - line: "nameserver {{ kube_dns_server.stdout }}" - state: present - backup: true - -- name: Remove /etc/hosts entry if present - lineinfile: - dest: /etc/hosts - line: "{{ hostvars[groups['master'][0]]['ansible_default_ipv4']['address'] }} {{ api_server_fqdn }}" - state: absent - -- name: Test Kubernetes cluster - shell: hyperkube kubectl get nodes diff --git a/roles/deploy-kubelet/tasks/deploy-kubernetes.yaml b/roles/deploy-kubelet/tasks/deploy-kubernetes.yaml deleted file mode 100644 index b3781e22..00000000 --- a/roles/deploy-kubelet/tasks/deploy-kubernetes.yaml +++ /dev/null @@ -1,64 +0,0 @@ ---- -#TODO: Version kubelet, with checksum -- name: Install kubelet - get_url: - url: "http://storage.googleapis.com/kubernetes-release/release/{{ kubelet_version }}/bin/linux/amd64/kubelet" - dest: /usr/bin/kubelet -# checksum: md5:33af080e876b1f3d481b0ff1ceec3ab8 - mode: 0755 - -- name: Ensures /etc/kubernetes dir exists - file: - path: /etc/kubernetes - state: directory - -#Gets Kubeconfig from the bootstrap node. See roles/bootstrap/tasks/main.yml -- name: Install kubeconfig - template: - src: kubeconfig - dest: /etc/kubernetes/kubeconfig - -- name: Setup kubelet.service - template: - src: kubelet.service - dest: /etc/systemd/system/kubelet.service - notify: restart kubelet - -- name: Enable Kubelet to be started on boot - systemd: - name: kubelet - state: started - enabled: yes - daemon_reload: yes - -- name: Create Directories for Kubernetes manifests - file: - path: /opt/openstack-helm/manifests - state: directory - -#Wait for Kubeapi Server to come up -- action: shell hyperkube kubectl get pods --all-namespaces | grep kube-apiserver - register: kubeapi_output - until: kubeapi_output.stdout.find("Running") != -1 - retries: 40 - delay: 15 - -#Wait for cluster to stabilize across all nodes -- action: shell hyperkube kubectl get pods --all-namespaces - register: cluster_stable - until: '"ContainerCreating" not in cluster_stable.stdout' - retries: 40 - delay: 15 - -#Re-Deploy Calico with ETCD -- name: Inject Custom manifests - kube-calico.yaml - template: - src: kube-calico.yaml.j2 - dest: "/tmp/bootkube/assets/manifests/kube-flannel.yaml" - notify: restart kubelet - -- name: Inject Custom manifests - kube-calico-cfg.yaml - template: - src: kube-calico-cfg.yaml.j2 - dest: "/tmp/bootkube/assets/manifests/kube-flannel-cfg.yaml" - notify: restart kubelet diff --git a/roles/deploy-kubelet/tasks/main.yaml b/roles/deploy-kubelet/tasks/main.yaml deleted file mode 100644 index 5707a6be..00000000 --- a/roles/deploy-kubelet/tasks/main.yaml +++ /dev/null @@ -1,6 +0,0 @@ -#Deploys Kubelet ---- -- include: prep-host.yaml -- include: prep-hyperkube.yaml -- include: prep-cni.yaml -- include: deploy-kubernetes.yaml diff --git a/roles/deploy-kubelet/tasks/prep-cni.yaml b/roles/deploy-kubelet/tasks/prep-cni.yaml deleted file mode 100644 index db2ad063..00000000 --- a/roles/deploy-kubelet/tasks/prep-cni.yaml +++ /dev/null @@ -1,11 +0,0 @@ ---- -- name: Ensures CNI dir exists - file: - path: /opt/cni/bin - state: directory - -- name: Install CNI binaries - unarchive: - src: "https://github.com/containernetworking/cni/releases/download/{{ cni_version }}/cni-amd64-{{ cni_version }}.tgz" - dest: /opt/cni/bin - remote_src: True diff --git a/roles/deploy-kubelet/tasks/prep-host.yaml b/roles/deploy-kubelet/tasks/prep-host.yaml deleted file mode 100644 index ee7e4bb8..00000000 --- a/roles/deploy-kubelet/tasks/prep-host.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -- name: Install base packages - apt: - name: "{{ item }}" - state: present - with_items: - - "docker.io" - - "vim" - - "ethtool" - - "traceroute" - - "git" - - "build-essential" - - "lldpd" - -- name: Insert Temporary Hosts File Entry for FQDN Resolution - lineinfile: - dest: /etc/hosts - line: "{{ hostvars[groups['master'][0]]['ansible_default_ipv4']['address'] }} {{ api_server_fqdn }}" - state: present diff --git a/roles/deploy-kubelet/tasks/prep-hyperkube.yaml b/roles/deploy-kubelet/tasks/prep-hyperkube.yaml deleted file mode 100644 index 25b11dea..00000000 --- a/roles/deploy-kubelet/tasks/prep-hyperkube.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -- name: Downloads Hyperkube - get_url: - url: "http://storage.googleapis.com/kubernetes-release/release/{{ hyperkube_version }}/bin/linux/amd64/hyperkube" - dest: /usr/bin/hyperkube - -- name: Set hyperkube permissions - file: - path: /usr/bin/hyperkube - mode: 0755 diff --git a/roles/deploy-kubelet/templates/calico-peer.yaml b/roles/deploy-kubelet/templates/calico-peer.yaml deleted file mode 100644 index d95cdf74..00000000 --- a/roles/deploy-kubelet/templates/calico-peer.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -kind: bgpPeer -metadata: - peerIP: {{ calico_peer1 }} - scope: node - node: {{ ansible_hostname }} -spec: - asNumber: 64686 diff --git a/roles/deploy-kubelet/templates/calico-peer2.yaml b/roles/deploy-kubelet/templates/calico-peer2.yaml deleted file mode 100644 index 1ff5b4d1..00000000 --- a/roles/deploy-kubelet/templates/calico-peer2.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -kind: bgpPeer -metadata: - peerIP: {{ calico_peer2 }} - scope: node - node: {{ ansible_hostname }} -spec: - asNumber: 64686 diff --git a/roles/deploy-kubelet/templates/calico.yaml b/roles/deploy-kubelet/templates/calico.yaml deleted file mode 100644 index 57a61bc3..00000000 --- a/roles/deploy-kubelet/templates/calico.yaml +++ /dev/null @@ -1,323 +0,0 @@ -# This ConfigMap is used to configure a self-hosted Calico installation. -# This ConfigMap is used to configure a self-hosted Calico installation. -kind: ConfigMap -apiVersion: v1 -metadata: - name: calico-config - namespace: kube-system -data: - # The location of your etcd cluster. This uses the Service clusterIP - # defined below. - #etcd_endpoints: "http://10.96.232.136:6666" - #etcd_endpoints: "http://10.200.232.136:6666" - etcd_endpoints: "http://{{ etcd_service_ip.stdout }}:2379" - - # True enables BGP networking, false tells Calico to enforce - # policy only, using native networking. - enable_bgp: "true" - - # The CNI network configuration to install on each node. - cni_network_config: |- - { - "name": "k8s-pod-network", - "type": "calico", - "etcd_endpoints": "__ETCD_ENDPOINTS__", - "log_level": "info", - "ipam": { - "type": "calico-ipam" - }, - "policy": { - "type": "k8s", - "k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__", - "k8s_auth_token": "__SERVICEACCOUNT_TOKEN__" - }, - "kubernetes": { - "kubeconfig": "/etc/cni/net.d/__KUBECONFIG_FILENAME__" - } - } - - # The default IP Pool to be created for the cluster. - # Pod IP addresses will be assigned from this pool. - ippool.yaml: | - apiVersion: v1 - kind: ipPool - metadata: - cidr: 10.200.0.0/16 - spec: - ipip: - enabled: true - nat-outgoing: true - ---- - -# This manifest installs the Calico etcd on the kubeadm master. This uses a DaemonSet -# to force it to run on the master even when the master isn't schedulable, and uses -# nodeSelector to ensure it only runs on the master. -apiVersion: extensions/v1beta1 -kind: DaemonSet -metadata: - name: calico-etcd - namespace: kube-system - labels: - k8s-app: calico-etcd -spec: - template: - metadata: - labels: - k8s-app: calico-etcd - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - # Only run this pod on the master. - nodeSelector: - kubeadm.alpha.kubernetes.io/role: master - hostNetwork: true - containers: - - name: calico-etcd - image: gcr.io/google_containers/etcd:2.2.1 - env: - - name: CALICO_ETCD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - command: ["/bin/sh","-c"] - args: ["/usr/local/bin/etcd --name=calico --data-dir=/var/etcd/calico-data --advertise-client-urls=http://$CALICO_ETCD_IP:6666 --listen-client-urls=http://0.0.0.0:6666 --listen-peer-urls=http://0.0.0.0:6667"] - volumeMounts: - - name: var-etcd - mountPath: /var/etcd - volumes: - - name: var-etcd - hostPath: - path: /var/etcd - ---- - -# This manfiest installs the Service which gets traffic to the Calico -# etcd. -apiVersion: v1 -kind: Service -metadata: - labels: - k8s-app: calico-etcd - name: calico-etcd - namespace: kube-system -spec: - # Select the calico-etcd pod running on the master. - selector: - k8s-app: calico-etcd - # This ClusterIP needs to be known in advance, since we cannot rely - # on DNS to get access to etcd. - #clusterIP: 10.96.232.136 - clusterIP: 10.3.0.190 - ports: - - port: 6666 - ---- - -# This manifest installs the calico/node container, as well -# as the Calico CNI plugins and network config on -# each master and worker node in a Kubernetes cluster. -kind: DaemonSet -apiVersion: extensions/v1beta1 -metadata: - name: calico-node - namespace: kube-system - labels: - k8s-app: calico-node -spec: - selector: - matchLabels: - k8s-app: calico-node - template: - metadata: - labels: - k8s-app: calico-node - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - hostNetwork: true - containers: - # Runs calico/node container on each Kubernetes node. This - # container programs network policy and routes on each - # host. - - name: calico-node - image: quay.io/calico/node:v1.0.2 - env: - # The location of the Calico etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # Enable BGP. Disable to enforce policy only. - - name: CALICO_NETWORKING - valueFrom: - configMapKeyRef: - name: calico-config - key: enable_bgp - # Disable file logging so `kubectl logs` works. - - name: CALICO_DISABLE_FILE_LOGGING - value: "true" - # Set Felix endpoint to host default action to ACCEPT. - - name: FELIX_DEFAULTENDPOINTTOHOSTACTION - value: "ACCEPT" - # Don't configure a default pool. This is done by the Job - # below. - - name: NO_DEFAULT_POOLS - value: "true" - # Auto-detect the BGP IP address. - - name: IP - value: "" - securityContext: - privileged: true - volumeMounts: - - mountPath: /lib/modules - name: lib-modules - readOnly: true - - mountPath: /var/run/calico - name: var-run-calico - readOnly: false - # This container installs the Calico CNI binaries - # and CNI network config file on each node. - - name: install-cni - image: calico/cni:v1.5.6 - command: ["/install-cni.sh"] - env: - # The location of the Calico etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # The CNI network config to install on each node. - - name: CNI_NETWORK_CONFIG - valueFrom: - configMapKeyRef: - name: calico-config - key: cni_network_config - volumeMounts: - - mountPath: /host/opt/cni/bin - name: cni-bin-dir - - mountPath: /host/etc/cni/net.d - name: cni-net-dir - volumes: - # Used by calico/node. - - name: lib-modules - hostPath: - path: /lib/modules - - name: var-run-calico - hostPath: - path: /var/run/calico - # Used to install CNI. - - name: cni-bin-dir - hostPath: - path: /opt/cni/bin - - name: cni-net-dir - hostPath: - path: /etc/cni/net.d - ---- - -# This manifest deploys the Calico policy controller on Kubernetes. -# See https://github.com/projectcalico/k8s-policy -apiVersion: extensions/v1beta1 -kind: Deployment -metadata: - name: calico-policy-controller - namespace: kube-system - labels: - k8s-app: calico-policy -spec: - # The policy controller can only have a single active instance. - replicas: 1 - strategy: - type: Recreate - template: - metadata: - name: calico-policy-controller - namespace: kube-system - labels: - k8s-app: calico-policy-controller - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - # The policy controller must run in the host network namespace so that - # it isn't governed by policy that would prevent it from working. - hostNetwork: true - containers: - - name: calico-policy-controller - image: calico/kube-policy-controller:v0.5.2 - env: - # The location of the Calico etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # The location of the Kubernetes API. Use the default Kubernetes - # service for API access. - - name: K8S_API - value: "https://kubernetes.default:443" - # Since we're running in the host namespace and might not have KubeDNS - # access, configure the container's /etc/hosts to resolve - # kubernetes.default to the correct service clusterIP. - - name: CONFIGURE_ETC_HOSTS - value: "true" - ---- - -## This manifest deploys a Job which performs one time -# configuration of Calico -apiVersion: batch/v1 -kind: Job -metadata: - name: configure-calico - namespace: kube-system - labels: - k8s-app: calico -spec: - template: - metadata: - name: configure-calico - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - hostNetwork: true - restartPolicy: OnFailure - containers: - # Writes basic configuration to datastore. - - name: configure-calico - image: calico/ctl:v1.0.2 - args: - - apply - - -f - - /etc/config/calico/ippool.yaml - volumeMounts: - - name: config-volume - mountPath: /etc/config - env: - # The location of the etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - volumes: - - name: config-volume - configMap: - name: calico-config - items: - - key: ippool.yaml - path: calico/ippool.yaml diff --git a/roles/deploy-kubelet/templates/cluster-ha.j2 b/roles/deploy-kubelet/templates/cluster-ha.j2 deleted file mode 100644 index 8ce9b834..00000000 --- a/roles/deploy-kubelet/templates/cluster-ha.j2 +++ /dev/null @@ -1,23 +0,0 @@ ---- -kind: Service -apiVersion: v1 -metadata: - name: cluster-ha -spec: - clusterIP: None - ports: - - protocol: TCP - port: 443 - targetPort: 443 ---- -kind: Endpoints -apiVersion: v1 -metadata: - name: cluster-ha -subsets: -- addresses: -{% for node in groups['master'] %} - - ip: {{ hostvars[node]['ansible_default_ipv4']['address'] }} -{% endfor %} - ports: - - port: 443 diff --git a/roles/deploy-kubelet/templates/kube-calico-cfg.yaml.j2 b/roles/deploy-kubelet/templates/kube-calico-cfg.yaml.j2 deleted file mode 100644 index 96f94933..00000000 --- a/roles/deploy-kubelet/templates/kube-calico-cfg.yaml.j2 +++ /dev/null @@ -1,53 +0,0 @@ -# This ConfigMap is used to configure a self-hosted Calico installation. -# Becomes kube-flannel-cfg.yaml once deployed on target host -kind: ConfigMap -apiVersion: v1 -metadata: - name: calico-config - namespace: kube-system -data: - # Configure this with the location of your etcd cluster. - etcd_endpoints: "http://10.23.19.16:2379" - #etcd_endpoints: "http://127.0.0.1:2379" - - # Configure the Calico backend to use. - calico_backend: "bird" - - # The CNI network configuration to install on each node. - cni_network_config: |- - { - "name": "k8s-pod-network", - "type": "calico", - "etcd_endpoints": "__ETCD_ENDPOINTS__", - "etcd_key_file": "__ETCD_KEY_FILE__", - "etcd_cert_file": "__ETCD_CERT_FILE__", - "etcd_ca_cert_file": "__ETCD_CA_CERT_FILE__", - "log_level": "info", - "ipam": { - "type": "calico-ipam" - }, - "policy": { - "type": "k8s", - "k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__", - "k8s_auth_token": "__SERVICEACCOUNT_TOKEN__" - }, - "kubernetes": { - "kubeconfig": "__KUBECONFIG_FILEPATH__" - } - } - - # The default IP Pool to be created for the cluster. - # Pod IP addresses will be assigned from this pool. - ippool.yaml: | - apiVersion: v1 - kind: ipPool - metadata: - cidr: 10.2.0.0/16 - spec: - nat-outgoing: true - - # If you're using TLS enabled etcd uncomment the following. - # You must also populate the Secret below with these files. - etcd_ca: "" # "/calico-secrets/etcd-ca" - etcd_cert: "" # "/calico-secrets/etcd-cert" - etcd_key: "" # "/calico-secrets/etcd-key" diff --git a/roles/deploy-kubelet/templates/kube-calico.yaml.j2 b/roles/deploy-kubelet/templates/kube-calico.yaml.j2 deleted file mode 100644 index b2bb8f54..00000000 --- a/roles/deploy-kubelet/templates/kube-calico.yaml.j2 +++ /dev/null @@ -1,286 +0,0 @@ -# This manifest installs the calico/node container, as well -# as the Calico CNI plugins and network config on -# each master and worker node in a Kubernetes cluster. -# This file becomes kube-flannel.yaml once deployed to overwrite the default bootkube deployment -kind: DaemonSet -apiVersion: extensions/v1beta1 -metadata: - name: calico-node - namespace: kube-system - labels: - k8s-app: calico-node -spec: - selector: - matchLabels: - k8s-app: calico-node - template: - metadata: - labels: - k8s-app: calico-node - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - hostNetwork: true - containers: - # Runs calico/node container on each Kubernetes node. This - # container programs network policy and routes on each - # host. - - name: calico-node - image: quay.io/calico/node:v1.1.1 - env: - # The location of the Calico etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # Choose the backend to use. - - name: CALICO_NETWORKING_BACKEND - valueFrom: - configMapKeyRef: - name: calico-config - key: calico_backend - # Disable file logging so `kubectl logs` works. - - name: CALICO_DISABLE_FILE_LOGGING - value: "true" - # Set Felix endpoint to host default action to ACCEPT. - - name: FELIX_DEFAULTENDPOINTTOHOSTACTION - value: "ACCEPT" - # Don't configure a default pool. This is done by the Job - # below. - - name: NO_DEFAULT_POOLS - value: "true" - - name: FELIX_LOGSEVERITYSCREEN - value: "info" - # Location of the CA certificate for etcd. - - name: ETCD_CA_CERT_FILE - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_ca - # Location of the client key for etcd. - - name: ETCD_KEY_FILE - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_key - # Location of the client certificate for etcd. - - name: ETCD_CERT_FILE - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_cert - # Auto-detect the BGP IP address. - - name: IP - value: "" - securityContext: - privileged: true - volumeMounts: - - mountPath: /lib/modules - name: lib-modules - readOnly: true - - mountPath: /var/run/calico - name: var-run-calico - readOnly: false - # - mountPath: /calico-secrets - # name: etcd-certs - # This container installs the Calico CNI binaries - # and CNI network config file on each node. - - name: install-cni - image: quay.io/calico/cni:v1.6.2 - command: ["/install-cni.sh"] - env: - # The location of the Calico etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # The CNI network config to install on each node. - - name: CNI_NETWORK_CONFIG - valueFrom: - configMapKeyRef: - name: calico-config - key: cni_network_config - volumeMounts: - - mountPath: /host/opt/cni/bin - name: cni-bin-dir - - mountPath: /host/etc/cni/net.d - name: cni-net-dir - # - mountPath: /calico-secrets - # name: etcd-certs - volumes: - # Used by calico/node. - - name: lib-modules - hostPath: - path: /lib/modules - - name: var-run-calico - hostPath: - path: /var/run/calico - # Used to install CNI. - - name: cni-bin-dir - hostPath: - path: /opt/cni/bin - - name: cni-net-dir - hostPath: - path: /etc/cni/net.d - # Mount in the etcd TLS secrets. - # - name: etcd-certs - # secret: - # secretName: calico-etcd-secrets - - ---- - -# This manifest deploys the Calico policy controller on Kubernetes. -# See https://github.com/projectcalico/k8s-policy -apiVersion: extensions/v1beta1 -kind: Deployment -metadata: - name: calico-policy-controller - namespace: kube-system - labels: - k8s-app: calico-policy - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] -spec: - # The policy controller can only have a single active instance. - replicas: 1 - strategy: - type: Recreate - template: - metadata: - name: calico-policy-controller - namespace: kube-system - labels: - k8s-app: calico-policy - spec: - # The policy controller must run in the host network namespace so that - # it isn't governed by policy that would prevent it from working. - hostNetwork: true - containers: - - name: calico-policy-controller - image: quay.io/calico/kube-policy-controller:v0.5.4 - env: - # The location of the Calico etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # Location of the CA certificate for etcd. - - name: ETCD_CA_CERT_FILE - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_ca - # Location of the client key for etcd. - - name: ETCD_KEY_FILE - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_key - # Location of the client certificate for etcd. - - name: ETCD_CERT_FILE - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_cert - # The location of the Kubernetes API. Use the default Kubernetes - # service for API access. - - name: K8S_API - value: "https://kubernetes.default:443" - # Since we're running in the host namespace and might not have KubeDNS - # access, configure the container's /etc/hosts to resolve - # kubernetes.default to the correct service clusterIP. - - name: CONFIGURE_ETC_HOSTS - value: "true" - # volumeMounts: - # # Mount in the etcd TLS secrets. - # - mountPath: /calico-secrets - # name: etcd-certs - # volumes: - # Mount in the etcd TLS secrets. - # - name: etcd-certs - # secret: - # secretName: calico-etcd-secrets - ---- - -## This manifest deploys a Job which performs one time -# configuration of Calico -apiVersion: batch/v1 -kind: Job -metadata: - name: configure-calico - namespace: kube-system - labels: - k8s-app: calico -spec: - template: - metadata: - name: configure-calico - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - scheduler.alpha.kubernetes.io/tolerations: | - [{"key": "dedicated", "value": "master", "effect": "NoSchedule" }, - {"key":"CriticalAddonsOnly", "operator":"Exists"}] - spec: - hostNetwork: true - restartPolicy: OnFailure - containers: - # Writes basic configuration to datastore. - - name: configure-calico - image: calico/ctl:v1.1.1 - args: - - apply - - -f - - /etc/config/calico/ippool.yaml - volumeMounts: - - name: config-volume - mountPath: /etc/config - # Mount in the etcd TLS secrets. - # - mountPath: /calico-secrets - # name: etcd-certs - env: - # The location of the etcd cluster. - - name: ETCD_ENDPOINTS - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_endpoints - # Location of the CA certificate for etcd. - - name: ETCD_CA_CERT_FILE - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_ca - # Location of the client key for etcd. - - name: ETCD_KEY_FILE - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_key - # Location of the client certificate for etcd. - - name: ETCD_CERT_FILE - valueFrom: - configMapKeyRef: - name: calico-config - key: etcd_cert - volumes: - - name: config-volume - configMap: - name: calico-config - items: - - key: ippool.yaml - path: calico/ippool.yaml - # Mount in the etcd TLS secrets. - # - name: etcd-certs - # secret: - # secretName: calico-etcd-secrets diff --git a/roles/deploy-kubelet/templates/kubelet.service b/roles/deploy-kubelet/templates/kubelet.service deleted file mode 100644 index 248012c1..00000000 --- a/roles/deploy-kubelet/templates/kubelet.service +++ /dev/null @@ -1,27 +0,0 @@ -[Unit] -Description=Kubernetes Kubelet -Documentation=https://github.com/kubernetes/kubernetes - -[Service] -ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests -ExecStart=/usr/bin/kubelet \ - --kubeconfig=/etc/kubernetes/kubeconfig \ - --require-kubeconfig \ - --cni-conf-dir=/etc/cni/net.d \ - --cni-bin-dir=/opt/cni/bin \ - --network-plugin=cni \ - --lock-file=/var/run/lock/kubelet.lock \ - --exit-on-lock-contention \ - --pod-manifest-path=/etc/kubernetes/manifests \ - --allow-privileged \ - --minimum-container-ttl-duration=6m0s \ - --cluster_dns=10.3.0.10 \ - --cluster_domain=cluster.local \ - --node-labels=master={{ node_master|default('false') }} \ - --hostname-override={{ inventory_hostname }} \ - --v=2 -Restart=on-failure -RestartSec=5 - -[Install] -WantedBy=multi-user.target diff --git a/roles/group_vars/all.yaml b/roles/group_vars/all.yaml deleted file mode 100644 index 62a835f1..00000000 --- a/roles/group_vars/all.yaml +++ /dev/null @@ -1,26 +0,0 @@ -#Default Override-able variables for bootstrap role -boot_kube_version: "v0.3.13" -bootstrap_enabled: "true" - -#For DNS Resilliency, override this with FQDN in your environment which resolves to all "master" servers -api_server_fqdn: "kubeapi.test.local" - -#Default Override-able variables for the Kubelet role -cni_version: "v0.5.2" -hyperkube_version: "v1.5.6" -kubelet_version: "v1.5.6" -calicoctl_version: "v1.1.0" - -#Calico Peering - Physical Switch Fabric IPs -calico_peer1: 10.23.21.2 -calico_peer2: 10.23.21.3 - -## Kubernetes Add-Ons: -# Optional Items: kube_dashboard, kube_helm (more to come). -addons_enabled: false -addons: - - dashboard - - helm - - osh - - ceph - - maas diff --git a/site.yaml b/site.yaml deleted file mode 100644 index a17996e6..00000000 --- a/site.yaml +++ /dev/null @@ -1,27 +0,0 @@ -- hosts: bootstrap - remote_user: ubuntu - become: yes - become_method: sudo - roles: - - deploy-bootstrap - -- hosts: master - remote_user: ubuntu - become: yes - become_method: sudo - roles: - - deploy-kubelet - -- hosts: workers - remote_user: ubuntu - become: yes - become_method: sudo - roles: - - deploy-kubelet - -#- hosts: master -# remote_user: ubuntu -# become: yes -# become_method: sudo -# roles: -# - deploy-addons From 5969987ad9f18e7b8fc5b4505f78e612311d09e6 Mon Sep 17 00:00:00 2001 From: Mark Burnett Date: Thu, 18 May 2017 11:42:22 -0500 Subject: [PATCH 2/6] Add initial containerized version --- .dockerignore | 2 + .gitignore | 8 + Dockerfile.genesis | 37 ++ Dockerfile.join | 37 ++ Makefile | 141 +++++++ README.md | 10 + Vagrantfile | 59 +++ assets/auth/kubeconfig | 17 + .../bootstrap-apiserver.yaml | 60 +++ .../bootstrap-controller-manager.yaml | 35 ++ .../bootstrap-manifests/bootstrap-etcd.yaml | 30 ++ .../bootstrap-scheduler.yaml | 24 ++ assets/kubeconfig | 1 + assets/manifests/etcd-operator.yaml | 31 ++ assets/manifests/etcd-service.yaml | 15 + assets/manifests/kube-apiserver-secret.yaml | 12 + assets/manifests/kube-apiserver.yaml | 82 ++++ .../kube-controller-manager-disruption.yaml | 12 + .../kube-controller-manager-secret.yaml | 10 + assets/manifests/kube-controller-manager.yaml | 77 ++++ assets/manifests/kube-dns-deployment.yaml | 156 ++++++++ assets/manifests/kube-dns-svc.yaml | 21 + .../kube-etcd-network-checkpointer.yaml | 49 +++ assets/manifests/kube-flannel-cfg.yaml | 39 ++ assets/manifests/kube-flannel.yaml | 368 ++++++++++++++++++ assets/manifests/kube-proxy.yaml | 56 +++ .../manifests/kube-scheduler-disruption.yaml | 12 + assets/manifests/kube-scheduler.yaml | 56 +++ .../kube-system-rbac-role-binding.yaml | 14 + assets/manifests/pod-checkpointer.yaml | 59 +++ assets/tls/apiserver.crt | 21 + assets/tls/apiserver.key | 27 ++ assets/tls/ca.crt | 18 + assets/tls/ca.key | 27 ++ assets/tls/kubelet.crt | 19 + assets/tls/kubelet.key | 27 ++ assets/tls/service-account.key | 27 ++ assets/tls/service-account.pub | 9 + kubelet.service.template | 26 ++ scripts/common/func.sh | 64 +++ scripts/common/start-kubelet.sh | 21 + scripts/entrypoint-genesis.sh | 35 ++ scripts/entrypoint-join.sh | 27 ++ test-install.sh | 20 + vagrant-assets/dnsmasq-kubernetes | 3 + vagrant-assets/docker-daemon.json | 3 + 46 files changed, 1904 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile.genesis create mode 100644 Dockerfile.join create mode 100644 Makefile create mode 100644 README.md create mode 100644 Vagrantfile create mode 100644 assets/auth/kubeconfig create mode 100644 assets/bootstrap-manifests/bootstrap-apiserver.yaml create mode 100644 assets/bootstrap-manifests/bootstrap-controller-manager.yaml create mode 100644 assets/bootstrap-manifests/bootstrap-etcd.yaml create mode 100644 assets/bootstrap-manifests/bootstrap-scheduler.yaml create mode 120000 assets/kubeconfig create mode 100644 assets/manifests/etcd-operator.yaml create mode 100644 assets/manifests/etcd-service.yaml create mode 100644 assets/manifests/kube-apiserver-secret.yaml create mode 100644 assets/manifests/kube-apiserver.yaml create mode 100644 assets/manifests/kube-controller-manager-disruption.yaml create mode 100644 assets/manifests/kube-controller-manager-secret.yaml create mode 100644 assets/manifests/kube-controller-manager.yaml create mode 100644 assets/manifests/kube-dns-deployment.yaml create mode 100644 assets/manifests/kube-dns-svc.yaml create mode 100644 assets/manifests/kube-etcd-network-checkpointer.yaml create mode 100644 assets/manifests/kube-flannel-cfg.yaml create mode 100644 assets/manifests/kube-flannel.yaml create mode 100644 assets/manifests/kube-proxy.yaml create mode 100644 assets/manifests/kube-scheduler-disruption.yaml create mode 100644 assets/manifests/kube-scheduler.yaml create mode 100644 assets/manifests/kube-system-rbac-role-binding.yaml create mode 100644 assets/manifests/pod-checkpointer.yaml create mode 100644 assets/tls/apiserver.crt create mode 100644 assets/tls/apiserver.key create mode 100644 assets/tls/ca.crt create mode 100644 assets/tls/ca.key create mode 100644 assets/tls/kubelet.crt create mode 100644 assets/tls/kubelet.key create mode 100644 assets/tls/service-account.key create mode 100644 assets/tls/service-account.pub create mode 100644 kubelet.service.template create mode 100644 scripts/common/func.sh create mode 100755 scripts/common/start-kubelet.sh create mode 100755 scripts/entrypoint-genesis.sh create mode 100755 scripts/entrypoint-join.sh create mode 100755 test-install.sh create mode 100644 vagrant-assets/dnsmasq-kubernetes create mode 100644 vagrant-assets/docker-daemon.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..3bedcc10 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +Makefile +promenade-*.tar diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..6f122c39 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +/*.log +/*.tar +/.vagrant +/cni.tgz +/env.sh +/helm +/kubelet +/linux-amd64 diff --git a/Dockerfile.genesis b/Dockerfile.genesis new file mode 100644 index 00000000..6b1f0871 --- /dev/null +++ b/Dockerfile.genesis @@ -0,0 +1,37 @@ +# Copyright 2017 The Promenade Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM ubuntu:xenial + +ENV NODE_HOSTNAME= + +RUN apt-get update -qq \ + && apt-get install --no-install-recommends -y \ + docker.io \ + gettext-base \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir /promenade \ + && mkdir /promenade/assets \ + && mkdir /promenade/scripts + +WORKDIR /promenade + +ENTRYPOINT /promenade/scripts/entrypoint.sh + +COPY genesis-images.tar cni.tgz helm kubelet /promenade/ + +COPY kubelet.service.template /promenade/ +COPY env.sh scripts/common/* /promenade/scripts/ +COPY scripts/entrypoint-genesis.sh /promenade/scripts/entrypoint.sh +COPY assets/ /promenade/assets/ diff --git a/Dockerfile.join b/Dockerfile.join new file mode 100644 index 00000000..0f8850e4 --- /dev/null +++ b/Dockerfile.join @@ -0,0 +1,37 @@ +# Copyright 2017 The Promenade Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM ubuntu:xenial + +ENV NODE_HOSTNAME= + +RUN apt-get update -qq \ + && apt-get install --no-install-recommends -y \ + docker.io \ + gettext-base \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir /promenade \ + && mkdir /promenade/assets \ + && mkdir /promenade/scripts + +WORKDIR /promenade + +ENTRYPOINT /promenade/scripts/entrypoint.sh + +COPY join-images.tar cni.tgz kubelet /promenade/ + +COPY kubelet.service.template /promenade/ +COPY env.sh scripts/common/* /promenade/scripts/ +COPY scripts/entrypoint-join.sh /promenade/scripts/entrypoint.sh +COPY assets/kubeconfig assets/auth/kubeconfig /promenade/assets/ diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..6e63853e --- /dev/null +++ b/Makefile @@ -0,0 +1,141 @@ +# Copyright 2017 The Promenade Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#---------------# +# Configuration # +#---------------# +BOOTKUBE_VERSION := v0.4.1 +CNI_VERSION := v0.5.2 +HELM_VERSION := v2.3.1 +KUBERNETES_VERSION := v1.6.2 + +NAMESPACE := quay.io/attcomdev +GENESIS_REPO := promenade-genesis +JOIN_REPO := promenade-join +TAG := dev + +GENESIS_IMAGES := \ + gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.1 \ + gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.1 \ + gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.1 \ + gcr.io/google_containers/pause-amd64:3.0 \ + quay.io/calico/cni:v1.7.0 \ + quay.io/calico/kube-policy-controller:v0.5.4 \ + quay.io/calico/node:v1.1.3 \ + quay.io/coreos/bootkube:$(BOOTKUBE_VERSION) \ + quay.io/coreos/etcd-operator:v0.2.5 \ + quay.io/coreos/etcd:v3.1.4 \ + quay.io/coreos/etcd:v3.1.6 \ + quay.io/coreos/flannel:v0.7.1 \ + quay.io/coreos/hyperkube:$(KUBERNETES_VERSION)_coreos.0 \ + quay.io/coreos/kenc:48b6feceeee56c657ea9263f47b6ea091e8d3035 \ + quay.io/coreos/pod-checkpointer:20cf8b9a6018731a0770192f30dfa7a1941521e3 \ + +JOIN_IMAGES := \ + gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.1 \ + gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.1 \ + gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.1 \ + gcr.io/google_containers/pause-amd64:3.0 \ + quay.io/calico/cni:v1.7.0 \ + quay.io/calico/kube-policy-controller:v0.5.4 \ + quay.io/calico/node:v1.1.3 \ + quay.io/coreos/etcd-operator:v0.2.5 \ + quay.io/coreos/etcd:v3.1.4 \ + quay.io/coreos/etcd:v3.1.6 \ + quay.io/coreos/flannel:v0.7.1 \ + quay.io/coreos/hyperkube:$(KUBERNETES_VERSION)_coreos.0 \ + quay.io/coreos/kenc:48b6feceeee56c657ea9263f47b6ea091e8d3035 \ + quay.io/coreos/pod-checkpointer:20cf8b9a6018731a0770192f30dfa7a1941521e3 \ + + +#-------# +# Rules # +#-------# +all: build + +build: build-genesis build-join + +push: push-genesis push-join + +save: save-genesis save-join + +genesis: build-genesis + +build-genesis: Dockerfile.genesis cni.tgz env.sh helm genesis-images.tar kubelet kubelet.service.template + sudo docker build -f Dockerfile.genesis -t $(NAMESPACE)/$(GENESIS_REPO):$(TAG) . + +push-genesis: build-genesis + sudo docker push $(NAMESPACE)/$(GENESIS_REPO):$(TAG) + +save-genesis: build-genesis + sudo docker save $(NAMESPACE)/$(GENESIS_REPO):$(TAG) > promenade-genesis.tar + + +join: build-join + +build-join: Dockerfile.join join-images.tar kubelet.service.template + sudo docker build -f Dockerfile.join -t $(NAMESPACE)/$(JOIN_REPO):$(TAG) . + +push-join: build-join + sudo docker push $(NAMESPACE)/$(JOIN_REPO):$(TAG) + +save-join: build-join + sudo docker save $(NAMESPACE)/$(JOIN_REPO):$(TAG) > promenade-join.tar + +cni.tgz: + wget https://github.com/containernetworking/cni/releases/download/$(CNI_VERSION)/cni-amd64-$(CNI_VERSION).tgz + mv cni-amd64-$(CNI_VERSION).tgz cni.tgz + +env.sh: Makefile + rm -f env.sh + echo export BOOTKUBE_VERSION=$(BOOTKUBE_VERSION) >> env.sh + echo export CNI_VERSION=$(CNI_VERSION) >> env.sh + echo export HELM_VERSION=$(HELM_VERSION) >> env.sh + echo export KUBERNETES_VERSION=$(KUBERNETES_VERSION) >> env.sh + +helm: + wget https://storage.googleapis.com/kubernetes-helm/helm-$(HELM_VERSION)-linux-amd64.tar.gz + tar xf helm-$(HELM_VERSION)-linux-amd64.tar.gz + mv linux-amd64/helm ./helm + rm -rf ./linux-amd64/ + rm -f helm-$(HELM_VERSION)-linux-amd64.tar.gz* + chmod +x helm + +genesis-images.tar: + for IMAGE in $(GENESIS_IMAGES); do \ + sudo docker pull $$IMAGE; \ + done + sudo docker save -o genesis-images.tar $(GENESIS_IMAGES) + +join-images.tar: + for IMAGE in $(JOIN_IMAGES); do \ + sudo docker pull $$IMAGE; \ + done + sudo docker save -o join-images.tar $(JOIN_IMAGES) + +kubelet: + wget http://storage.googleapis.com/kubernetes-release/release/$(KUBERNETES_VERSION)/bin/linux/amd64/kubelet + chmod +x kubelet + +clean: + rm -rf \ + cni.tgz \ + env.sh \ + helm \ + helm-*-linux-amd64* \ + *.tar \ + kubelet \ + + +.PHONY : build build-genesis build-join clean genesis join push push-genesis push-join diff --git a/README.md b/README.md new file mode 100644 index 00000000..0a1ee0c5 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# Overview + +To give this a try: + +``` +make save +vagrant plugin install vagrant-hostmanager + +./test-install.sh +``` diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 00000000..1b243476 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,59 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + config.vm.box = "ubuntu/xenial64" + config.vm.box_check_update = false + + config.vm.provision :file, source: "vagrant-assets/docker-daemon.json", destination: "/tmp/docker-daemon.json" + config.vm.provision :file, source: "vagrant-assets/dnsmasq-kubernetes", destination: "/tmp/dnsmasq-kubernetes" + + config.vm.provision :shell, privileged: true, inline:< host communication. + # If left blank, then the interface is chosen using the node's + # default route. + canal_iface: "" + + # Whether or not to masquerade traffic to destinations not within + # the pod network. + masquerade: "true" + + # The CNI network configuration to install on each node. The special + # values in this config will be automatically populated. + cni_network_config: |- + { + "name": "canal", + "type": "flannel", + "delegate": { + "type": "calico", + "etcd_endpoints": "__ETCD_ENDPOINTS__", + "log_level": "info", + "policy": { + "type": "k8s", + "k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__", + "k8s_auth_token": "__SERVICEACCOUNT_TOKEN__" + }, + "kubernetes": { + "kubeconfig": "/etc/cni/net.d/__KUBECONFIG_FILENAME__" + } + } + } diff --git a/assets/manifests/kube-flannel.yaml b/assets/manifests/kube-flannel.yaml new file mode 100644 index 00000000..3f4fd8a9 --- /dev/null +++ b/assets/manifests/kube-flannel.yaml @@ -0,0 +1,368 @@ +--- +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: canal-etcd + namespace: kube-system + labels: + k8s-app: canal-etcd +spec: + template: + metadata: + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + labels: + k8s-app: canal-etcd + spec: + # Only run this pod on the master. + nodeSelector: + node-role.kubernetes.io/master: "" + hostNetwork: true + tolerations: + - key: CriticalAddonsOnly + operator: Exists + - key: node-role.kubernetes.io/master + effect: NoSchedule + containers: + - name: canal-etcd + image: quay.io/coreos/etcd:v3.1.4 + env: + - name: ETCD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + command: ["/bin/sh","-c"] + args: ["/usr/local/bin/etcd --name=calico --data-dir=/var/etcd/calico-data --advertise-client-urls=http://$ETCD_IP:6666 --listen-client-urls=http://0.0.0.0:6666 --listen-peer-urls=http://0.0.0.0:6667"] + volumeMounts: + - name: var-etcd + mountPath: /var/etcd + volumes: + - name: var-etcd + hostPath: + path: /var/etcd + +--- +# This manfiest installs the Service which gets traffic to the Calico +# etcd. +apiVersion: v1 +kind: Service +metadata: + labels: + k8s-app: canal-etcd + name: canal-etcd + namespace: kube-system +spec: + # Select the canal-etcd pod running on the master. + selector: + k8s-app: canal-etcd + # This ClusterIP needs to be known in advance, since we cannot rely + # on DNS to get access to etcd. + clusterIP: 10.3.0.136 + ports: + - port: 6666 +--- +# This manifest installs the per-node agents, as well +# as the CNI plugins and network config on +# each master and worker node in a Kubernetes cluster. +kind: DaemonSet +apiVersion: extensions/v1beta1 +metadata: + name: canal-node + namespace: kube-system + labels: + k8s-app: canal-node +spec: + selector: + matchLabels: + k8s-app: canal-node + template: + metadata: + labels: + k8s-app: canal-node + spec: + hostNetwork: true + serviceAccountName: calico-cni-plugin + tolerations: + - key: node-role.kubernetes.io/master + effect: NoSchedule + containers: + # Runs the flannel daemon to enable vxlan networking between + # container hosts. + - name: flannel + image: quay.io/coreos/flannel:v0.7.1 + env: + # The location of the etcd cluster. + - name: FLANNELD_ETCD_ENDPOINTS + valueFrom: + configMapKeyRef: + name: canal-config + key: etcd_endpoints + # The interface flannel should run on. + - name: FLANNELD_IFACE + valueFrom: + configMapKeyRef: + name: canal-config + key: canal_iface + # Perform masquerade on traffic leaving the pod cidr. + - name: FLANNELD_IP_MASQ + valueFrom: + configMapKeyRef: + name: canal-config + key: masquerade + # Write the subnet.env file to the mounted directory. + - name: FLANNELD_SUBNET_FILE + value: "/run/flannel/subnet.env" + securityContext: + privileged: true + volumeMounts: + - mountPath: /etc/resolv.conf + name: resolv + - mountPath: /run/flannel + name: run-flannel + # Runs calico/node container on each Kubernetes node. This + # container programs network policy and local routes on each + # host. + - name: calico-node + image: quay.io/calico/node:v1.1.3 + env: + # The location of the etcd cluster. + - name: ETCD_ENDPOINTS + valueFrom: + configMapKeyRef: + name: canal-config + key: etcd_endpoints + # Disable Calico BGP. Calico is simply enforcing policy. + - name: CALICO_NETWORKING + value: "false" + # Disable file logging so `kubectl logs` works. + - name: CALICO_DISABLE_FILE_LOGGING + value: "true" + # All pods to speak to services that resolve to the same host. + - name: FELIX_DEFAULTENDPOINTTOHOSTACTION + value: "ACCEPT" + securityContext: + privileged: true + resources: + requests: + cpu: 250m + volumeMounts: + - mountPath: /lib/modules + name: lib-modules + readOnly: true + - mountPath: /var/run/calico + name: var-run-calico + readOnly: false + # This container installs the Calico CNI binaries + # and CNI network config file on each node. + - name: install-calico-cni + image: quay.io/calico/cni:v1.7.0 + imagePullPolicy: Always + command: ["/install-cni.sh"] + env: + # The name of the CNI network config file to install. + - name: CNI_CONF_NAME + value: "10-canal.conf" + # The location of the etcd cluster. + - name: ETCD_ENDPOINTS + valueFrom: + configMapKeyRef: + name: canal-config + key: etcd_endpoints + # The CNI network config to install on each node. + - name: CNI_NETWORK_CONFIG + valueFrom: + configMapKeyRef: + name: canal-config + key: cni_network_config + volumeMounts: + - mountPath: /host/opt/cni/bin + name: cni-bin-dir + - mountPath: /host/etc/cni/net.d + name: cni-net-dir + volumes: + # Used by calico/node. + - name: lib-modules + hostPath: + path: /lib/modules + - name: var-run-calico + hostPath: + path: /var/run/calico + # Used to install CNI. + - name: cni-bin-dir + hostPath: + path: /opt/cni/bin + - name: cni-net-dir + hostPath: + path: /etc/cni/net.d + # Used by flannel daemon. + - name: run-flannel + hostPath: + path: /run/flannel + - name: resolv + hostPath: + path: /etc/resolv.conf + +--- + +# This manifest deploys a Job which performs one time +# configuration of Canal. +apiVersion: batch/v1 +kind: Job +metadata: + name: configure-canal + namespace: kube-system + labels: + k8s-app: canal +spec: + template: + metadata: + name: configure-canal + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + tolerations: + - key: node-role.kubernetes.io/master + effect: NoSchedule + hostNetwork: true + restartPolicy: OnFailure + containers: + # Writes basic flannel configuration to etcd. + - name: configure-flannel + image: quay.io/coreos/etcd:v3.1.4 + command: + - "etcdctl" + - "--no-sync" + - "set" + - "/coreos.com/network/config" + - '{ "Network": "10.2.0.0/16", "Backend": {"Type": "vxlan"} }' + env: + # The location of the etcd cluster. + - name: ETCDCTL_PEERS + valueFrom: + configMapKeyRef: + name: canal-config + key: etcd_endpoints + +--- + +# This manifest deploys the Calico policy controller on Kubernetes. +# See https://github.com/projectcalico/k8s-policy +apiVersion: extensions/v1beta1 +kind: ReplicaSet +metadata: + name: calico-policy-controller + namespace: kube-system + labels: + k8s-app: calico-policy +spec: + # The policy controller can only have a single active instance. + replicas: 1 + template: + metadata: + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + name: calico-policy-controller + namespace: kube-system + labels: + k8s-app: calico-policy + spec: + # The policy controller must run in the host network namespace so that + # it isn't governed by policy that would prevent it from working. + hostNetwork: true + tolerations: + - key: node-role.kubernetes.io/master + effect: NoSchedule + serviceAccountName: calico-policy-controller + containers: + - name: calico-policy-controller + image: quay.io/calico/kube-policy-controller:v0.5.4 + env: + # The location of the Calico etcd cluster. + - name: ETCD_ENDPOINTS + valueFrom: + configMapKeyRef: + name: canal-config + key: etcd_endpoints + # The location of the Kubernetes API. Use the default Kubernetes + # service for API access. + - name: K8S_API + value: "https://kubernetes.default:443" + # Since we're running in the host namespace and might not have KubeDNS + # access, configure the container's /etc/hosts to resolve + # kubernetes.default to the correct service clusterIP. + - name: CONFIGURE_ETC_HOSTS + value: "true" + +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: calico-cni-plugin +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: calico-cni-plugin +subjects: +- kind: ServiceAccount + name: calico-cni-plugin + namespace: kube-system + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: calico-cni-plugin + namespace: kube-system +rules: + - apiGroups: [""] + resources: + - pods + - nodes + verbs: + - get + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: calico-cni-plugin + namespace: kube-system + +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: calico-policy-controller +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: calico-policy-controller +subjects: +- kind: ServiceAccount + name: calico-policy-controller + namespace: kube-system + +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: calico-policy-controller + namespace: kube-system +rules: + - apiGroups: + - "" + - extensions + resources: + - pods + - namespaces + - networkpolicies + verbs: + - watch + - list + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: calico-policy-controller + namespace: kube-system diff --git a/assets/manifests/kube-proxy.yaml b/assets/manifests/kube-proxy.yaml new file mode 100644 index 00000000..a52281d6 --- /dev/null +++ b/assets/manifests/kube-proxy.yaml @@ -0,0 +1,56 @@ +--- +apiVersion: "extensions/v1beta1" +kind: DaemonSet +metadata: + name: kube-proxy + namespace: kube-system + labels: + tier: node + component: kube-proxy +spec: + template: + metadata: + labels: + tier: node + component: kube-proxy + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + containers: + - name: kube-proxy + image: quay.io/coreos/hyperkube:v1.6.2_coreos.0 + command: + - /hyperkube + - proxy + - --cluster-cidr=10.2.0.0/16 + - --hostname-override=$(NODE_NAME) + - --kubeconfig=/etc/kubernetes/kubeconfig + - --proxy-mode=iptables + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + securityContext: + privileged: true + volumeMounts: + - mountPath: /etc/ssl/certs + name: ssl-certs-host + readOnly: true + - name: etc-kubernetes + mountPath: /etc/kubernetes + readOnly: true + hostNetwork: true + tolerations: + - key: CriticalAddonsOnly + operator: Exists + - key: node-role.kubernetes.io/master + operator: Exists + effect: NoSchedule + volumes: + - hostPath: + path: /usr/share/ca-certificates + name: ssl-certs-host + - name: etc-kubernetes + hostPath: + path: /etc/kubernetes diff --git a/assets/manifests/kube-scheduler-disruption.yaml b/assets/manifests/kube-scheduler-disruption.yaml new file mode 100644 index 00000000..c6ab7f2d --- /dev/null +++ b/assets/manifests/kube-scheduler-disruption.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + name: kube-scheduler + namespace: kube-system +spec: + minAvailable: 1 + selector: + matchLabels: + tier: control-plane + component: kube-scheduler diff --git a/assets/manifests/kube-scheduler.yaml b/assets/manifests/kube-scheduler.yaml new file mode 100644 index 00000000..ab81828f --- /dev/null +++ b/assets/manifests/kube-scheduler.yaml @@ -0,0 +1,56 @@ +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: kube-scheduler + namespace: kube-system + labels: + tier: control-plane + component: kube-scheduler +spec: + replicas: 2 + template: + metadata: + labels: + tier: control-plane + component: kube-scheduler + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: tier + operator: In + values: + - control-plane + - key: component + operator: In + values: + - kube-scheduler + topologyKey: kubernetes.io/hostname + containers: + - name: kube-scheduler + image: quay.io/coreos/hyperkube:v1.6.2_coreos.0 + command: + - ./hyperkube + - scheduler + - --leader-elect=true + livenessProbe: + httpGet: + path: /healthz + port: 10251 # Note: Using default port. Update if --port option is set differently. + initialDelaySeconds: 15 + timeoutSeconds: 15 + nodeSelector: + node-role.kubernetes.io/master: "" + tolerations: + - key: CriticalAddonsOnly + operator: Exists + - key: node-role.kubernetes.io/master + operator: Exists + effect: NoSchedule diff --git a/assets/manifests/kube-system-rbac-role-binding.yaml b/assets/manifests/kube-system-rbac-role-binding.yaml new file mode 100644 index 00000000..80438fee --- /dev/null +++ b/assets/manifests/kube-system-rbac-role-binding.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1alpha1 +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1alpha1 +metadata: + name: system:default-sa +subjects: + - kind: ServiceAccount + name: default + namespace: kube-system +roleRef: + kind: ClusterRole + name: cluster-admin + apiGroup: rbac.authorization.k8s.io diff --git a/assets/manifests/pod-checkpointer.yaml b/assets/manifests/pod-checkpointer.yaml new file mode 100644 index 00000000..813dc5b1 --- /dev/null +++ b/assets/manifests/pod-checkpointer.yaml @@ -0,0 +1,59 @@ +--- +apiVersion: "extensions/v1beta1" +kind: DaemonSet +metadata: + name: pod-checkpointer + namespace: kube-system + labels: + tier: control-plane + component: pod-checkpointer +spec: + template: + metadata: + labels: + tier: control-plane + component: pod-checkpointer + annotations: + checkpointer.alpha.coreos.com/checkpoint: "true" + spec: + containers: + - name: checkpoint + image: quay.io/coreos/pod-checkpointer:20cf8b9a6018731a0770192f30dfa7a1941521e3 + command: + - /checkpoint + - --v=4 + - --lock-file=/var/run/lock/pod-checkpointer.lock + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + imagePullPolicy: Always + volumeMounts: + - mountPath: /etc/kubernetes + name: etc-kubernetes + - mountPath: /var/run + name: var-run + hostNetwork: true + nodeSelector: + node-role.kubernetes.io/master: "" + restartPolicy: Always + tolerations: + - key: node-role.kubernetes.io/master + operator: Exists + effect: NoSchedule + volumes: + - name: etc-kubernetes + hostPath: + path: /etc/kubernetes + - name: var-run + hostPath: + path: /var/run diff --git a/assets/tls/apiserver.crt b/assets/tls/apiserver.crt new file mode 100644 index 00000000..1679b269 --- /dev/null +++ b/assets/tls/apiserver.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDhDCCAmygAwIBAgIIYRTnEUWPB2EwDQYJKoZIhvcNAQELBQAwJTERMA8GA1UE +ChMIYm9vdGt1YmUxEDAOBgNVBAMTB2t1YmUtY2EwHhcNMTcwNTE5MTg0MTIwWhcN +MTgwNTE5MTg0MTIxWjAvMRQwEgYDVQQKEwtrdWJlLW1hc3RlcjEXMBUGA1UEAxMO +a3ViZS1hcGlzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDB +sXDQGt4CSkm+H0oT3HgzADzK3IQtc5QVKTb2DTyw2/m+h4MRd6n+lra8pto09Is/ +YiVx8OCCFFsO726ZZqLQlQePDF36QKJbpIyGq2b3GVByDQqtn47xhXUeLu0z7IMK +8906xmZXeg8HHTIS9P66z3xA9kLn0nwSSFJHGTXMoFr8cnLySnrtDHe9pGo/+jcR +0+jiH3at3w2F1tCaTZ8znEMRP80BTysb7IlZdmNBfaSoT45Nje2eBpZDdxvI8qhi +J2ZWZ7vQsu6AlCneKpTj4tgsV6sEAgs2V8pabRaSM5t0Hq1lGo/npcOamIUQAq1u +O2SpSTIojdSHmWdD9h5dAgMBAAGjga0wgaowDgYDVR0PAQH/BAQDAgWgMB0GA1Ud +JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjB5BgNVHREEcjBwggprdWJlcm5ldGVz +ggprdWJlcm5ldGVzghJrdWJlcm5ldGVzLmRlZmF1bHSCFmt1YmVybmV0ZXMuZGVm +YXVsdC5zdmOCJGt1YmVybmV0ZXMuZGVmYXVsdC5zdmMuY2x1c3Rlci5sb2NhbIcE +CgMAATANBgkqhkiG9w0BAQsFAAOCAQEAj8G9Lc75QNbhADQuOXsSGEi6bJ0UdFoV +vv5VLNMOdZ0+jXtHtLYrB3RygIcolSdqlaqpM9nj61xgnhG3OIYIw8BCqQlaBgO+ +5cAvzmql29AoDbLeu3JctmySScqyCj4mqtlOGHgIotUq226Re1aqSJ8zLH7UDVEa +jyQo8vn5GQm/XwyGUt4nSpYXMi6MztebcePdyOe4387NFJS9/OUQIdWlhv1cegK+ +fU8KRv2MiBfZZqJ1DQD17eV9494DImGN1nCpVlmPNBGTCe75SOYCBOwYhHKoNMLn +YmtnpzBtfAkU4EzjiMm6V22XI/lZsQdxeQfMMScmh+M60DHr7ToRdg== +-----END CERTIFICATE----- diff --git a/assets/tls/apiserver.key b/assets/tls/apiserver.key new file mode 100644 index 00000000..2547d282 --- /dev/null +++ b/assets/tls/apiserver.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAwbFw0BreAkpJvh9KE9x4MwA8ytyELXOUFSk29g08sNv5voeD +EXep/pa2vKbaNPSLP2IlcfDgghRbDu9umWai0JUHjwxd+kCiW6SMhqtm9xlQcg0K +rZ+O8YV1Hi7tM+yDCvPdOsZmV3oPBx0yEvT+us98QPZC59J8EkhSRxk1zKBa/HJy +8kp67Qx3vaRqP/o3EdPo4h92rd8NhdbQmk2fM5xDET/NAU8rG+yJWXZjQX2kqE+O +TY3tngaWQ3cbyPKoYidmVme70LLugJQp3iqU4+LYLFerBAILNlfKWm0WkjObdB6t +ZRqP56XDmpiFEAKtbjtkqUkyKI3Uh5lnQ/YeXQIDAQABAoIBAERN1ZGdl+LI3b5s +/EuKuNyLXeTP5NC+bF8V/KrCOj/IIwccdI0JXOpJrcFTOano/t3oN3o5zoIwuXfH +2YHBHvNdSqAYZV+lwVt96IxpD1NeGu9NSBG4LclgHc/6Dm38Hq4TF1XttxNsGLaS +hiEHQnkQSCoEbc2gfV5ZIKKv8jfpShYiaAPzrt3saE/2+OliJ5p6zfXKNlEsg1US +78g+JiOVXZdEQFyPP5Yo8gje8wQ2NetnilQQ9rtBbPv9FfsTrj03srlU2D7IIBdQ +7D3Z5AN7e7RiwRGmStZ4GllcCuhvjhvfhav132G01o8/DwvVLTnfSKFA7+E8UYG9 +6ZAzX4UCgYEA/pXt8ehj3s1f8cNaSEJlD8AsOHgzcuxRvdrE+zA8l4eEFpP5UJej +OcDu966q1yt4Qp7Yx2sW3UA76m7RugdqA5MP25fgzGV5n22iwYbnBQvqDQEOjMH1 +1k0CkaRXhDCzGuwb07og/rhOJdCI3OSCQpLD6BsX8MVPJ/2Gfe4XECcCgYEAwsTo +/iNZFNKkPwlfjpirry6gB7GZYRYdkneMM92fTzuDdqSIrM9oLBeUyixAfPP9c0yV +2cwhc8TLdHxIwatzNNJkwp2+eANfg8jQ0vK9J8V0649C5iM3aZ5MUVG2IS4RAZtH +MG2w5fvdd7SqJ8ROWUy7+E0s472yfJNL3auNa9sCgYEA5AXPwEsAII/cboMlevEU +6Z2bPdzTYAywThcDNWSH8MStFzfkJz4aMWFP6EHmvKAvr6Psz/hn2zVsNNabPD7l +wlvW6T1IWGpPG++rxiCZDJkWQh1/Na2IDjCdq2sCA+FGmkd9yQ69/MeBHzd/TjHR +ReWEWIDj2YAwHMZjzqkQuSMCgYA10Kp/7cxjUIBJWpGomM53LO7SsWOry6yIF7gJ +bKbkAZGlanjJJtWluS5HXkrDO7c/8F1HPHvRvQJqQRzpRjIi2i81Btjl2CjABPCO +GLvjDU/s9jyJ0hkxeaekoGsuZ8gTJZBZ9TT3lsvuk2CgdEEhs24MgWZx1qxGd3xy +1z/QGQKBgQCE7afZwIEUQ6epGlUPwmm+mqGiUNbXAz/PnK/IhuOeV9aEU78lPH8p +6rMpuh5SOqGcRaZhpRSIY3vqU9Yk49OO4BOawF2j8k4pVkTaJGgD71in8aDbcVBc +VlIMP2q93mnyO7OC8znQKHMs5WRWEokRbSsjWEeQF1MtyBWaIiWmlg== +-----END RSA PRIVATE KEY----- diff --git a/assets/tls/ca.crt b/assets/tls/ca.crt new file mode 100644 index 00000000..cca186c3 --- /dev/null +++ b/assets/tls/ca.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC6DCCAdCgAwIBAgIBADANBgkqhkiG9w0BAQsFADAlMREwDwYDVQQKEwhib290 +a3ViZTEQMA4GA1UEAxMHa3ViZS1jYTAeFw0xNzA1MTkxODQxMjBaFw0yNzA1MTcx +ODQxMjBaMCUxETAPBgNVBAoTCGJvb3RrdWJlMRAwDgYDVQQDEwdrdWJlLWNhMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAulAVfzTe/mMl31NAx7P524sz +nQKmxG+BXfDPt4O778tBF76RsEX+wKrRtooBr7axhvR0ok5kDZPARGpNKARmdCSm +336ErFtqTwMoreY7WVCU2CBFOtt2umfJDuGVoNUHEkD8MeV2lYJCoxwJrhe5wiqq +m4hptSCepUjilmkReWQ+/N4+RVDpr86GY2QBUlv9OtA5hxTisbA01SwSPAWrpOqV +8JIj2RLZn85FTzMFTQk0Wu0Zugiryqdaxl33VL3+URI3QC2r2dpvd1SeyWDEXvjm +kn9238we+2wBeRaceCvC7jyDvYSOhS+j92wFdnQYx+HinA8nn8Qfdm38u6A9hwID +AQABoyMwITAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQsFAAOCAQEADHvgtDCE8tv0lKIzEqfubUA5LKQ4NiT5SUAucYazMpKw1QIW +QinCoLEfyPMwgkbgXjzwne8PxeEjjvwCRqwbyViBWnv937p94poZ/9G3CW3bSYwQ +4ZeZnwW6wW0IGsEheMwknBeQboocM6cXu8hto1AYHOnjtg2t1RufWpsDn5aokuW/ +RI8Hg5vnWWKAAAwcwkmg8aiN/1nYQG/coD41kXe/iJ1DTPZa2CPxgm71f2hRnEYT +c7uT7uueBapo1O+ttPkghsIvPZKc6vKxK0wrvzHGRoULl77Z83z92aoPLzcmnJ3d +MFEq4d7JQ5u5i+SaqqqOdp1RGAiuiNpcvyP9ew== +-----END CERTIFICATE----- diff --git a/assets/tls/ca.key b/assets/tls/ca.key new file mode 100644 index 00000000..f3c15499 --- /dev/null +++ b/assets/tls/ca.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAulAVfzTe/mMl31NAx7P524sznQKmxG+BXfDPt4O778tBF76R +sEX+wKrRtooBr7axhvR0ok5kDZPARGpNKARmdCSm336ErFtqTwMoreY7WVCU2CBF +Ott2umfJDuGVoNUHEkD8MeV2lYJCoxwJrhe5wiqqm4hptSCepUjilmkReWQ+/N4+ +RVDpr86GY2QBUlv9OtA5hxTisbA01SwSPAWrpOqV8JIj2RLZn85FTzMFTQk0Wu0Z +ugiryqdaxl33VL3+URI3QC2r2dpvd1SeyWDEXvjmkn9238we+2wBeRaceCvC7jyD +vYSOhS+j92wFdnQYx+HinA8nn8Qfdm38u6A9hwIDAQABAoIBADpNLSztQoqgRA2q +Y68aZqmI2dHcLotxyS24WYe3tWvIUso3XCeo/5sS2SUh8n0l0k/E12qi1TRac+P0 +z8gh+F2HyqBNWv8EbDPlbSldzlyYlrs6/e75FiImsAf0F3qIrvnLVB/ZCk6mwGuC +LpVH310fNNwOx+ViG8LlF+KxZkJxzoKQ2RwiCwzMzpvNBTJyEE1jfqNlc92XnP65 +FhjcFfzSJhFK3VH1gdpfO8bUiLiiUhzKzXH7Af73UqZ22wHeYx87ZJBv7e9ymbWT +GMf9js92e3OdXa3al75JlXgexSDmV2OdZNj6zpqAyupo5b+jXNxcxDaQCitOAcyU +H6HqMiECgYEAwWeEvOL/JC1hFBniM3jtG7ZcXjT1nuc0I9z+b0O6i3JXp1AXuxqU +COOn0udgJ4SJZZk2LOja7Mq6DsPvbPK9OA/XvSju6U/cqALpLdT+bvcG1J5km80w +F9d5a8CmABYsIzIm5VOYCZN/ELxo9uzDhNpiU1m7EVZengg8E1/xSpMCgYEA9pz/ +SGZTFHdLZn7jgg9EzdnjZ2SlSnGc1tHayiRbHknwt8JFMwHeL/TPI6/4ns4A8l59 +IEl1Zf8pWDhwa2qGITXQBmauLYzuPGSIBdABLnJQtE4r6o+vYafZxZVvTAv5B4Sz +TCWFkLYtvHvs71+u7IKS+dJg3EYy3Gx5KVhddb0CgYAr8QMdj018wLqvwHm+TBlD +FJnD5bBwnAMiqtE8Il091YrIvs/FePJtWpwEtQEJuXkmFjtS1Mz4w86mECpTzIrl +M+RGXAh8BeMSYSbtfNkaCRIKOLqPE317zT8PFkQg/OimTny72dRPSK2z9bq7b2u0 +wZFZcqen9sGkkiZkGIZP9QKBgQDcgX6FVvD8QLqLl/OHLG3h/ewmW8irqrCJKDUQ +P7e1enmhZTSIqifoC2ZXS5XrMNmJ3VDWWLh/DcsDFdv3P9VUxpAN2SvukK/IEj/J +qrYTuKVOwwLjhbxUfkfrMnXEsoPl5BKJiJdH0I1OliRB2PVIhmwysphm/OGnU9p2 +TIuspQKBgQCq5QJcny6CWHnFh/Q1faYqIjvaS4MqLfnDndvZ98abpcjik3AKgWof +iaROSk40L+q4uDuaM5tU1ufS/FS94hwlk2O1bQ/xgJBkNZnvZJRFU3oZjhggyl6G +iFtBTAGGtJqHTPMtn/Y6dUOJ/ZFIZWzuNhJGYX/S3ifpZeldKXmXew== +-----END RSA PRIVATE KEY----- diff --git a/assets/tls/kubelet.crt b/assets/tls/kubelet.crt new file mode 100644 index 00000000..859df1d1 --- /dev/null +++ b/assets/tls/kubelet.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDAzCCAeugAwIBAgIILMPkLd2E/uAwDQYJKoZIhvcNAQELBQAwJTERMA8GA1UE +ChMIYm9vdGt1YmUxEDAOBgNVBAMTB2t1YmUtY2EwHhcNMTcwNTE5MTg0MTIwWhcN +MTgwNTE5MTg0MTIxWjArMRcwFQYDVQQKEw5zeXN0ZW06bWFzdGVyczEQMA4GA1UE +AxMHa3ViZWxldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtz9mHo +tPkidPbQeu9RS6tAOQhAhPOzV7y5kxo9ZkyGR5mOJ5MElfoofHWGXDqJs3IHO6Zr +ZTKTYgX6c3jisMhIT62JnN9ZaATWcrd+qQ15ixTNhqdy3UcX6xlB8YF8KpVZ40rO +wrP/UsG9EaBit37iOmmINIkZtbNIhvOYhkJvr+NOtX/8TsnRZpT9PyCeyZJbsZIZ +d1Apfu2ENeS1C1OgOQIEOREBehc3GVH11D9BRtFob22MjZUjxyGj0SButUmpvnY9 +ogfE5pT0yhI+kZlP6iMPkk0oGlkcc+U4X8VrSyYXfJNEbmI5aDZe3A4lk4fXiF/Y +NosbHYnzdf/j0acCAwEAAaMxMC8wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQG +CCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAIgaxO6aAyGRq +MINPID5bG/ZSRoIBSEX0bAviLKWP9RonjfayM8Xb3r2WZ4TmJoYYDNMRFoyCeStw +1fjl7b2vpmFBOxlpmRvNhRF1dlI9Rt4GRRVkxeS7c4dkc0LFTHEPp0X/RmSt4uf+ +X9sYsWOGSBf52+qZ/7UNI6SYwoltenzbwnLHY9NSLXiVFommCXPaBma1GlkQN2F3 +cEInhf78BXKXeIpWdZboHuWOUu3aoRT0p6fegb2Uxh2a73s6sToHjE7oy3H2ZvKR +kcFJ2TnKMrqzEK/9wyc/gu/kYVx8/zCoPlDQASem7aTZgOIDZ8wc4g9rBitnxdIs +jxZwjOKt9g== +-----END CERTIFICATE----- diff --git a/assets/tls/kubelet.key b/assets/tls/kubelet.key new file mode 100644 index 00000000..27816a66 --- /dev/null +++ b/assets/tls/kubelet.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEAu3P2Yei0+SJ09tB671FLq0A5CECE87NXvLmTGj1mTIZHmY4n +kwSV+ih8dYZcOomzcgc7pmtlMpNiBfpzeOKwyEhPrYmc31loBNZyt36pDXmLFM2G +p3LdRxfrGUHxgXwqlVnjSs7Cs/9Swb0RoGK3fuI6aYg0iRm1s0iG85iGQm+v4061 +f/xOydFmlP0/IJ7Jkluxkhl3UCl+7YQ15LULU6A5AgQ5EQF6FzcZUfXUP0FG0Whv +bYyNlSPHIaPRIG61Sam+dj2iB8TmlPTKEj6RmU/qIw+STSgaWRxz5ThfxWtLJhd8 +k0RuYjloNl7cDiWTh9eIX9g2ixsdifN1/+PRpwIDAQABAoIBAQCRpzJbs4DjUHXH +zgin6eg9AaMPGWr1HXZgC2YU7n6NmY0K8N0pLFgIz+qdOzBwv8xyHtKnpi001jZF +ZOzSknpAtYdL1XDST1s23xa2I7Hh6X47RNOLSwJLGnev4YBxV3STJgwpdWzuhcbd +CTcoA2yHJ+uxUodXvGVmEEXkA7DW7zLZpvLJ//nD5z5CM0IUPdaSgXhYQp2NZWtI +RjLdjkuYVyBYC2rU4LpmiH1eIVL7bDHoUQhOaHN0wSFG80o46gvrqbhrMPw7BwIu +bCW30q4Y4JPRYn5ru0zCForne65I2kRtnJUDjn99dOntWVZibRojY0hFFEyGYOjZ +WItzGAbxAoGBANFj2ZHitQxtqYs7MNIY9jz/7pzuPaX8dm+2/3WW5Aot01+s4yVH +pd7HE8l5NjnejWG7nG2GPsIhbCCVXEtSMGt1BRioKpc2dLq+ZQb75LGDMaJzMWEm +/HimJuhXvxOzzKC9Z29vo4d6JC58vPwyu27dFAv3rzAcdiWb/aib7S6ZAoGBAOUu +BePZgqlpwl3wqDlAljiLsH8AeZUH2rDA4n4d+1kKPMqJYMmftGaTkDJMeJfisfKb +EXcQsGJAeOLHRpY1VvkHqn5v+7qg9JHSnlw+/nTF5Vk6ISAFMs2Qfwdq6fZ898GZ +mi9VXr0hez7Z/v/liCxBcl0hgAhnjIFGvQ5rSmo/AoGBAIvlVFWdzCyTj/UQBNw6 +BTpYHAoJOnMNq+uTrjXYLF+IonKHxfMAXZfsFhJDw7ECOh+UAz1BtehqAB387H7+ +WI9SzabdpCcHIRIrZsA1x2O6LY1FvTYVoBTTnacaCPWW6R5zrQnM4sr/FfFhMbqm +AohdeKlOQGO6gE08XUsrclnxAoGBALOv+f5DtCaQPUzaO4toEGAVZjStcqZemiCr +mum3KDMPy8ohHDn5dcBXQl+thX/QxiSpYHAyLZlbY2yrQbTT7XUjhZHMy1nwiNEs +ie1ZlriH0OK8qOwqJ0L1YCO4t+gC415vyGwES1uOvMrysPSCStooFjre4Tu1tHxH +skNz68yRAoGBAJyMFoQu0rzOxCwQx+8m1encm9pcUvu2eSwwy+9460W474Ww4qZA +F4DWwjDg5dBG1Im21KIJkhoX579dh3QIRr3PRwlQUkQlxTrUSEtpfNTU3pvWV9BF +tuLS1TnOdweoQ8cGZZd9PWMLLrBd0JeR4FyH23rOUmMFwJ2A6OopeX6B +-----END RSA PRIVATE KEY----- diff --git a/assets/tls/service-account.key b/assets/tls/service-account.key new file mode 100644 index 00000000..26c20230 --- /dev/null +++ b/assets/tls/service-account.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA1OJQmE9JCI20h3BI/xJpQoNIfYviHIhlx6Al60Kv4Zb+taD+ +Jd6pCbHqjgYyiYH1wq0nMC9MiRbphdMsKfJXo57H2X1QWNc+3RYzNEL2ra2rkCGw +q1jKGk6RofagbrinjAC9hGcm/V713fCdSpULH6Ruro9Kjvtca0nLjBcGC03pkuUi +1e7EPj2SALQxA1iV2+sqqpg2axlpyAN7gecafjVN10kkMw9GKumQqUpejCtf3tTv +zzfmGqiNnHDB8lDnXpHecKIZkfXdH5Pd4jRY5DyFfrsL5xy0OHF4rA/EDSFkdEZ2 +rTYiCB/O17pw6LuEu79V3N2hJVEwe4Uti3olQwIDAQABAoIBAHSWjXUc1u6sTNZw +FEo9lxAqPiUj2u2tdbBicOHrX8+4lj56sTWkQAdjPQYTNtJALowzsGafQNdDiRkV +kfZXFtAxQVpHWx2MpI0If3p7wgVUO8Vv7gWpVuYZaYC+RRbeYkQ2k5RTufLBcv3d +rQcPoUvvDf7j0v2DhBXuEF/krBa70OnI6Fv5b6Tay4cN6vmNJSPUlDPvicCizmvV +WtAq5pkPfXW1uweMYDOSD10zaetclMae/0C1hahk9kGoLv49XnKCX/Luzwx0ShJL +F0Zk+0s9nmMAAfRL8JM7E9iwXa8I4zXpaNON5RfzdUQeU6puhNQrMExrfzFYWYVl +rPaRnqECgYEA4C7i9B08wR+JEbKeEvTTzUAS8W+S5lSkzPN75Tt4aHeTojzvRXa0 +nUvbr+0PGctpa3OwDzh/SayKqkJvWzxWmzKELTsWkpUZLyx37oxkoQ+dUKSFDYF7 +ejGYfqthUC65NA0rqmz6qiCK/RFXL1ihMY0f/74+IzChoiftpFQ0pt8CgYEA8xjn +jHcBpGmUOyKRWkmTM1x3l5NhT2bZYy5CGPXZ8tiu6zdi2gw2xUmgVIPzUnTDqmOH +NPuRvHv2sovqZsApDankwzsWthFLVFjPdpXjVa+Gvp6YN0FTeeIEjGujmCJ9Zj9b +oIk4o6gRzQNx5L/RaE2/oQrTGwlCWeA44pH6gh0CgYEA0KZSzOk5VnVHWZVo0jPT +vUBZYSR7EKzPBYHIWj3Tf0drvKACAiDNUWj8+uwkFdngMAXoYwIuVh+kn3pdsgii +gqetpXtNMvhaDDHTHc7FCbJCtH+q5jsQ9VWbnKldVQdnkC6B6YisdBL9yTOOdZ6D +yF6U3a3un0nv5cBLyZoltvkCgYEA5Aexc6ZSKQpMXGghlmK7rIsJN2qs9hFQy2Mh +503+oni1I7jxhf29BrT4qy6W+PrEa7kuo/lzDC3wDC2Is9d+6u05xBRSSnjQg49H +FEKnW8HpkDcuK26gwgzMHXf+nf+ER3wZE+6D7agDAp8/n8Z6xO9hWMvRmGPIFIxq +b8VlCdUCgYBgwfUsSsCMP8KVOJAuwf4/SWOkIUUQHQUj1CyEz2UWG5QiP2wqFiA7 +IH8K8JsO9MSWq3ndR9kR+HGBCkJyyoD1GzBZeRhPb+69fYWao3lKUzEDqmxB7zjh +NPltbLlGGNbPhczXyJeSv1N94MUwY1wt0aAX6G+HiBI8a3cjC/cQPg== +-----END RSA PRIVATE KEY----- diff --git a/assets/tls/service-account.pub b/assets/tls/service-account.pub new file mode 100644 index 00000000..a43e38fc --- /dev/null +++ b/assets/tls/service-account.pub @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1OJQmE9JCI20h3BI/xJp +QoNIfYviHIhlx6Al60Kv4Zb+taD+Jd6pCbHqjgYyiYH1wq0nMC9MiRbphdMsKfJX +o57H2X1QWNc+3RYzNEL2ra2rkCGwq1jKGk6RofagbrinjAC9hGcm/V713fCdSpUL +H6Ruro9Kjvtca0nLjBcGC03pkuUi1e7EPj2SALQxA1iV2+sqqpg2axlpyAN7geca +fjVN10kkMw9GKumQqUpejCtf3tTvzzfmGqiNnHDB8lDnXpHecKIZkfXdH5Pd4jRY +5DyFfrsL5xy0OHF4rA/EDSFkdEZ2rTYiCB/O17pw6LuEu79V3N2hJVEwe4Uti3ol +QwIDAQAB +-----END PUBLIC KEY----- diff --git a/kubelet.service.template b/kubelet.service.template new file mode 100644 index 00000000..e0fa7f79 --- /dev/null +++ b/kubelet.service.template @@ -0,0 +1,26 @@ +[Unit] +Description=Kubernetes Kubelet +Documentation=https://kubernetes.io/docs/admin/kubelet/ + +[Service] +ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests +ExecStart=/usr/local/bin/kubelet \ + --kubeconfig=/etc/kubernetes/kubeconfig \ + --require-kubeconfig \ + --cni-conf-dir=/etc/cni/net.d \ + --cni-bin-dir=/opt/cni/bin \ + --network-plugin=cni \ + --lock-file=/var/run/lock/kubelet.lock \ + --exit-on-lock-contention \ + --pod-manifest-path=/etc/kubernetes/manifests \ + --allow-privileged \ + --cluster_dns=192.168.1.70,8.8.8.8,10.3.0.10 \ + --cluster_domain=cluster.local \ + --node-labels=node-role.kubernetes.io/canal-node=true,node-role.kubernetes.io/master= \ + --hostname-override=${NODE_HOSTNAME} \ + --v=2 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target diff --git a/scripts/common/func.sh b/scripts/common/func.sh new file mode 100644 index 00000000..26742d65 --- /dev/null +++ b/scripts/common/func.sh @@ -0,0 +1,64 @@ +# Copyright 2017 The Promenade Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +function validate_environment { + local ERRORS= + + if [ "x${NODE_HOSTNAME}" = "x" ]; then + echo Error: NODE_HOSTNAME not defined, but required. + ERRORS=1 + fi + + if ! docker info; then + cat < /target/etc/systemd/system/kubelet.service + chown root:root /target/etc/systemd/system/kubelet.service + chmod 644 /target/etc/systemd/system/kubelet.service + + chroot --userspec root:root /target /bin/bash < ./scripts/start-kubelet.sh +} diff --git a/scripts/common/start-kubelet.sh b/scripts/common/start-kubelet.sh new file mode 100755 index 00000000..b94787d4 --- /dev/null +++ b/scripts/common/start-kubelet.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# Copyright 2017 The Promenade Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -ex + +systemctl daemon-reload +systemctl enable kubelet.service +systemctl start kubelet.service diff --git a/scripts/entrypoint-genesis.sh b/scripts/entrypoint-genesis.sh new file mode 100755 index 00000000..c45ab7d9 --- /dev/null +++ b/scripts/entrypoint-genesis.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# +# Copyright 2017 The Promenade Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -ex + +source ./scripts/env.sh +source ./scripts/func.sh + +validate_environment +# XXX validate_genesis_assets + +docker load -i ./genesis-images.tar + +install_assets +install_cni +install_kubelet + +docker run --rm \ + -v /etc/kubernetes:/etc/kubernetes \ + quay.io/coreos/bootkube:${BOOTKUBE_VERSION} \ + /bootkube start \ + --asset-dir=/etc/kubernetes diff --git a/scripts/entrypoint-join.sh b/scripts/entrypoint-join.sh new file mode 100755 index 00000000..b2c1ceae --- /dev/null +++ b/scripts/entrypoint-join.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# +# Copyright 2017 The Promenade Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -ex + +source ./scripts/env.sh +source ./scripts/func.sh + +validate_environment +# XXX validate_join_assets + +install_assets +install_cni +install_kubelet diff --git a/test-install.sh b/test-install.sh new file mode 100755 index 00000000..0376ec62 --- /dev/null +++ b/test-install.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +set -ex + +# Setup master +vagrant ssh n0 < Date: Tue, 23 May 2017 16:43:47 -0500 Subject: [PATCH 3/6] add more details to README --- README.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0a1ee0c5..3a0c9e91 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,68 @@ # Overview -To give this a try: +Promenade is tool for deploying self-hosted Kubernetes clusters using +[bootkube](https://github.com/kubernetes-incubator/bootkube). -``` -make save +## Quickstart using Vagrant + +Make sure you have [Vagrant](https://vagrantup.com) and +[VirtualBox](https://www.virtualbox.org/wiki/Downloads) installed. Then +install the `vagrant-hostmanager` plugin. + +```bash vagrant plugin install vagrant-hostmanager +``` +Build the genesis and join images and save them to disk for quick loading into +the Vagrant VMs. + +```bash +make save +``` + +Start the VMs and save a snapshot for quicker iteration: + +```bash +vagrant up +vagrant snapshot save clean +``` + +Spin up a cluster: + +```bash ./test-install.sh ``` + +Watch nodes spin up: + +```bash +watch kubectl --insecure-skip-tls-verify --kubeconfig <(sed 's/kubernetes:443/192.168.77.10:443/' < assets/kubeconfig) get nodes +``` + +To test changes, you can safely reset single or multiple nodes: + +```bash +vagrant snapshot resotre n2 clean +vagrant snapshot restore clean +``` + +## Detailed Deployment + +The basic outline for deploying a cluster is: + +1. Overwrite the placeholder assets in the `assets` directory. +2. Make sure the `Makefile` lists the images and versions you expect to be + required. +3. Build the images with `make build` +4. Setup each host with the following: + - DNS resolution pointing `kubernetes` to the appropriate IPs for the + Kubernetes API + - A running docker daemon, configured to use the DNS resolution specified + above (see `vagrant-assets/docker-daemon.json`) +5. Transfer the appropriate images to each host. You may find it useful to + run `make save`, transfer the image and then use `docker load -i ...` to + restore it rather than to rely on a registry. +6. On the genesis (seed) server, start the cluster: + `docker run --rm -v /:/target -v /var/run/docker.sock:/var/run/docker.sock -e NODE_HOSTNAME=genesis-node.fqdn quay.io/attcomdev/promenade-genesis:dev` +7. On each additional node: + `docker run --rm -v /:/target -v /var/run/docker.sock:/var/run/docker.osck -e NODE_HOSTNAME=join-node.fqdn quay.io/attcomdev/promenade-join:dev` From 28763f7f27a6b2dbc2c3c9d96b8329afda195f61 Mon Sep 17 00:00:00 2001 From: Mark Burnett Date: Wed, 24 May 2017 08:14:50 -0500 Subject: [PATCH 4/6] add --no-provision to `vagrant snapshot restore` --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3a0c9e91..35347c66 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,8 @@ watch kubectl --insecure-skip-tls-verify --kubeconfig <(sed 's/kubernetes:443/19 To test changes, you can safely reset single or multiple nodes: ```bash -vagrant snapshot resotre n2 clean -vagrant snapshot restore clean +vagrant snapshot resotre n2 clean --no-provision +vagrant snapshot restore clean --no-provision ``` ## Detailed Deployment From 4ecbdc7f962e882be288a3aabeb65772dafa75b5 Mon Sep 17 00:00:00 2001 From: Aric Renzo Date: Wed, 24 May 2017 10:08:33 -0400 Subject: [PATCH 5/6] README Updates and cleanup --- README.md | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 35347c66..61086169 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Overview -Promenade is tool for deploying self-hosted Kubernetes clusters using -[bootkube](https://github.com/kubernetes-incubator/bootkube). +Promenade is tool for deploying self-hosted, highly resilient Kubernetes clusters using +[bootkube](https://github.com/kubernetes-incubator/bootkube). Currently. Promenade works by leveraging Docker containers with the Bootkube binaries in order to setup Kubernetes on the host operating system. Default Kubernetes assets and manifests are included in this repo, but it is recommended to render or supply your own assets for real-world deployments. ## Quickstart using Vagrant @@ -48,21 +48,34 @@ vagrant snapshot restore clean --no-provision ## Detailed Deployment -The basic outline for deploying a cluster is: +The below steps can be used to deploy a cluster on bare metal or virtual nodes: 1. Overwrite the placeholder assets in the `assets` directory. + 2. Make sure the `Makefile` lists the images and versions you expect to be required. + 3. Build the images with `make build` + 4. Setup each host with the following: - - DNS resolution pointing `kubernetes` to the appropriate IPs for the + - DNS resolution pointing `kubernetes` to the appropriate IPs (Kubernetes master nodes) for the Kubernetes API - A running docker daemon, configured to use the DNS resolution specified - above (see `vagrant-assets/docker-daemon.json`) + above (see `vagrant-assets/docker-daemon.json`) + 5. Transfer the appropriate images to each host. You may find it useful to run `make save`, transfer the image and then use `docker load -i ...` to restore it rather than to rely on a registry. -6. On the genesis (seed) server, start the cluster: + +6. On the genesis (seed) server, start the cluster supplying in the node's FQDNs: `docker run --rm -v /:/target -v /var/run/docker.sock:/var/run/docker.sock -e NODE_HOSTNAME=genesis-node.fqdn quay.io/attcomdev/promenade-genesis:dev` -7. On each additional node: - `docker run --rm -v /:/target -v /var/run/docker.sock:/var/run/docker.osck -e NODE_HOSTNAME=join-node.fqdn quay.io/attcomdev/promenade-join:dev` + +7. On each additional node to be joined to the cluster: + `docker run --rm -v /:/target -v /var/run/docker.sock:/var/run/docker.sock -e NODE_HOSTNAME=join-node.fqdn quay.io/attcomdev/promenade-join:dev` + + +## References: + +1. [Demo of Genesis Node Deployment](https://asciinema.org/a/c2fdtzh2z2fiymiyu75b32u0h) + +2. [Demo of Joining Node to Cluster](https://asciinema.org/a/62dssvuiwbdanfuwwe6vzcihk) From 37d5763f528f6e3a76eb952a11838b6917ced4b9 Mon Sep 17 00:00:00 2001 From: Mark Burnett Date: Wed, 24 May 2017 09:50:37 -0500 Subject: [PATCH 6/6] replace wget with curl --- Makefile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 6e63853e..ec507e70 100644 --- a/Makefile +++ b/Makefile @@ -94,8 +94,7 @@ save-join: build-join sudo docker save $(NAMESPACE)/$(JOIN_REPO):$(TAG) > promenade-join.tar cni.tgz: - wget https://github.com/containernetworking/cni/releases/download/$(CNI_VERSION)/cni-amd64-$(CNI_VERSION).tgz - mv cni-amd64-$(CNI_VERSION).tgz cni.tgz + curl -Lo cni.tgz https://github.com/containernetworking/cni/releases/download/$(CNI_VERSION)/cni-amd64-$(CNI_VERSION).tgz env.sh: Makefile rm -f env.sh @@ -105,11 +104,11 @@ env.sh: Makefile echo export KUBERNETES_VERSION=$(KUBERNETES_VERSION) >> env.sh helm: - wget https://storage.googleapis.com/kubernetes-helm/helm-$(HELM_VERSION)-linux-amd64.tar.gz - tar xf helm-$(HELM_VERSION)-linux-amd64.tar.gz + curl -Lo helm.tgz https://storage.googleapis.com/kubernetes-helm/helm-$(HELM_VERSION)-linux-amd64.tar.gz + tar xf helm.tgz mv linux-amd64/helm ./helm rm -rf ./linux-amd64/ - rm -f helm-$(HELM_VERSION)-linux-amd64.tar.gz* + rm -f helm.tgz chmod +x helm genesis-images.tar: @@ -125,17 +124,18 @@ join-images.tar: sudo docker save -o join-images.tar $(JOIN_IMAGES) kubelet: - wget http://storage.googleapis.com/kubernetes-release/release/$(KUBERNETES_VERSION)/bin/linux/amd64/kubelet + curl -LO http://storage.googleapis.com/kubernetes-release/release/$(KUBERNETES_VERSION)/bin/linux/amd64/kubelet chmod +x kubelet clean: rm -rf \ + *.tar \ cni.tgz \ env.sh \ helm \ - helm-*-linux-amd64* \ - *.tar \ + helm.tgz \ kubelet \ + linux-amd64 \ .PHONY : build build-genesis build-join clean genesis join push push-genesis push-join