diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md new file mode 100644 index 00000000000..2e9752a4fbe --- /dev/null +++ b/docs/getting-started-guides/aws.md @@ -0,0 +1,203 @@ +# Getting started on Amazon EC2 + +The example below creates an elastic Kubernetes cluster with 3 worker nodes and a master. + +## Highlights + +* Cluster bootstrapping using [cloud-config](https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config) +* Cross container networking with [flannel](https://github.com/coreos/flannel#flannel) +* Auto worker registration with [kube-register](https://github.com/kelseyhightower/kube-register#kube-register) +* Kubernetes v0.4.2 [official binaries](https://github.com/GoogleCloudPlatform/kubernetes/releases/tag/v0.4.2) + +## Prerequisites + +* [kubecfg CLI](aws/kubecfg.md) +* [aws CLI](http://aws.amazon.com/cli) +* CoreOS 490.0.0+ + +## Starting a Cluster + +### Cloud Formation + +The [cloudformation-template.json](aws/cloudformation-template.json) can be used to bootstrap a Kubernetes cluster with a single command. + +``` +aws cloudformation create-stack --stack-name kubernetes --region us-west-2 \ +--template-body file://aws/cloudformation-template.json \ +--parameters ParameterKey=KeyPair,ParameterValue= +``` + +It will take a few minutes for the entire stack to come up. You can monitor the stack progress with the following command: + +``` +aws cloudformation describe-stack-events --stack-name kubernetes +``` + +> Record the Kubernetes Master IP address + +``` +aws cloudformation describe-stacks --stack-name kubernetes +``` + +[Skip to kubecfg client configuration](#configure-the-kubecfg-ssh-tunnel) + +### Manually + +The following commands use the CoreOS 490.0.0 alpha AMI `ami-e18dc5d1` from the `us-west-2` region. For a list of different regions and corresponding AMI IDs see the [CoreOS EC2 cloud provider documentation](https://coreos.com/docs/running-coreos/cloud-providers/ec2/#choosing-a-channel). + +#### Create the Kubernetes Security Group + +``` +aws ec2 create-security-group --group-name kubernetes --description "Kubernetes Security Group" +aws ec2 authorize-security-group-ingress --group-name kubernetes --protocol tcp --port 22 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-name kubernetes --protocol tcp --port 80 --cidr 0.0.0.0/0 +aws ec2 authorize-security-group-ingress --group-name kubernetes --source-security-group-name kubernetes +``` + +#### Save the master and node cloud-configs + +* [master.yaml](aws/cloud-configs/master.yaml) +* [node.yaml](aws/cloud-configs/node.yaml) + +#### Launch the master + +``` +aws ec2 run-instances --image-id ami-e18dc5d1 --key-name \ +--region us-west-2 --security-groups kubernetes --instance-type m3.medium \ +--user-data file://master.yaml +``` + +> Record the `InstanceId` for the master. + +Gather the public and private IPs for the master node: + +``` +aws ec2 describe-instances --instance-id +``` + +``` +{ + "Reservations": [ + { + "Instances": [ + { + "PublicDnsName": "ec2-54-68-97-117.us-west-2.compute.amazonaws.com", + "RootDeviceType": "ebs", + "State": { + "Code": 16, + "Name": "running" + }, + "PublicIpAddress": "54.68.97.117", + "PrivateIpAddress": "172.31.9.9", +... +``` + +#### Update the node.yaml cloud-config + +Edit `node.yaml` and replace all instances of `` with the **private** IP address of the master node. + +### Launch 3 worker nodes + +``` +aws ec2 run-instances --count 3 --image-id ami-e18dc5d1 --key-name \ +--region us-west-2 --security-groups kubernetes --instance-type m3.medium \ +--user-data file://node.yaml +``` + +### Add additional worker nodes + +``` +aws ec2 run-instances --count 1 --image-id ami-e18dc5d1 --key-name \ +--region us-west-2 --security-groups kubernetes --instance-type m3.medium \ +--user-data file://node.yaml +``` + +### Configure the kubecfg SSH tunnel + +This command enables secure communication between the kubecfg client and the Kubernetes API. + +``` +ssh -f -nNT -L 8080:127.0.0.1:8080 core@ +``` + +### Listing worker nodes + +Once the worker instances have fully booted, they will be automatically registered with the Kubernetes API server by the kube-register service running on the master node. It may take a few mins. + +``` +kubecfg list minions +``` + +## Starting a simple pod + +Create a pod manifest: `pod.json` + +``` +{ + "id": "hello", + "kind": "Pod", + "apiVersion": "v1beta1", + "desiredState": { + "manifest": { + "version": "v1beta1", + "id": "hello", + "containers": [{ + "name": "hello", + "image": "quay.io/kelseyhightower/hello", + "ports": [{ + "containerPort": 80, + "hostPort": 80 + }] + }] + } + }, + "labels": { + "name": "hello", + "environment": "testing" + } +} +``` + +### Create the pod using the kubecfg command line tool + +``` +kubecfg -c pod.json create pods +``` + +### Testing + +``` +kubecfg list pods +``` + +> Record the **Host** of the pod, which should be the private IP address. + +Gather the public IP address for the worker node. + +``` +aws ec2 describe-instances --filters 'Name=private-ip-address,Values=' +``` + +``` +{ + "Reservations": [ + { + "Instances": [ + { + "PublicDnsName": "ec2-54-68-97-117.us-west-2.compute.amazonaws.com", + "RootDeviceType": "ebs", + "State": { + "Code": 16, + "Name": "running" + }, + "PublicIpAddress": "54.68.97.117", +... +``` + +Visit the public IP address in your browser to view the running pod. + +### Delete the pod + +``` +kubecfg delete pods/hello +``` diff --git a/docs/getting-started-guides/aws/cloud-configs/master.yaml b/docs/getting-started-guides/aws/cloud-configs/master.yaml new file mode 100644 index 00000000000..63ea8657274 --- /dev/null +++ b/docs/getting-started-guides/aws/cloud-configs/master.yaml @@ -0,0 +1,108 @@ +#cloud-config + +coreos: + fleet: + etcd_servers: http://127.0.0.1:4001 + metadata: role=master + etcd: + name: etcd + addr: $private_ipv4:4001 + bind-addr: 0.0.0.0 + peer-addr: $private_ipv4:7001 + cluster-active-size: 1 + etcd-http-read-timeout: 86400 + snapshot: true + units: + - name: etcd.service + command: start + - name: fleet.service + command: start + - name: flannel.service + command: start + content: | + [Unit] + Requires=etcd.service + After=etcd.service + After=network-online.target + Wants=network-online.target + Description=flannel is an etcd backed overlay network for containers + + [Service] + Type=notify + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/flanneld + ExecStartPre=/usr/bin/chmod +x /opt/bin/flanneld + ExecStartPre=-/usr/bin/etcdctl mk /coreos.com/network/config '{"Network":"10.0.0.0/16"}' + ExecStart=/opt/bin/flanneld + - name: kube-apiserver.service + command: start + content: | + [Unit] + Description=Kubernetes API Server + Documentation=https://github.com/GoogleCloudPlatform/kubernetes + Requires=etcd.service + After=etcd.service + + [Service] + ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/apiserver + ExecStartPre=/usr/bin/chmod +x /opt/bin/apiserver + ExecStart=/opt/bin/apiserver \ + --address=0.0.0.0 \ + --port=8080 \ + --etcd_servers=http://127.0.0.1:4001 \ + --logtostderr=true + Restart=always + RestartSec=10 + - name: kube-controller-manager.service + command: start + content: | + [Unit] + Description=Kubernetes Controller Manager + Documentation=https://github.com/GoogleCloudPlatform/kubernetes + Requires=kube-apiserver.service + After=kube-apiserver.service + + [Service] + ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/controller-manager + ExecStartPre=/usr/bin/chmod +x /opt/bin/controller-manager + ExecStart=/opt/bin/controller-manager \ + --master=127.0.0.1:8080 \ + --logtostderr=true + Restart=always + RestartSec=10 + - name: kube-scheduler.service + command: start + content: | + [Unit] + Description=Kubernetes Scheduler + Documentation=https://github.com/GoogleCloudPlatform/kubernetes + Requires=kube-apiserver.service + After=kube-apiserver.service + + [Service] + ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/scheduler + ExecStartPre=/usr/bin/chmod +x /opt/bin/scheduler + ExecStart=/opt/bin/scheduler --master=127.0.0.1:8080 + Restart=always + RestartSec=10 + - name: kube-register.service + command: start + content: | + [Unit] + Description=Kubernetes Registration Service + Documentation=https://github.com/kelseyhightower/kube-register + Requires=kube-apiserver.service + After=kube-apiserver.service + + [Service] + ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/kube-register + ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-register + ExecStart=/opt/bin/kube-register \ + --metadata=role=knode \ + --fleet-endpoint=unix:///var/run/fleet.sock \ + --api-endpoint=http://127.0.0.1:8080 + Restart=always + RestartSec=10 + update: + group: alpha + reboot-strategy: off diff --git a/docs/getting-started-guides/aws/cloud-configs/node.yaml b/docs/getting-started-guides/aws/cloud-configs/node.yaml new file mode 100644 index 00000000000..a2b1e64b524 --- /dev/null +++ b/docs/getting-started-guides/aws/cloud-configs/node.yaml @@ -0,0 +1,81 @@ +#cloud-config + +coreos: + fleet: + etcd_servers: http://:4001 + metadata: role=knode + units: + - name: etcd.service + mask: true + - name: fleet.service + command: start + - name: flannel.service + command: start + content: | + [Unit] + After=network-online.target + Wants=network-online.target + Description=flannel is an etcd backed overlay network for containers + + [Service] + Type=notify + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/flanneld + ExecStartPre=/usr/bin/chmod +x /opt/bin/flanneld + ExecStart=/opt/bin/flanneld -etcd-endpoints http://:4001 + - name: docker.service + command: start + content: | + [Unit] + After=flannel.service + Wants=flannel.service + Description=Docker Application Container Engine + Documentation=http://docs.docker.io + + [Service] + EnvironmentFile=/run/flannel/subnet.env + ExecStartPre=/bin/mount --make-rprivate / + ExecStart=/usr/bin/docker -d --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} -s=btrfs -H fd:// + + [Install] + WantedBy=multi-user.target + - name: setup-network-environment.service + command: start + content: | + [Unit] + Description=Setup Network Environment + Documentation=https://github.com/kelseyhightower/setup-network-environment + Requires=network-online.target + After=network-online.target + + [Service] + ExecStartPre=-/usr/bin/mkdir -p /opt/bin + ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/setup-network-environment + ExecStartPre=/usr/bin/chmod +x /opt/bin/setup-network-environment + ExecStart=/opt/bin/setup-network-environment + RemainAfterExit=yes + Type=oneshot + - name: kube-kubelet.service + command: start + content: | + [Unit] + Description=Kubernetes Kubelet + Documentation=https://github.com/GoogleCloudPlatform/kubernetes + Requires=setup-network-environment.service + After=setup-network-environment.service + + [Service] + EnvironmentFile=/etc/network-environment + ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/kubelet + ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet + ExecStart=/opt/bin/kubelet \ + --address=0.0.0.0 \ + --port=10250 \ + --hostname_override=${DEFAULT_IPV4} \ + --etcd_servers=http://:4001 \ + --logtostderr=true + Restart=always + RestartSec=10 + update: + group: alpha + reboot-strategy: off diff --git a/docs/getting-started-guides/aws/cloudformation-template.json b/docs/getting-started-guides/aws/cloudformation-template.json new file mode 100644 index 00000000000..5041054107f --- /dev/null +++ b/docs/getting-started-guides/aws/cloudformation-template.json @@ -0,0 +1,313 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Kubernetes on EC2", + "Mappings": { + "RegionMap": { + "eu-central-1": {"AMI": "ami-54ccfa49"}, + "ap-northeast-1": {"AMI": "ami-f7b08ff6"}, + "sa-east-1": {"AMI": "ami-1304b30e"}, + "ap-southeast-2": {"AMI": "ami-0f117e35"}, + "ap-southeast-1": {"AMI": "ami-c04f6c92"}, + "us-east-1": {"AMI": "ami-7ae66812"}, + "us-west-2": {"AMI": "ami-e18dc5d1"}, + "us-west-1": {"AMI": "ami-45fbec00"}, + "eu-west-1": {"AMI": "ami-a27fd5d5"} + } + }, + "Parameters": { + "InstanceType": { + "Description": "EC2 HVM instance type (m3.medium, etc).", + "Type": "String", + "Default": "m3.medium", + "AllowedValues": [ + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "cc2.8xlarge", + "cr1.8xlarge", + "hi1.4xlarge", + "hs1.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "t2.micro", + "t2.small", + "t2.medium" + ], + "ConstraintDescription": "Must be a valid EC2 HVM instance type." + }, + "ClusterSize": { + "Description": "Number of nodes in cluster (3-12).", + "Default": "3", + "MinValue": "3", + "MaxValue": "12", + "Type": "Number" + }, + "AllowSSHFrom": { + "Description": "The net block (CIDR) that SSH is available to.", + "Default": "0.0.0.0/0", + "Type": "String" + }, + "KeyPair" : { + "Description": "The name of an EC2 Key Pair to allow SSH access to the instance.", + "Type": "String" + } + }, + "Resources": { + "KubernetesSecurityGroup": { + "Type": "AWS::EC2::SecurityGroup", + "Properties": { + "GroupDescription": "Kubernetes SecurityGroup", + "SecurityGroupIngress": [ + { + "IpProtocol": "tcp", + "FromPort": "22", + "ToPort": "22", + "CidrIp": {"Ref": "AllowSSHFrom"} + } + ] + } + }, + "KubernetesIngress": { + "Type": "AWS::EC2::SecurityGroupIngress", + "Properties": { + "GroupName": {"Ref": "KubernetesSecurityGroup"}, + "IpProtocol": "tcp", + "FromPort": "1", + "ToPort": "65535", + "SourceSecurityGroupId": { + "Fn::GetAtt" : [ "KubernetesSecurityGroup", "GroupId" ] + } + } + }, + "KubernetesMasterInstance": { + "Type": "AWS::EC2::Instance", + "Properties": { + "ImageId": {"Fn::FindInMap" : ["RegionMap", {"Ref": "AWS::Region" }, "AMI"]}, + "InstanceType": {"Ref": "InstanceType"}, + "KeyName": {"Ref": "KeyPair"}, + "SecurityGroups": [{"Ref": "KubernetesSecurityGroup"}], + "UserData": { "Fn::Base64": {"Fn::Join" : ["", [ + "#cloud-config\n\n", + "coreos:\n", + " fleet:\n", + " etcd_servers: http://127.0.0.1:4001\n", + " metadata: role=master\n", + " etcd:\n", + " name: etcd\n", + " addr: $private_ipv4:4001\n", + " bind-addr: 0.0.0.0\n", + " peer-addr: $private_ipv4:7001\n", + " cluster-active-size: 1\n", + " etcd-http-read-timeout: 86400\n", + " snapshot: true\n", + " units:\n", + " - name: etcd.service\n", + " command: start\n", + " - name: fleet.service\n", + " command: start\n", + " - name: flannel.service\n", + " command: start\n", + " content: |\n", + " [Unit]\n", + " Requires=etcd.service\n", + " After=etcd.service\n", + " After=network-online.target\n", + " Wants=network-online.target\n", + " Description=flannel is an etcd backed overlay network for containers\n\n", + " [Service]\n", + " Type=notify\n", + " ExecStartPre=-/usr/bin/mkdir -p /opt/bin\n", + " ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/flanneld\n", + " ExecStartPre=/usr/bin/chmod +x /opt/bin/flanneld\n", + " ExecStartPre=-/usr/bin/etcdctl mk /coreos.com/network/config '{\"Network\":\"10.0.0.0/16\"}'\n", + " ExecStart=/opt/bin/flanneld\n", + " - name: kube-apiserver.service\n", + " command: start\n", + " content: |\n", + " [Unit]\n", + " Description=Kubernetes API Server\n", + " Documentation=https://github.com/GoogleCloudPlatform/kubernetes\n", + " Requires=etcd.service\n", + " After=etcd.service\n\n", + " [Service]\n", + " ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/apiserver\n", + " ExecStartPre=/usr/bin/chmod +x /opt/bin/apiserver\n", + " ExecStart=/opt/bin/apiserver \\\n", + " --address=0.0.0.0 \\\n", + " --port=8080 \\\n", + " --etcd_servers=http://127.0.0.1:4001 \\\n", + " --logtostderr=true\n", + " Restart=always\n", + " RestartSec=10\n", + " - name: kube-controller-manager.service\n", + " command: start\n", + " content: |\n", + " [Unit]\n", + " Description=Kubernetes Controller Manager\n", + " Documentation=https://github.com/GoogleCloudPlatform/kubernetes\n", + " Requires=kube-apiserver.service\n", + " After=kube-apiserver.service\n\n", + " [Service]\n", + " ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/controller-manager\n", + " ExecStartPre=/usr/bin/chmod +x /opt/bin/controller-manager\n", + " ExecStart=/opt/bin/controller-manager \\\n", + " --master=127.0.0.1:8080 \\\n", + " --logtostderr=true\n", + " Restart=always\n", + " RestartSec=10\n", + " - name: kube-scheduler.service\n", + " command: start\n", + " content: |\n", + " [Unit]\n", + " Description=Kubernetes Scheduler\n", + " Documentation=https://github.com/GoogleCloudPlatform/kubernetes\n", + " Requires=kube-apiserver.service\n", + " After=kube-apiserver.service\n\n", + " [Service]\n", + " ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/scheduler\n", + " ExecStartPre=/usr/bin/chmod +x /opt/bin/scheduler\n", + " ExecStart=/opt/bin/scheduler --master=127.0.0.1:8080\n", + " Restart=always\n", + " RestartSec=10\n", + " - name: kube-register.service\n", + " command: start\n", + " content: |\n", + " [Unit]\n", + " Description=Kubernetes Registration Service\n", + " Documentation=https://github.com/kelseyhightower/kube-register\n", + " Requires=kube-apiserver.service\n", + " After=kube-apiserver.service\n\n", + " [Service]\n", + " ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/kube-register\n", + " ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-register\n", + " ExecStart=/opt/bin/kube-register \\\n", + " --metadata=role=knode \\\n", + " --fleet-endpoint=unix:///var/run/fleet.sock \\\n", + " --api-endpoint=http://127.0.0.1:8080\n", + " Restart=always\n", + " RestartSec=10\n", + " update:\n", + " group: alpha\n", + " reboot-strategy: off\n" + ]]} + } + } + }, + "KubernetesNodeLaunchConfig": { + "Type": "AWS::AutoScaling::LaunchConfiguration", + "Properties": { + "ImageId": {"Fn::FindInMap" : ["RegionMap", {"Ref": "AWS::Region" }, "AMI" ]}, + "InstanceType": {"Ref": "InstanceType"}, + "KeyName": {"Ref": "KeyPair"}, + "SecurityGroups": [{"Ref": "KubernetesSecurityGroup"}], + "UserData": { "Fn::Base64": {"Fn::Join" : ["", [ + "#cloud-config\n\n", + "coreos:\n", + " fleet:\n", + " etcd_servers: http://", {"Fn::GetAtt":["KubernetesMasterInstance" , "PrivateIp"]}, ":4001\n", + " metadata: role=knode\n", + " units:\n", + " - name: etcd.service\n", + " mask: true\n", + " - name: fleet.service\n", + " command: start\n", + " - name: flannel.service\n", + " command: start\n", + " content: |\n", + " [Unit]\n", + " After=network-online.target\n", + " Wants=network-online.target\n", + " Description=flannel is an etcd backed overlay network for containers\n\n", + " [Service]\n", + " Type=notify\n", + " ExecStartPre=-/usr/bin/mkdir -p /opt/bin\n", + " ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/flanneld\n", + " ExecStartPre=/usr/bin/chmod +x /opt/bin/flanneld\n", + " ExecStart=/opt/bin/flanneld -etcd-endpoints http://", {"Fn::GetAtt" :["KubernetesMasterInstance" , "PrivateIp"]}, ":4001\n", + " - name: docker.service\n", + " command: start\n", + " content: |\n", + " [Unit]\n", + " After=flannel.service\n", + " Wants=flannel.service\n", + " Description=Docker Application Container Engine\n", + " Documentation=http://docs.docker.io\n\n", + " [Service]\n", + " EnvironmentFile=/run/flannel/subnet.env\n", + " ExecStartPre=/bin/mount --make-rprivate /\n", + " ExecStart=/usr/bin/docker -d --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} -s=btrfs -H fd://\n\n", + " [Install]\n", + " WantedBy=multi-user.target\n", + " - name: setup-network-environment.service\n", + " command: start\n", + " content: |\n", + " [Unit]\n", + " Description=Setup Network Environment\n", + " Documentation=https://github.com/kelseyhightower/setup-network-environment\n", + " Requires=network-online.target\n", + " After=network-online.target\n\n", + " [Service]\n", + " ExecStartPre=-/usr/bin/mkdir -p /opt/bin\n", + " ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/setup-network-environment\n", + " ExecStartPre=/usr/bin/chmod +x /opt/bin/setup-network-environment\n", + " ExecStart=/opt/bin/setup-network-environment\n", + " RemainAfterExit=yes\n", + " Type=oneshot\n", + " - name: kube-kubelet.service\n", + " command: start\n", + " content: |\n", + " [Unit]\n", + " Description=Kubernetes Kubelet\n", + " Documentation=https://github.com/GoogleCloudPlatform/kubernetes\n", + " Requires=setup-network-environment.service\n", + " After=setup-network-environment.service\n\n", + " [Service]\n", + " EnvironmentFile=/etc/network-environment\n", + " ExecStartPre=/usr/bin/wget -N -P /opt/bin http://storage.googleapis.com/k8s/kubelet\n", + " ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet\n", + " ExecStart=/opt/bin/kubelet \\\n", + " --address=0.0.0.0 \\\n", + " --port=10250 \\\n", + " --hostname_override=${DEFAULT_IPV4} \\\n", + " --etcd_servers=http://", {"Fn::GetAtt" :["KubernetesMasterInstance" , "PrivateIp"]}, ":4001\\\n", + " --logtostderr=true\n", + " Restart=always\n", + " RestartSec=10\n", + " update:\n", + " group: alpha\n", + " reboot-strategy: off\n" + ]]} + } + } + }, + "KubernetesAutoScalingGroup": { + "Type": "AWS::AutoScaling::AutoScalingGroup", + "Properties": { + "AvailabilityZones": {"Fn::GetAZs": ""}, + "LaunchConfigurationName": {"Ref": "KubernetesNodeLaunchConfig"}, + "MinSize": "3", + "MaxSize": "12", + "DesiredCapacity": {"Ref": "ClusterSize"} + } + } + }, + "Outputs": { + "KubernetesMasterPublicIp": { + "Description": "Public Ip of the newly created Kubernetes Master instance", + "Value": {"Fn::GetAtt": ["KubernetesMasterInstance" , "PublicIp"]} + } + } +} diff --git a/docs/getting-started-guides/aws/kubecfg.md b/docs/getting-started-guides/aws/kubecfg.md new file mode 100644 index 00000000000..f7e77176743 --- /dev/null +++ b/docs/getting-started-guides/aws/kubecfg.md @@ -0,0 +1,28 @@ +# Install and configure kubecfg + +## Downlaod the kubecfg cli tool + +### Darwin + +``` +wget http://storage.googleapis.com/k8s/darwin/kubecfg +``` + +### Linux + +``` +wget http://storage.googleapis.com/k8s/darwin/kubecfg +``` + +### Copy kubecfg to your path + +``` +chmod +x kubecfg +mv kubecfg /usr/local/bin/ +``` + +### Create a secure tunnel for API communication + +``` +ssh -f -nNT -L 8080:127.0.0.1:8080 core@ +```