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_node():
  if(not ctx.node.properties['install']):
    return

  if(ctx.node.properties['install_docker']):
    get_docker()
  
  master_ip=ctx.instance.runtime_properties['master_ip']
  master_port=ctx.instance.runtime_properties['master_port']

  res=sudo("set -m;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 2> /var/log/docker-bootstrap.log 1> /dev/null </dev/null &",shell=True)
  if(res.return_code):
    return(res.return_code)

  time.sleep(2)
  
  sudo("service docker stop",shell=True)
  
  #run flannel
  
  output=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.0 /opt/bin/flanneld --etcd-endpoints=http://{}:4001".format(master_ip),shell=True)

  # get container id
  cid=output.strip()
  
  # get flannel subnet settings
  flannel=sudo("docker -H unix:///var/run/docker-bootstrap.sock exec {} cat /run/flannel/subnet.env".format(cid),shell=True)
  flannel=";".join(flannel.split())

  # edit docker config
  script=os.path.abspath(edit_docker_config.__file__)
  put(script,"/tmp/edit_docker_config.py")
  sudo("python /tmp/edit_docker_config.py '{}'".format(flannel),shell=True)

  # remove existing docker bridge
  sudo("/sbin/ifconfig docker0 down",shell=True)
  sudo("apt-get install -y bridge-utils",shell=True)
  sudo("brctl delbr docker0",shell=True)

  # restart docker
  sudo("service docker start",shell=True)
  
  # run the kubelet
  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=$(hostname -i) --cluster-dns=10.0.0.10 --cluster-domain=cluster.local".format(master_ip,master_port),shell=True)
  
  # run the proxy
  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)
Example #3
0
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():
  ctx.logger.info("!!Node properties:{}".format(str(ctx.node.properties)))
  ctx.logger.info("!!env:{}".format(str(env)))

  if(not ctx.node.properties['install']):
    return

  if(ctx.node.properties['install_docker']):
    get_docker()
  
  master_ip=ctx.node.properties['ip']
  master_port=ctx.node.properties['master_port']

  res=sudo('set -m; 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 2> /var/log/docker-bootstrap.log 1> /dev/null </dev/null &',shell=True)
  if(res.return_code):
    return(res.return_code)

  time.sleep(2)
  
  # start etcd
  res=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",shell=True)
  
  if(res.return_code):
    return(res.return_code)
  
  time.sleep(2)

  # set cidr range for flannel
  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" }\'',shell=True)
  
  # stop docker
  
  sudo("service docker stop",shell=True)
  
  #run flannel
  
  output=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.0",shell=True)
  
  # get container id
  cid=output.strip()

  # get flannel subnet settings
  flannel=sudo("docker -H unix:///var/run/docker-bootstrap.sock exec {} cat /run/flannel/subnet.env".format(cid),shell=True)
  flannel=";".join(flannel.split())

  # edit docker config
  #script=os.path.abspath(edit_docker_config.__file__)
  script=os.path.abspath("kube_plugin/edit_docker_config")
  put(script,"/tmp/edit_docker_config.py")
  sudo("python /tmp/edit_docker_config.py '{}'".format(flannel),shell=True)
  
  # remove existing docker bridge
  sudo("/sbin/ifconfig docker0 down",shell=True)
  sudo("apt-get install -y bridge-utils",shell=True)
  sudo("brctl delbr docker0",shell=True)
  
  # restart docker
  sudo("service docker start",shell=True)
  
  # start the master
  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
  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
  run("wget http://storage.googleapis.com/kubernetes-release/release/v1.0.1/bin/linux/amd64/kubectl -O kubectl")
  run("chmod +x kubectl")
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_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)))
Example #7
0
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)))
Example #8
0
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)