{"action":"created","comment":{"url":"https://api.github.com/repos/Azure/acs-engine/pulls/comments/208737047","pull_request_review_id":144610351,"id":208737047,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwODczNzA0Nw==","diff_hunk":"@@ -1,446 +1,309 @@\n-# Microsoft Azure Container Service Engine - Kubernetes Windows Walkthrough\r\n+# Microsoft ACS-Engine - Kubernetes Windows Walkthrough\r\n \r\n-## Supported Windows versions\r\n-Prior to acs-engine v0.9.2, Kubernetes Windows cluster uses Windows Server 2016. There are a few restrictions in Windows Networking for Kubernetes as documented in https://blogs.technet.microsoft.com/networking/2017/04/04/windows-networking-for-kubernetes/. Besides, Windows POD deployment performanace is limited due to the bottleneck of container image size and configuration at container start time. \r\n+## Quick Start\r\n \r\n-With the release of new Windows Server version 1709, acs-engine v0.9.2 and beyond has leveraged the new Windows version to deploy Kubernetes Windows cluster with signifcant improvement in Windows container and networking performance, as well as new features in storage. Specifically,\r\n-1. Windows is now on par with Linux in terms of networking. New features including hostport have been implemented in kube-proxy and Windows platform and CNI to enhance networking performance. Please refer to http://blog.kubernetes.io/2017/09/windows-networking-at-parity-with-linux.html for details.\r\n-2. Azure Files and Disks are now supported to mount on Kubernetes Windows cluster with the new SMB feature in Windows.\r\n-3. Multiple containers in POD are now supported on Kubernetes Windows cluster.\r\n+This guide will step through everything needed to build your first Kubernetes cluster and deploy a Windows web server on it. The steps include:\r\n \r\n-Note, with the rollout of new Windows Server versions in acs-engine, the workload deployed on Windows cluster should match as documented here: https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility . Both the containers being deployed,\r\n-as well as the `kubletwin/pause` container must match the version of the Windows host. Otherwise, [pods may get stuck at ContainerCreating](https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/common-problems#my-kubernetes-pods-are-stuck-at-containercreating) state.\r\n+- Getting the right tools\r\n+- Completing an ACS-Engine apimodel which describes what you want to deploy\r\n+- Running ACS-Engine to generate Azure Resource Model templates\r\n+- Deploying your first Kubernetes cluster with Windows Server nodes\r\n+- Managing the cluster from your Windows machine\r\n+- Deploying your first app on the cluster\r\n \r\n-## Deployment\r\n+### Install Azure CLI and ACS-Engine\r\n \r\n-Here are the steps to deploy a simple Kubernetes cluster with Windows:\r\n+#### Azure CLI\r\n \r\n-1. [install acs-engine](../acsengine.md#downloading-and-building-acs-engine)\r\n-2. [generate your ssh key](../ssh.md#ssh-key-generation)\r\n-3. [generate your service principal](../serviceprincipal.md)\r\n-4. edit the [Kubernetes windows example](../../examples/windows/kubernetes.json) and fill in the blank strings\r\n-5. [generate the template](../acsengine.md#generating-a-template)\r\n-6. [deploy the output azuredeploy.json and azuredeploy.parameters.json](../acsengine.md#deployment-usage)\r\n+Click the [download](https://aka.ms/installazurecliwindows) link, and choose \"Run\". Click through the setup steps as needed.\r\n \r\n-### Common customizations\r\n+Once it's installed, make sure you can connect to Azure with it. Open a new PowerShell window, then run `az login`. It will have you log in to Azure in your web browser, then return back to the command line and show \"You have logged in. Now let us find all the subscriptions to which you have access...\" along with the list of subscriptions.\r\n \r\n-As part of step 4, edit the [Kubernetes windows example](../../examples/windows/kubernetes.json), you can also make some changes to how Windows is deployed.\r\n+> If you want other versions, check out the [official instructions](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest). For more help, check out the Azure CLI [getting started](https://docs.microsoft.com/en-us/cli/azure/get-started-with-azure-cli?view=azure-cli-latest) page.\r\n \r\n-#### Changing the OS disk size\r\n+#### ACS-Engine\r\n \r\n-The Windows Server deployments default to 30GB for the OS drive (C:), which may not be enough. You can change this size by adding `osDiskSizeGB` under the `agentPoolProfiles`, such as:\r\n+Windows support is evolving rapidly, so be sure to use the latest ACS-Engine  version (v0.20 or later).\r\n \r\n-```\r\n-\"agentPoolProfiles\": [\r\n-      {\r\n-        \"name\": \"windowspool2\",\r\n-        \"count\": 2,\r\n-        \"vmSize\": \"Standard_D2_v3\",\r\n-        \"availabilityProfile\": \"AvailabilitySet\",\r\n-        \"osType\": \"Windows\",\r\n-        \"osDiskSizeGB\": 127\r\n-     }\r\n+1. Browse to the ACS-Engine [releases page](https://github.com/Azure/acs-engine/releases) on GitHub.\r\n+\r\n+2. Find the latest version, and download the file ending in `-windows-amd64.zip`.\r\n+\r\n+3. Make a folder, and copy `acs-engine.exe` from the ZIP there\r\n+\r\n+4. Check that it runs with `.\\acs-engine.exe version`\r\n+\r\n+```none\r\n+PS C:\\Users\\patrick\\acs-engine> .\\acs-engine.exe version\r\n+Version: v0.20.6\r\n+GitCommit: 293adfda\r\n+GitTreeState: clean\r\n ```\r\n \r\n-#### Choosing the Windows Server version\r\n+### Generate SSH key\r\n \r\n-If you want to deploy a specific Windows Server version, you can find available versions with `az vm image list --publisher MicrosoftWindowsServer --all -o table`\r\n+First, check if you already have a SSH key generated at `~\\.ssh\\id_rsa.pub`\r\n \r\n+```powershell\r\n+dir ~/.ssh/id_rsa.pub\r\n+dir : Cannot find path 'C:\\Users\\patrick\\.ssh\\id_rsa.pub' because it does not exist.\r\n ```\r\n-$ az vm image list --publisher MicrosoftWindowsServer --all -o table                                                                                        \r\n \r\n-Offer                    Publisher                      Sku                                             Urn                                                                                                            Version\r\n------------------------  -----------------------------  ----------------------------------------------  -------------------------------------------------------------------------------------------------------------  -----------------\r\n+If it does not exist, then run `ssh-keygen.exe`. Use the default file, and enter a passphrase if you wish to protect it. Be sure not to use a SSH key with blank passphrase in production.\r\n+\r\n+```powershell\r\n+PS C:\\Users\\patrick\\acs-engine> ssh-keygen.exe\r\n+Generating public/private rsa key pair.\r\n+Enter file in which to save the key (C:\\Users\\patrick/.ssh/id_rsa):\r\n+Created directory 'C:\\Users\\patrick/.ssh'.\r\n+Enter passphrase (empty for no passphrase):\r\n+Enter same passphrase again:\r\n+Your identification has been saved in C:\\Users\\patrick/.ssh/id_rsa.\r\n+Your public key has been saved in C:\\Users\\patrick/.ssh/id_rsa.pub.\r\n+The key fingerprint is:\r\n+SHA256:... patrick@plang-g1\r\n+The key's randomart image is:\r\n++---[RSA 2048]----+\r\n ...\r\n-WindowsServerSemiAnnual  MicrosoftWindowsServer         Datacenter-Core-1709-with-Containers-smalldisk  MicrosoftWindowsServer:WindowsServerSemiAnnual:Datacenter-Core-1709-with-Containers-smalldisk:1709.0.20180412  1709.0.20180412\r\n-WindowsServerSemiAnnual  MicrosoftWindowsServer         Datacenter-Core-1803-with-Containers-smalldisk  MicrosoftWindowsServer:WindowsServerSemiAnnual:Datacenter-Core-1803-with-Containers-smalldisk:1803.0.20180504  1803.0.20180504\r\n++----[SHA256]-----+\r\n ```\r\n \r\n-You can use the Offer, Publisher and Sku to pick a specific version by adding `windowsOffer`, `windowsPublisher`, `windowsSku` and (optionally) `widndowsVersion` to the `windowsProfile` section. In this example, the latest Windows Server version 1803 image would be deployed.\r\n+### Create a Resource Group and Service Principal\r\n \r\n-```\r\n-\"windowsProfile\": {\r\n-            \"adminUsername\": \"azureuser\",\r\n-            \"adminPassword\": \"...\",\r\n-            \"windowsPublisher\": \"MicrosoftWindowsServer\",\r\n-            \"windowsOffer\": \"WindowsServerSemiAnnual\",\r\n-            \"windowsSku\": \"Datacenter-Core-1803-with-Containers-smalldisk\"\r\n-     },\r\n+Now that we have the Azure CLI configured and a SSH key generated, it's time to create a resource group to hold the deployment.\r\n+\r\n+`az group create --location <location> --name <name>` will create a group for you. Be sure to use a unique name for each cluster. If you need a list of available locations, run `az account list-locations -o table`.\r\n+\r\n+```powershell\r\n+PS C:\\Users\\patrick\\acs-engine> az group create --location westus2 --name k8s-win1\r\n+{\r\n+  \"id\": \"/subscriptions/df392461-0000-1111-2222-cd3aa2d911a6/resourceGroups/k8s-win1\",\r\n+  \"location\": \"westus2\",\r\n+  \"managedBy\": null,\r\n+  \"name\": \"k8s-win1\",\r\n+  \"properties\": {\r\n+    \"provisioningState\": \"Succeeded\"\r\n+  },\r\n+  \"tags\": null\r\n+}\r\n ```\r\n \r\n-## Walkthrough\r\n+ACS-Engine and Kubernetes will need a service principal to create more resources such as Azure Load Balancers later once the cluster is running. It's safest to create one with access just to the resource group so that once your deployment is deleted, the service principal can't be used to make other changes in your subscription.\r\n \r\n-Once your Kubernetes cluster has been created you will have a resource group containing:\r\n+```powershell\r\n+# Get the group id\r\n+$groupId = (az group show --resource-group <group name> --query id).Replace(\"\"\"\",\"\")\r\n \r\n-1. 1 master accessible by SSH on port 22 or kubectl on port 443\r\n+# Create the service principal\r\n+$sp = az ad sp create-for-rbac --role=\"Contributor\" --scopes=$groupId | ConvertFrom-JSON\r\n+```\r\n \r\n-2. a set of windows and linux nodes.  The windows nodes can be accessed through an RDP SSH tunnel via the master node.  To do this, follow these [instructions](../ssh.md#ssh-to-the-machine), replacing port 80 with 3389.  Since your windows machine is already using port 3389, it is recommended to use 3390 to Windows Node 0, 10.240.0.4, 3391 to Windows Node 1, 10.240.0.5, and so on as shown in the following image:\r\n+### Get an acs-engine apimodel\r\n \r\n-![Image of Windows RDP tunnels](../images/rdptunnels.png)\r\n+Multiple samples are available at https://github.com/Azure/acs-engine/tree/master/examples/windows. This guide will use the simplest sample to deploy 1 Linux VM to run Kubernetes services, and 2 Windows nodes to run your Windows containers.\r\n \r\n-The following image shows the architecture of a container service cluster with 1 master, and 2 agents:\r\n+```powershell\r\n+Invoke-WebRequest -UseBasicParsing https://raw.githubusercontent.com/Azure/acs-engine/master/examples/windows/kubernetes.json -OutFile kubernetes-windows.json\r\n+```\r\n \r\n-![Image of Kubernetes cluster on azure with Windows](../images/kubernetes-windows.png)\r\n+After downloading that file, edit it to:\r\n \r\n-In the image above, you can see the following parts:\r\n+1. Set windowsProfile.adminUsername and adminPassword\r\n+2. Set a unique name for masterProfile.dnsPrefix. This will be the first part of the domain name you'll use to manage the Kubernetes cluster later\r\n \r\n-1. **Master Components** - The master runs the Kubernetes scheduler, api server, and controller manager.  Port 443 is exposed for remote management with the kubectl cli.\r\n-2. **Linux Nodes** - the Kubernetes nodes run in an availability set.  Azure load balancers are dynamically added to the cluster depending on exposed services.\r\n-3. **Windows Nodes** - the Kubernetes windows nodes run in an availability set.\r\n-3. **Common Components** - All VMs run a kubelet, Docker, and a Proxy.\r\n-4. **Networking** - All VMs are assigned an ip address in the 10.240.0.0/16 network.  Each VM is assigned a /24 subnet for their pod CIDR enabling IP per pod.  The proxy running on each VM implements the service network 10.0.0.0/16.\r\n-\r\n-All VMs are in the same private VNET and are fully accessible to each other.\r\n-\r\n-## Create your First Kubernetes Service\r\n-\r\n-After completing this walkthrough you will know how to:\r\n- * access Kubernetes cluster via SSH,\r\n- * deploy a simple Windows Docker application and expose to the world,\r\n- * and deploy a hybrid Windows / Linux Docker application.\r\n- \r\n-1. After successfully deploying the template write down the master FQDN (Fully Qualified Domain Name).\r\n-   1. If using Powershell or CLI, the output parameter is in the OutputsString section named 'masterFQDN'\r\n-   2. If using Portal, to get the output you need to:\r\n-     1. navigate to \"resource group\"\r\n-     2. click on the resource group you just created\r\n-     3. then click on \"Succeeded\" under *last deployment*\r\n-     4. then click on the \"Microsoft.Template\"\r\n-     5. now you can copy the output FQDNs and sample SSH commands\r\n-\r\n-   ![Image of docker scaling](../images/portal-kubernetes-outputs.png)\r\n-\r\n-2. SSH to the master FQDN obtained in step 1.\r\n-\r\n-3. Explore your nodes and running pods:\r\n-  1. to see a list of your nodes type `kubectl get nodes`.  If you want full detail of the nodes, add `-o yaml` to become `kubectl get nodes -o yaml`.\r\n-  2. to see a list of running pods type `kubectl get pods --all-namespaces`.  By default DNS, heapster, and the dashboard pods will be assigned to the Linux nodes.\r\n-\r\n-4. Start your first Docker image by editing a file named `simpleweb.yaml` filling in the contents below, and then apply by typing `kubectl apply -f simpleweb.yaml`.  This will start a windows simple web application and expose to the world.\r\n-\r\n-  ```yaml\r\n-  apiVersion: v1\r\n-  kind: Service\r\n-  metadata:\r\n-    name: win-webserver\r\n-    labels:\r\n-      app: win-webserver\r\n-  spec:\r\n-    ports:\r\n-      # the port that this service should serve on\r\n-    - port: 80\r\n-      targetPort: 80\r\n-    selector:\r\n-      app: win-webserver\r\n-    type: LoadBalancer\r\n-  ---\r\n-  apiVersion: extensions/v1beta1\r\n-  kind: Deployment\r\n-  metadata:\r\n-    labels:\r\n-      app: win-webserver\r\n-    name: win-webserver\r\n-  spec:\r\n-    replicas: 1\r\n-    template:\r\n-      metadata:\r\n-        labels:\r\n-          app: win-webserver\r\n-        name: win-webserver\r\n-      spec:\r\n-        containers:\r\n-        - name: windowswebserver\r\n-          image: microsoft/windowsservercore:1803\r\n-          command:\r\n-          - powershell.exe\r\n-          - -command\r\n-          - \"<#code used from https://gist.github.com/wagnerandrade/5424431#> ; $$listener = New-Object System.Net.HttpListener ; $$listener.Prefixes.Add('http://*:80/') ; $$listener.Start() ; $$callerCounts = @{} ; Write-Host('Listening at http://*:80/') ; while ($$listener.IsListening) { ;$$context = $$listener.GetContext() ;$$requestUrl = $$context.Request.Url ;$$clientIP = $$context.Request.RemoteEndPoint.Address ;$$response = $$context.Response ;Write-Host '' ;Write-Host('> {0}' -f $$requestUrl) ;  ;$$count = 1 ;$$k=$$callerCounts.Get_Item($$clientIP) ;if ($$k -ne $$null) { $$count += $$k } ;$$callerCounts.Set_Item($$clientIP, $$count) ;$$header='<html><body><H1>Windows Container Web Server</H1>' ;$$callerCountsString='' ;$$callerCounts.Keys | % { $$callerCountsString+='<p>IP {0} callerCount {1} ' -f $$_,$$callerCounts.Item($$_) } ;$$footer='</body></html>' ;$$content='{0}{1}{2}' -f $$header,$$callerCountsString,$$footer ;Write-Output $$content ;$$buffer = [System.Text.Encoding]::UTF8.GetBytes($$content) ;$$response.ContentLength64 = $$buffer.Length ;$$response.OutputStream.Write($$buffer, 0, $$buffer.Length) ;$$response.Close() ;$$responseStatus = $$response.StatusCode ;Write-Host('< {0}' -f $$responseStatus)  } ; \"\r\n-        nodeSelector:\r\n-          beta.kubernetes.io/os: windows\r\n-  ```\r\n-\r\n-5. Type `kubectl get pods -w` to watch the deployment of the service that takes about 30 seconds.  Once running, type `kubectl get svc` and curl the 10.x address to see the output, eg. `curl 10.244.1.4`\r\n-\r\n-6. Type `kubectl get svc -w` to watch the addition of the external IP address that will take about 2-5 minutes.  Once there, you can take the external IP and view in your web browser.\r\n-\r\n-## Example using Azure Files and Azure Disks\r\n-### Create Azure File workload\r\n-This example is modified after https://github.com/andyzhangx/Demo/tree/master/windows/azurefile/rs3\r\n-\r\n-#### 1. Create an azure file storage class\r\n-```kubectl apply -f https://raw.githubusercontent.com/JiangtianLi/Examples/master/windows/azurefile/storageclass-azurefile.yaml```\r\n-\r\n-#### make sure storageclass is created successfully\r\n-```\r\n-kubectl get storageclass/azurefile -o wide\r\n-```\r\n+Then save & close it.\r\n \r\n-#### 2. Create a pvc for azure file\r\n-```kubectl apply -f https://raw.githubusercontent.com/JiangtianLi/Examples/master/windows/azurefile/pvc-azurefile.yaml```\r\n+Use the same PowerShell window from earlier to run this bit of script. It will fill in the SSH public key and Azure service principal for you.\r\n \r\n-#### make sure pvc is created successfully\r\n-```\r\n-kubectl get pvc/pvc-azurefile -o wide\r\n-```\r\n+```powershell\r\n+$inJson = Get-Content .\\kubernetes-windows.json | ConvertFrom-Json\r\n \r\n-#### 3. Create a pod with azure file pvc\r\n-```kubectl apply -f https://raw.githubusercontent.com/JiangtianLi/Examples/master/windows/azurefile/iis-azurefile.yaml```\r\n+# Copy in your SSH public key from `~/.ssh/id_rsa.pub` to linuxProfile.ssh.publicKeys.keyData\r\n+$inJson.properties.linuxProfile.ssh.publicKeys[0].keyData = [string](Get-Content \"~/.ssh/id_rsa.pub\")\r\n \r\n-#### watch the status of pod until its `STATUS` is `Running`\r\n-```\r\n-watch kubectl get po/iis-azurefile -o wide\r\n-```\r\n+# Set servicePrincipalProfile\r\n+$inJson.properties.servicePrincipalProfile.clientId = $sp.appId\r\n+$inJson.properties.servicePrincipalProfile.secret = $sp.password\r\n \r\n-#### 4. Enter the pod container to validate\r\n-```\r\n-kubectl exec -it iis-azurefile -- cmd\r\n-```\r\n+# Save file\r\n+$inJson | ConvertTo-Json -Depth 5 | Out-File -Encoding ascii -FilePath \"kubernetes-windows-complete.json\"\r\n \r\n ```\r\n-C:\\>dir c:\\mnt\\azure\r\n- Volume in drive C has no label.\r\n- Volume Serial Number is F878-8D74\r\n \r\n- Directory of c:\\mnt\\azure\r\n+### Generate Azure Resource Manager template\r\n \r\n-11/16/2017  09:45 PM    <DIR>          .\r\n-11/16/2017  09:45 PM    <DIR>          ..\r\n-               0 File(s)              0 bytes\r\n-               2 Dir(s)   5,368,709,120 bytes free\r\n+Now that the ACS-Engine cluster definition is complete, generate the Azure templates with `acs-engine generate .\\kubernetes-windows-complete.json`\r\n \r\n+```powershell\r\n+.\\acs-engine.exe generate .\\kubernetes-windows-complete.json\r\n+INFO[0000] Generating assets into _output/plangk8swin1...\r\n ```\r\n \r\n-### Create Azure Disk workload\r\n-This example is modified after https://github.com/andyzhangx/Demo/tree/master/windows/azuredisk/rs3\r\n+This will generate a directory named after the dnsPrefix you set above. In this example, it's `plangk8swin1`\r\n \r\n-#### 1. Create an azure disk storage class\r\n+### Deploy the cluster\r\n \r\n-##### option#1: k8s agent pool is based on blob disk VM\r\n-```kubectl apply -f https://raw.githubusercontent.com/JiangtianLi/Examples/master/windows/azuredisk/storageclass-azuredisk.yaml```\r\n+Get the paths to `azuredeploy.json` and `azuredeploy.parameters.json` from the last step, and pass them into `az group deployment create --name <name for deployment> --resource-group <resource group name> --template-file <...azuredeploy.json> --parameters <...azuredeploy.parameters.json>`\r\n \r\n-##### option#2: k8s agent pool is based on managed disk VM\r\n-```kubectl apply -f https://raw.githubusercontent.com/JiangtianLi/Examples/master/windows/azuredisk/storageclass-azuredisk-managed.yaml```\r\n+```powershell\r\n+az group deployment create --name plangk8swin1-deploy --resource-group k8s-win1 --template-file \".\\_output\\plangk8swin1\\azuredeploy.json\" --parameters \".\\_output\\plangk8swin1\\azuredeploy.parameters.json\"\r\n+```\r\n+\r\n+After several minutes, it will return a whole bunch of JSON. Look for `masterFQDN`.\r\n \r\n-#### make sure storageclass is created successfully\r\n ```\r\n-kubectl get storageclass/azuredisk -o wide\r\n+      \"masterFQDN\": {\r\n+        \"type\": \"String\",\r\n+        \"value\": \"plangk8swin1.westus2.cloudapp.azure.com\"\r\n+      },\r\n ```\r\n \r\n-#### 2. Create a pvc for azure disk\r\n-```kubectl apply -f https://raw.githubusercontent.com/JiangtianLi/Examples/master/windows/azuredisk/pvc-azuredisk.yaml```\r\n+#### Check that the cluster is up\r\n \r\n-#### make sure pvc is created successfully\r\n-```\r\n-kubectl get pvc/pvc-azuredisk -o wide\r\n+SSH to that FQDN with the username you put in the linuxProfile section of `kubernetes-windows.json` :\r\n+\r\n+```powershell\r\n+ssh azureuser@plangk8swin1.westus2.cloudapp.azure.com\r\n ```\r\n \r\n-#### 3. Create a pod with azure disk pvc\r\n-```kubectl apply -f https://raw.githubusercontent.com/JiangtianLi/Examples/master/windows/azuredisk/iis-azuredisk.yaml```\r\n+Now, you can verify the cluster is up with `kubectl get node -o wide`. Once you've checked that the cluster is up, go ahead and disconnect from the Linux master by running `exit`\r\n \r\n-#### watch the status of pod until its `STATUS` is `Running`\r\n+```bash\r\n+azureuser@k8s-master-40336153-0:~$ kubectl get node -o wide\r\n+NAME                    STATUS    ROLES     AGE       VERSION   EXTERNAL-IP   OS-IMAGE                    KERNEL-VERSION   CONTAINER-RUNTIME\r\n+40336k8s9000            Ready     <none>    21m       v1.9.10   <none>        Windows Server Datacenter   10.0.17134.112\r\n+                        docker://17.6.2\r\n+40336k8s9001            Ready     <none>    20m       v1.9.10   <none>    Windows Server Datacenter   10.0.17134.112\r\n+                        docker://17.6.2\r\n+k8s-master-40336153-0   Ready     master    22m       v1.9.10   <none>    Ubuntu 16.04.5 LTS   4.15.0-1018-azure   docker://1.13.1\r\n ```\r\n-watch kubectl get po/iis-azuredisk -o wide\r\n+\r\n+\r\n+Next, copy the configuration file needed to manage the cluster with your Windows machine using `scp`, then set `$ENV:KUBECONFIG` to the path of that file.\r\n+\r\n+```powershell\r\n+scp azureuser@plangk8swin1.westus2.cloudapp.azure.com:~/.kube/config plangk8swin1\r\n+$ENV:KUBECONFIG = (Get-Item .\\plangk8swin1).FullName\r\n ```\r\n \r\n-#### 4. Enter the pod container to validate\r\n+#### Get Kubectl for Windows\r\n+\r\n+The latest release of Kubernetes Control (kubectl) is available on the [Kubernetes release page](https://kubernetes.io/docs/imported/release/notes/). Look for `kubernetes-client-windows-amd64.tar.gz` and download it.\r\n+\r\n+Windows 10 version 1803 already includes `tar`, so extract the archive and move `kubectl.exe` to your local path\r\n+\r\n+```powershell\r\n+tar xvzf C:\\Users\\patrick\\Downloads\\kubernetes-client-windows-amd64.tar.tar\r\n+Move-Item .\\kubernetes\\client\\bin\\kubectl.exe .\r\n ```\r\n-kubectl exec -it iis-azuredisk -- cmd\r\n+\r\n+Now, make sure can access your cluster from your Windows 10 machine:\r\n+\r\n+```powershell\r\n+.\\kubectl.exe get node\r\n ```\r\n \r\n \r\n-## Example using multiple containers in a POD\r\n+### Deploy your first application\r\n+\r\n+Kubernetes deployments are typically written in YAML files. This one will create a pod with a container running the IIS web server, and tell Kubernetes to expose it as a service with the Azure Load Balancer on an external IP.\r\n+\r\n ```yaml\r\n-apiVersion: extensions/v1beta1\r\n+apiVersion: apps/v1\r\n kind: Deployment\r\n metadata:\r\n+  name: iis-1803\r\n   labels:\r\n-    app: two-containers\r\n-  name: two-containers\r\n+    app: iis-1803\r\n spec:\r\n   replicas: 1\r\n   template:\r\n     metadata:\r\n+      name: iis-1803\r\n       labels:\r\n-        app: two-containers\r\n-      name: two-containers\r\n+        app: iis-1803\r\n     spec:\r\n-      volumes:\r\n-      - name: shared-data\r\n-        emptyDir: {}\r\n-\r\n       containers:\r\n-\r\n-        - name: iis-container\r\n-          image: microsoft/iis:windowsservercore-1803\r\n-          volumeMounts:\r\n-          - name: shared-data\r\n-            mountPath: /wwwcache\r\n-          command: \r\n-          - powershell.exe\r\n-          - -command \r\n-          - \"while ($true) { Start-Sleep -Seconds 10; Copy-Item -Path C:\\\\wwwcache\\\\iisstart.htm -Destination C:\\\\inetpub\\\\wwwroot\\\\iisstart.htm; }\"            \r\n-\r\n-        - name: servercore-container\r\n-          image: microsoft/windowsservercore:1803\r\n-          volumeMounts:\r\n-          - name: shared-data\r\n-            mountPath: /poddata\r\n-          command: \r\n-          - powershell.exe\r\n-          - -command \r\n-          - \"$i=0; while ($true) { Start-Sleep -Seconds 10; $msg = 'Hello from the servercore container, count is {0}' -f $i; Set-Content -Path C:\\\\poddata\\\\iisstart.htm -Value $msg; $i++; }\"\r\n-\r\n+      - name: iis\r\n+        image: microsoft/iis:windowsservercore-1803\r\n+        ports:\r\n+          - containerPort: 80\r\n       nodeSelector:\r\n-        beta.kubernetes.io/os: windows\r\n+        \"beta.kubernetes.io/os\": windows\r\n+  selector:\r\n+    matchLabels:\r\n+      app: iis-1803\r\n+---\r\n+apiVersion: v1\r\n+kind: Service\r\n+metadata:\r\n+  name: iis\r\n+spec:\r\n+  type: LoadBalancer\r\n+  ports:\r\n+  - protocol: TCP\r\n+    port: 80\r\n+  selector:\r\n+    app: iis-1803\r\n ```\r\n \r\n-## Real-world Workload\r\n-TODO\r\n-\r\n-\r\n-## Windows-specific Troubleshooting\r\n-\r\n-Windows support is still in active development with many changes each week. Read on for more info on known per-version issues and troubleshooting if you run into problems.\r\n-\r\n-### Finding logs\r\n-\r\n-To connect to a Windows node using Remote Desktop and get logs, please read over this topic in the main [troubleshooting](troubleshooting.md#connecting-to-windows-nodes) page first.\r\n+Copy and paste that into a file called `iis.yaml`, then run `.\\kubectl.exe apply -f iis.yaml`. kubectl will show the deployment and service were created:\r\n \r\n-### Checking versions\r\n-\r\n-Please be sure to include this info with any Windows bug reports.\r\n-\r\n-Kubernetes\r\n-`kubectl version`\r\n--\t“Server Version”\r\n-`kubectl describe node <windows node>`\r\n--\t“kernel version”\r\n--\tAlso note the IP Address for the next step, but you don't need to share it\r\n-\r\n-The Azure CNI plugin version and configuration is stored in `C:\\k\\azurecni\\netconf\\10-azure.conflist`. Get\r\n--\tmode\r\n--\tdns.Nameservers\r\n--\tdns.Search\r\n-\r\n-Get the Azure CNI build by running `C:\\k\\azurecni\\bin\\azure-vnet.exe --help`. It will dump some errors, but the version such as ` v1.0.4-1-gf0f090e` will be listed.\r\n+```powershell\r\n+\\kubectl.exe apply -f .\\iis.yaml\r\n \r\n+deployment.apps/iis-1803 created\r\n+service/iis created\r\n ```\r\n-...\r\n-2018/05/23 01:28:57 \"Start Flag false CniSucceeded false Name CNI Version v1.0.4-1-gf0f090e ErrorMessage required env variables missing vnet []\r\n-...\r\n-```\r\n-\r\n-### Known Issues per Version\r\n-\r\n-\r\n-ACS-Engine | Windows Server |\tKubernetes | Azure CNI | Notes\r\n------------|----------------|------------|-----------|----------\r\n-V0.16.2\t| Windows Server version 1709 (10.0.16299.____)\t| V1.9.7 | ? | DNS resolution is not configured\r\n-V0.17.0 | Windows Server version 1709\t| V1.10.2 | v1.0.4 | Acs-engine version 0.17 defaults to Windows Server version 1803. You can override it to use 1709 instead [here](#choosing-the-windows-server-version). Manual workarounds needed on Windows for DNS Server list, DNS search suffix\r\n-V0.17.0 | Windows Server version 1803 (10.0.17134.1) | V1.10.2 | v1.0.4 | Manual workarounds needed on Windows for DNS Server list, DNS search suffix, and dropped packets\r\n-v0.17.1 | Windows Server version 1709 | v1.10.3 | v1.0.4-1-gf0f090e | Manual workarounds needed on Windows for DNS Server list and DNS search suffix. This ACS-Engine version defaults to Windows Server version 1803, but you can override it to use 1709 instead [here](#choosing-the-windows-server-version)\r\n-v0.18.3 | Windows Server version 1803 | v1.10.3 | v1.0.6 | Manual workaround needed for DNS search suffix\r\n-\r\n-### Known problems\r\n-\r\n-#### Packets from Windows pods are dropped\r\n-\r\n-Affects: Windows Server version 1803 (10.0.17134.1)\r\n-\r\n-Issues: https://github.com/Azure/acs-engine/issues/3037 \r\n-\r\n-There is a problem with the “L2Tunnel” networking mode not forwarding packets correctly specific to Windows Server version 1803. Windows Server version 1709 is not affected.\r\n \r\n-Workarounds:\r\n-**Fixes are still in development.** A Windows hotfix is needed, and willbe deployed by ACS-Engine once it's ready. The hotfix will be removed later when it's in a future cumulative rollup.\r\n+Now, you can check the status of the pod and service with `.\\kubectl.exe get pod` and `.\\kubectl.exe get service` respectively.\r\n \r\n+Initially, the pod will be in the `ContainerCreating` state, and eventually go to `Running`. The service will show `<pending>` under `EXTERNAL-IP`\r\n \r\n-#### Pods cannot resolve public DNS names\r\n-\r\n-Affects: Some builds of Azure CNI\r\n-\r\n-Issues: https://github.com/Azure/azure-container-networking/issues/147\r\n-\r\n-Run `ipconfig /all` in a pod, and check that the first DNS server listed is within your cluster IP range (10.x.x.x). If it's not listed, or not the first in the list, then an azure-cni update is needed.\r\n-\r\n-Workaround:\r\n-\r\n-1.\tGet the kube-dns service IP with `kubectl get svc -n kube-system kube-dns`\r\n-2.  Cordon & drain the node\r\n-3.\tModify `C:\\k\\azurecni\\netconf\\10-azure.conflist` and make it the first entry under Nameservers\r\n-4.  Uncordon the node\r\n-\r\n-Example:\r\n+```powershell\r\n+PS C:\\Users\\patrick\\acs-engine> .\\kubectl.exe get pod\r\n+NAME                        READY     STATUS              RESTARTS   AGE\r\n+iis-1803-6c49777598-h45cs   0/1       ContainerCreating   0          1m\r\n+PS C:\\Users\\patrick\\acs-engine> .\\kubectl.exe get service\r\n+NAME         TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE\r\n+iis          LoadBalancer   10.0.9.47    <pending>     80:31240/TCP   1m\r\n+kubernetes   ClusterIP      10.0.0.1     <none>        443/TCP        46m\r\n ```\r\n-{\r\n-    \"cniVersion\":  \"0.3.0\",\r\n-    \"name\":  \"azure\",\r\n-    \"plugins\":  [\r\n-                    {\r\n-                        \"type\":  \"azure-vnet\",\r\n-                        \"mode\":  \"tunnel\",\r\n-                        \"bridge\":  \"azure0\",\r\n-                        \"ipam\":  {\r\n-                                     \"type\":  \"azure-vnet-ipam\"\r\n-                                 },\r\n-                        \"dns\":  {\r\n-                                    \"Nameservers\":  [\r\n-                                                        \"10.0.0.10\",\r\n-                                                        \"168.63.129.16\"\r\n-                                                    ],\r\n-                                    \"Search\":  [\r\n-                                                   \"default.svc.cluster.local\"\r\n-                                               ]\r\n-                                },\r\n-…\r\n-```\r\n-\r\n-#### Pods cannot resolve cluster DNS names\r\n-\r\n-Affects: Azure CNI plugin <= 0.3.0\r\n-\r\n-Issues: https://github.com/Azure/azure-container-networking/issues/146\r\n \r\n-If you can't resolve internal service names within the same namespace, run `ipconfig /all` in a pod, and check that the DNS Suffix Search List matches the form `<namespace>.svc.cluster.local`. An Azure CNI update is needed to set the right DNS suffix.\r\n+Since this is the first deployment, it will probably take several minutes for the Windows node to download and run the container. Later deployments will be faster because the large `microsoft/windowsservercore` container will already be on disk. \r\n \r\n-Workaround:\r\n-1.\tUse the FQDN in DNS lookups such as `kubernetes.kube-system.svc.cluster.local`\r\n-2.\tInstead of DNS, use environment variables `* _SERVICE_HOST` and `*_SERVICE_PORT` to find service IPs and ports in the same namespace\r\n+Once the pod is in `Running` state, get the IP from `kubectl get service` then visit `http://<external-ip>` to test your web server.\r","path":"docs/kubernetes/windows.md","position":null,"original_position":599,"commit_id":"149ca7cae68328eba9038def00d0500a548acd55","original_commit_id":"24de198d84f4fa069b3e86c968fa6e11d5fea939","user":{"login":"PatrickLang","id":11345431,"node_id":"MDQ6VXNlcjExMzQ1NDMx","avatar_url":"https://avatars1.githubusercontent.com/u/11345431?v=4","gravatar_id":"","url":"https://api.github.com/users/PatrickLang","html_url":"https://github.com/PatrickLang","followers_url":"https://api.github.com/users/PatrickLang/followers","following_url":"https://api.github.com/users/PatrickLang/following{/other_user}","gists_url":"https://api.github.com/users/PatrickLang/gists{/gist_id}","starred_url":"https://api.github.com/users/PatrickLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatrickLang/subscriptions","organizations_url":"https://api.github.com/users/PatrickLang/orgs","repos_url":"https://api.github.com/users/PatrickLang/repos","events_url":"https://api.github.com/users/PatrickLang/events{/privacy}","received_events_url":"https://api.github.com/users/PatrickLang/received_events","type":"User","site_admin":false},"body":"ok clarified it","created_at":"2018-08-08T21:10:34Z","updated_at":"2018-08-08T21:10:34Z","html_url":"https://github.com/Azure/acs-engine/pull/3614#discussion_r208737047","pull_request_url":"https://api.github.com/repos/Azure/acs-engine/pulls/3614","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/Azure/acs-engine/pulls/comments/208737047"},"html":{"href":"https://github.com/Azure/acs-engine/pull/3614#discussion_r208737047"},"pull_request":{"href":"https://api.github.com/repos/Azure/acs-engine/pulls/3614"}},"in_reply_to_id":208005840},"pull_request":{"url":"https://api.github.com/repos/Azure/acs-engine/pulls/3614","id":206166642,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2MTY2NjQy","html_url":"https://github.com/Azure/acs-engine/pull/3614","diff_url":"https://github.com/Azure/acs-engine/pull/3614.diff","patch_url":"https://github.com/Azure/acs-engine/pull/3614.patch","issue_url":"https://api.github.com/repos/Azure/acs-engine/issues/3614","number":3614,"state":"open","locked":false,"title":"Docs - simplifying Windows walkthrough","user":{"login":"PatrickLang","id":11345431,"node_id":"MDQ6VXNlcjExMzQ1NDMx","avatar_url":"https://avatars1.githubusercontent.com/u/11345431?v=4","gravatar_id":"","url":"https://api.github.com/users/PatrickLang","html_url":"https://github.com/PatrickLang","followers_url":"https://api.github.com/users/PatrickLang/followers","following_url":"https://api.github.com/users/PatrickLang/following{/other_user}","gists_url":"https://api.github.com/users/PatrickLang/gists{/gist_id}","starred_url":"https://api.github.com/users/PatrickLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatrickLang/subscriptions","organizations_url":"https://api.github.com/users/PatrickLang/orgs","repos_url":"https://api.github.com/users/PatrickLang/repos","events_url":"https://api.github.com/users/PatrickLang/events{/privacy}","received_events_url":"https://api.github.com/users/PatrickLang/received_events","type":"User","site_admin":false},"body":"**What this PR does / why we need it**:\r\n\r\nThe Windows walkthrough had a lot of back & forth from other pages which made it hard to follow. \r\n\r\nThis is my attempt at making a simpler top to bottom, copy & paste workflow. I'm not a great writer, so any and all feedback (or PRs) are welcome!\r\n\r\n\r\n**Special notes for your reviewer**:\r\n\r\n**If applicable**:\r\n- [x] documentation\r\n","created_at":"2018-08-04T01:01:42Z","updated_at":"2018-08-08T21:10:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9539770728489a7db3f79f0c8899d595ee69c705","assignee":{"login":"PatrickLang","id":11345431,"node_id":"MDQ6VXNlcjExMzQ1NDMx","avatar_url":"https://avatars1.githubusercontent.com/u/11345431?v=4","gravatar_id":"","url":"https://api.github.com/users/PatrickLang","html_url":"https://github.com/PatrickLang","followers_url":"https://api.github.com/users/PatrickLang/followers","following_url":"https://api.github.com/users/PatrickLang/following{/other_user}","gists_url":"https://api.github.com/users/PatrickLang/gists{/gist_id}","starred_url":"https://api.github.com/users/PatrickLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatrickLang/subscriptions","organizations_url":"https://api.github.com/users/PatrickLang/orgs","repos_url":"https://api.github.com/users/PatrickLang/repos","events_url":"https://api.github.com/users/PatrickLang/events{/privacy}","received_events_url":"https://api.github.com/users/PatrickLang/received_events","type":"User","site_admin":false},"assignees":[{"login":"PatrickLang","id":11345431,"node_id":"MDQ6VXNlcjExMzQ1NDMx","avatar_url":"https://avatars1.githubusercontent.com/u/11345431?v=4","gravatar_id":"","url":"https://api.github.com/users/PatrickLang","html_url":"https://github.com/PatrickLang","followers_url":"https://api.github.com/users/PatrickLang/followers","following_url":"https://api.github.com/users/PatrickLang/following{/other_user}","gists_url":"https://api.github.com/users/PatrickLang/gists{/gist_id}","starred_url":"https://api.github.com/users/PatrickLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatrickLang/subscriptions","organizations_url":"https://api.github.com/users/PatrickLang/orgs","repos_url":"https://api.github.com/users/PatrickLang/repos","events_url":"https://api.github.com/users/PatrickLang/events{/privacy}","received_events_url":"https://api.github.com/users/PatrickLang/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":616225832,"node_id":"MDU6TGFiZWw2MTYyMjU4MzI=","url":"https://api.github.com/repos/Azure/acs-engine/labels/in%20progress","name":"in progress","color":"b8ddf9","default":false},{"id":936621062,"node_id":"MDU6TGFiZWw5MzY2MjEwNjI=","url":"https://api.github.com/repos/Azure/acs-engine/labels/size/XL","name":"size/XL","color":"fbca04","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Azure/acs-engine/pulls/3614/commits","review_comments_url":"https://api.github.com/repos/Azure/acs-engine/pulls/3614/comments","review_comment_url":"https://api.github.com/repos/Azure/acs-engine/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Azure/acs-engine/issues/3614/comments","statuses_url":"https://api.github.com/repos/Azure/acs-engine/statuses/149ca7cae68328eba9038def00d0500a548acd55","head":{"label":"PatrickLang:plang-windowsquickstart","ref":"plang-windowsquickstart","sha":"149ca7cae68328eba9038def00d0500a548acd55","user":{"login":"PatrickLang","id":11345431,"node_id":"MDQ6VXNlcjExMzQ1NDMx","avatar_url":"https://avatars1.githubusercontent.com/u/11345431?v=4","gravatar_id":"","url":"https://api.github.com/users/PatrickLang","html_url":"https://github.com/PatrickLang","followers_url":"https://api.github.com/users/PatrickLang/followers","following_url":"https://api.github.com/users/PatrickLang/following{/other_user}","gists_url":"https://api.github.com/users/PatrickLang/gists{/gist_id}","starred_url":"https://api.github.com/users/PatrickLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatrickLang/subscriptions","organizations_url":"https://api.github.com/users/PatrickLang/orgs","repos_url":"https://api.github.com/users/PatrickLang/repos","events_url":"https://api.github.com/users/PatrickLang/events{/privacy}","received_events_url":"https://api.github.com/users/PatrickLang/received_events","type":"User","site_admin":false},"repo":{"id":133584064,"node_id":"MDEwOlJlcG9zaXRvcnkxMzM1ODQwNjQ=","name":"acs-engine","full_name":"PatrickLang/acs-engine","owner":{"login":"PatrickLang","id":11345431,"node_id":"MDQ6VXNlcjExMzQ1NDMx","avatar_url":"https://avatars1.githubusercontent.com/u/11345431?v=4","gravatar_id":"","url":"https://api.github.com/users/PatrickLang","html_url":"https://github.com/PatrickLang","followers_url":"https://api.github.com/users/PatrickLang/followers","following_url":"https://api.github.com/users/PatrickLang/following{/other_user}","gists_url":"https://api.github.com/users/PatrickLang/gists{/gist_id}","starred_url":"https://api.github.com/users/PatrickLang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PatrickLang/subscriptions","organizations_url":"https://api.github.com/users/PatrickLang/orgs","repos_url":"https://api.github.com/users/PatrickLang/repos","events_url":"https://api.github.com/users/PatrickLang/events{/privacy}","received_events_url":"https://api.github.com/users/PatrickLang/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/PatrickLang/acs-engine","description":"Azure Container Service Engine - a place for community to collaborate and build the best open Docker container infrastructure for Azure.","fork":true,"url":"https://api.github.com/repos/PatrickLang/acs-engine","forks_url":"https://api.github.com/repos/PatrickLang/acs-engine/forks","keys_url":"https://api.github.com/repos/PatrickLang/acs-engine/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PatrickLang/acs-engine/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PatrickLang/acs-engine/teams","hooks_url":"https://api.github.com/repos/PatrickLang/acs-engine/hooks","issue_events_url":"https://api.github.com/repos/PatrickLang/acs-engine/issues/events{/number}","events_url":"https://api.github.com/repos/PatrickLang/acs-engine/events","assignees_url":"https://api.github.com/repos/PatrickLang/acs-engine/assignees{/user}","branches_url":"https://api.github.com/repos/PatrickLang/acs-engine/branches{/branch}","tags_url":"https://api.github.com/repos/PatrickLang/acs-engine/tags","blobs_url":"https://api.github.com/repos/PatrickLang/acs-engine/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PatrickLang/acs-engine/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PatrickLang/acs-engine/git/refs{/sha}","trees_url":"https://api.github.com/repos/PatrickLang/acs-engine/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PatrickLang/acs-engine/statuses/{sha}","languages_url":"https://api.github.com/repos/PatrickLang/acs-engine/languages","stargazers_url":"https://api.github.com/repos/PatrickLang/acs-engine/stargazers","contributors_url":"https://api.github.com/repos/PatrickLang/acs-engine/contributors","subscribers_url":"https://api.github.com/repos/PatrickLang/acs-engine/subscribers","subscription_url":"https://api.github.com/repos/PatrickLang/acs-engine/subscription","commits_url":"https://api.github.com/repos/PatrickLang/acs-engine/commits{/sha}","git_commits_url":"https://api.github.com/repos/PatrickLang/acs-engine/git/commits{/sha}","comments_url":"https://api.github.com/repos/PatrickLang/acs-engine/comments{/number}","issue_comment_url":"https://api.github.com/repos/PatrickLang/acs-engine/issues/comments{/number}","contents_url":"https://api.github.com/repos/PatrickLang/acs-engine/contents/{+path}","compare_url":"https://api.github.com/repos/PatrickLang/acs-engine/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PatrickLang/acs-engine/merges","archive_url":"https://api.github.com/repos/PatrickLang/acs-engine/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PatrickLang/acs-engine/downloads","issues_url":"https://api.github.com/repos/PatrickLang/acs-engine/issues{/number}","pulls_url":"https://api.github.com/repos/PatrickLang/acs-engine/pulls{/number}","milestones_url":"https://api.github.com/repos/PatrickLang/acs-engine/milestones{/number}","notifications_url":"https://api.github.com/repos/PatrickLang/acs-engine/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PatrickLang/acs-engine/labels{/name}","releases_url":"https://api.github.com/repos/PatrickLang/acs-engine/releases{/id}","deployments_url":"https://api.github.com/repos/PatrickLang/acs-engine/deployments","created_at":"2018-05-15T23:28:48Z","updated_at":"2018-08-07T22:38:55Z","pushed_at":"2018-08-08T21:10:27Z","git_url":"git://github.com/PatrickLang/acs-engine.git","ssh_url":"git@github.com:PatrickLang/acs-engine.git","clone_url":"https://github.com/PatrickLang/acs-engine.git","svn_url":"https://github.com/PatrickLang/acs-engine","homepage":"","size":77975,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Azure:master","ref":"master","sha":"e053cb099487fdd91fbdfb14413c37d5186f6ee7","user":{"login":"Azure","id":6844498,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4NDQ0OTg=","avatar_url":"https://avatars0.githubusercontent.com/u/6844498?v=4","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"repo":{"id":66011370,"node_id":"MDEwOlJlcG9zaXRvcnk2NjAxMTM3MA==","name":"acs-engine","full_name":"Azure/acs-engine","owner":{"login":"Azure","id":6844498,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY4NDQ0OTg=","avatar_url":"https://avatars0.githubusercontent.com/u/6844498?v=4","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Azure/acs-engine","description":"Azure Container Service Engine - provision and deploy container orchestrators on Azure: Kubernetes, DC/OS, and Docker Swarm.","fork":false,"url":"https://api.github.com/repos/Azure/acs-engine","forks_url":"https://api.github.com/repos/Azure/acs-engine/forks","keys_url":"https://api.github.com/repos/Azure/acs-engine/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Azure/acs-engine/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Azure/acs-engine/teams","hooks_url":"https://api.github.com/repos/Azure/acs-engine/hooks","issue_events_url":"https://api.github.com/repos/Azure/acs-engine/issues/events{/number}","events_url":"https://api.github.com/repos/Azure/acs-engine/events","assignees_url":"https://api.github.com/repos/Azure/acs-engine/assignees{/user}","branches_url":"https://api.github.com/repos/Azure/acs-engine/branches{/branch}","tags_url":"https://api.github.com/repos/Azure/acs-engine/tags","blobs_url":"https://api.github.com/repos/Azure/acs-engine/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Azure/acs-engine/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Azure/acs-engine/git/refs{/sha}","trees_url":"https://api.github.com/repos/Azure/acs-engine/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Azure/acs-engine/statuses/{sha}","languages_url":"https://api.github.com/repos/Azure/acs-engine/languages","stargazers_url":"https://api.github.com/repos/Azure/acs-engine/stargazers","contributors_url":"https://api.github.com/repos/Azure/acs-engine/contributors","subscribers_url":"https://api.github.com/repos/Azure/acs-engine/subscribers","subscription_url":"https://api.github.com/repos/Azure/acs-engine/subscription","commits_url":"https://api.github.com/repos/Azure/acs-engine/commits{/sha}","git_commits_url":"https://api.github.com/repos/Azure/acs-engine/git/commits{/sha}","comments_url":"https://api.github.com/repos/Azure/acs-engine/comments{/number}","issue_comment_url":"https://api.github.com/repos/Azure/acs-engine/issues/comments{/number}","contents_url":"https://api.github.com/repos/Azure/acs-engine/contents/{+path}","compare_url":"https://api.github.com/repos/Azure/acs-engine/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Azure/acs-engine/merges","archive_url":"https://api.github.com/repos/Azure/acs-engine/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Azure/acs-engine/downloads","issues_url":"https://api.github.com/repos/Azure/acs-engine/issues{/number}","pulls_url":"https://api.github.com/repos/Azure/acs-engine/pulls{/number}","milestones_url":"https://api.github.com/repos/Azure/acs-engine/milestones{/number}","notifications_url":"https://api.github.com/repos/Azure/acs-engine/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Azure/acs-engine/labels{/name}","releases_url":"https://api.github.com/repos/Azure/acs-engine/releases{/id}","deployments_url":"https://api.github.com/repos/Azure/acs-engine/deployments","created_at":"2016-08-18T16:05:16Z","updated_at":"2018-08-08T19:57:13Z","pushed_at":"2018-08-08T21:10:29Z","git_url":"git://github.com/Azure/acs-engine.git","ssh_url":"git@github.com:Azure/acs-engine.git","clone_url":"https://github.com/Azure/acs-engine.git","svn_url":"https://github.com/Azure/acs-engine","homepage":"","size":88230,"stargazers_count":902,"watchers_count":902,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":562,"mirror_url":null,"archived":false,"open_issues_count":566,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":562,"open_issues":566,"watchers":902,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Azure/acs-engine/pulls/3614"},"html":{"href":"https://github.com/Azure/acs-engine/pull/3614"},"issue":{"href":"https://api.github.com/repos/Azure/acs-engine/issues/3614"},"comments":{"href":"https://api.github.com/repos/Azure/acs-engine/issues/3614/comments"},"review_comments":{"href":"https://api.github.com/repos/Azure/acs-engine/pulls/3614/comments"},"review_comment":{"href":"https://api.github.com/repos/Azure/acs-engine/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Azure/acs-engine/pulls/3614/commits"},"statuses":{"href":"https://api.github.com/repos/Azure/acs-engine/statuses/149ca7cae68328eba9038def00d0500a548acd55"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"PatrickLang"}}