2017-06-29 15:19:41 -07:00
|
|
|
#!/bin/bash -e
|
|
|
|
|
|
|
|
|
|
scriptdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
|
source "${scriptdir}/../../build/common.sh"
|
|
|
|
|
|
2017-10-16 15:18:26 -07:00
|
|
|
function init_flexvolume() {
|
2017-09-14 09:40:34 -07:00
|
|
|
cat <<EOF | ssh -i `minikube ssh-key` docker@`minikube ip` -o IdentitiesOnly=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet 'cat - > ~/rook'
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
echo -ne '{"status": "Success", "capabilities": {"attach": false}}' >&1
|
|
|
|
|
exit 0
|
|
|
|
|
EOF
|
|
|
|
|
minikube ssh "chmod +x ~/rook"
|
|
|
|
|
minikube ssh "sudo chown root:root ~/rook"
|
|
|
|
|
minikube ssh "sudo mkdir -p /usr/libexec/kubernetes/kubelet-plugins/volume/exec/rook.io~rook"
|
|
|
|
|
minikube ssh "sudo mv ~/rook /usr/libexec/kubernetes/kubelet-plugins/volume/exec/rook.io~rook"
|
|
|
|
|
minikube start --memory=3000 --kubernetes-version ${KUBE_VERSION} --extra-config=apiserver.Authorization.Mode=RBAC
|
2017-06-29 15:19:41 -07:00
|
|
|
}
|
|
|
|
|
|
2017-10-19 12:03:42 -07:00
|
|
|
# workaround for kube-dns CrashLoopBackOff issue with RBAC enabled
|
|
|
|
|
#issue https://github.com/kubernetes/minikube/issues/1734 and https://github.com/kubernetes/minikube/issues/1722
|
2017-10-16 15:18:26 -07:00
|
|
|
function enable_roles_for_RBAC() {
|
2017-10-19 12:03:42 -07:00
|
|
|
cat <<EOF | kubectl create -f -
|
|
|
|
|
# Wide open access to the cluster (mostly for kubelet)
|
|
|
|
|
kind: ClusterRole
|
|
|
|
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
|
|
|
|
metadata:
|
|
|
|
|
name: cluster-writer
|
|
|
|
|
rules:
|
|
|
|
|
- apiGroups: ["*"]
|
|
|
|
|
resources: ["*"]
|
|
|
|
|
verbs: ["*"]
|
|
|
|
|
- nonResourceURLs: ["*"]
|
|
|
|
|
verbs: ["*"]
|
|
|
|
|
---
|
|
|
|
|
# Give admin, kubelet, kube-system, kube-proxy god access
|
|
|
|
|
kind: ClusterRoleBinding
|
|
|
|
|
apiVersion: rbac.authorization.k8s.io/v1beta1
|
|
|
|
|
metadata:
|
|
|
|
|
name: cluster-write
|
|
|
|
|
subjects:
|
|
|
|
|
- kind: User
|
|
|
|
|
name: admin
|
|
|
|
|
- kind: User
|
|
|
|
|
name: kubelet
|
|
|
|
|
- kind: ServiceAccount
|
|
|
|
|
name: default
|
|
|
|
|
namespace: kube-system
|
|
|
|
|
- kind: User
|
|
|
|
|
name: kube-proxy
|
|
|
|
|
roleRef:
|
|
|
|
|
kind: ClusterRole
|
|
|
|
|
name: cluster-writer
|
|
|
|
|
apiGroup: rbac.authorization.k8s.io
|
|
|
|
|
EOF
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-16 15:18:26 -07:00
|
|
|
function wait_for_ssh() {
|
2017-06-29 15:19:41 -07:00
|
|
|
local tries=100
|
|
|
|
|
while (( ${tries} > 0 )) ; do
|
2017-09-14 09:40:34 -07:00
|
|
|
if `minikube ssh echo connected &> /dev/null` ; then
|
2017-06-29 15:19:41 -07:00
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
tries=$(( ${tries} - 1 ))
|
|
|
|
|
sleep 0.1
|
|
|
|
|
done
|
|
|
|
|
echo ERROR: ssh did not come up >&2
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-16 15:18:26 -07:00
|
|
|
function copy_image_to_cluster() {
|
2017-07-21 12:07:15 -07:00
|
|
|
local build_image=$1
|
|
|
|
|
local final_image=$2
|
2017-09-14 09:40:34 -07:00
|
|
|
docker save ${build_image} | (eval $(minikube docker-env) && docker load && docker tag ${build_image} ${final_image})
|
2017-06-29 15:19:41 -07:00
|
|
|
}
|
|
|
|
|
|
2017-10-16 15:18:26 -07:00
|
|
|
# Deletes pods with 'rook-' prefix. Namespace is expected as the first argument
|
|
|
|
|
function delete_rook_pods() {
|
|
|
|
|
for P in $(kubectl get pods -n $1 | awk "/$2/ {print \$1}"); do
|
|
|
|
|
kubectl delete pod $P -n $1
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# current kubectl context == minikube, returns boolean
|
|
|
|
|
function check_context() {
|
|
|
|
|
if [ "$(kubectl config view 2>/dev/null | awk '/current-context/ {print $NF}')" = "minikube" ]; then
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-29 15:19:41 -07:00
|
|
|
# configure dind-cluster
|
2017-10-25 15:05:18 -07:00
|
|
|
KUBE_VERSION=${KUBE_VERSION:-"v1.8.0"}
|
2017-06-29 15:19:41 -07:00
|
|
|
|
|
|
|
|
case "${1:-}" in
|
|
|
|
|
up)
|
2017-08-24 14:55:01 -07:00
|
|
|
minikube start --memory=3000 --kubernetes-version ${KUBE_VERSION} --extra-config=apiserver.Authorization.Mode=RBAC
|
2017-06-29 15:19:41 -07:00
|
|
|
wait_for_ssh
|
2017-10-31 11:48:33 -07:00
|
|
|
|
|
|
|
|
# create a link so the default dataDirHostPath will work for this environment
|
|
|
|
|
minikube ssh "sudo mkdir /mnt/sda1/var/lib/rook;sudo ln -s /mnt/sda1/var/lib/rook /var/lib/rook"
|
|
|
|
|
|
2017-08-02 13:35:31 -07:00
|
|
|
copy_image_to_cluster ${BUILD_REGISTRY}/rook-amd64 rook/rook:master
|
|
|
|
|
copy_image_to_cluster ${BUILD_REGISTRY}/toolbox-amd64 rook/toolbox:master
|
2017-11-02 10:11:44 -07:00
|
|
|
|
|
|
|
|
enable_roles_for_RBAC
|
|
|
|
|
|
2017-09-14 09:40:34 -07:00
|
|
|
if [[ $KUBE_VERSION == v1.5* ]] || [[ $KUBE_VERSION == v1.6* ]] || [[ $KUBE_VERSION == v1.7* ]] ;
|
|
|
|
|
then
|
|
|
|
|
echo "initializing flexvolume for rook"
|
|
|
|
|
init_flexvolume
|
|
|
|
|
fi
|
2017-06-29 15:19:41 -07:00
|
|
|
;;
|
|
|
|
|
down)
|
|
|
|
|
minikube stop
|
|
|
|
|
;;
|
2017-07-20 23:30:32 -07:00
|
|
|
ssh)
|
|
|
|
|
echo "connecting to minikube"
|
2017-09-14 09:40:34 -07:00
|
|
|
minikube ssh
|
2017-07-20 23:30:32 -07:00
|
|
|
;;
|
|
|
|
|
update)
|
|
|
|
|
echo "updating the rook images"
|
|
|
|
|
copy_image_to_cluster ${BUILD_REGISTRY}/rook-amd64 rook/rook:master
|
|
|
|
|
copy_image_to_cluster ${BUILD_REGISTRY}/toolbox-amd64 rook/toolbox:master
|
|
|
|
|
;;
|
2017-10-16 15:18:26 -07:00
|
|
|
restart)
|
|
|
|
|
if check_context; then
|
|
|
|
|
[ "$2" ] && regex=$2 || regex="^rook-"
|
|
|
|
|
echo "Restarting Rook pods matching the regex \"$regex\" in \"rook\" namespace."
|
|
|
|
|
delete_rook_pods "rook" $regex
|
|
|
|
|
echo "Restarting Rook pods matching the regex \"$regex\" in \"rook-system\" namespace.."
|
|
|
|
|
delete_rook_pods "rook-system" $regex
|
|
|
|
|
else
|
|
|
|
|
echo "To prevent accidental data loss acting only on 'minikube' context. No action is taken."
|
|
|
|
|
fi
|
|
|
|
|
;;
|
2017-08-02 13:35:31 -07:00
|
|
|
wordpress)
|
|
|
|
|
echo "copying the wordpress images"
|
|
|
|
|
copy_image_to_cluster mysql:5.6 mysql:5.6
|
|
|
|
|
copy_image_to_cluster wordpress:4.6.1-apache wordpress:4.6.1-apache
|
|
|
|
|
;;
|
2017-08-24 14:55:01 -07:00
|
|
|
helm)
|
|
|
|
|
echo " copying rook image for helm"
|
|
|
|
|
helm_tag="`cat _output/version`"
|
|
|
|
|
copy_image_to_cluster ${BUILD_REGISTRY}/rook-amd64 rook/rook:${helm_tag}
|
|
|
|
|
;;
|
2017-06-29 15:19:41 -07:00
|
|
|
clean)
|
|
|
|
|
minikube delete
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
echo "usage:" >&2
|
|
|
|
|
echo " $0 up" >&2
|
|
|
|
|
echo " $0 down" >&2
|
|
|
|
|
echo " $0 clean" >&2
|
2017-08-02 13:35:31 -07:00
|
|
|
echo " $0 ssh" >&2
|
|
|
|
|
echo " $0 update" >&2
|
2017-10-16 15:18:26 -07:00
|
|
|
echo " $0 restart <pod-name-regex> (the pod name is a regex to match e.g. restart ^rook-ceph-osd)" >&2
|
2017-08-02 13:35:31 -07:00
|
|
|
echo " $0 wordpress" >&2
|
2017-09-01 13:09:44 +02:00
|
|
|
echo " $0 helm" >&2
|
2017-06-29 15:19:41 -07:00
|
|
|
esac
|