这个方法大家应该会比较熟悉,使用Shell脚本依次启动Kubernetes的各个组件即可。以下为start-kubernetes.sh
!/bin/bashstart docker daemondocker daemon > /var/log/docker.log 2>&1 &
start etcdetcd --data-dir=/var/etcd/data > /var/log/etcd.log 2>&1 &
wait for ectd to setupsleep 5
start apiserverkube-apiserver --service-cluster-ip-range=10.0.0.1/24 --insecure-bind-address=0.0.0.0 --etcd_servers=
http://127.0.0.1:4001 > /var/log/kube-apiserver.log 2>&1 &
wait for apiserver to setupsleep 5
start controller manager, sheduler, kubelet and proxykube-controller-manager --master=
http://0.0.0.0:8080 > /var/log/kube-controller-manager.log 2>&1 &
kube-scheduler --master=
http://0.0.0.0:8080 > /var/log/kube-scheduler.log 2>&1 &
kubelet --api_servers=
http://0.0.0.0:8080 --address=0.0.0.0 --cluster_dns=10.0.0.10 --cluster_domain="kubernetes.local" --pod-infra-container-image="kiwenlau/pause:0.8.0" > /var/log/kubelet.log 2>&1 &
kube-proxy --master=
http://0.0.0.0:8080 > /var/log/kube-proxy.log 2>&1 &
just keep this script runningwhile [[ true ]]; do
sleep 1
done
然后在Dockerfile中,将start-kubernetes.sh指定为Docker容器默认执行的命令即可:
CMD ["start-kubernetes.sh"]
需要注意的一点在于,start-kubernetes.sh脚本将作为Docker容器的1号进程运行,必须始终保持运行。因为Docker容器仅在1号进程运行时保持运行,换言之,Docker容器将在1号进程退出后Exited。由于Kubernetes的各个组件都以后台进程方式执行,我在脚本末尾添加了死循环,以保持start-kubernetes.sh脚本始终处于运行状态。
just keep this script runningwhile [[ true ]]; do
sleep 1