Deploy an application

This workshop has been deprecated and archived. The new Amazon EKS Workshop is now available at www.eksworkshop.com.

NodeSelector

You must specify node selectors on your applications so that the pods land on a node with the appropriate operating system.

For Linux pods, use the following node selector text in your manifests.


nodeSelector:
        kubernetes.io/os: linux
        kubernetes.io/arch: amd64

For Windows pods, use the following node selector text in your manifests.


nodeSelector:
        kubernetes.io/os: windows
        kubernetes.io/arch: amd64

Our deployment file already has the proper node selectors so you won’t have to add them yourself.

Deploy a Windows sample application

We are now ready to deploy our Windows IIS container

kubectl create namespace windows

cat << EoF > ~/environment/windows/windows_server_iis.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: windows-server-iis
  namespace: windows
spec:
  selector:
    matchLabels:
      app: windows-server-iis
      tier: backend
      track: stable
  replicas: 1
  template:
    metadata:
      labels:
        app: windows-server-iis
        tier: backend
        track: stable
    spec:
      containers:
      - name: windows-server-iis
        image: mcr.microsoft.com/windows/servercore:ltsc2019-amd64
        ports:
        - name: http
          containerPort: 80
        imagePullPolicy: IfNotPresent
        command:
        - powershell.exe
        - -command
        - "Add-WindowsFeature Web-Server; Invoke-WebRequest -UseBasicParsing -Uri 'https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe' -OutFile 'C:\\ServiceMonitor.exe'; echo '<html><body><br/><br/><marquee><H1>Hello EKS!!!<H1><marquee></body><html>' > C:\\inetpub\\wwwroot\\default.html; C:\\ServiceMonitor.exe 'w3svc'; "
      nodeSelector:
        kubernetes.io/os: windows
---
apiVersion: v1
kind: Service
metadata:
  name: windows-server-iis-service
  namespace: windows
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: windows-server-iis
    tier: backend
    track: stable
  sessionAffinity: None
  type: LoadBalancer
EoF

kubectl apply -f ~/environment/windows/windows_server_iis.yaml

Let’s verify what we just deployed

kubectl -n windows get svc,deploy,pods

NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP                                                              PORT(S)        AGE
service/windows-server-iis-service   LoadBalancer   10.100.114.95   a52bab64f1fb34b338104c4ab20eb867-195815018.us-east-2.elb.amazonaws.com   80:31184/TCP   68s
NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/windows-server-iis   1/1     1            1           68s

NAME                                      READY   STATUS    RESTARTS   AGE
pod/windows-server-iis-7cff879775-7t8hk   1/1     Running   0          68s

It will take several minutes for the ELB to become healthy and start passing traffic to the pods.

Finally, we will connect to the load-balancer

export WINDOWS_IIS_SVC=$(kubectl -n windows get svc -o jsonpath='{.items[].status.loadBalancer.ingress[].hostname}')

echo http://${WINDOWS_IIS_SVC}

Output

Windows IIS Welcome screen