def start_node(**kwargs): if(not ctx.node.properties['install']): return os.chdir(os.path.expanduser("~")) subprocess.call("sudo apt-get update",shell=True) if(ctx.node.properties['install_docker']): get_docker(ctx) master_ip=ctx.instance.runtime_properties['master_ip'] master_port=ctx.instance.runtime_properties['master_port'] ctx.logger.info("got inputs master_ip={} master_port={}".format(master_ip,master_port)) subprocess.Popen(['sudo','nohup','docker','-d','-H','unix:///var/run/docker-bootstrap.sock','-p','/var/run/docker-bootstrap.pid','--iptables=false','--ip-masq=false','--bridge=none','--graph=/var/lib/docker-bootstrap'],stdout=open('/dev/null'),stderr=open('/tmp/docker-bootstrap.log','w'),stdin=open('/dev/null')) time.sleep(2) os.system("sudo service docker stop") #run flannel pipe=subprocess.Popen(['sudo','docker','-H','unix:///var/run/docker-bootstrap.sock','run','-d','--net=host','--privileged','-v','/dev/net:/dev/net','quay.io/coreos/flannel:0.5.3','/opt/bin/flanneld','--etcd-endpoints=http://{}:4001'.format(master_ip)],stderr=open('/dev/null'),stdout=subprocess.PIPE) # get container id cid=pipe.stdout.read().strip() pipe.wait() # get flannel subnet settings output=os.popen("sudo docker -H unix:///var/run/docker-bootstrap.sock exec {} cat /run/flannel/subnet.env".format(cid)) flannel=";".join(output.read().split()) # edit docker config edit_docker_config(flannel) # remove existing docker bridge os.system("sudo /sbin/ifconfig docker0 down") os.system("sudo apt-get install -y bridge-utils") os.system("sudo brctl delbr docker0") # restart docker os.system("sudo service docker start") # run the kubelet subprocess.call("sudo docker run --net=host -d -v /var/run/docker.sock:/var/run/docker.sock gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube kubelet --api-servers=http://{}:{} --v=2 --address=0.0.0.0 --enable-server --hostname-override={} --cluster-dns=10.0.0.10 --cluster-domain=cluster.local".format(master_ip,master_port,get_ip_address('eth0')),shell=True) # run the proxy subprocess.call("sudo docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://{}:{} --v=2".format(master_ip,master_port),shell=True)
def start_master(**kwargs): os.chdir(os.path.expanduser("~")) # Install Docker subprocess.call("sudo apt-get install apt-transport-https ca-certificates",shell=True) subprocess.call("sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D",shell=True) subprocess.call("sudo apt-get install apparmor",shell=True) subprocess.call("sudo touch /etc/apt/sources.list.d/docker.list",shell=True) subprocess.call("sudo bash -c 'echo \"deb https://apt.dockerproject.org/repo ubuntu-trusty main\" > /etc/apt/sources.list.d/docker.list'",shell=True) subprocess.call("sudo apt-get update",shell=True) subprocess.call("sudo apt-get --assume-yes install linux-image-extra-$(uname -r)",shell=True) subprocess.call("sudo apt-get --assume-yes install docker-engine",shell=True) subprocess.call("service docker start",shell=True) ctx.logger.info("in start_master") subprocess.Popen(['sudo','nohup','docker','daemon','-H','unix:///var/run/docker-bootstrap.sock','-p','/var/run/docker-bootstrap.pid','--iptables=false','--ip-masq=false','--bridge=none','--graph=/var/lib/docker-bootstrap'],stdout=open('/dev/null'),stderr=open('/tmp/docker-bootstrap.log','w'),stdin=open('/dev/null')) time.sleep(2) # start etcd res=os.system("sudo docker -H unix:///var/run/docker-bootstrap.sock run -d --net=host gcr.io/google_containers/etcd-amd64:2.2.1 /usr/local/bin/etcd --listen-client-urls=http://127.0.0.1:4001 -advertise-client-urls=http://127.0.0.1:4001 --data-dir=/var/etcd/data") ctx.logger.info("start etcd:"+str(res)) time.sleep(2) # set cidr range for flannel ctx.logger.info("set flannel cidr") os.system("sudo docker -H unix:///var/run/docker-bootstrap.sock run --net=host gcr.io/google_containers/etcd-amd64:2.2.1 etcdctl set /coreos.com/network/config '{ \"Network\": \"10.1.0.0/16\"}'") # stop docker os.system("sudo service docker stop") #run flannel pipe=subprocess.Popen(['sudo','docker','-H','unix:///var/run/docker-bootstrap.sock','run','-d','--net=host','--privileged','-v','/dev/net:/dev/net','quay.io/coreos/flannel:0.5.5'],stderr=open('/dev/null'),stdout=subprocess.PIPE) # get container id cid=pipe.stdout.read().strip() pipe.wait() # get flannel subnet settings pipe = subprocess.Popen(['sudo','docker','-H','unix:///var/run/docker-bootstrap.sock','exec',format(cid),'cat','/run/flannel/subnet.env'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = pipe.communicate() result = out.decode() try: out except NameError: ctx.logger.error("Error getting and setting flannel subnet settings: " + str(err)) else: ctx.logger.info("Got flannel subnet successfully: " + str(result)) flannel=";".join(result.split()) # edit docker config edit_docker_config(flannel) # remove existing docker bridge os.system("sudo /sbin/ifconfig docker0 down") os.system("sudo apt-get install -y bridge-utils") os.system("sudo brctl delbr docker0") # restart docker os.system("sudo service docker start") # start the master master_port=ctx.node.properties['master_port'] subprocess.call("sudo docker run \ --volume=/:/rootfs:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:rw \ --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ --volume=/var/run:/var/run:rw \ --net=host \ --privileged=true \ --pid=host \ -d \ gcr.io/google_containers/hyperkube-amd64:v1.2.3 \ /hyperkube kubelet \ --allow-privileged=true \ --api-servers=http://localhost:{} \ --v=2 \ --address=0.0.0.0 \ --enable-server \ --hostname-override=127.0.0.1 \ --config=/etc/kubernetes/manifests-multi \ --containerized \ --cluster-dns=10.0.0.10 \ --cluster-domain=cluster.local".format(master_port), shell=True) # get kubectl subprocess.call("wget http://storage.googleapis.com/kubernetes-release/release/v1.2.3/bin/linux/amd64/kubectl", shell=True) subprocess.call("chmod 755 kubectl", shell=True)
def start_master(**kwargs): if(not ctx.node.properties['install']): return os.chdir(os.path.expanduser("~")) subprocess.call("sudo apt-get update",shell=True) if(ctx.node.properties['install_docker']): ctx.logger.info("getting docker") get_docker(ctx) master_port=ctx.node.properties['master_port'] ctx.logger.info("in start_master") subprocess.Popen(['sudo','nohup','docker','-d','-H','unix:///var/run/docker-bootstrap.sock','-p','/var/run/docker-bootstrap.pid','--iptables=false','--ip-masq=false','--bridge=none','--graph=/var/lib/docker-bootstrap'],stdout=open('/dev/null'),stderr=open('/tmp/docker-bootstrap.log','w'),stdin=open('/dev/null')) time.sleep(2) # start etcd res=os.system("sudo docker -H unix:///var/run/docker-bootstrap.sock run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data") ctx.logger.info("start etcd:"+str(res)) if(res): return(res) time.sleep(2) # set cidr range for flannel os.system('sudo docker -H unix:///var/run/docker-bootstrap.sock run --net=host gcr.io/google_containers/etcd:2.0.12 etcdctl set /coreos.com/network/config \'{ "Network": "10.1.0.0/16" }\'') ctx.logger.info("set flannel cidr") # stop docker os.system("sudo service docker stop") #run flannel pipe=subprocess.Popen(['sudo','docker','-H','unix:///var/run/docker-bootstrap.sock','run','-d','--net=host','--privileged','-v','/dev/net:/dev/net','quay.io/coreos/flannel:0.5.3'],stderr=open('/dev/null'),stdout=subprocess.PIPE) # get container id cid=pipe.stdout.read().strip() pipe.wait() # get flannel subnet settings output=os.popen("sudo docker -H unix:///var/run/docker-bootstrap.sock exec {} cat /run/flannel/subnet.env".format(cid)) flannel=";".join(output.read().split()) # edit docker config edit_docker_config(flannel) # remove existing docker bridge os.system("sudo /sbin/ifconfig docker0 down") os.system("sudo apt-get install -y bridge-utils") os.system("sudo brctl delbr docker0") # restart docker os.system("sudo service docker start") # start the master subprocess.call("sudo docker run --net=host -d -v /var/run/docker.sock:/var/run/docker.sock gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube kubelet --api-servers=http://localhost:{} --v=2 --address=0.0.0.0 --enable-server --hostname-override=127.0.0.1 --config=/etc/kubernetes/manifests-multi --cluster-dns=10.0.0.10 --cluster-domain=cluster.local".format(master_port),shell=True) # run the proxy subprocess.call("sudo docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://127.0.0.1:{} --v=2".format(master_port),shell=True) # get kubectl subprocess.call("wget http://storage.googleapis.com/kubernetes-release/release/v1.0.1/bin/linux/amd64/kubectl -O kubectl",shell=True) subprocess.call("chmod +x kubectl",shell=True)
def start_master(**kwargs): if(not ctx.node.properties['install']): return os.chdir(os.path.expanduser("~")) K8S_VERSION="v1.2.4" ETCD_VERSION="v2.3.3" FLANNEL_VERSION="0.5.5" subprocess.call("sudo apt-get update",shell=True) if(ctx.node.properties['install_docker']): ctx.logger.info("getting docker") get_docker(ctx) master_port=ctx.node.properties['master_port'] ip=ctx.instance.runtime_properties['ip'] ctx.logger.info("in start_master") # START DOCKER pipe=subprocess.Popen(['sudo','nohup','docker','daemon','-H','unix:///var/run/docker-bootstrap.sock','-p','/var/run/docker-bootstrap.pid','--iptables=false','--ip-masq=false','--bridge=none','--graph=/var/lib/docker-bootstrap'],stdout=open('/dev/null'),stderr=open('/tmp/docker-bootstrap.log','w'),stdin=open('/dev/null')) time.sleep(2) if(pipe.returncode!=None): #failed raise(NonRecoverableError('docker start failed')) print "starting etcd" # START ETCD res=subprocess.Popen(["sudo","docker","-H","unix:///var/run/docker-bootstrap.sock","run","-d","--net=host","quay.io/coreos/etcd:"+ETCD_VERSION,"--listen-client-urls=http://127.0.0.1:4001,http://"+ip+":4001","--advertise-client-urls=http://"+ip+":4001","--data-dir=/var/etcd/data"],stdout=subprocess.PIPE,stderr=open("/dev/null")) res.wait() ctx.logger.info("start etcd:"+str(res.returncode)) # ctx.logger.info(" stderr:"+res.stdout.read()) if(res.returncode): raise(NonRecoverableError('etcd start failed, ret={}'.format(res.returncode))) cid=res.stdout.read().strip() time.sleep(2) # SET CIDR RANGE FOR FLANNEL res=os.system("sudo docker -H unix:///var/run/docker-bootstrap.sock exec "+cid+" /etcdctl set /coreos.com/network/config '{ \"Network\": \"10.1.0.0/16\" }'") ctx.logger.info("set flannel cidr:"+str(res)) if(res): raise(NonRecoverableError('set flannel cidr failed, ret={}'.format(res))) # stop docker os.system("sudo service docker stop") #run flannel pipe=subprocess.Popen(['sudo','docker','-H','unix:///var/run/docker-bootstrap.sock','run','-d','--net=host','--privileged','-v','/dev/net:/dev/net','quay.io/coreos/flannel:'+FLANNEL_VERSION],stderr=open('/dev/null'),stdout=subprocess.PIPE) # get container id cid=pipe.stdout.read().strip() pipe.wait() if(pipe.returncode): raise(NonRecoverableError('run flannel failed: ret={}'.format(pipe.returncode))) # get flannel subnet settings output=os.popen("sudo docker -H unix:///var/run/docker-bootstrap.sock exec {} cat /run/flannel/subnet.env".format(cid)) flannel=";".join(output.read().split()) print "flannel config:"+flannel if(not output or not flannel): raise(NonRecoverableError('get flannel config failed: ret={}'.format(output.returncode))) # edit docker config edit_docker_config(flannel) # remove existing docker bridge ret=os.system("sudo /sbin/ifconfig docker0 down") if(ret): raise(NonRecoverableError('docker0 down failed: ret={}'.format(ret))) os.system("sudo apt-get install -y bridge-utils") ret=os.system("sudo brctl delbr docker0") if(ret): raise(NonRecoverableError('brctl docker0 delete failed: ret={}'.format(ret))) # restart docker os.system("sudo service docker start") # start the master ret=subprocess.call("sudo docker run \ --volume=/:/rootfs:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:rw \ --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ --volume=/var/run:/var/run:rw \ --net=host \ --privileged=true \ --pid=host \ -d \ gcr.io/google_containers/hyperkube-amd64:{} \ /hyperkube kubelet \ --allow-privileged=true \ --api-servers=http://localhost:{} \ --v=2 \ --address=0.0.0.0 \ --enable-server \ --hostname-override=127.0.0.1 \ --config=/etc/kubernetes/manifests-multi \ --containerized".format(K8S_VERSION,master_port),shell=True) ctx.logger.info("start master:"+str(ret)) if(ret): raise(NonRecoverableError('master start failed, ret={}'.format(ret))) # get kubectl ret=subprocess.call("wget http://storage.googleapis.com/kubernetes-release/release/{}/bin/linux/amd64/kubectl -O kubectl".format(K8S_VERSION),shell=True) if(ret): raise(NonRecoverableError('kubectl wget failed, ret={}'.format(ret))) subprocess.call("chmod +x kubectl",shell=True)
def start_master(**kwargs): os.chdir(os.path.expanduser("~")) # Install Docker subprocess.call("sudo apt-get install apt-transport-https ca-certificates",shell=True) subprocess.call("sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D",shell=True) subprocess.call("sudo apt-get install apparmor",shell=True) subprocess.call("sudo touch /etc/apt/sources.list.d/docker.list",shell=True) subprocess.call("sudo bash -c 'echo \"deb https://apt.dockerproject.org/repo ubuntu-trusty main\" > /etc/apt/sources.list.d/docker.list'",shell=True) subprocess.call("sudo apt-get update",shell=True) subprocess.call("sudo apt-get purge lxc-docker",shell=True) subprocess.call("sudo apt-cache policy docker-engine",shell=True) subprocess.call("sudo apt-get --assume-yes install linux-image-extra-$(uname -r)",shell=True) subprocess.call("sudo apt-get --assume-yes install docker-engine",shell=True) subprocess.call("service docker start",shell=True) master_port=ctx.node.properties['master_port'] ctx.logger.info("in start_master") subprocess.Popen(['sudo','nohup','docker','daemon','-H','unix:///var/run/docker-bootstrap.sock','-p','/var/run/docker-bootstrap.pid','--iptables=false','--ip-masq=false','--bridge=none','--graph=/var/lib/docker-bootstrap'],stdout=open('/dev/null'),stderr=open('/tmp/docker-bootstrap.log','w'),stdin=open('/dev/null')) time.sleep(2) # start etcd res=os.system("sudo docker -H unix:///var/run/docker-bootstrap.sock run -d --net=host gcr.io/google_containers/etcd-amd64:2.2.1 /usr/local/bin/etcd --listen-client-urls=http://127.0.0.1:4001 -advertise-client-urls=http://127.0.0.1:4001 --data-dir=/var/etcd/data") ctx.logger.info("start etcd:"+str(res)) time.sleep(2) # set cidr range for flannel os.system("sudo docker -H unix:///var/run/docker-bootstrap.sock run --net=host gcr.io/google_containers/etcd-amd64:2.2.1 etcdctl set /coreos.com/network/config '{ \"Network\": \"10.1.0.0/16\"}'") ctx.logger.info("set flannel cidr") # stop docker os.system("sudo service docker stop") #run flannel pipe=subprocess.Popen(['sudo','docker','-H','unix:///var/run/docker-bootstrap.sock','run','-d','--net=host','--privileged','-v','/dev/net:/dev/net','quay.io/coreos/flannel:0.5.5'],stderr=open('/dev/null'),stdout=subprocess.PIPE) # get container id cid=pipe.stdout.read().strip() pipe.wait() # get flannel subnet settings pipe = subprocess.Popen(['sudo','docker','-H','unix:///var/run/docker-bootstrap.sock','exec',format(cid),'cat','/run/flannel/subnet.env'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = pipe.communicate() result = out.decode() try: out except NameError: ctx.logger.error("Error getting and setting flannel subnet settings: " + str(err)) else: ctx.logger.info("Got flannel subnet successfully: " + str(result)) flannel=";".join(result.split()) # edit docker config edit_docker_config(flannel) # remove existing docker bridge os.system("sudo /sbin/ifconfig docker0 down") os.system("sudo apt-get install -y bridge-utils") os.system("sudo brctl delbr docker0") # restart docker os.system("sudo service docker start") # start the master subprocess.call("sudo docker run \ --volume=/:/rootfs:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:rw \ --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ --volume=/var/run:/var/run:rw \ --net=host \ --privileged=true \ --pid=host \ -d \ gcr.io/google_containers/hyperkube-amd64:v1.2.3 \ /hyperkube kubelet \ --allow-privileged=true \ --api-servers=http://localhost:{} \ --v=2 \ --address=0.0.0.0 \ --enable-server \ --hostname-override=127.0.0.1 \ --config=/etc/kubernetes/manifests-multi \ --containerized \ --cluster-dns=10.0.0.10 \ --cluster-domain=cluster.local".format(master_port), shell=True) # run the proxy # subprocess.call("sudo docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://127.0.0.1:{} --v=2".format(master_port),shell=True) # get kubectl subprocess.call("wget http://storage.googleapis.com/kubernetes-release/release/v1.2.3/bin/linux/amd64/kubectl", shell=True) subprocess.call("chmod 755 kubectl", shell=True)
def start_node(**kwargs): if(not ctx.node.properties['install']): return os.chdir(os.path.expanduser("~")) K8S_VERSION="v1.2.4" ETCD_VERSION="v2.3.3" FLANNEL_VERSION="0.5.5" subprocess.call("sudo apt-get update",shell=True) if(ctx.node.properties['install_docker']): get_docker(ctx) master_ip=ctx.instance.runtime_properties['master_ip'] master_port=ctx.instance.runtime_properties['master_port'] # UPDATE HOSTS res=subprocess.Popen(["hostname"],stdout=subprocess.PIPE,stderr=open("/dev/null")) res.wait() hn=res.stdout.read().strip() os.system("sudo sh -c 'echo {} {} >> /etc/hosts'".format(ctx.instance.host_ip,hn)) ctx.logger.info("updated hosts file: {} {}".format(ctx.instance.host_ip,hn)) ctx.logger.info("got inputs master_ip={} master_port={}".format(master_ip,master_port)) # START DOCKER pipe=subprocess.Popen(['sudo','nohup','docker','daemon','-H','unix:///var/run/docker-bootstrap.sock','-p','/var/run/docker-bootstrap.pid','--iptables=false','--ip-masq=false','--bridge=none','--graph=/var/lib/docker-bootstrap'],stdout=open('/dev/null'),stderr=open('/tmp/docker-bootstrap.log','w'),stdin=open('/dev/null')) time.sleep(2) if(pipe.returncode!=None): #failed raise(NonRecoverableError('docker start failed')) time.sleep(2) os.system("sudo service docker stop") # RUN FLANNEL pipe=subprocess.Popen(['sudo','docker','-H','unix:///var/run/docker-bootstrap.sock','run','-d','--net=host','--privileged','-v','/dev/net:/dev/net','quay.io/coreos/flannel:'+FLANNEL_VERSION,"/opt/bin/flanneld", "--etcd-endpoints=http://{}:4001".format(master_ip)],stderr=open('/dev/null'),stdout=subprocess.PIPE) # GET CONTAINER ID cid=pipe.stdout.read().strip() print cid pipe.wait() if(pipe.returncode): raise(NonRecoverableError('run flannel failed: ret={}'.format(pipe.returncode))) # GET FLANNEL SUBNET SETTINGS output=os.popen("sudo docker -H unix:///var/run/docker-bootstrap.sock exec {} cat /run/flannel/subnet.env".format(cid)) flannel=";".join(output.read().split()) print "flannel config:"+flannel if(not output or not flannel): raise(NonRecoverableError('get flannel config failed: ret={}'.format(output.returncode))) # EDIT DOCKER CONFIG edit_docker_config(flannel) # remove existing docker bridge ret=os.system("sudo /sbin/ifconfig docker0 down") if(ret): raise(NonRecoverableError('docker0 down failed: ret={}'.format(ret))) os.system("sudo apt-get install -y bridge-utils") ret=os.system("sudo brctl delbr docker0") if(ret): raise(NonRecoverableError('brctl docker0 delete failed: ret={}'.format(ret))) # RESTART DOCKER os.system("sudo service docker start") # START THE KUBE ret=subprocess.call("sudo docker run \ --volume=/:/rootfs:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:rw \ --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ --volume=/var/run:/var/run:rw \ --net=host \ --privileged=true \ --pid=host \ -d \ gcr.io/google_containers/hyperkube-amd64:{} \ /hyperkube kubelet \ --allow-privileged=true \ --api-servers=http://{}:{} \ --v=2 \ --address=0.0.0.0 \ --enable-server \ --config=/etc/kubernetes/manifests-multi \ --containerized".format(K8S_VERSION,master_ip,master_port),shell=True) ctx.logger.info("start master:"+str(ret)) if(ret): raise(NonRecoverableError('master start failed, ret={}'.format(ret)))
def start_node(**kwargs): if (not ctx.node.properties['install']): return os.chdir(os.path.expanduser("~")) K8S_VERSION = "v1.2.4" ETCD_VERSION = "v2.3.3" FLANNEL_VERSION = "0.5.5" subprocess.call("sudo apt-get update", shell=True) if (ctx.node.properties['install_docker']): get_docker(ctx) master_ip = ctx.instance.runtime_properties['master_ip'] master_port = ctx.instance.runtime_properties['master_port'] # UPDATE HOSTS res = subprocess.Popen(["hostname"], stdout=subprocess.PIPE, stderr=open("/dev/null")) res.wait() hn = res.stdout.read().strip() os.system("sudo sh -c 'echo {} {} >> /etc/hosts'".format( ctx.instance.host_ip, hn)) ctx.logger.info("updated hosts file: {} {}".format(ctx.instance.host_ip, hn)) ctx.logger.info("got inputs master_ip={} master_port={}".format( master_ip, master_port)) # START DOCKER pipe = subprocess.Popen([ 'sudo', 'nohup', 'docker', 'daemon', '-H', 'unix:///var/run/docker-bootstrap.sock', '-p', '/var/run/docker-bootstrap.pid', '--iptables=false', '--ip-masq=false', '--bridge=none', '--graph=/var/lib/docker-bootstrap' ], stdout=open('/dev/null'), stderr=open('/tmp/docker-bootstrap.log', 'w'), stdin=open('/dev/null')) time.sleep(2) if (pipe.returncode != None): #failed raise (NonRecoverableError('docker start failed')) time.sleep(2) os.system("sudo service docker stop") # RUN FLANNEL pipe = subprocess.Popen([ 'sudo', 'docker', '-H', 'unix:///var/run/docker-bootstrap.sock', 'run', '-d', '--net=host', '--privileged', '-v', '/dev/net:/dev/net', 'quay.io/coreos/flannel:' + FLANNEL_VERSION, "/opt/bin/flanneld", "--etcd-endpoints=http://{}:4001".format(master_ip) ], stderr=open('/dev/null'), stdout=subprocess.PIPE) # GET CONTAINER ID cid = pipe.stdout.read().strip() print cid pipe.wait() if (pipe.returncode): raise (NonRecoverableError('run flannel failed: ret={}'.format( pipe.returncode))) # GET FLANNEL SUBNET SETTINGS output = os.popen( "sudo docker -H unix:///var/run/docker-bootstrap.sock exec {} cat /run/flannel/subnet.env" .format(cid)) flannel = ";".join(output.read().split()) print "flannel config:" + flannel if (not output or not flannel): raise (NonRecoverableError('get flannel config failed: ret={}'.format( output.returncode))) # EDIT DOCKER CONFIG edit_docker_config(flannel) # remove existing docker bridge ret = os.system("sudo /sbin/ifconfig docker0 down") if (ret): raise (NonRecoverableError('docker0 down failed: ret={}'.format(ret))) os.system("sudo apt-get install -y bridge-utils") ret = os.system("sudo brctl delbr docker0") if (ret): raise (NonRecoverableError( 'brctl docker0 delete failed: ret={}'.format(ret))) # RESTART DOCKER os.system("sudo service docker start") # START THE KUBE ret = subprocess.call("sudo docker run \ --volume=/:/rootfs:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:rw \ --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ --volume=/var/run:/var/run:rw \ --net=host \ --privileged=true \ --pid=host \ -d \ gcr.io/google_containers/hyperkube-amd64:{} \ /hyperkube kubelet \ --allow-privileged=true \ --api-servers=http://{}:{} \ --v=2 \ --address=0.0.0.0 \ --enable-server \ --config=/etc/kubernetes/manifests-multi \ --containerized".format(K8S_VERSION, master_ip, master_port), shell=True) ctx.logger.info("start master:" + str(ret)) if (ret): raise (NonRecoverableError('master start failed, ret={}'.format(ret)))
def start_master(**kwargs): if (not ctx.node.properties['install']): return os.chdir(os.path.expanduser("~")) subprocess.call("sudo apt-get update", shell=True) if (ctx.node.properties['install_docker']): ctx.logger.info("getting docker") get_docker(ctx) master_port = ctx.node.properties['master_port'] ctx.logger.info("in start_master") subprocess.Popen([ 'sudo', 'nohup', 'docker', 'daemon', '-H', 'unix:///var/run/docker-bootstrap.sock', '-p', '/var/run/docker-bootstrap.pid', '--iptables=false', '--ip-masq=false', '--bridge=none', '--graph=/var/lib/docker-bootstrap' ], stdout=open('/dev/null'), stderr=open('/tmp/docker-bootstrap.log', 'w'), stdin=open('/dev/null')) time.sleep(2) # start etcd res = os.system( "sudo docker -H unix:///var/run/docker-bootstrap.sock run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data" ) ctx.logger.info("start etcd:" + str(res)) if (res): return (res) time.sleep(2) # set cidr range for flannel os.system( 'sudo docker -H unix:///var/run/docker-bootstrap.sock run --net=host gcr.io/google_containers/etcd:2.0.12 etcdctl set /coreos.com/network/config \'{ "Network": "10.1.0.0/16" }\'' ) ctx.logger.info("set flannel cidr") # stop docker os.system("sudo service docker stop") #run flannel pipe = subprocess.Popen([ 'sudo', 'docker', '-H', 'unix:///var/run/docker-bootstrap.sock', 'run', '-d', '--net=host', '--privileged', '-v', '/dev/net:/dev/net', 'quay.io/coreos/flannel:0.5.3' ], stderr=open('/dev/null'), stdout=subprocess.PIPE) # get container id cid = pipe.stdout.read().strip() pipe.wait() # get flannel subnet settings output = os.popen( "sudo docker -H unix:///var/run/docker-bootstrap.sock exec {} cat /run/flannel/subnet.env" .format(cid)) flannel = ";".join(output.read().split()) # edit docker config edit_docker_config(flannel) # remove existing docker bridge os.system("sudo /sbin/ifconfig docker0 down") os.system("sudo apt-get install -y bridge-utils") os.system("sudo brctl delbr docker0") # restart docker os.system("sudo service docker start") # start the master subprocess.call( "sudo docker run --net=host -d -v /var/run/docker.sock:/var/run/docker.sock gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube kubelet --api-servers=http://localhost:{} --v=2 --address=0.0.0.0 --enable-server --hostname-override=127.0.0.1 --config=/etc/kubernetes/manifests-multi --cluster-dns=10.0.0.10 --cluster-domain=cluster.local" .format(master_port), shell=True) # run the proxy subprocess.call( "sudo docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://127.0.0.1:{} --v=2" .format(master_port), shell=True) # get kubectl subprocess.call( "wget http://storage.googleapis.com/kubernetes-release/release/v1.0.1/bin/linux/amd64/kubectl -O kubectl", shell=True) subprocess.call("chmod +x kubectl", shell=True)
def start_master(**kwargs): if (not ctx.node.properties['install']): return os.chdir(os.path.expanduser("~")) K8S_VERSION = "v1.2.4" ETCD_VERSION = "v2.3.3" FLANNEL_VERSION = "0.5.5" subprocess.call("sudo apt-get update", shell=True) if (ctx.node.properties['install_docker']): ctx.logger.info("getting docker") get_docker(ctx) master_port = ctx.node.properties['master_port'] ip = ctx.instance.runtime_properties['ip'] ctx.logger.info("in start_master") # START DOCKER pipe = subprocess.Popen([ 'sudo', 'nohup', 'docker', 'daemon', '-H', 'unix:///var/run/docker-bootstrap.sock', '-p', '/var/run/docker-bootstrap.pid', '--iptables=false', '--ip-masq=false', '--bridge=none', '--graph=/var/lib/docker-bootstrap' ], stdout=open('/dev/null'), stderr=open('/tmp/docker-bootstrap.log', 'w'), stdin=open('/dev/null')) time.sleep(2) if (pipe.returncode != None): #failed raise (NonRecoverableError('docker start failed')) print "starting etcd" # START ETCD res = subprocess.Popen([ "sudo", "docker", "-H", "unix:///var/run/docker-bootstrap.sock", "run", "-d", "--net=host", "quay.io/coreos/etcd:" + ETCD_VERSION, "--listen-client-urls=http://127.0.0.1:4001,http://" + ip + ":4001", "--advertise-client-urls=http://" + ip + ":4001", "--data-dir=/var/etcd/data" ], stdout=subprocess.PIPE, stderr=open("/dev/null")) res.wait() ctx.logger.info("start etcd:" + str(res.returncode)) # ctx.logger.info(" stderr:"+res.stdout.read()) if (res.returncode): raise (NonRecoverableError('etcd start failed, ret={}'.format( res.returncode))) cid = res.stdout.read().strip() time.sleep(2) # SET CIDR RANGE FOR FLANNEL res = os.system( "sudo docker -H unix:///var/run/docker-bootstrap.sock exec " + cid + " /etcdctl set /coreos.com/network/config '{ \"Network\": \"10.1.0.0/16\" }'" ) ctx.logger.info("set flannel cidr:" + str(res)) if (res): raise (NonRecoverableError( 'set flannel cidr failed, ret={}'.format(res))) # stop docker os.system("sudo service docker stop") #run flannel pipe = subprocess.Popen([ 'sudo', 'docker', '-H', 'unix:///var/run/docker-bootstrap.sock', 'run', '-d', '--net=host', '--privileged', '-v', '/dev/net:/dev/net', 'quay.io/coreos/flannel:' + FLANNEL_VERSION ], stderr=open('/dev/null'), stdout=subprocess.PIPE) # get container id cid = pipe.stdout.read().strip() pipe.wait() if (pipe.returncode): raise (NonRecoverableError('run flannel failed: ret={}'.format( pipe.returncode))) # get flannel subnet settings output = os.popen( "sudo docker -H unix:///var/run/docker-bootstrap.sock exec {} cat /run/flannel/subnet.env" .format(cid)) flannel = ";".join(output.read().split()) print "flannel config:" + flannel if (not output or not flannel): raise (NonRecoverableError('get flannel config failed: ret={}'.format( output.returncode))) # edit docker config edit_docker_config(flannel) # remove existing docker bridge ret = os.system("sudo /sbin/ifconfig docker0 down") if (ret): raise (NonRecoverableError('docker0 down failed: ret={}'.format(ret))) os.system("sudo apt-get install -y bridge-utils") ret = os.system("sudo brctl delbr docker0") if (ret): raise (NonRecoverableError( 'brctl docker0 delete failed: ret={}'.format(ret))) # restart docker os.system("sudo service docker start") # start the master ret = subprocess.call("sudo docker run \ --volume=/:/rootfs:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:rw \ --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ --volume=/var/run:/var/run:rw \ --net=host \ --privileged=true \ --pid=host \ -d \ gcr.io/google_containers/hyperkube-amd64:{} \ /hyperkube kubelet \ --allow-privileged=true \ --api-servers=http://localhost:{} \ --v=2 \ --address=0.0.0.0 \ --enable-server \ --hostname-override=127.0.0.1 \ --config=/etc/kubernetes/manifests-multi \ --containerized".format(K8S_VERSION, master_port), shell=True) ctx.logger.info("start master:" + str(ret)) if (ret): raise (NonRecoverableError('master start failed, ret={}'.format(ret))) # get kubectl ret = subprocess.call( "wget http://storage.googleapis.com/kubernetes-release/release/{}/bin/linux/amd64/kubectl -O kubectl" .format(K8S_VERSION), shell=True) if (ret): raise (NonRecoverableError('kubectl wget failed, ret={}'.format(ret))) subprocess.call("chmod +x kubectl", shell=True)