From 399ccfe35425f09890a163decaea61f1fd3ae63b Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Mon, 16 Nov 2015 11:42:30 +0000 Subject: [PATCH 01/10] Kubernetes Client --- 00_kubernetes-etcd | 78 ------- 02_kubernetes-master | 84 ------- 03_kubernetes-minion | 97 -------- 01_kubernetes-client => Dockerfile | 0 conf/cluster/00_etcd-cluster.sh | 159 ------------- conf/cluster/01_k8s.sh | 255 --------------------- conf/cluster/01_k8s_master_add_bridge.sh | 8 - conf/cluster/02_minion.sh | 189 --------------- conf/cluster/03_minion_init.sh | 26 --- conf/docker/default_docker | 14 -- conf/network/00_flannel.sh | 119 ---------- conf/network/flannel.json | 6 - conf/supervisord/01_minion.conf | 10 - docker-kubernetes.sh | 278 ----------------------- 14 files changed, 1323 deletions(-) delete mode 100644 00_kubernetes-etcd delete mode 100644 02_kubernetes-master delete mode 100644 03_kubernetes-minion rename 01_kubernetes-client => Dockerfile (100%) delete mode 100644 conf/cluster/00_etcd-cluster.sh delete mode 100644 conf/cluster/01_k8s.sh delete mode 100644 conf/cluster/01_k8s_master_add_bridge.sh delete mode 100644 conf/cluster/02_minion.sh delete mode 100644 conf/cluster/03_minion_init.sh delete mode 100644 conf/docker/default_docker delete mode 100644 conf/network/00_flannel.sh delete mode 100644 conf/network/flannel.json delete mode 100644 conf/supervisord/01_minion.conf delete mode 100755 docker-kubernetes.sh diff --git a/00_kubernetes-etcd b/00_kubernetes-etcd deleted file mode 100644 index d758f91..0000000 --- a/00_kubernetes-etcd +++ /dev/null @@ -1,78 +0,0 @@ -# -# Dockerfile - Google Kubernetes: etcd cluster -# -# - Build -# docker build --rm -t kubernetes:etcd -f 00_kubernetes-etcd . -# -# - Run -# docker run -d --name="etcd-cluster-0" -h "etcd-cluster-0" kubernetes:etcd -# docker run -d --name="etcd-cluster-1" -h "etcd-cluster-1" kubernetes:etcd -# docker run -d --name="etcd-cluster-2" -h "etcd-cluster-2" kubernetes:etcd -# -# - SSH -# ssh `docker inspect -f '{{ .NetworkSettings.IPAddress }}' etcd-cluster-0` -# ssh `docker inspect -f '{{ .NetworkSettings.IPAddress }}' etcd-cluster-1` -# ssh `docker inspect -f '{{ .NetworkSettings.IPAddress }}' etcd-cluster-2` - -# Use the base images -FROM ubuntu:15.04 -MAINTAINER Yongbok Kim - -# Change the repository -#RUN sed -i 's/archive.ubuntu.com/kr.archive.ubuntu.com/g' /etc/apt/sources.list - -# The last update and install package for docker -RUN apt-get update && apt-get install -y supervisor openssh-server git-core curl nano build-essential - -# Variable -ENV SRC_DIR /opt -WORKDIR $SRC_DIR - -# GO Language -ENV GO_ARCH linux-amd64 -ENV GOROOT $SRC_DIR/go -ENV PATH $PATH:$GOROOT/bin -RUN curl -XGET https://github.com/golang/go/tags | grep tag-name > /tmp/golang_tag \ - && sed -e 's/<[^>]*>//g' /tmp/golang_tag > /tmp/golang_ver \ - && GO_VER=`sed -e 's/ go/go/g' /tmp/golang_ver | head -n 1` && rm -f /tmp/golang_* \ - && curl -LO "https://storage.googleapis.com/golang/$GO_VER.$GO_ARCH.tar.gz" \ - && tar -C $SRC_DIR -xzf go*.tar.gz && rm -rf go*.tar.gz \ - && echo '' >> /etc/profile \ - && echo '# Golang' >> /etc/profile \ - && echo "export GOROOT=$GOROOT" >> /etc/profile \ - && echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile \ - && echo '' >> /etc/profile - -# etcd -ENV ETCD $SRC_DIR/etcd -ENV PATH $PATH:$ETCD -RUN git clone https://github.com/coreos/etcd $SRC_DIR/etcd-source \ - && cd $SRC_DIR/etcd-source && ./build && mv bin $ETCD \ - && cd $SRC_DIR && rm -rf $SRC_DIR/etcd-source \ - && echo '# etcd' >> /etc/profile \ - && echo "export ETCD=$ETCD" >> /etc/profile \ - && echo 'export PATH=$PATH:$ETCD' >> /etc/profile \ - && echo '' >> /etc/profile - -# etcd cluster scripts -ADD conf/cluster/00_etcd-cluster.sh /bin/etcd-cluster.sh -RUN chmod a+x /bin/etcd-cluster.sh - -# Supervisor -RUN mkdir -p /var/log/supervisor -ADD conf/supervisord/00_default.conf /etc/supervisor/conf.d/supervisord.conf - -# SSH -RUN mkdir /var/run/sshd -RUN sed -i 's/without-password/yes/g' /etc/ssh/sshd_config -RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config -RUN sed -i 's/\#AuthorizedKeysFile/AuthorizedKeysFile/g' /etc/ssh/sshd_config - -# Set the root password for ssh -RUN echo 'root:kubernetes' |chpasswd - -# Port -EXPOSE 22 2379 2380 4001 - -# Daemon -CMD ["/usr/bin/supervisord"] diff --git a/02_kubernetes-master b/02_kubernetes-master deleted file mode 100644 index 2808966..0000000 --- a/02_kubernetes-master +++ /dev/null @@ -1,84 +0,0 @@ -# -# Dockerfile - Google Kubernetes -# -# - Build -# docker build --rm -t kubernetes:master -f 02_kubernetes-master . -# -# - Run -# docker run -d --name="kubernetes-master" -h "kubernetes-master" --privileged=true -v /dev:/dev kubernetes:master -# -# - SSH -# ssh `docker inspect -f '{{ .NetworkSettings.IPAddress }}' kubernetes-master` - -# Use the base images -FROM ubuntu:15.04 -MAINTAINER Yongbok Kim - -# Change the repository -#RUN sed -i 's/archive.ubuntu.com/kr.archive.ubuntu.com/g' /etc/apt/sources.list - -# The last update and install package for docker -RUN apt-get update && apt-get install -y supervisor openssh-server nano curl git-core build-essential net-tools iputils-ping bridge-utils - -# Variable -ENV SRC_DIR /opt -WORKDIR $SRC_DIR - -# GO Language -ENV GO_ARCH linux-amd64 -ENV GOROOT $SRC_DIR/go -ENV PATH $PATH:$GOROOT/bin -RUN curl -XGET https://github.com/golang/go/tags | grep tag-name > /tmp/golang_tag \ - && sed -e 's/<[^>]*>//g' /tmp/golang_tag > /tmp/golang_ver \ - && GO_VER=`sed -e 's/ go/go/g' /tmp/golang_ver | head -n 1` && rm -f /tmp/golang_* \ - && curl -LO "https://storage.googleapis.com/golang/$GO_VER.$GO_ARCH.tar.gz" \ - && tar -C $SRC_DIR -xzf go*.tar.gz && rm -rf go*.tar.gz \ - && echo '' >> /etc/profile \ - && echo '# Golang' >> /etc/profile \ - && echo "export GOROOT=$GOROOT" >> /etc/profile \ - && echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile \ - && echo '' >> /etc/profile - -# Flannel -ENV FLANNEL_HOME $SRC_DIR/flannel -ENV PATH $PATH:$FLANNEL_HOME/bin -RUN git clone https://github.com/coreos/flannel.git \ - && cd flannel && ./build \ - && echo '# flannel'>>/etc/profile \ - && echo "export FLANNEL_HOME=/opt/flannel">>/etc/profile \ - && echo 'export PATH=$PATH:$FLANNEL_HOME/bin'>>/etc/profile \ - && echo ''>>/etc/profile - -# Google - Kubernetes -ENV KUBERNETES_HOME $SRC_DIR/kubernetes -ENV PATH $PATH:$KUBERNETES_HOME/server/bin -ADD kubernetes-server-linux-amd64.tar.gz $SRC_DIR -RUN echo '# Kubernetes' >> /etc/profile \ - && echo "export KUBERNETES_HOME=$KUBERNETES_HOME" >> /etc/profile \ - && echo 'export PATH=$PATH:$KUBERNETES_HOME/server/bin' >> /etc/profile \ - && echo '' >> /etc/profile - -# Add the kubernetes & flannel scripts -ADD conf/cluster/01_k8s.sh /bin/k8s.sh -ADD conf/network/00_flannel.sh /bin/flannel.sh -ADD conf/cluster/01_k8s_master_add_bridge.sh /bin/k8s_master_add_bridge.sh -RUN chmod a+x /bin/k8s.sh /bin/flannel.sh /bin/k8s_master_add_bridge.sh - -# Supervisor -RUN mkdir -p /var/log/supervisor -ADD conf/supervisord/00_default.conf /etc/supervisor/conf.d/supervisord.conf - -# SSH -RUN mkdir /var/run/sshd -RUN sed -i 's/without-password/yes/g' /etc/ssh/sshd_config -RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config -RUN sed -i 's/\#AuthorizedKeysFile/AuthorizedKeysFile/g' /etc/ssh/sshd_config - -# Set the root password for ssh -RUN echo 'root:kubernetes' |chpasswd - -# Port -EXPOSE 22 8080 - -# Daemon -CMD ["/usr/bin/supervisord"] diff --git a/03_kubernetes-minion b/03_kubernetes-minion deleted file mode 100644 index 931c36b..0000000 --- a/03_kubernetes-minion +++ /dev/null @@ -1,97 +0,0 @@ -# -# Dockerfile - Google Kubernetes -# -# - Build -# docker build --rm -t kubernetes:minion -f 03_kubernetes-minion . -# -# - Run -# docker run -d --name="kubernetes-minion-0" -h "kubernetes-minion-0" --privileged=true -v /dev:/dev -v /sys:/sys -v /lib/modules:/lib/modules kubernetes:minion -# docker run -d --name="kubernetes-minion-1" -h "kubernetes-minion-1" --privileged=true -v /dev:/dev -v /sys:/sys -v /lib/modules:/lib/modules kubernetes:minion -# -# - SSH -# ssh `docker inspect -f '{{ .NetworkSettings.IPAddress }}' kubernetes-minion-0` -# ssh `docker inspect -f '{{ .NetworkSettings.IPAddress }}' kubernetes-minion-1` -# -# Use the base images -FROM ubuntu:15.04 -MAINTAINER Yongbok Kim - -# Change the repository -#RUN sed -i 's/archive.ubuntu.com/kr.archive.ubuntu.com/g' /etc/apt/sources.list - -# The last update and install package for docker -RUN apt-get update && apt-get install -y docker.io lxc iptables apparmor supervisor openssh-server nano curl git-core build-essential net-tools iputils-ping bridge-utils - -# Docker in Docker -ADD conf/docker/default_docker /etc/default/docker -ADD https://raw.githubusercontent.com/jpetazzo/dind/master/wrapdocker /bin/wrapdocker -RUN chmod +x /bin/wrapdocker - -# Volume mount -# Issue : There are no more loopback devices available. -# Solution : docker run -v /dev/:/dev -VOLUME /var/run -VOLUME /var/lib/docker - -# Variable -ENV SRC_DIR /opt -WORKDIR $SRC_DIR - -# GO Language -ENV GO_ARCH linux-amd64 -ENV GOROOT $SRC_DIR/go -ENV PATH $PATH:$GOROOT/bin -RUN curl -XGET https://github.com/golang/go/tags | grep tag-name > /tmp/golang_tag \ - && sed -e 's/<[^>]*>//g' /tmp/golang_tag > /tmp/golang_ver \ - && GO_VER=`sed -e 's/ go/go/g' /tmp/golang_ver | head -n 1` && rm -f /tmp/golang_* \ - && curl -LO "https://storage.googleapis.com/golang/$GO_VER.$GO_ARCH.tar.gz" \ - && tar -C $SRC_DIR -xzf go*.tar.gz && rm -rf go*.tar.gz \ - && echo '' >> /etc/profile \ - && echo '# Golang' >> /etc/profile \ - && echo "export GOROOT=$GOROOT" >> /etc/profile \ - && echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile \ - && echo '' >> /etc/profile - -# Flannel -ENV FLANNEL_HOME $SRC_DIR/flannel -ENV PATH $PATH:$FLANNEL_HOME/bin -RUN git clone https://github.com/coreos/flannel.git \ - && cd flannel && ./build \ - && echo '# flannel'>>/etc/profile \ - && echo "export FLANNEL_HOME=/opt/flannel">>/etc/profile \ - && echo 'export PATH=$PATH:$FLANNEL_HOME/bin'>>/etc/profile \ - && echo ''>>/etc/profile - -# Google - Kubernetes -ENV KUBERNETES_HOME $SRC_DIR/kubernetes -ENV PATH $PATH:$KUBERNETES_HOME/server/bin -ADD kubernetes-server-linux-amd64.tar.gz $SRC_DIR -RUN echo '# Kubernetes' >> /etc/profile \ - && echo "export KUBERNETES_HOME=$KUBERNETES_HOME" >> /etc/profile \ - && echo 'export PATH=$PATH:$KUBERNETES_HOME/server/bin' >> /etc/profile \ - && echo '' >> /etc/profile - -# kubernetes minion & flannel scripts -ADD conf/network/00_flannel.sh /bin/flannel.sh -ADD conf/cluster/02_minion.sh /bin/minion.sh -ADD conf/cluster/03_minion_init.sh /bin/minion-init.sh -RUN chmod a+x /bin/flannel.sh /bin/minion.sh /bin/minion-init.sh - -# Supervisor -RUN mkdir -p /var/log/supervisor -ADD conf/supervisord/01_minion.conf /etc/supervisor/conf.d/supervisord.conf - -# SSH -RUN mkdir /var/run/sshd -RUN sed -i 's/without-password/yes/g' /etc/ssh/sshd_config -RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config -RUN sed -i 's/\#AuthorizedKeysFile/AuthorizedKeysFile/g' /etc/ssh/sshd_config - -# Set the root password for ssh -RUN echo 'root:kubernetes' |chpasswd - -# Port -EXPOSE 22 8080 - -# Daemon -CMD ["/usr/bin/supervisord"] diff --git a/01_kubernetes-client b/Dockerfile similarity index 100% rename from 01_kubernetes-client rename to Dockerfile diff --git a/conf/cluster/00_etcd-cluster.sh b/conf/cluster/00_etcd-cluster.sh deleted file mode 100644 index 81660b8..0000000 --- a/conf/cluster/00_etcd-cluster.sh +++ /dev/null @@ -1,159 +0,0 @@ -#------------------------------------------------# -# etcd cluster script -# Maintainer: Yongbok Kim (ruo91@yongbok.net) -#------------------------------------------------# -#!/bin/bash -### Global ### -# ETCD -ETCD=/opt/etcd -PATH=$PATH:$ETCD - -# Cluster -ETCD_CLUSTER_IP="0.0.0.0" -ETCD_CLUSTER_STATE="new" -ETCD_CLUSTER_NAME_0="cluster-0" -ETCD_CLUSTER_NAME_1="cluster-1" -ETCD_CLUSTER_NAME_2="cluster-2" -ETCD_CLUSTER_TOKEN="etcd-cluster" -ETCD_DATA_DIR="/tmp/etcd" -ETCD_ADVERTISE_PEER_IP="$(ip a s | grep 'eth1' | grep 'inet' | cut -d '/' -f 1 | awk '{ print $2 }')" -ETCD_INITIAL_CLUSTER="$ETCD_CLUSTER_NAME_0=http://172.17.1.1:2380,$ETCD_CLUSTER_NAME_1=http://172.17.1.2:2380,$ETCD_CLUSTER_NAME_2=http://172.17.1.3:2380" - -# Logs -ETCD_LOGS="/tmp/etcd-cluster.log" - -# PID -ETCD_PID="$(ps -e | grep 'etcd' | awk '{ printf $1 "\n" }')" - -# Function -function f_etcd { - echo "Start ETCD..." && sleep 1 - if [ "$ETCD_ADVERTISE_PEER_IP" == "172.17.1.1" ]; then - etcd \ - --name "$ETCD_CLUSTER_NAME_0" \ - --data-dir "$ETCD_DATA_DIR" \ - --listen-peer-urls "http://$ETCD_CLUSTER_IP:2380" \ - --listen-client-urls "http://$ETCD_CLUSTER_IP:4001" \ - --initial-cluster-state "$ETCD_CLUSTER_STATE" \ - --initial-cluster-token "$ETCD_CLUSTER_TOKEN" \ - --initial-advertise-peer-urls "http://$ETCD_ADVERTISE_PEER_IP:2380" \ - --advertise-client-urls "http://$ETCD_CLUSTER_IP:4001" \ - --initial-cluster "$ETCD_INITIAL_CLUSTER" \ - > $ETCD_LOGS 2>&1 & - echo "done" - - elif [ "$ETCD_ADVERTISE_PEER_IP" == "172.17.1.2" ]; then - etcd \ - --name "$ETCD_CLUSTER_NAME_1" \ - --data-dir "$ETCD_DATA_DIR" \ - --listen-peer-urls "http://$ETCD_CLUSTER_IP:2380" \ - --listen-client-urls "http://$ETCD_CLUSTER_IP:4001" \ - --initial-cluster-state "$ETCD_CLUSTER_STATE" \ - --initial-cluster-token "$ETCD_CLUSTER_TOKEN" \ - --initial-advertise-peer-urls "http://$ETCD_ADVERTISE_PEER_IP:2380" \ - --advertise-client-urls "http://$ETCD_CLUSTER_IP:4001" \ - --initial-cluster "$ETCD_INITIAL_CLUSTER" \ - > $ETCD_LOGS 2>&1 & - echo "done" - - elif [ "$ETCD_ADVERTISE_PEER_IP" == "172.17.1.3" ]; then - etcd \ - --name "$ETCD_CLUSTER_NAME_2" \ - --data-dir "$ETCD_DATA_DIR" \ - --listen-peer-urls "http://$ETCD_CLUSTER_IP:2380" \ - --listen-client-urls "http://$ETCD_CLUSTER_IP:4001" \ - --initial-cluster-state "$ETCD_CLUSTER_STATE" \ - --initial-cluster-token "$ETCD_CLUSTER_TOKEN" \ - --initial-advertise-peer-urls "http://$ETCD_ADVERTISE_PEER_IP:2380" \ - --advertise-client-urls "http://$ETCD_CLUSTER_IP:4001" \ - --initial-cluster "$ETCD_INITIAL_CLUSTER" \ - > $ETCD_LOGS 2>&1 & - echo "done" - - else - echo "IP address does not matching." - fi -} - -# Function of manual -function f_etcd_manual { - echo -ne "\033[33m- Cluster Name \033[0m \n" - echo -ne "\033[33m- ex) cluster-0 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read ETCD_CLUSTER_NAME - echo - - echo -ne "\033[33m- Initial Cluster URL \033[0m \n" - echo -ne "\033[33m- ex) cluster-0=http://172.17.1.1:2380,cluster-1=http://172.17.1.2:2380,cluster-2=http://172.17.1.3:2380 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read ETCD_INITIAL_CLUSTER - echo - - echo "Start ETCD..." && sleep 1 - etcd \ - --name "$ETCD_CLUSTER_NAME" \ - --data-dir "$ETCD_DATA_DIR" \ - --listen-peer-urls "http://$ETCD_CLUSTER_IP:2380" \ - --listen-client-urls "http://$ETCD_CLUSTER_IP:4001" \ - --initial-cluster-state "$ETCD_CLUSTER_STATE" \ - --initial-cluster-token "$ETCD_CLUSTER_TOKEN" \ - --initial-advertise-peer-urls "http://$ETCD_ADVERTISE_PEER_IP:2380" \ - --advertise-client-urls "http://$ETCD_CLUSTER_IP:4001" \ - --initial-cluster "$ETCD_INITIAL_CLUSTER" \ - > $ETCD_LOGS 2>&1 & - echo "done" -} - -function f_kill_of_process { - if [[ "$ARG_2" == "e" || "$ARG_2" == "etcd" ]]; then - echo "Kill of ETCD..." && sleep 1 - kill -9 $ETCD_PID - echo "done" - - else - echo "Not found PIDs" - fi -} - -function f_help { - echo "Usage: $ARG_0 [Options] [Arguments]" - echo - echo "- Options" - echo "e, etcd : etcd" - echo "k, kill : kill of process" - echo - echo "- Arguments" - echo "s, start : Start commands" - echo "m, manual : Manual commands" - echo "e, etcd : kill of etcd (k or kill option only.)" - echo " ex) $ARG_0 k e or $ARG_0 kill etcd" - echo -} - -# Main -ARG_0="$0" -ARG_1="$1" -ARG_2="$2" - -case ${ARG_1} in - e|etcd) - if [[ "$ARG_2" == "s" || "$ARG_2" == "start" ]]; then - f_etcd - - elif [[ "$ARG_2" == "m" || "$ARG_2" == "manual" ]]; then - f_etcd_manual - - else - f_help - fi - ;; - - k|kill) - f_kill_of_process - ;; - - *) - f_help - ;; - -esac diff --git a/conf/cluster/01_k8s.sh b/conf/cluster/01_k8s.sh deleted file mode 100644 index fe4cb50..0000000 --- a/conf/cluster/01_k8s.sh +++ /dev/null @@ -1,255 +0,0 @@ -#------------------------------------------------# -# Kubernetes start script -# Maintainer: Yongbok Kim (ruo91@yongbok.net) -#------------------------------------------------# -#!/bin/bash -### Global ### -# Kubernetes -K8S_HOME=/opt/kubernetes -PATH=$PATH:$K8S_HOME/server/bin - -# Ports -K8S_ETCD_PORT="4001" -K8S_KUBELET_PORT="10250" -K8S_API_SERVER_PORT="8080" - -# Address -K8S_API_SERVER="172.17.1.4" -K8S_SERVICE_CLUSTER_IP_RANGE="$(ip a s flannel.1 | grep -v 'inet6' | grep 'inet' | cut -d ':' -f 2 | awk '{ print $2}' | sed 's/0\/8/0\/16/g')" -K8S_COMMON_SERVER_ADDR="0.0.0.0" -K8S_ETCD_SERVER="http://172.17.1.1:$K8S_ETCD_PORT,http://172.17.1.2:$K8S_ETCD_PORT,http://172.17.1.3:$K8S_ETCD_PORT" - -# Logs -K8S_API_SERVER_LOGS="/tmp/apiserver.log" -K8S_SCHEDULER_LOGS="/tmp/scheduler.log" -K8S_CONTROLLER_LOGS="/tmp/controller-manager.log" - -# PID -K8S_API_SERVER_PID="$(ps -e | grep 'kube-apiserver' | awk '{ printf $1 "\n" }')" -K8S_SCHEDULER_SERVER_PID="$(ps -e | grep 'kube-scheduler' | awk '{ printf $1 "\n" }')" -K8S_CONTROLLER_SERVER_PID="$(ps -e | grep 'kube-controller' | awk '{ printf $1 "\n" }')" - -# Functions -function f_apiserver { - echo "Start API Server..." && sleep 1 - kube-apiserver \ - --port=$K8S_API_SERVER_PORT \ - --address=$K8S_COMMON_SERVER_ADDR \ - --kubelet-port=$K8S_KUBELET_PORT \ - --external-hostname="$K8S_API_SERVER" \ - --service-cluster-ip-range=$K8S_SERVICE_CLUSTER_IP_RANGE \ - --etcd_servers=$K8S_ETCD_SERVER \ - --v=0 > $K8S_API_SERVER_LOGS 2>&1 & - echo "done" -} - -function f_scheduler { - echo "Start Scheduler..." && sleep 1 - kube-scheduler \ - --address=$K8S_COMMON_SERVER_ADDR \ - --master=$K8S_API_SERVER:$K8S_API_SERVER_PORT \ - --v=0 > $K8S_SCHEDULER_LOGS 2>&1 & - echo "done" -} - -function f_controller_manager { - echo "Start Controller Manager..." && sleep 1 - kube-controller-manager \ - --address=$K8S_COMMON_SERVER_ADDR \ - --master=$K8S_API_SERVER:$K8S_API_SERVER_PORT \ - --v=0 > $K8S_CONTROLLER_LOGS 2>&1 & - echo "done" -} - -# Function of manual -function f_apiserver_manual { - echo -ne "\033[33m- API Server Port \033[0m \n" - echo -ne "\033[33m- ex) 8080 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_API_SERVER_PORT - echo - - echo -ne "\033[33m- API Server Service Address \033[0m \n" - echo -ne "\033[33m- ex) 0.0.0.0 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_API_SERVICE_ADDR - echo - - echo -ne "\033[33m- Kubelet Port \033[0m \n" - echo -ne "\033[33m- ex) 10250 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_KUBELET_PORT - echo - - echo -ne "\033[33m- Service Cluster IP Range \033[0m \n" - echo -ne "\033[33m- ex) 10.0.42.1/16 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_POTAL_NET_CIDR - echo - - echo -ne "\033[33m- ETCD Server \033[0m \n" - echo -ne "\033[33m- ex) http://172.17.1.1:4001,http://172.17.1.1:4001\033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_ETCD_SERVER - echo - - echo "Start API Server..." && sleep 1 - kube-apiserver \ - --port=$K8S_API_SERVER_PORT \ - --address=$K8S_API_SERVICE_ADDR \ - --kubelet-port=$K8S_KUBELET_PORT \ - --external-hostname="$K8S_API_SERVER" \ - --service-cluster-ip-range=$K8S_SERVICE_CLUSTER_IP_RANGE \ - --etcd_servers=$K8S_ETCD_SERVER \ - --v=0 > $K8S_API_SERVER_LOGS 2>&1 & - echo "done" -} - -function f_scheduler_manual { - echo -ne "\033[33m- API Server \033[0m \n" - echo -ne "\033[33m- ex) 172.17.1.1:8080 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_API_SERVER - echo - - echo -ne "\033[33m- Scheduler Service Address \033[0m \n" - echo -ne "\033[33m- ex) 0.0.0.0 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_SCHEDULER_SERVICE_ADDR - echo - - echo "Start Scheduler..." && sleep 1 - kube-scheduler \ - --address=$K8S_SCHEDULER_SERVICE_ADDR \ - --master=$K8S_API_SERVER \ - --v=0 > $K8S_SCHEDULER_LOGS 2>&1 & - echo "done" -} - -function f_controller_manager_manual { - echo -ne "\033[33m- API Server \033[0m \n" - echo -ne "\033[33m- ex) 172.17.1.1:8080 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_API_SERVER - echo - - echo -ne "\033[33m- Controller Manager Service Address \033[0m \n" - echo -ne "\033[33m- ex) 0.0.0.0 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_CONTROLLER_SERVICE_ADDR - echo - - echo "Start Controller Manager..." && sleep 1 - kube-controller-manager \ - --address=$K8S_CONTROLLER_SERVICE_ADDR \ - --master=$K8S_API_SERVER \ - --v=0 > $K8S_CONTROLLER_LOGS 2>&1 & - echo "done" -} - -function f_kill_of_process { - if [ "$ARG_2" == "all" ]; then - echo "Kill of All Server..." && sleep 1 - kill -9 $K8S_API_SERVER_PID \ - $K8S_SCHEDULER_SERVER_PID \ - $K8S_CONTROLLER_SERVER_PID - echo "done" - - elif [[ "$ARG_2" == "a" || "$ARG_2" == "api" ]]; then - echo "Kill of API Server..." && sleep 1 - kill -9 $K8S_API_SERVER_PID - echo "done" - - elif [[ "$ARG_2" == "s" || "$ARG_2" == "sd" ]]; then - echo "Kill of Scheduler..." && sleep 1 - kill -9 $K8S_SCHEDULER_SERVER_PID - echo "done" - - elif [[ "$ARG_2" == "c" || "$ARG_2" == "cm" ]]; then - echo "Kill of Controller Manager..." && sleep 1 - kill -9 $K8S_CONTROLLER_SERVER_PID - echo "done" - - else - echo "Not found PIDs" - fi -} - -function f_help { - echo "Usage: $ARG_0 [Options] [Arguments]" - echo - echo "- Options" - echo "a, api : apiserver" - echo "s, sd : scheduler" - echo "c, cm : controller manager" - echo "k, kill : kill of process" - echo - echo "- Arguments" - echo "s, start : Start commands" - echo "m, manual : Manual commands" - echo - echo "all : kill of all server (k or kill option only.)" - echo " ex) $ARG_0 k all or $ARG_0 kill all" - echo - echo "a, api : kill of apiserver (k or kill option only.)" - echo " ex) $ARG_0 k a or $ARG_0 kill api" - echo - echo "s, sd : kill of scheduler (k or kill option only.)" - echo " ex) $ARG_0 k s or $ARG_0 kill sd" - echo - echo "c, cm : kill of controller manager (k or kill option only.)" - echo " ex) $ARG_0 k c or $ARG_0 kill cm" - echo -} - -# Main -ARG_0="$0" -ARG_1="$1" -ARG_2="$2" - -case ${ARG_1} in - a|api) - if [[ "$ARG_2" == "s" || "$ARG_2" == "start" ]]; then - f_apiserver - - elif [[ "$ARG_2" == "m" || "ARG_2" == "manual" ]]; then - f_apiserver_manual - - else - f_help - fi - ;; - - s|sd) - if [[ "$ARG_2" == "s" || "$ARG_2" == "start" ]]; then - f_scheduler - - elif [[ "$ARG_2" == "m" || "ARG_2" == "manual" ]]; then - f_scheduler_manual - - else - f_help - fi - ;; - - c|cm) - if [[ "$ARG_2" == "s" || "$ARG_2" == "start" ]]; then - f_controller_manager - - elif [[ "$ARG_2" == "m" || "ARG_2" == "manual" ]]; then - f_controller_manager_manual - - else - f_help - fi - ;; - - k|kill) - f_kill_of_process - ;; - - *) - f_help - ;; - -esac diff --git a/conf/cluster/01_k8s_master_add_bridge.sh b/conf/cluster/01_k8s_master_add_bridge.sh deleted file mode 100644 index 45217d0..0000000 --- a/conf/cluster/01_k8s_master_add_bridge.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -BRCTL="$(which brctl)" -BRIDGE_IFACE="br0" -FLANNEL_CIDR="$(ip a s flannel.1 | grep -v 'inet6' | grep 'inet' | cut -d ':' -f 2 | awk '{ print $2}' | sed 's/0\/8/1\/16/g')" - -$BRCTL addbr $BRIDGE_IFACE && sleep 2 -ip addr add $FLANNEL_CIDR dev $BRIDGE_IFACE && sleep 2 -ip link set dev $BRIDGE_IFACE up && sleep 2 diff --git a/conf/cluster/02_minion.sh b/conf/cluster/02_minion.sh deleted file mode 100644 index 2eb79b7..0000000 --- a/conf/cluster/02_minion.sh +++ /dev/null @@ -1,189 +0,0 @@ -#------------------------------------------------# -# Kubernetes minion start script -# Maintainer: Yongbok Kim (ruo91@yongbok.net) -#------------------------------------------------# -#!/bin/bash -### Global ### -# Kubernetes -K8S_HOME=/opt/kubernetes -PATH=$PATH:$K8S_HOME/server/bin - -# Ports -K8S_CADVISOR_PORT="4194" -K8S_KUBELET_PORT="10250" -K8S_API_SERVER_PORT="8080" - -# Address -K8S_API_SERVER="172.17.1.4" -K8S_COMMON_SERVER_ADDR="0.0.0.0" -K8S_HOST_OVERRIDE="$(ip a s | grep 'eth1' | grep 'inet' | cut -d '/' -f 1 | awk '{ print $2 }')" - -# Options -PROXY_MODE="iptables" - -# Logs -K8S_PROXY_LOGS="/tmp/proxy.log" -K8S_KUBELET_LOGS="/tmp/kubelet.log" - -# PID -K8S_PROXY_SERVER_PID="$(ps -e | grep 'kube-proxy' | awk '{ printf $1 "\n" }')" -K8S_KUBELET_SERVER_PID="$(ps -e | grep 'kubelet' | awk '{ printf $1 "\n" }')" - -# Functions -function f_proxy { - echo "Start Proxy..." && sleep 1 - kube-proxy \ - --proxy-mode="$PROXY_MODE" \ - --master=$K8S_API_SERVER:$K8S_API_SERVER_PORT \ - --v=0 > $K8S_PROXY_LOGS 2>&1 & - echo "done" -} - -function f_kubelet { - echo "Start Kubelet..." && sleep 1 - kubelet \ - --address=$K8S_COMMON_SERVER_ADDR \ - --port=$K8S_KUBELET_PORT \ - --cadvisor-port=$K8S_CADVISOR_PORT \ - --api-servers=$K8S_API_SERVER:$K8S_API_SERVER_PORT \ - --hostname-override=$K8S_HOST_OVERRIDE \ - --v=0 > $K8S_KUBELET_LOGS 2>&1 & - echo "done" -} - -# Function of manual -function f_proxy_manual { - echo -ne "\033[33m- API Server \033[0m \n" - echo -ne "\033[33m- ex) 172.17.1.4:8080 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_API_SERVER - echo - - echo "Start Proxy..." && sleep 1 - kube-proxy \ - --proxy-mode="$PROXY_MODE" \ - --master=$K8S_API_SERVER \ - --v=0 > $K8S_PROXY_LOGS 2>&1 & - echo "done" -} - -function f_kubelet_manual { - echo -ne "\033[33m- Kubelet Port \033[0m \n" - echo -ne "\033[33m- ex) 10250 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_KUBELET_PORT - echo - - echo -ne "\033[33m- cAdvisor Port \033[0m \n" - echo -ne "\033[33m- ex) 4194 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_CADVISOR_PORT - echo - - echo -ne "\033[33m- Kubelet Service Address \033[0m \n" - echo -ne "\033[33m- ex) 0.0.0.0 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_KUBELET_SERVICE_ADDR - echo - - echo -ne "\033[33m- API Server \033[0m \n" - echo -ne "\033[33m- ex) 172.17.1.4:8080 \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_API_SERVER - echo - - echo "Start Kubelet..." && sleep 1 - kubelet \ - --port=$K8S_KUBELET_PORT \ - --cadvisor-port=$K8S_CADVISOR_PORT \ - --address=$K8S_KUBELET_SERVICE_ADDR \ - --api-servers=$K8S_API_SERVER \ - --hostname-override=$K8S_HOST_OVERRIDE \ - --v=0 > $K8S_KUBELET_LOGS 2>&1 & - echo "done" -} - -function f_kill_of_process { - if [ "$ARG_2" == "all" ]; then - echo "Kill of All Server..." && sleep 1 - kill -9 $K8S_PROXY_SERVER_PID \ - $K8S_KUBELET_SERVER_PID - echo "done" - - elif [[ "$ARG_2" == "p" || "$ARG_2" == "proxy" ]]; then - echo "Kill of Proxy..." && sleep 1 - kill -9 $K8S_PROXY_SERVER_PID - echo "done" - - elif [[ "$ARG_2" == "kb" || "$ARG_2" == "kubelet" ]]; then - echo "Kill of Kubelet..." && sleep 1 - kill -9 $K8S_KUBELET_SERVER_PID - echo "done" - - else - echo "Not found PIDs" - fi -} - -function f_help { - echo "Usage: $ARG_0 [Options] [Arguments]" - echo - echo "- Options" - echo "p, proxy : proxy" - echo "kb, kubelet : kubelet" - echo "k, kill : kill of process" - echo - echo "- Arguments" - echo "s, start : Start commands" - echo "m, manual : Manual commands" - echo - echo "all : kill of all server (k or kill option only.)" - echo " ex) $ARG_0 k all or $ARG_0 kill all" - echo - echo "p, proxy : kill of proxy (k or kill option only.)" - echo " ex) $ARG_0 k p or $ARG_0 kill proxy" - echo - echo "kb, kubelet : kill of kubelet (k or kill option only.)" - echo " ex) $ARG_0 k kb or $ARG_0 kill kubelet" - echo -} - -# Main -ARG_0="$0" -ARG_1="$1" -ARG_2="$2" - -case ${ARG_1} in - p|proxy) - if [[ "$ARG_2" == "s" || "$ARG_2" == "start" ]]; then - f_proxy - - elif [[ "$ARG_2" == "m" || "ARG_2" == "manual" ]]; then - f_proxy_manual - - else - f_help - fi - ;; - - kb|kubelet) - if [[ "$ARG_2" == "s" || "$ARG_2" == "start" ]]; then - f_kubelet - - elif [[ "$ARG_2" == "m" || "ARG_2" == "manual" ]]; then - f_kubelet_manual - - else - f_help - fi - ;; - - k|kill) - f_kill_of_process - ;; - - *) - f_help - ;; - -esac diff --git a/conf/cluster/03_minion_init.sh b/conf/cluster/03_minion_init.sh deleted file mode 100644 index aef9dfb..0000000 --- a/conf/cluster/03_minion_init.sh +++ /dev/null @@ -1,26 +0,0 @@ -#------------------------------------------------# -# Initialization a minion script -# Maintainer: Yongbok Kim (ruo91@yongbok.net) -#------------------------------------------------# -#!/bin/bash - -# Binary -FLANNEL="/bin/flannel.sh" - -# PID -DOCKER_PID="$(ps -e | grep 'docker' | awk '{ printf $1 "\n" }')" - -# kill docker -echo "Kill Docker..." && sleep 1 -kill -9 $DOCKER_PID -echo "done" && sleep 2 - -# Flannel -$FLANNEL flannel start && sleep 2 - -# Delete docker bridge -ip link set dev docker0 down && sleep 2 -brctl delbr docker0 && sleep 2 - -# Start docker -service docker start diff --git a/conf/docker/default_docker b/conf/docker/default_docker deleted file mode 100644 index e8c2886..0000000 --- a/conf/docker/default_docker +++ /dev/null @@ -1,14 +0,0 @@ -# Docker Upstart and SysVinit configuration file - -# Customize location of Docker binary (especially for development testing). -#DOCKER="/usr/local/bin/docker" - -# Use DOCKER_OPTS to modify the daemon startup options. -DOCKER_BIP="$(ip a s flannel.1 | grep -v 'inet6' | grep 'inet' | cut -d ':' -f 2 | awk '{ print $2}' | sed 's/0\/8/1\/16/g')" -DOCKER_OPTS="--bip=$DOCKER_BIP --dns 8.8.8.8 --dns 8.8.4.4" - -# If you need Docker to use an HTTP proxy, it can also be specified here. -#export http_proxy="http://127.0.0.1:3128/" - -# This is also a handy place to tweak where Docker's temporary files go. -#export TMPDIR="/mnt/bigdrive/docker-tmp" diff --git a/conf/network/00_flannel.sh b/conf/network/00_flannel.sh deleted file mode 100644 index 67fac0d..0000000 --- a/conf/network/00_flannel.sh +++ /dev/null @@ -1,119 +0,0 @@ -#------------------------------------------------# -# Flannel start script -# Maintainer: Yongbok Kim (ruo91@yongbok.net) -#------------------------------------------------# -#!/bin/bash -### Global ### -# Flannel -FLANNEL_HOME=/opt/flannel -PATH=$PATH:$FLANNEL_HOME/bin - -# Flannel options -IFACE="eth1" -ETCD_PORT="4001" -ETCD_PREFIX="/overlay/network" -ETCD_SERVER="http://172.17.1.1:$ETCD_PORT,http://172.17.1.2:$ETCD_PORT,http://172.17.1.3:$ETCD_PORT" - -# Logs -FLANNEL_LOGS="/tmp/flannel.log" -FLANNELD_LOGS="/tmp/flanneld.log" - -# PID -FLANNELD_PID="$(ps -e | grep 'flanneld' | awk '{ printf $1 "\n" }')" - -# Functions -function f_flannel { - echo "Start Flannel Server..." && sleep 1 - flanneld \ - -iface=$IFACE \ - -log_dir="$FLANNEL_LOGS" \ - -etcd-prefix="$ETCD_PREFIX" \ - -etcd-endpoints="$ETCD_SERVER" \ - --v=0 > $FLANNELD_LOGS 2>&1 & - echo "done" -} - -# Function of manual -function f_apiserver_manual { - echo -ne "\033[33m- Interface \033[0m \n" - echo -ne "\033[33m- ex) $IFACE \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read IFACE - echo - - echo -ne "\033[33m- ETCD Prefix \033[0m \n" - echo -ne "\033[33m- ex) $ETCD_PREFIX \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read ETCD_PREFIX - echo - - echo -ne "\033[33m- ETCD Server \033[0m \n" - echo -ne "\033[33m- ex)$ETCD_SERVER \033[0m \n" - echo -ne "\033[33m- Input: \033[0m" - read K8S_ETCD_SERVER - echo - - echo "Start Flannel Server..." && sleep 1 - flanneld \ - -iface=$IFACE \ - -log_dir="$FLANNEL_LOGS" \ - -etcd-prefix="$ETCD_PREFIX" \ - -etcd-endpoints="$ETCD_SERVER" \ - --v=0 > $FLANNELD_LOGS 2>&1 & - echo "done" -} - -function f_kill_of_process { - if [[ "$ARG_2" == "f" || "$ARG_2" == "flannel" ]]; then - echo "Kill of Flanneld..." && sleep 1 - kill -9 $FLANNELD_PID - echo "done" - - else - echo "Not found PIDs" - fi -} - -function f_help { - echo "Usage: $ARG_0 [Options] [Arguments]" - echo - echo "- Options" - echo "f, flannel : Flannel" - echo "k, kill : kill of process" - echo - echo "- Arguments" - echo "s, start : Start commands" - echo "m, manual : Manual commands" - echo - echo "f, flannel : kill of flannel (k or kill option only.)" - echo " ex) $ARG_0 k f or $ARG_0 kill flannel" - echo -} - -# Main -ARG_0="$0" -ARG_1="$1" -ARG_2="$2" - -case ${ARG_1} in - f|flannel) - if [[ "$ARG_2" == "s" || "$ARG_2" == "start" ]]; then - f_flannel - - elif [[ "$ARG_2" == "m" || "ARG_2" == "manual" ]]; then - f_flannel_manual - - else - f_help - fi - ;; - - k|kill) - f_kill_of_process - ;; - - *) - f_help - ;; - -esac diff --git a/conf/network/flannel.json b/conf/network/flannel.json deleted file mode 100644 index f0d2d6e..0000000 --- a/conf/network/flannel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "Network": "10.0.0.0/8", - "Backend": { - "Type": "vxlan" - } -} diff --git a/conf/supervisord/01_minion.conf b/conf/supervisord/01_minion.conf deleted file mode 100644 index bb783c9..0000000 --- a/conf/supervisord/01_minion.conf +++ /dev/null @@ -1,10 +0,0 @@ -[supervisord] -nodaemon=true - -[program:ssh] -command=service ssh start -autorestart=true - -[program:wrapdocker] -command=/bin/wrapdocker -autorestart=false diff --git a/docker-kubernetes.sh b/docker-kubernetes.sh deleted file mode 100755 index e06f323..0000000 --- a/docker-kubernetes.sh +++ /dev/null @@ -1,278 +0,0 @@ -#------------------------------------------------# -# Docker kubernetes script -# Maintainer: Yongbok Kim (ruo91@yongbok.net) -#------------------------------------------------# -#!/bin/bash -### Global ### -DOCKER="$(which docker)" - -# Image name -IMAGE_ETCD="kubernetes:etcd" -IMAGE_MASTER="kubernetes:master" -IMAGE_MINION="kubernetes:minion" -IMAGE_CLIENT="kubernetes:client" - -# Container name -CONTAINER_ETCD="etcd-cluster" -CONTAINER_MASTER="kubernetes-master" -CONTAINER_MINION="kubernetes-minion" -CONTAINER_CLIENT="kubernetes-client" - -# Dockerfiles -DOCKER_FILE_ETCD="00_kubernetes-etcd" -DOCKER_FILE_CLIENT="01_kubernetes-client" -DOCKER_FILE_MASTER="02_kubernetes-master" -DOCKER_FILE_MINION="03_kubernetes-minion" - -# Functions -function f_build { - echo "- Build coreos etcd" && sleep 1 - $DOCKER build --rm -t $IMAGE_ETCD -f $DOCKER_FILE_ETCD $(pwd) - echo "done" - echo - - echo "- Build kubernetes client" && sleep 1 - $DOCKER build --rm -t $IMAGE_CLIENT -f $DOCKER_FILE_CLIENT $(pwd) - echo "done" - echo - - echo "- Build kubernetes master" && sleep 1 - $DOCKER build --rm -t $IMAGE_MASTER -f $DOCKER_FILE_MASTER $(pwd) - echo "done" - echo - - echo "- Build kubernetes minion" && sleep 1 - $DOCKER build --rm -t $IMAGE_MINION -f $DOCKER_FILE_MINION $(pwd) - echo "done" - echo - - # Remove none images - #f_none_rmi > /dev/null 2>&1 -} - -function f_run { - DOCKER_IFACE="docker0" - DOCKER_PIPEWORK="/bin/pipework" - DOCKER_PIPEWORK_URL="https://raw.githubusercontent.com/jpetazzo/pipework/master/pipework" - - # ARP & SSH known hosts flush - echo "- ARP & SSH known hosts flush" - echo "├-- ARP" - for (( i=1; i<8; i++ )); do - arp -d 172.17.1.$i > /dev/null 2>&1 - done - echo "└-- SSH known hosts" - cat /dev/null > $HOME/.ssh/known_hosts - echo "done" - echo - - if [ -f "$DOCKER_PIPEWORK" ]; then - ## CoreOS ETCD x3 ## - echo "- ETCD Cluster" - for (( i=0; i<3; i++ )); do - echo "├-- Run $CONTAINER_ETCD-$i" - $DOCKER run -d --name="$CONTAINER_ETCD-$i" -h "$CONTAINER_ETCD-$i" $IMAGE_ETCD > /dev/null 2>&1 - done - - # Static IP - echo "├-- Static IP Setting" - $DOCKER_PIPEWORK $DOCKER_IFACE $CONTAINER_ETCD-0 172.17.1.1/16 > /dev/null 2>&1 - $DOCKER_PIPEWORK $DOCKER_IFACE $CONTAINER_ETCD-1 172.17.1.2/16 > /dev/null 2>&1 - $DOCKER_PIPEWORK $DOCKER_IFACE $CONTAINER_ETCD-2 172.17.1.3/16 > /dev/null 2>&1 - - # Start etcd cluster - for (( i=0; i<3; i++ )); do - echo "├-- Start etcd #$i" - $DOCKER exec $CONTAINER_ETCD-$i /bin/bash etcd-cluster.sh etcd start > /dev/null 2>&1 - done - sleep 3 - - # Flannel Setting - ETCD_SERVER_1="$(docker inspect -f '{{ .NetworkSettings.IPAddress }}' etcd-cluster-0)" - echo "└-- Flannel Setting" - curl -L http://$ETCD_SERVER_1:4001/v2/keys/overlay/network/config -XPUT --data-urlencode value@conf/network/flannel.json > /dev/null 2>&1 - echo "done" - echo - - ## Kubernetes Master ## - echo "- Kubernetes Master" - echo "├-- Run $CONTAINER_MASTER" - $DOCKER run -d --name="$CONTAINER_MASTER" -h "$CONTAINER_MASTER" --privileged=true -v /dev:/dev -v /lib/modules:/lib/modules $IMAGE_MASTER > /dev/null 2>&1 - - # Static IP - echo "├-- Static IP Setting" - $DOCKER_PIPEWORK $DOCKER_IFACE $CONTAINER_MASTER 172.17.1.4/16 > /dev/null 2>&1 - - # Start Flannel - echo "├-- Start Flannel" - $DOCKER exec $CONTAINER_MASTER /bin/bash flannel.sh flannel start > /dev/null 2>&1 - - # Add bridge - echo "├-- Add Bridge" - $DOCKER exec $CONTAINER_MASTER /bin/bash k8s_master_add_bridge.sh > /dev/null 2>&1 - - # Start API, Scheduler, Controller Manager - echo "├-- Start API Server" - $DOCKER exec $CONTAINER_MASTER /bin/bash k8s.sh api start > /dev/null 2>&1 - sleep 3 - - echo "├-- Start Scheduler" - $DOCKER exec $CONTAINER_MASTER /bin/bash k8s.sh sd start > /dev/null 2>&1 - - echo "└-- Start Controller Manager" - $DOCKER exec $CONTAINER_MASTER /bin/bash k8s.sh cm start > /dev/null 2>&1 - echo "done" - echo - - ## Kubernetes Minion x2 ## - echo "- Kubernetes Minion" - for (( i=0; i<2; i++ )); do - echo "├-- Run $CONTAINER_MINION-$i" - $DOCKER run -d --name="$CONTAINER_MINION-$i" -h "$CONTAINER_MINION-$i" --privileged=true -v /dev:/dev -v /sys:/sys -v /lib/modules:/lib/modules $IMAGE_MINION > /dev/null 2>&1 - done - sleep 3 - - # Static IP - echo "├-- Static IP Setting" - $DOCKER_PIPEWORK $DOCKER_IFACE $CONTAINER_MINION-0 172.17.1.5/16 > /dev/null 2>&1 - $DOCKER_PIPEWORK $DOCKER_IFACE $CONTAINER_MINION-1 172.17.1.6/16 > /dev/null 2>&1 - - # Start Flannel - echo "├-- Start Flannel" - $DOCKER exec $CONTAINER_MINION-0 /bin/bash minion-init.sh > /dev/null 2>&1 - $DOCKER exec $CONTAINER_MINION-1 /bin/bash minion-init.sh > /dev/null 2>&1 - - # Start Kubelet, Proxy - echo "├-- Start Kubelet" - $DOCKER exec $CONTAINER_MINION-0 /bin/bash minion.sh kubelet start > /dev/null 2>&1 - $DOCKER exec $CONTAINER_MINION-1 /bin/bash minion.sh kubelet start > /dev/null 2>&1 - - echo "└-- Start Proxy" - $DOCKER exec $CONTAINER_MINION-0 /bin/bash minion.sh proxy start > /dev/null 2>&1 - $DOCKER exec $CONTAINER_MINION-1 /bin/bash minion.sh proxy start > /dev/null 2>&1 - echo "done" - echo - - # Kubernetes Client - echo "- Kubernetes Client" - echo "├-- Run $CONTAINER_CLIENT" - $DOCKER run -d --name="$CONTAINER_CLIENT" -h "$CONTAINER_CLIENT" $IMAGE_CLIENT > /dev/null 2>&1 - - # Static IP - echo "└-- Static IP Setting" - $DOCKER_PIPEWORK $DOCKER_IFACE $CONTAINER_CLIENT 172.17.1.7/16 > /dev/null 2>&1 - echo "done" - echo - - # Web UI - KUBE_UI_RC="kubectl create -f /opt/kube-ui-rc.yaml --namespace=kube-system -s 172.17.1.4:8080" - KUBE_UI_SVC="kubectl create -f /opt/kube-ui-svc.yaml --namespace=kube-system -s 172.17.1.4:8080" - - echo "- Web UI" - echo "├-- Create Kube UI RC" - $DOCKER exec $CONTAINER_CLIENT $KUBE_UI_RC > /dev/null 2>&1 - - echo "├-- Create Kube UI SVC" - $DOCKER exec $CONTAINER_CLIENT $KUBE_UI_SVC > /dev/null 2>&1 - echo "└-- URL: http://172.17.1.4:8080/" - echo "done" - echo - - else - curl -o $DOCKER_PIPEWORK -L "$DOCKER_PIPEWORK_URL" > /dev/null 2>&1 - chmod a+x $DOCKER_PIPEWORK - - # Recusive f_run - f_run - fi -} - -function f_none_rmi { - echo "- Remove images..." && sleep 1 - - # Remove none images - $DOCKER rmi $(docker images | grep '' | awk '{ printf $3 " "}') > /dev/null 2>&1 - echo "done" - echo -} - -function f_stop_rm { - echo "- Stop & Remove all containers..." && sleep 1 - - # Stop - $DOCKER stop $CONTAINER_ETCD-0 $CONTAINER_ETCD-1 $CONTAINER_ETCD-2 \ - $CONTAINER_MASTER $CONTAINER_MINION-0 $CONTAINER_MINION-1 $CONTAINER_CLIENT > /dev/null 2>&1 - - # Remove - $DOCKER rm $CONTAINER_ETCD-0 $CONTAINER_ETCD-1 $CONTAINER_ETCD-2 \ - $CONTAINER_MASTER $CONTAINER_MINION-0 $CONTAINER_MINION-1 $CONTAINER_CLIENT > /dev/null 2>&1 - - # Remove none images - #f_none_rmi - echo "done" - echo -} - -function f_help { - echo "Usage: $ARG_0 [Options] [Arguments]" - echo - echo "- Options" - echo "b, build : Build containers" - echo "r, run : Run containers" - echo "sr : Stop & Remove all containers" - echo "none : Remove images" - echo - echo "- Arguments" - echo "y, yes : build, run, sr option only" - echo - echo "rm, rmi : Remove images (none option only.)" - echo " ex) $ARG_0 n rm or $ARG_0 none rmi" - echo -} - -# Main -ARG_0="$0" -ARG_1="$1" -ARG_2="$2" - -case ${ARG_1} in - b|build) - if [[ "$ARG_2" == "y" || "$ARG_2" == "yes" ]]; then - f_build - - else - f_help - fi - ;; - - r|run) - if [[ "$ARG_2" == "y" || "$ARG_2" == "yes" ]]; then - f_run - - else - f_help - fi - ;; - - sr) - if [[ "$ARG_2" == "y" || "$ARG_2" == "yes" ]]; then - f_stop_rm - - else - f_help - fi - ;; - - n|none) - if [[ "$ARG_2" == "rm" || "$ARG_2" == "rmi" ]]; then - f_none_rmi - - else - f_help - fi - ;; - - *) - f_help - ;; -esac From 3c9b66175ced86a002f8c0421b1f0560340b459d Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Mon, 16 Nov 2015 12:44:42 +0000 Subject: [PATCH 02/10] Update kubernetes client --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 441140a..f980356 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ WORKDIR $SRC_DIR # Google - Kubernetes ENV KUBERNETES_HOME $SRC_DIR/kubernetes ENV PATH $PATH:$KUBERNETES_HOME/client/bin -ADD kubernetes-client-linux-amd64.tar.gz $SRC_DIR +ADD https://media.githubusercontent.com/media/ruo91/docker-kubernetes/release-tar/1.1/kubernetes-client-linux-amd64.tar.gz $SRC_DIR ADD conf/cluster/06_nginx.yaml /opt/nginx.yaml ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-rc.yaml /opt/kube-ui-rc.yaml ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-svc.yaml /opt/kube-ui-svc.yaml From 6fa3040ca0cbbe175d01e226e3fec1c0cb29be3d Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Mon, 16 Nov 2015 13:58:28 +0000 Subject: [PATCH 03/10] Remove README.md --- README.md | 154 ------------------------------------------------------ 1 file changed, 154 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 065f166..0000000 --- a/README.md +++ /dev/null @@ -1,154 +0,0 @@ -Dockerfile - Google Kubernetes (test only) -===================================== -![0] - -# - Google Kubernetes? ------------------------ -Container를 쉽게 관리 할 수 있도록 만든 오픈소스 도구 입니다. -참고: http://www.yongbok.net/blog/google-kubernetes-container-cluster-manager/ - -# - Dockerfile로 만들게 된 이유가 무엇입니까? --------------------------------------------- -실제와 같은 환경을 구축 및 테스트 할때 시간 비용을 줄이고자 만들었습니다. - -#### - Clone ------------- -Github 저장소에서 Dockerfile을 받아 옵니다. -```sh -root@ruo91:~# git clone https://github.com/ruo91/docker-kubernetes /opt/docker-kubernetes -``` - -#### - Build ------------- -Kubernetes는 Docker를 사용하여 빌드하기 때문에, HostOS에서 빌드 후 tar.gz 파일을 Dockerfile이 있는 경로에 복사합니다. -(일종의 편법 입니다.) -```sh -root@ruo91:~# git clone https://github.com/kubernetes/kubernetes /opt/kubernetes-source -root@ruo91:~# cd /opt/kubernetes-source -root@ruo91:~# git checkout -b release-1.1 origin/release-1.1 -root@ruo91:~# make quick-release -root@ruo91:~# cp _output/release-tars/kubernetes-client-linux-amd64.tar.gz /opt/docker-kubernetes -root@ruo91:~# cp _output/release-tars/kubernetes-server-linux-amd64.tar.gz /opt/docker-kubernetes -``` - -이후 docker-kubernetes.sh 쉘스크립트를 통해 etcd, master, minion, client를 빌드 합니다. -```sh -root@ruo91:~# cd /opt/docker-kubernetes -root@ruo91:~# ./docker-kubernetes.sh build start -``` - -#### - Run ------------- -etcd x3, master x1, minion x2, client x1 개의 컨테이너를 실행 합니다. -```sh -root@ruo91:~# ./docker-kubernetes.sh run yes -``` - -# - Test --------- -docker exec 명령어를 통해 kubernetes-client 컨테이너에서 테스트 해볼 것입니다. -(-s 옵션은 API Server의 IP와 포트를 지정 해주면 됩니다.) -```sh -root@ruo91:~# docker exec kubernetes-client kubectl get services -s 172.17.1.4:8080 -docker exec kubernetes-client kubectl get services -s 172.17.1.4:8080 -NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE -kubernetes 10.0.0.1 443/TCP 2m -``` -Minion 서버에 10개의 Nginx를 실행 해보도록 하겠습니다. -```sh -root@ruo91:~# docker exec kubernetes-client kubectl create -f /opt/nginx.yaml -s 172.17.1.4:8080 -replicationcontroller "nginxs" created -``` - -create 명령어가 실행 되고 나면, 해당 Minion 서버중에 Workload가 낮은 서버에서 해당 docker 이미지를 받아오고(pending), -시간이 지나면 다음과 같이 Running 상태로 바뀌게 됩니다. 이는 곧 사용할 준비가 되었다는 뜻입니다. -(시스템 및 네트워크 상황에 따라 몇분 이상 소요 될 수 있습니다.) -```sh -root@ruo91:~# docker exec kubernetes-client kubectl get pods -s 172.17.1.4:8080 -NAME READY STATUS RESTARTS AGE -nginxs-1dzwr 1/1 Running 0 1m -nginxs-2kq2o 1/1 Running 0 1m -nginxs-6ph77 1/1 Running 0 1m -nginxs-6wxx8 1/1 Running 0 1m -nginxs-98rsw 1/1 Running 0 1m -nginxs-n5gks 1/1 Running 0 1m -nginxs-odo7u 1/1 Running 0 1m -nginxs-p7oc2 1/1 Running 0 1m -nginxs-ubpyl 1/1 Running 0 1m -nginxs-utanv 1/1 Running 0 1m -``` - -describe 옵션으로 상태를 확인 해봅니다. -```sh -root@ruo91:~# docker exec kubernetes-client kubectl describe -f nginx.yaml -s 172.17.1.4:8080 -Name: nginxs -Namespace: default -Image(s): ruo91/nginx:latest -Selector: app=nginx -Labels: app=nginx -Replicas: 10 current / 10 desired -Pods Status: 10 Running / 0 Waiting / 0 Succeeded / 0 Failed -No volumes. -Events: - FirstSeen LastSeen Count From SubobjectPath Reason Message - ───────── ──────── ───── ──── ───────────── ────── ─────── - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-n5gks - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-6wxx8 - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-98rsw - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-6ph77 - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-ubpyl - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-odo7u - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-1dzwr - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-utanv - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-2kq2o - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-p7oc2 -``` - -# - Kubernetes Web UI ----------------------- -Kubernetes v1.x 버전 부터는 Web UI(kube-ui)가 Minion 쪽에서 Pod로 실행 되도록 변경 되었습니다. -HostOS에 Nginx 같은 웹서버를 사용한다면, Reverse Proxy 설정을 통하여 넘겨주면 쉽게 접속이 가능합니다. -``` -# Kubernetes web ui -server { - listen 80; - server_name kubernetes.yongbok.net; - - location / { - proxy_set_header Host $host; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Server $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass http://172.17.1.4:8080; - client_max_body_size 10M; - } -} -``` - -Kubernetes Web UI #0 ---------------------- -![Kubernetes Web UI #0][1] - -Kubernetes Web UI #1 ---------------------- -![Kubernetes Web UI #1][2] - -Kubernetes Web UI #2 ---------------------- -![Kubernetes Web UI #2][3] - -Kubernetes Web UI #3 ---------------------- -![Kubernetes Web UI #3][4] - -Kubernetes Web UI #4 ---------------------- -![Kubernetes Web UI #4][5] - -Thanks. :-) -[0]: http://cdn.yongbok.net/ruo91/architecture/k8s/kubernetes_v1.x_architecture_with_flannel.png -[1]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_0.png -[2]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_1.png -[3]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_2.png -[4]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_3.png -[5]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_4.png From d40d561023ceb945184366cb7eb79548fc505406 Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Tue, 17 Nov 2015 00:42:34 +0000 Subject: [PATCH 04/10] Remove workdir --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index f980356..8315eb3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,15 +22,15 @@ RUN apt-get update && apt-get install -y supervisor openssh-server nano net-tool # Variable ENV SRC_DIR /opt -WORKDIR $SRC_DIR +#WORKDIR $SRC_DIR # Google - Kubernetes ENV KUBERNETES_HOME $SRC_DIR/kubernetes ENV PATH $PATH:$KUBERNETES_HOME/client/bin ADD https://media.githubusercontent.com/media/ruo91/docker-kubernetes/release-tar/1.1/kubernetes-client-linux-amd64.tar.gz $SRC_DIR ADD conf/cluster/06_nginx.yaml /opt/nginx.yaml -ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-rc.yaml /opt/kube-ui-rc.yaml -ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-svc.yaml /opt/kube-ui-svc.yaml +ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-rc.yaml $SRC_DIR/kube-ui-rc.yaml +ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-svc.yaml $SRC_DIR/kube-ui-svc.yaml RUN echo '# Kubernetes' >> /etc/profile \ && echo "export KUBERNETES_HOME=$KUBERNETES_HOME" >> /etc/profile \ && echo 'export PATH=$PATH:$KUBERNETES_HOME/client/bin' >> /etc/profile \ From 28edc27e48990d2f41f80a438bd1761aa7ba156c Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Tue, 17 Nov 2015 01:12:10 +0000 Subject: [PATCH 05/10] Revert "Remove README.md" This reverts commit 6fa3040ca0cbbe175d01e226e3fec1c0cb29be3d. --- README.md | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..065f166 --- /dev/null +++ b/README.md @@ -0,0 +1,154 @@ +Dockerfile - Google Kubernetes (test only) +===================================== +![0] + +# - Google Kubernetes? +----------------------- +Container를 쉽게 관리 할 수 있도록 만든 오픈소스 도구 입니다. +참고: http://www.yongbok.net/blog/google-kubernetes-container-cluster-manager/ + +# - Dockerfile로 만들게 된 이유가 무엇입니까? +-------------------------------------------- +실제와 같은 환경을 구축 및 테스트 할때 시간 비용을 줄이고자 만들었습니다. + +#### - Clone +------------ +Github 저장소에서 Dockerfile을 받아 옵니다. +```sh +root@ruo91:~# git clone https://github.com/ruo91/docker-kubernetes /opt/docker-kubernetes +``` + +#### - Build +------------ +Kubernetes는 Docker를 사용하여 빌드하기 때문에, HostOS에서 빌드 후 tar.gz 파일을 Dockerfile이 있는 경로에 복사합니다. +(일종의 편법 입니다.) +```sh +root@ruo91:~# git clone https://github.com/kubernetes/kubernetes /opt/kubernetes-source +root@ruo91:~# cd /opt/kubernetes-source +root@ruo91:~# git checkout -b release-1.1 origin/release-1.1 +root@ruo91:~# make quick-release +root@ruo91:~# cp _output/release-tars/kubernetes-client-linux-amd64.tar.gz /opt/docker-kubernetes +root@ruo91:~# cp _output/release-tars/kubernetes-server-linux-amd64.tar.gz /opt/docker-kubernetes +``` + +이후 docker-kubernetes.sh 쉘스크립트를 통해 etcd, master, minion, client를 빌드 합니다. +```sh +root@ruo91:~# cd /opt/docker-kubernetes +root@ruo91:~# ./docker-kubernetes.sh build start +``` + +#### - Run +------------ +etcd x3, master x1, minion x2, client x1 개의 컨테이너를 실행 합니다. +```sh +root@ruo91:~# ./docker-kubernetes.sh run yes +``` + +# - Test +-------- +docker exec 명령어를 통해 kubernetes-client 컨테이너에서 테스트 해볼 것입니다. +(-s 옵션은 API Server의 IP와 포트를 지정 해주면 됩니다.) +```sh +root@ruo91:~# docker exec kubernetes-client kubectl get services -s 172.17.1.4:8080 +docker exec kubernetes-client kubectl get services -s 172.17.1.4:8080 +NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE +kubernetes 10.0.0.1 443/TCP 2m +``` +Minion 서버에 10개의 Nginx를 실행 해보도록 하겠습니다. +```sh +root@ruo91:~# docker exec kubernetes-client kubectl create -f /opt/nginx.yaml -s 172.17.1.4:8080 +replicationcontroller "nginxs" created +``` + +create 명령어가 실행 되고 나면, 해당 Minion 서버중에 Workload가 낮은 서버에서 해당 docker 이미지를 받아오고(pending), +시간이 지나면 다음과 같이 Running 상태로 바뀌게 됩니다. 이는 곧 사용할 준비가 되었다는 뜻입니다. +(시스템 및 네트워크 상황에 따라 몇분 이상 소요 될 수 있습니다.) +```sh +root@ruo91:~# docker exec kubernetes-client kubectl get pods -s 172.17.1.4:8080 +NAME READY STATUS RESTARTS AGE +nginxs-1dzwr 1/1 Running 0 1m +nginxs-2kq2o 1/1 Running 0 1m +nginxs-6ph77 1/1 Running 0 1m +nginxs-6wxx8 1/1 Running 0 1m +nginxs-98rsw 1/1 Running 0 1m +nginxs-n5gks 1/1 Running 0 1m +nginxs-odo7u 1/1 Running 0 1m +nginxs-p7oc2 1/1 Running 0 1m +nginxs-ubpyl 1/1 Running 0 1m +nginxs-utanv 1/1 Running 0 1m +``` + +describe 옵션으로 상태를 확인 해봅니다. +```sh +root@ruo91:~# docker exec kubernetes-client kubectl describe -f nginx.yaml -s 172.17.1.4:8080 +Name: nginxs +Namespace: default +Image(s): ruo91/nginx:latest +Selector: app=nginx +Labels: app=nginx +Replicas: 10 current / 10 desired +Pods Status: 10 Running / 0 Waiting / 0 Succeeded / 0 Failed +No volumes. +Events: + FirstSeen LastSeen Count From SubobjectPath Reason Message + ───────── ──────── ───── ──── ───────────── ────── ─────── + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-n5gks + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-6wxx8 + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-98rsw + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-6ph77 + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-ubpyl + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-odo7u + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-1dzwr + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-utanv + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-2kq2o + 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-p7oc2 +``` + +# - Kubernetes Web UI +---------------------- +Kubernetes v1.x 버전 부터는 Web UI(kube-ui)가 Minion 쪽에서 Pod로 실행 되도록 변경 되었습니다. +HostOS에 Nginx 같은 웹서버를 사용한다면, Reverse Proxy 설정을 통하여 넘겨주면 쉽게 접속이 가능합니다. +``` +# Kubernetes web ui +server { + listen 80; + server_name kubernetes.yongbok.net; + + location / { + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://172.17.1.4:8080; + client_max_body_size 10M; + } +} +``` + +Kubernetes Web UI #0 +--------------------- +![Kubernetes Web UI #0][1] + +Kubernetes Web UI #1 +--------------------- +![Kubernetes Web UI #1][2] + +Kubernetes Web UI #2 +--------------------- +![Kubernetes Web UI #2][3] + +Kubernetes Web UI #3 +--------------------- +![Kubernetes Web UI #3][4] + +Kubernetes Web UI #4 +--------------------- +![Kubernetes Web UI #4][5] + +Thanks. :-) +[0]: http://cdn.yongbok.net/ruo91/architecture/k8s/kubernetes_v1.x_architecture_with_flannel.png +[1]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_0.png +[2]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_1.png +[3]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_2.png +[4]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_3.png +[5]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_4.png From a2108a140c3119e341e715595a66e9dd9b24517f Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Tue, 17 Nov 2015 01:16:48 +0000 Subject: [PATCH 06/10] Remove README.md --- README.md | 154 ------------------------------------------------------ 1 file changed, 154 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 065f166..0000000 --- a/README.md +++ /dev/null @@ -1,154 +0,0 @@ -Dockerfile - Google Kubernetes (test only) -===================================== -![0] - -# - Google Kubernetes? ------------------------ -Container를 쉽게 관리 할 수 있도록 만든 오픈소스 도구 입니다. -참고: http://www.yongbok.net/blog/google-kubernetes-container-cluster-manager/ - -# - Dockerfile로 만들게 된 이유가 무엇입니까? --------------------------------------------- -실제와 같은 환경을 구축 및 테스트 할때 시간 비용을 줄이고자 만들었습니다. - -#### - Clone ------------- -Github 저장소에서 Dockerfile을 받아 옵니다. -```sh -root@ruo91:~# git clone https://github.com/ruo91/docker-kubernetes /opt/docker-kubernetes -``` - -#### - Build ------------- -Kubernetes는 Docker를 사용하여 빌드하기 때문에, HostOS에서 빌드 후 tar.gz 파일을 Dockerfile이 있는 경로에 복사합니다. -(일종의 편법 입니다.) -```sh -root@ruo91:~# git clone https://github.com/kubernetes/kubernetes /opt/kubernetes-source -root@ruo91:~# cd /opt/kubernetes-source -root@ruo91:~# git checkout -b release-1.1 origin/release-1.1 -root@ruo91:~# make quick-release -root@ruo91:~# cp _output/release-tars/kubernetes-client-linux-amd64.tar.gz /opt/docker-kubernetes -root@ruo91:~# cp _output/release-tars/kubernetes-server-linux-amd64.tar.gz /opt/docker-kubernetes -``` - -이후 docker-kubernetes.sh 쉘스크립트를 통해 etcd, master, minion, client를 빌드 합니다. -```sh -root@ruo91:~# cd /opt/docker-kubernetes -root@ruo91:~# ./docker-kubernetes.sh build start -``` - -#### - Run ------------- -etcd x3, master x1, minion x2, client x1 개의 컨테이너를 실행 합니다. -```sh -root@ruo91:~# ./docker-kubernetes.sh run yes -``` - -# - Test --------- -docker exec 명령어를 통해 kubernetes-client 컨테이너에서 테스트 해볼 것입니다. -(-s 옵션은 API Server의 IP와 포트를 지정 해주면 됩니다.) -```sh -root@ruo91:~# docker exec kubernetes-client kubectl get services -s 172.17.1.4:8080 -docker exec kubernetes-client kubectl get services -s 172.17.1.4:8080 -NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE -kubernetes 10.0.0.1 443/TCP 2m -``` -Minion 서버에 10개의 Nginx를 실행 해보도록 하겠습니다. -```sh -root@ruo91:~# docker exec kubernetes-client kubectl create -f /opt/nginx.yaml -s 172.17.1.4:8080 -replicationcontroller "nginxs" created -``` - -create 명령어가 실행 되고 나면, 해당 Minion 서버중에 Workload가 낮은 서버에서 해당 docker 이미지를 받아오고(pending), -시간이 지나면 다음과 같이 Running 상태로 바뀌게 됩니다. 이는 곧 사용할 준비가 되었다는 뜻입니다. -(시스템 및 네트워크 상황에 따라 몇분 이상 소요 될 수 있습니다.) -```sh -root@ruo91:~# docker exec kubernetes-client kubectl get pods -s 172.17.1.4:8080 -NAME READY STATUS RESTARTS AGE -nginxs-1dzwr 1/1 Running 0 1m -nginxs-2kq2o 1/1 Running 0 1m -nginxs-6ph77 1/1 Running 0 1m -nginxs-6wxx8 1/1 Running 0 1m -nginxs-98rsw 1/1 Running 0 1m -nginxs-n5gks 1/1 Running 0 1m -nginxs-odo7u 1/1 Running 0 1m -nginxs-p7oc2 1/1 Running 0 1m -nginxs-ubpyl 1/1 Running 0 1m -nginxs-utanv 1/1 Running 0 1m -``` - -describe 옵션으로 상태를 확인 해봅니다. -```sh -root@ruo91:~# docker exec kubernetes-client kubectl describe -f nginx.yaml -s 172.17.1.4:8080 -Name: nginxs -Namespace: default -Image(s): ruo91/nginx:latest -Selector: app=nginx -Labels: app=nginx -Replicas: 10 current / 10 desired -Pods Status: 10 Running / 0 Waiting / 0 Succeeded / 0 Failed -No volumes. -Events: - FirstSeen LastSeen Count From SubobjectPath Reason Message - ───────── ──────── ───── ──── ───────────── ────── ─────── - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-n5gks - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-6wxx8 - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-98rsw - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-6ph77 - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-ubpyl - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-odo7u - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-1dzwr - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-utanv - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-2kq2o - 44m 44m 1 {replication-controller } SuccessfulCreate Created pod: nginxs-p7oc2 -``` - -# - Kubernetes Web UI ----------------------- -Kubernetes v1.x 버전 부터는 Web UI(kube-ui)가 Minion 쪽에서 Pod로 실행 되도록 변경 되었습니다. -HostOS에 Nginx 같은 웹서버를 사용한다면, Reverse Proxy 설정을 통하여 넘겨주면 쉽게 접속이 가능합니다. -``` -# Kubernetes web ui -server { - listen 80; - server_name kubernetes.yongbok.net; - - location / { - proxy_set_header Host $host; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Server $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass http://172.17.1.4:8080; - client_max_body_size 10M; - } -} -``` - -Kubernetes Web UI #0 ---------------------- -![Kubernetes Web UI #0][1] - -Kubernetes Web UI #1 ---------------------- -![Kubernetes Web UI #1][2] - -Kubernetes Web UI #2 ---------------------- -![Kubernetes Web UI #2][3] - -Kubernetes Web UI #3 ---------------------- -![Kubernetes Web UI #3][4] - -Kubernetes Web UI #4 ---------------------- -![Kubernetes Web UI #4][5] - -Thanks. :-) -[0]: http://cdn.yongbok.net/ruo91/architecture/k8s/kubernetes_v1.x_architecture_with_flannel.png -[1]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_0.png -[2]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_1.png -[3]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_2.png -[4]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_3.png -[5]: http://cdn.yongbok.net/ruo91/img/kubernetes/v1.1/k8s_web_ui_4.png From 8cc70bb6e9e79ecbdee8d4b6d564230eadd0507c Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Tue, 17 Nov 2015 03:44:30 +0000 Subject: [PATCH 07/10] fix - uncompress --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8315eb3..005ee47 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,8 @@ ADD https://media.githubusercontent.com/media/ruo91/docker-kubernetes/release-ta ADD conf/cluster/06_nginx.yaml /opt/nginx.yaml ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-rc.yaml $SRC_DIR/kube-ui-rc.yaml ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-svc.yaml $SRC_DIR/kube-ui-svc.yaml -RUN echo '# Kubernetes' >> /etc/profile \ +RUN tar xzvf kubernetes-client-linux-amd64.tar.gz \ + && echo '# Kubernetes' >> /etc/profile \ && echo "export KUBERNETES_HOME=$KUBERNETES_HOME" >> /etc/profile \ && echo 'export PATH=$PATH:$KUBERNETES_HOME/client/bin' >> /etc/profile \ && echo '' >> /etc/profile From eb1f9a9d47f675602d7352d19ad5ee80d2feb76f Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Sun, 10 Jan 2016 11:25:16 +0900 Subject: [PATCH 08/10] Add namespace of kube-system --- Dockerfile | 1 + conf/cluster/07_kube-system.json | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 conf/cluster/07_kube-system.json diff --git a/Dockerfile b/Dockerfile index 005ee47..a99c3fe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,6 +29,7 @@ ENV KUBERNETES_HOME $SRC_DIR/kubernetes ENV PATH $PATH:$KUBERNETES_HOME/client/bin ADD https://media.githubusercontent.com/media/ruo91/docker-kubernetes/release-tar/1.1/kubernetes-client-linux-amd64.tar.gz $SRC_DIR ADD conf/cluster/06_nginx.yaml /opt/nginx.yaml +ADD conf/cluster/07_kube-system.json /opt/kube-system.json ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-rc.yaml $SRC_DIR/kube-ui-rc.yaml ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-svc.yaml $SRC_DIR/kube-ui-svc.yaml RUN tar xzvf kubernetes-client-linux-amd64.tar.gz \ diff --git a/conf/cluster/07_kube-system.json b/conf/cluster/07_kube-system.json new file mode 100644 index 0000000..03de387 --- /dev/null +++ b/conf/cluster/07_kube-system.json @@ -0,0 +1,7 @@ +{ + "kind": "Namespace", + "apiVersion": "v1", + "metadata": { + "name": "kube-system" + } +} From 24baa5bdc86640013b8ff08200dd27913235bc2a Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Mon, 16 May 2016 04:18:30 +0900 Subject: [PATCH 09/10] Update kubernetes v1.2+ --- conf/cluster/04_kube-ui-rc.yaml | 36 ----- conf/cluster/05_kube-ui-svc.yaml | 15 -- conf/cluster/07_kube-system.json | 7 - conf/yaml/dashboard.yaml | 60 +++++++ .../06_nginx.yaml => yaml/nginx.yaml} | 17 +- conf/yaml/skydns.yaml | 153 ++++++++++++++++++ 6 files changed, 228 insertions(+), 60 deletions(-) delete mode 100644 conf/cluster/04_kube-ui-rc.yaml delete mode 100644 conf/cluster/05_kube-ui-svc.yaml delete mode 100644 conf/cluster/07_kube-system.json create mode 100644 conf/yaml/dashboard.yaml rename conf/{cluster/06_nginx.yaml => yaml/nginx.yaml} (53%) create mode 100644 conf/yaml/skydns.yaml diff --git a/conf/cluster/04_kube-ui-rc.yaml b/conf/cluster/04_kube-ui-rc.yaml deleted file mode 100644 index 4bfdf38..0000000 --- a/conf/cluster/04_kube-ui-rc.yaml +++ /dev/null @@ -1,36 +0,0 @@ -apiVersion: v1 -kind: ReplicationController -metadata: - name: kube-ui-v3 - namespace: kube-system - labels: - k8s-app: kube-ui - version: v3 - kubernetes.io/cluster-service: "true" -spec: - replicas: 1 - selector: - k8s-app: kube-ui - version: v3 - template: - metadata: - labels: - k8s-app: kube-ui - version: v3 - kubernetes.io/cluster-service: "true" - spec: - containers: - - name: kube-ui - image: gcr.io/google_containers/kube-ui:v3 - resources: - limits: - cpu: 100m - memory: 50Mi - ports: - - containerPort: 8080 - livenessProbe: - httpGet: - path: / - port: 8080 - initialDelaySeconds: 30 - timeoutSeconds: 5 diff --git a/conf/cluster/05_kube-ui-svc.yaml b/conf/cluster/05_kube-ui-svc.yaml deleted file mode 100644 index f7c5bf2..0000000 --- a/conf/cluster/05_kube-ui-svc.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: kube-ui - namespace: kube-system - labels: - k8s-app: kube-ui - kubernetes.io/cluster-service: "true" - kubernetes.io/name: "KubeUI" -spec: - selector: - k8s-app: kube-ui - ports: - - port: 80 - targetPort: 8080 \ No newline at end of file diff --git a/conf/cluster/07_kube-system.json b/conf/cluster/07_kube-system.json deleted file mode 100644 index 03de387..0000000 --- a/conf/cluster/07_kube-system.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "kind": "Namespace", - "apiVersion": "v1", - "metadata": { - "name": "kube-system" - } -} diff --git a/conf/yaml/dashboard.yaml b/conf/yaml/dashboard.yaml new file mode 100644 index 0000000..528cbbe --- /dev/null +++ b/conf/yaml/dashboard.yaml @@ -0,0 +1,60 @@ +# Service +apiVersion: v1 +kind: Service +metadata: + name: kubernetes-dashboard + namespace: kube-system + labels: + k8s-app: kubernetes-dashboard + kubernetes.io/cluster-service: "true" +spec: + selector: + k8s-app: kubernetes-dashboard + ports: + - port: 80 + targetPort: 9090 +--- +# Replication Controller +apiVersion: v1 +kind: ReplicationController +metadata: + # Keep the name in sync with image version and + # gce/coreos/kube-manifests/addons/dashboard counterparts + name: kubernetes-dashboard-v1.0.1 + namespace: kube-system + labels: + k8s-app: kubernetes-dashboard + version: v1.0.1 + kubernetes.io/cluster-service: "true" +spec: + replicas: 1 + selector: + k8s-app: kubernetes-dashboard + template: + metadata: + labels: + k8s-app: kubernetes-dashboard + version: v1.0.1 + kubernetes.io/cluster-service: "true" + spec: + containers: + - name: kubernetes-dashboard + image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.0.1 + resources: + # keep request = limit to keep this container in guaranteed class + limits: + cpu: 100m + memory: 50Mi + requests: + cpu: 100m + memory: 50Mi + ports: + - containerPort: 9090 + args: + - --apiserver-host=http://172.17.1.4:8080 + livenessProbe: + httpGet: + path: / + port: 9090 + initialDelaySeconds: 30 + timeoutSeconds: 30 diff --git a/conf/cluster/06_nginx.yaml b/conf/yaml/nginx.yaml similarity index 53% rename from conf/cluster/06_nginx.yaml rename to conf/yaml/nginx.yaml index 8eb798d..96748f0 100644 --- a/conf/cluster/06_nginx.yaml +++ b/conf/yaml/nginx.yaml @@ -1,16 +1,29 @@ apiVersion: v1 +kind: Service +metadata: + name: nginx-svc + labels: + app: nginx +spec: + type: NodePort + ports: + - port: 80 + protocol: TCP + name: http +--- +apiVersion: v1 kind: ReplicationController metadata: name: nginxs spec: - replicas: 10 + replicas: 20 template: metadata: labels: app: nginx spec: containers: - - name: nginx-single + - name: nginx-multi image: ruo91/nginx:latest ports: - containerPort: 80 diff --git a/conf/yaml/skydns.yaml b/conf/yaml/skydns.yaml new file mode 100644 index 0000000..8c0c1bb --- /dev/null +++ b/conf/yaml/skydns.yaml @@ -0,0 +1,153 @@ +# Service +apiVersion: v1 +kind: Service +metadata: + name: kube-dns + namespace: kube-system + labels: + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: "KubeDNS" +spec: + selector: + k8s-app: kube-dns + clusterIP: 10.250.250.250 + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP +--- +# Replication Controller +apiVersion: v1 +kind: ReplicationController +metadata: + name: kube-dns + namespace: kube-system + labels: + k8s-app: kube-dns + version: v11 + kubernetes.io/cluster-service: "true" +spec: + replicas: 1 + selector: + k8s-app: kube-dns + version: v11 + template: + metadata: + labels: + k8s-app: kube-dns + version: v11 + kubernetes.io/cluster-service: "true" + spec: + containers: + - name: etcd + image: gcr.io/google_containers/etcd-amd64:2.2.1 + resources: + # TODO: Set memory limits when we've profiled the container for large + # clusters, then set request = limit to keep this container in + # guaranteed class. Currently, this container falls into the + # "burstable" category so the kubelet doesn't backoff from restarting it. + limits: + cpu: 100m + memory: 500Mi + requests: + cpu: 100m + memory: 50Mi + command: + - /usr/local/bin/etcd + - -data-dir + - /var/etcd/data + - -listen-client-urls + - http://127.0.0.1:2379,http://127.0.0.1:4001 + - -advertise-client-urls + - http://127.0.0.1:2379,http://127.0.0.1:4001 + - -initial-cluster-token + - skydns-etcd + volumeMounts: + - name: etcd-storage + mountPath: /var/etcd/data + - name: kube2sky + image: gcr.io/google_containers/kube2sky-amd64:1.15 + resources: + # TODO: Set memory limits when we've profiled the container for large + # clusters, then set request = limit to keep this container in + # guaranteed class. Currently, this container falls into the + # "burstable" category so the kubelet doesn't backoff from restarting it. + limits: + cpu: 100m + # Kube2sky watches all pods. + memory: 200Mi + requests: + cpu: 100m + memory: 50Mi + livenessProbe: + httpGet: + path: /healthz + port: 8080 + scheme: HTTP + initialDelaySeconds: 60 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 5 + readinessProbe: + httpGet: + path: /readiness + port: 8081 + scheme: HTTP + # we poll on pod startup for the Kubernetes master service and + # only setup the /readiness HTTP server once that's available. + initialDelaySeconds: 30 + timeoutSeconds: 5 + args: + # command = "/kube2sky" + - --domain=kube-dns.local + - -kube_master_url=http://172.17.1.4:8080 + - name: skydns + image: gcr.io/google_containers/skydns:2015-10-13-8c72f8c + resources: + # TODO: Set memory limits when we've profiled the container for large + # clusters, then set request = limit to keep this container in + # guaranteed class. Currently, this container falls into the + # "burstable" category so the kubelet doesn't backoff from restarting it. + limits: + cpu: 100m + memory: 200Mi + requests: + cpu: 100m + memory: 50Mi + args: + # command = "/skydns" + - -machines=http://127.0.0.1:4001 + - -addr=0.0.0.0:53 + - -ns-rotate=false + - -domain=kube-dns.local + ports: + - containerPort: 53 + name: dns + protocol: UDP + - containerPort: 53 + name: dns-tcp + protocol: TCP + - name: healthz + image: gcr.io/google_containers/exechealthz:1.0 + resources: + # keep request = limit to keep this container in guaranteed class + limits: + cpu: 10m + memory: 20Mi + requests: + cpu: 10m + memory: 20Mi + args: + - -cmd=nslookup kubernetes.default.svc.kube-dns.local 127.0.0.1 >/dev/null + - -port=8080 + ports: + - containerPort: 8080 + protocol: TCP + volumes: + - name: etcd-storage + emptyDir: {} + dnsPolicy: Default # Don't use cluster DNS. \ No newline at end of file From 5427c4afb339f3bce4c1875da24e7e7779634614 Mon Sep 17 00:00:00 2001 From: Yongbok Kim Date: Mon, 16 May 2016 04:18:34 +0900 Subject: [PATCH 10/10] Update kubernetes v1.2+ --- Dockerfile | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index a99c3fe..63f018e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,29 +11,27 @@ # ssh `docker inspect -f '{{ .NetworkSettings.IPAddress }}' kubernetes-client` # Use the base images -FROM ubuntu:15.04 +FROM ubuntu:16.04 MAINTAINER Yongbok Kim # Change the repository -#RUN sed -i 's/archive.ubuntu.com/kr.archive.ubuntu.com/g' /etc/apt/sources.list +RUN sed -i 's/archive.ubuntu.com/ftp.daumkakao.com/g' /etc/apt/sources.list # The last update and install package for docker RUN apt-get update && apt-get install -y supervisor openssh-server nano net-tools iputils-ping # Variable ENV SRC_DIR /opt -#WORKDIR $SRC_DIR +WORKDIR $SRC_DIR # Google - Kubernetes ENV KUBERNETES_HOME $SRC_DIR/kubernetes ENV PATH $PATH:$KUBERNETES_HOME/client/bin -ADD https://media.githubusercontent.com/media/ruo91/docker-kubernetes/release-tar/1.1/kubernetes-client-linux-amd64.tar.gz $SRC_DIR -ADD conf/cluster/06_nginx.yaml /opt/nginx.yaml -ADD conf/cluster/07_kube-system.json /opt/kube-system.json -ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-rc.yaml $SRC_DIR/kube-ui-rc.yaml -ADD https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/kube-ui/kube-ui-svc.yaml $SRC_DIR/kube-ui-svc.yaml -RUN tar xzvf kubernetes-client-linux-amd64.tar.gz \ - && echo '# Kubernetes' >> /etc/profile \ +ADD kubernetes-client-linux-amd64.tar.gz $SRC_DIR +ADD conf/yaml/nginx.yaml $SRC_DIR/nginx.yaml +ADD conf/yaml/skydns.yaml $SRC_DIR/skydns.yaml +ADD conf/yaml/dashboard.yaml $SRC_DIR/dashboard.yaml +RUN echo '# Kubernetes' >> /etc/profile \ && echo "export KUBERNETES_HOME=$KUBERNETES_HOME" >> /etc/profile \ && echo 'export PATH=$PATH:$KUBERNETES_HOME/client/bin' >> /etc/profile \ && echo '' >> /etc/profile @@ -44,9 +42,9 @@ ADD conf/supervisord/00_default.conf /etc/supervisor/conf.d/supervisord.conf # SSH RUN mkdir /var/run/sshd -RUN sed -i 's/without-password/yes/g' /etc/ssh/sshd_config -RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config +RUN sed -i '/^#UseLogin/ s:.*:UseLogin yes:' /etc/ssh/sshd_config RUN sed -i 's/\#AuthorizedKeysFile/AuthorizedKeysFile/g' /etc/ssh/sshd_config +RUN sed -i '/^PermitRootLogin/ s:.*:PermitRootLogin yes:' /etc/ssh/sshd_config # Set the root password for ssh RUN echo 'root:kubernetes' |chpasswd