Skip to content

Commit 6eeaef6

Browse files
authored
Merge pull request #22 from sql-machine-learning/lhw_develop
Add all-in-one start.sh
2 parents ef40579 + 57394fd commit 6eeaef6

File tree

5 files changed

+137
-12
lines changed

5 files changed

+137
-12
lines changed

Vagrantfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,25 @@ Vagrant.configure("2") do |config|
55
config.vm.box = "ubuntu/bionic64"
66
config.vm.provision "shell", path: "provision.bash"
77

8+
# Enlarge disk size from default '10G' to '20G'
9+
# This need the vagrant-disksize plugin which is installed in install.bash
10+
config.disksize.size = '20GB'
11+
812
# Don't forward 22. Even if we do so, the exposed port only binds
913
# to 127.0.0.1, but not 0.0.0.0. Other ports binds to all IPs.
1014
config.vm.network "forwarded_port", guest: 3306, host: 3306,
1115
auto_correct: true
1216
config.vm.network "forwarded_port", guest: 50051, host: 50051,
1317
auto_correct: true
18+
# Jupyter Notebook
1419
config.vm.network "forwarded_port", guest: 8888, host: 8888,
1520
auto_correct: true
21+
# minikube dashboard
22+
config.vm.network "forwarded_port", guest: 9000, host: 9000,
23+
auto_correct: true
24+
# Argo dashboard
25+
config.vm.network "forwarded_port", guest: 9001, host: 9001,
26+
auto_correct: true
1627

1728
config.vm.provider "virtualbox" do |v|
1829
v.memory = 16384

install.bash

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ if [[ -n "$(vagrant global-status --prune | grep -o 'playground')" ]]; then
3838
exit 0
3939
fi
4040

41+
echo "Installing vagrant disk size plugin..."
42+
if [[ -z "$(vagrant plugin list | grep -o 'vagrant-disksize')" ]]; then
43+
vagrant plugin install vagrant-disksize
44+
fi
45+
4146
if [[ "$WE_ARE_IN_CHINA" ]]; then
4247
if [[ -z "$(vagrant box list | grep -o ubuntu/bionic64)" ]]; then
4348
echo "Download ubuntu box beforehand..."

provision.bash

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,22 @@ set -e # Exit script if any error
55
# The shared folder is specified in Vagrantfile.
66
VAGRANT_SHARED_FOLDER=/home/vagrant/desktop
77

8-
. $VAGRANT_SHARED_FOLDER/sqlflow/docker/dev/find_fastest_resources.sh
8+
source $VAGRANT_SHARED_FOLDER/sqlflow/docker/dev/find_fastest_resources.sh
99

1010
echo "Setting apt-get mirror..."
11-
$(find_fastest_apt_source >/etc/apt/sources.list)
11+
find_fastest_apt_source >/etc/apt/sources.list
12+
apt-get update
1213

1314
echo "Installing Docker ..."
1415
# c.f. https://dockr.ly/3cExcay
15-
if which docker > /dev/null; then
16+
if ! which docker > /dev/null; then
1617
echo "Docker had been installed. Skip."
1718
else
1819
best_install_url=$(find_fastest_docker_url)
20+
docker_ce_mirror=$(find_fastest_docker_ce_mirror)
1921
echo "Using ${best_install_url}..."
20-
curl -sSL ${best_install_url} | sh -
21-
best_docker_mirror=$(find_fastest_docker_mirror)
22+
curl -sSL "${best_install_url}" | DOWNLOAD_URL=$docker_ce_mirror bash -
23+
best_docker_mirror=$(find_fastest_docker_registry)
2224
if [[ -n "${best_docker_mirror}" ]]; then
2325
mkdir -p /etc/docker
2426
cat <<-EOF >/etc/docker/daemon.json

sqlflow

Submodule sqlflow updated 74 files

start.bash

Lines changed: 113 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,125 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
set -e
16-
1715
echo "Docker pull SQLFlow images ..."
1816
# c.f. https://github.com/sql-machine-learning/sqlflow/blob/develop/.travis.yml
19-
docker pull sqlflow/sqlflow:latest
17+
docker pull sqlflow/sqlflow:jupyter
18+
docker pull sqlflow/sqlflow:mysql
19+
docker pull sqlflow/sqlflow:server
20+
docker pull sqlflow/sqlflow:step
2021
echo "Done."
2122

2223
# NOTE: According to https://stackoverflow.com/a/16619261/724872,
2324
# source is very necessary here.
2425
source $(dirname $0)/sqlflow/scripts/travis/export_k8s_vars.sh
26+
source $(dirname $0)/sqlflow/docker/dev/find_fastest_resources.sh
27+
28+
# (FIXME:lhw) If grep match nothing and return 1, do not exit
29+
# Find a way that we do not need to use 'set -e'
30+
set +e
31+
32+
# Use a faster kube image and docker registry
33+
echo "Start minikube cluster ..."
34+
minikube_status=$(minikube status | grep "apiserver: Running")
35+
if [[ "$minikube_status" == "apiserver: Running" ]]; then
36+
echo "Already in running."
37+
else
38+
ali_kube="http://kubernetes.oss-cn-hangzhou.aliyuncs.com"
39+
google_kube="http://k8s.gcr.io"
40+
fast_kube_site=$(find_fastest_url $ali_kube $google_kube)
41+
if [[ "$fast_kube_site" == "$ali_kube" ]]; then
42+
sudo minikube start --image-mirror-country cn \
43+
--registry-mirror=https://registry.docker-cn.com --driver=none \
44+
--kubernetes-version=v"$K8S_VERSION"
45+
else
46+
sudo minikube start \
47+
--vm-driver=none \
48+
--kubernetes-version=v"$K8S_VERSION"
49+
fi
50+
fi
51+
52+
# Test if a Kubernetes resource is alive
53+
# "$1" shoulde be namespace id e.g. argo
54+
# "$2" should be resource id e.g. pod/argo-server
55+
function is_resource_alive() {
56+
local type=$(echo "$2" | cut -d / -f1)
57+
local name=$(echo "$2" | cut -d / -f2)
58+
if kubectl get -n "$1" "$2" | grep -q -o "$name" >/dev/null; then
59+
# make sure relative pod is alive
60+
if kubectl get pod -n "$1" | grep "$name" | grep "Running" >/dev/null; then
61+
echo "yes"
62+
else
63+
echo "no"
64+
fi
65+
else
66+
echo "no"
67+
fi
68+
}
69+
70+
echo "Start argo ..."
71+
argo_server_alive=$(is_resource_alive "argo" "service/argo-server")
72+
if [[ "$argo_server_alive" == "yes" ]]; then
73+
echo "Already in running."
74+
else
75+
$(dirname $0)/sqlflow/scripts/travis/start_argo.sh
76+
fi
77+
78+
echo "Strat Kubernetes Dashboard..."
79+
dashboard_alive=$(is_resource_alive "kubernetes-dashboard" "service/kubernetes-dashboard")
80+
if [[ "$dashboard_alive" == "yes" ]]; then
81+
echo "Already in running."
82+
else
83+
nohup minikube dashboard &
84+
fi
85+
86+
echo "Strat SQLFlow ..."
87+
sqlflow_alive=$(is_resource_alive "default" "pod/sqlflow-server")
88+
if [[ "$sqlflow_alive" == "yes" ]]; then
89+
echo "Already in running."
90+
else
91+
kubectl apply -f sqlflow/doc/run/k8s/install-sqlflow.yaml
92+
fi
93+
94+
# Kill port exposing if it already exist
95+
function stop_expose() {
96+
ps -elf | grep "kubectl port-forward" | grep "$1" | grep "$2" | awk '{print $4}' | xargs kill >/dev/null
97+
}
98+
99+
# Kubernetes port-forwarding
100+
# "$1" should be namespace
101+
# "$2" should be resource, e.g. service/argo-server
102+
# "$3" should be port mapping, e.g. 8000:80
103+
function expose() {
104+
echo "Stop exposing $3..."
105+
stop_expose "$2" "$3"
106+
echo "Detecting service and exposing port ..."
107+
while [[ true ]]; do
108+
local alive=$(is_resource_alive "$1" "$2")
109+
if [[ "$alive" == "yes" ]]; then
110+
break
111+
fi
112+
sleep 1
113+
done
114+
nohup kubectl port-forward -n $1 --address='0.0.0.0' $2 $3 >>port-forward-log 2>&1 &
115+
}
116+
117+
# (NOTE) after re-deploy sqlflow we have to re-expose the service ports.
118+
expose kubernetes-dashboard service/kubernetes-dashboard 9000:80
119+
expose argo service/argo-server 9001:2746
120+
expose default pod/sqlflow-server 8888:8888
121+
expose default pod/sqlflow-server 3306:3306
122+
123+
jupyter_addr=$(kubectl logs pod/sqlflow-server notebook | grep -o -E "http://127.0.0.1[^?]+\?token=.*" | head -1)
124+
125+
cat <<EOF
126+
Congratulations, SQLFlow playground is up!
127+
128+
Access Jupyter Notebook at: $jupyter_addr
129+
Access Kubernetes Dashboard at: http://localhost:9000
130+
Access Argo Dashboard at: http://localhost:9001
131+
Access SQLFlow with cli: refer to https://github.com/sql-machine-learning/sqlflow/blob/develop/doc/run/cli.md
25132
26-
$(dirname $0)/sqlflow/scripts/travis/start_minikube.sh
27-
sudo chown -R vagrant: $HOME/.minikube/
133+
Stop minikube with: minikube stop
134+
Stop vagrant with: vagrant halt
135+
EOF
28136

29-
$(dirname $0)/sqlflow/scripts/travis/start_argo.sh

0 commit comments

Comments
 (0)