Last active
October 10, 2018 12:59
-
-
Save dims/3914bdfb0ebde52ea0118a237a4d90b9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Run at least 2 VM(s) in an OpenStack environment and then follow the steps below: | |
# See https://gist.github.com/dims/a5081982e7b6efa273af95593c110cc8#file-cloudlab-txt-L43 on the cloud.conf mentioned below | |
#====================== Load up what we need on all nodes ========================================================== | |
#!/bin/bash | |
# get start with dependencies | |
apt-get update -y && apt-get upgrade -y | |
apt-get install -y \ | |
apt-transport-https \ | |
ca-certificates \ | |
curl \ | |
software-properties-common \ | |
bison | |
# install docker | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - | |
add-apt-repository \ | |
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \ | |
$(lsb_release -cs) \ | |
stable" | |
apt-get update -y && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 18.06 | head -1 | awk '{print $3}') | |
# Install go | |
curl -s https://dl.google.com/go/go1.11.1.linux-amd64.tar.gz | sudo tar --transform 's/^go/go-1.11.1/' -xvzf - -C /usr/lib/ | |
sudo unlink /usr/local/bin/go | |
sudo unlink /usr/local/bin/gofmt | |
sudo ln -s /usr/lib/go-1.11.1/bin/go /usr/local/bin/go | |
sudo ln -s /usr/lib/go-1.11.1/bin/gofmt /usr/local/bin/gofmt | |
# install latest kubernetes binaries | |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - | |
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list | |
deb http://apt.kubernetes.io/ kubernetes-xenial main | |
EOF | |
apt-get update | |
apt-get install -y kubelet kubeadm kubectl | |
# patch up docker so cgroup driver used by kubelet is the same as the one used by Docker | |
cat << EOF > /etc/docker/daemon.json | |
{ | |
"exec-opts": ["native.cgroupdriver=cgroupfs"] | |
} | |
EOF | |
service docker restart | |
# cleanup any old images, containers in docker | |
docker rm -f $(docker ps -a -q) | |
docker rmi -f $(docker images -q -a) | |
# unnecessary stuff | |
#sysctl net.bridge.bridge-nf-call-iptables=1 | |
#sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE | |
cat << EOF > $HOME/.vimrc | |
:filetype indent off | |
:set nu | |
EOF | |
sudo chmod 777 /var/run/docker.sock | |
#============================ Only on Master ==================================================== | |
cat << EOF > kubeadm.conf | |
apiVersion: kubeadm.k8s.io/v1alpha1 | |
kind: MasterConfiguration | |
apiServerExtraArgs: | |
cloud-provider: external | |
controllerManagerExtraArgs: | |
cloud-provider: external | |
EOF | |
echo "token: "$(kubeadm token generate) >> kubeadm.conf | |
#============================= On Both Master and Node =================================================== | |
# Fix /etc/hosts to add entries from cloud.conf on BOTH master and node | |
# Copy cloud.conf over to the VM(s) in /etc/kubernetes/cloud-config on BOTH master and node | |
# patch /etc/systemd/system/kubelet.service.d/10-kubeadm.conf on both VM(s) to add the cloud provider related arguments | |
sed -i -E 's/(.*)KUBELET_KUBECONFIG_ARGS=(.*)$/\1KUBELET_KUBECONFIG_ARGS=--cloud-provider=external \2/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf | |
systemctl daemon-reload | |
systemctl restart kubelet | |
#====================================== Run on the Master ========================================== | |
kubeadm init --config kubeadm.conf | |
mkdir -p $HOME/.kube | |
sudo rm $HOME/.kube/config | |
sudo cp -f -i /etc/kubernetes/admin.conf $HOME/.kube/config | |
sudo chmod 755 $HOME/.kube/config | |
sudo chown $(id -u):$(id -g) $HOME/.kube/config | |
kubectl create configmap cloud-config --from-file=/etc/kubernetes/cloud-config -n kube-system | |
kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/cluster/addons/rbac/cloud-controller-manager-roles.yaml | |
kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/cluster/addons/rbac/cloud-controller-manager-role-bindings.yaml | |
kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/openstack-cloud-controller-manager-ds.yaml | |
export kubever=$(kubectl version | base64 | tr -d '\n') | |
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever" | |
kubectl create -f - <<EOF | |
apiVersion: storage.k8s.io/v1 | |
kind: StorageClass | |
metadata: | |
name: standard | |
annotations: | |
storageclass.beta.kubernetes.io/is-default-class: "true" | |
labels: | |
kubernetes.io/cluster-service: "true" | |
addonmanager.kubernetes.io/mode: EnsureExists | |
provisioner: kubernetes.io/cinder | |
EOF | |
#============================== Run on the node ================================================== | |
# This is the snippet printed when you run kubeadm init | |
kubeadm join --token e0d1da.1f21992d118a8a1a 10.11.10.7:6443 --discovery-token-ca-cert-hash sha256:191c98be14aabe0c6df5ba90fc26ad32e6a8845a41d57d57402feff133e9bf6a | |
#================================ If you need to clean up master or the nodes ================================================ | |
# Cleanup everything | |
systemctl stop kubelet | |
docker rm -f $(docker ps -a -q) | |
docker rmi -f $(docker images -q -a) | |
kubeadm reset | |
systemctl daemon-reload | |
systemctl start kubelet | |
#================================ Some blog posts for OpenStack Cloud provider ================================================ | |
http://henriquetruta.com/2017/09/13/openstack-cloud-provider/ | |
https://github.com/henriquetruta/kubernetes-tutorials/tree/master/openstack_cloud_provider/resources | |
#================================= Looking at logs =============================================== | |
#kubectl run --rm --restart=Never sh -ti --image=busybox | |
#docker run --rm -i -t 56495476b9a4 sh | |
#================================= Tese cases =============================================== | |
#RBAC | |
kubectl create -f ../cloud-provider-openstack/cluster/addons/rbac/ | |
#Cinder: | |
kubectl apply -f https://gist.githubusercontent.com/dims/ba202b11806d2e99004ac4ddc0c79e04/raw/1ad351e37e5a801994223007eb8c85a43410c3fe/nginx-cinder-all.yaml | |
kubectl delete -f https://gist.githubusercontent.com/dims/ba202b11806d2e99004ac4ddc0c79e04/raw/1ad351e37e5a801994223007eb8c85a43410c3fe/nginx-cinder-all.yaml | |
#Internal LB: | |
kubectl apply -f https://raw.githubusercontent.com/henriquetruta/kubernetes-tutorials/master/openstack_cloud_provider/resources/microbot_deploy.yaml | |
kubectl apply -f https://raw.githubusercontent.com/henriquetruta/kubernetes-tutorials/master/openstack_cloud_provider/resources/microbot_svc_private.yaml | |
kubectl delete -f https://raw.githubusercontent.com/henriquetruta/kubernetes-tutorials/master/openstack_cloud_provider/resources/microbot_svc_private.yaml | |
kubectl delete -f https://raw.githubusercontent.com/henriquetruta/kubernetes-tutorials/master/openstack_cloud_provider/resources/microbot_deploy.yaml | |
#External LB: | |
kubectl apply -f https://raw.githubusercontent.com/henriquetruta/kubernetes-tutorials/master/openstack_cloud_provider/resources/microbot_deploy.yaml | |
kubectl apply -f https://raw.githubusercontent.com/henriquetruta/kubernetes-tutorials/master/openstack_cloud_provider/resources/microbot_svc_public.yaml | |
kubectl delete -f https://raw.githubusercontent.com/henriquetruta/kubernetes-tutorials/master/openstack_cloud_provider/resources/microbot_svc_public.yaml | |
kubectl delete -f https://raw.githubusercontent.com/henriquetruta/kubernetes-tutorials/master/openstack_cloud_provider/resources/microbot_deploy.yaml | |
#================================================================================ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment