Skip to content

Instantly share code, notes, and snippets.

@dims
Last active October 10, 2018 12:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dims/3914bdfb0ebde52ea0118a237a4d90b9 to your computer and use it in GitHub Desktop.
Save dims/3914bdfb0ebde52ea0118a237a4d90b9 to your computer and use it in GitHub Desktop.
# 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