Skip to content

AI-200 · Domain 1: Develop containerized solutions on Azure · 22% of the exam

Task 1.2: Implement container-orchestrated solutions

Container Apps environments, revisions and KEDA scale rules, deploying to AKS with manifest files, and troubleshooting both through logs, events and connectivity checks.

Study it

Sample questions

Try each one before opening the answer. Every option is explained, with the Microsoft documentation page that proves it.

Question 1 · choose 1

You update the value of a Container Apps secret that a container reads through an environment variable (secretref:). The CLI command succeeds, no new revision appears, and the running replicas still use the old value. What must you do for the app to pick up the new value?

  1. AWait up to 30 minutes for the platform to refresh the value
  2. BSwitch the app to multiple revision mode so the change creates a revision
  3. CDelete the secret and add it again under a new name
  4. DRestart the active revision, or deploy a new revision
Show the answer and why
  • AWait up to 30 minutes for the platform to refresh the value

    Incorrect

    The 30-minute automatic refresh applies to secrets that reference Key Vault, not to a value stored directly in Container Apps.

  • BSwitch the app to multiple revision mode so the change creates a revision

    Incorrect

    Revision mode doesn't change the scope of secrets; secret changes never generate a new revision in either mode.

  • CDelete the secret and add it again under a new name

    Incorrect

    That still doesn't restart existing revisions, and any revision referencing the old name would break.

  • DRestart the active revision, or deploy a new revision

    Correct

    Secrets are application-scope; existing revisions see a changed secret only after a restart or in a new revision.

Changes under properties.configuration, such as secret values, ingress and revision mode, are application-scope and don't create a revision. Updating or deleting a secret doesn't automatically affect existing revisions; restart them or deploy a new revision.

Question 2 · choose 2

A container app runs in the default revision mode. You're about to deploy a new image and want the current revision and the new one to run side by side, with 10 percent of requests to the app's URL going to the new revision. Which two changes do you make? (Choose TWO.)

  1. ASet the app's revision mode to multiple
  2. BAdd an HTTP scale rule with concurrentRequests set to 10
  3. CGive the new revision the suffix canary
  4. DDeploy the new image to a second Container Apps environment
  5. ESet traffic weights of 90 and 10 percent on the two revisions
Show the answer and why
  • ASet the app's revision mode to multiple

    Correct

    Only multiple revision mode keeps several revisions active at once so they can share traffic.

  • BAdd an HTTP scale rule with concurrentRequests set to 10

    Incorrect

    A scale rule controls replica counts within a revision, not how traffic is shared between revisions.

  • CGive the new revision the suffix canary

    Incorrect

    A revision suffix only names the revision; it doesn't route any traffic to it.

  • DDeploy the new image to a second Container Apps environment

    Incorrect

    A separate environment is a different app with a different URL; it doesn't split traffic for the existing app.

  • ESet traffic weights of 90 and 10 percent on the two revisions

    Correct

    Traffic splitting distributes requests to the app's URL across active revisions by percentage.

In the default single revision mode, a new revision replaces the old one once it's ready. Multiple revision mode lets you keep both active and assign traffic weights that add up to 100 percent.

Question 3 · choose 1

A queue worker in Azure Container Apps must scale from zero based on the length of an Azure Service Bus queue. The app has a system-assigned managed identity with the right role on the namespace, and the team won't store connection strings as secrets. How do you define the scale rule?

  1. AA custom rule of type azure-servicebus with queueName, namespace and messageCount metadata and its identity set to system
  2. BA custom rule of type azure-servicebus whose auth entry maps the connection parameter to a secret holding the connection string
  3. CAn HTTP rule with concurrentRequests set to the expected queue depth
  4. DA custom rule of type cpu with a utilization target of 50 percent
Show the answer and why
  • AA custom rule of type azure-servicebus with queueName, namespace and messageCount metadata and its identity set to system

    Correct

    Scale rules for Azure Service Bus, Event Hubs and Queue Storage support managed identity, so no secret is needed.

  • BA custom rule of type azure-servicebus whose auth entry maps the connection parameter to a secret holding the connection string

    Incorrect

    This is the secrets-based form, and it requires the connection string the team refuses to store.

  • CAn HTTP rule with concurrentRequests set to the expected queue depth

    Incorrect

    HTTP rules scale on concurrent HTTP requests to the revision, not on queue messages, and a queue worker has no such traffic.

  • DA custom rule of type cpu with a utilization target of 50 percent

    Incorrect

    A CPU rule reacts to processor load in running replicas, not to the number of messages waiting in the queue, so it misses the requirement.

Container Apps maps any ScaledObject-based KEDA scaler to a custom scale rule: the scaler type, its metadata, and either an auth array that references secrets or, for supported Azure services, an identity ("system" or a user-assigned identity's resource ID).

Question 4 · choose 1

An embedding-lookup service in Azure Container Apps keeps a large index in memory and needs about 48 GiB of memory per replica. Load is steady around the clock, and the team prefers predictable per-instance billing over scale to zero. Which workload profile type fits?

  1. AThe Consumption profile, scaling replicas on demand and to zero
  2. BA Flexible profile (preview)
  3. CA Dedicated memory-optimized profile such as E8 or E16
  4. DA Consumption GPU profile
Show the answer and why
  • AThe Consumption profile, scaling replicas on demand and to zero

    Incorrect

    Consumption replicas top out at 4 vCPU and 8 GiB of memory, far below what this service needs.

  • BA Flexible profile (preview)

    Incorrect

    Flexible profiles offer replicas of up to 16 GiB, which is still too small, and are billed like Consumption.

  • CA Dedicated memory-optimized profile such as E8 or E16

    Correct

    Dedicated memory-optimized profiles offer 32 to 256 GiB, run on reserved compute and bill per profile instance.

  • DA Consumption GPU profile

    Incorrect

    GPU profiles target GPU workloads; this service needs memory, not GPU acceleration.

Workload profiles set the compute available to apps in an environment. Consumption suits bursty, scale-to-zero apps; Dedicated profiles run on reserved nodes in general-purpose, memory-optimized or GPU sizes and are more cost-effective for steady workloads.

Question 5 · choose 1

Pods of a deployment on AKS are Running and Ready, but requests to the ClusterIP service in front of them time out. kubectl describe service shows the correct port and target port, and Endpoints is empty. What is the most likely cause?

  1. AThe service selector doesn't match the labels on the pods
  2. BThe application inside the pods listens on 127.0.0.1 instead of 0.0.0.0
  3. CA network security group on the node subnet blocks the pod CIDR
  4. DThe service is waiting for Azure to assign an external IP address
Show the answer and why
  • AThe service selector doesn't match the labels on the pods

    Correct

    A service lists as endpoints only the pods whose labels match its selector; an empty list points to a label or selector mismatch.

  • BThe application inside the pods listens on 127.0.0.1 instead of 0.0.0.0

    Incorrect

    That makes connections to the pod IP fail, but the pods would still appear as endpoints of the service.

  • CA network security group on the node subnet blocks the pod CIDR

    Incorrect

    Blocked traffic causes timeouts, but it doesn't remove the pods from the service's endpoint list.

  • DThe service is waiting for Azure to assign an external IP address

    Incorrect

    A ClusterIP service never gets an external IP; that state belongs to a LoadBalancer service.

Troubleshoot AKS connectivity inside out: check the pod, then the service. kubectl describe service shows the endpoints the service sends traffic to; if the pod IPs aren't there, verify the labels and selectors of the pods and the service.

Question 6 · choose 1

A pod on AKS is in CrashLoopBackOff. Each new container instance fails within seconds, and you need to read the application output that the last failed instance wrote before it exited. Which command gives you that output?

  1. Akubectl get events --namespace <namespace>
  2. Bkubectl describe node <node-name>
  3. Ckubectl get pods -o wide
  4. Dkubectl logs <pod-name> --previous
Show the answer and why
  • Akubectl get events --namespace <namespace>

    Incorrect

    Events record lifecycle activity such as back-off and restarts, not the application's own stdout.

  • Bkubectl describe node <node-name>

    Incorrect

    Node details show capacity, conditions and scheduled pods, not a container's application output.

  • Ckubectl get pods -o wide

    Incorrect

    This lists pod status, IP and node, but no log output.

  • Dkubectl logs <pod-name> --previous

    Correct

    The --previous flag returns the logs of the previous container instance, which is the one that crashed.

kubectl describe pod and the cluster events explain why a pod restarts; the container's own output comes from kubectl logs, and --previous selects the instance that ran before the current restart.

Question 7 · choose 1

A pod on AKS uses DefaultAzureCredential to read a Key Vault secret with Microsoft Entra Workload ID. The cluster has the OIDC issuer and workload identity enabled, the pod runs under a service account annotated with the managed identity's client ID, and a federated credential exists. In the pod, AZURE_FEDERATED_TOKEN_FILE isn't set and authentication fails. What's missing?

  1. AA hard-coded path to the projected token in the application settings
  2. BThe Secrets Store CSI Driver add-on on the cluster
  3. CAn AcrPull role assignment for the managed identity
  4. DThe label azure.workload.identity/use set to "true" in the pod template
Show the answer and why
  • AA hard-coded path to the projected token in the application settings

    Incorrect

    Microsoft advises against hard-coding the token path; the variable is set by the webhook, which hasn't run for this pod.

  • BThe Secrets Store CSI Driver add-on on the cluster

    Incorrect

    The CSI driver mounts Key Vault content as files; it isn't needed for workload identity sign-in.

  • CAn AcrPull role assignment for the managed identity

    Incorrect

    AcrPull governs image pulls from a registry, not token issuance for Key Vault access.

  • DThe label azure.workload.identity/use set to "true" in the pod template

    Correct

    Only pods with this label are mutated by the webhook, which injects the environment variables and the projected token volume.

Workload ID relies on service account token projection and OIDC federation. The azure-workload-identity mutating webhook acts only on pods labeled azure.workload.identity/use: "true"; it then injects AZURE_FEDERATED_TOKEN_FILE and the other variables that DefaultAzureCredential reads.

Question 8 · choose 1

Testers need one URL that always reaches the current release candidate of a container app in multiple revision mode, even as new candidate revisions are deployed. Public traffic to the app's main URL must not change. What do you use?

  1. AA traffic split that sends 1 percent of the main URL's traffic to the candidate
  2. BThe revision-specific FQDN of each candidate revision
  3. CA label on the candidate revision, moved to each new candidate
  4. DA second container app named candidate in the same environment
Show the answer and why
  • AA traffic split that sends 1 percent of the main URL's traffic to the candidate

    Incorrect

    Traffic weights apply to the app's main URL, which must stay unchanged for public users.

  • BThe revision-specific FQDN of each candidate revision

    Incorrect

    Each new revision gets a new revision name, so testers would need a new URL every time.

  • CA label on the candidate revision, moved to each new candidate

    Correct

    A label gives one revision its own URL, and the URL stays the same when you move the label to another revision.

  • DA second container app named candidate in the same environment

    Incorrect

    A separate app means separate deployments and configuration instead of a stable pointer to a revision.

Labels route traffic to a specific revision through a dedicated URL. They work independently of traffic splitting, can be applied to only one revision at a time, and keep the same URL when moved.

Question 9 · choose 2

You add an HTTP scale rule to a container app without setting concurrentRequests. Which two statements about the rule are true? (Choose TWO.)

  1. AIt adds a replica when concurrent requests exceed 10, the default
  2. BKEDA polls the HTTP metric every 30 seconds
  3. CThe same rule can be attached to a Container Apps job
  4. DConcurrent requests are computed every 15 seconds from the requests in the past 15 seconds
  5. EIt scales the revision vertically by adding CPU and memory
Show the answer and why
  • AIt adds a replica when concurrent requests exceed 10, the default

    Correct

    concurrentRequests defaults to 10; above it the revision adds replicas up to maxReplicas.

  • BKEDA polls the HTTP metric every 30 seconds

    Incorrect

    The 30-second polling interval applies to event sources; it doesn't apply to HTTP and TCP rules.

  • CThe same rule can be attached to a Container Apps job

    Incorrect

    Container Apps jobs don't support HTTP scaling rules.

  • DConcurrent requests are computed every 15 seconds from the requests in the past 15 seconds

    Correct

    The platform divides the requests of the past 15 seconds by 15 on a 15-second cycle.

  • EIt scales the revision vertically by adding CPU and memory

    Incorrect

    Container Apps scales horizontally by adding replicas; vertical scaling isn't supported.

HTTP rules scale on concurrent requests to the revision. Every 15 seconds the platform calculates them as the past 15 seconds' requests divided by 15 and compares the result with concurrentRequests (default 10).

Question 10 · choose 1

You apply a manifest with a Deployment and a Service of type LoadBalancer to AKS. Right after kubectl apply, kubectl get service shows EXTERNAL-IP as <pending>. What's happening?

  1. AThe service needs type ClusterIP before it can receive an external address
  2. BThe pods failed their readiness probes, so the IP is withheld permanently
  3. CAn Ingress resource must exist before any service can get an external IP
  4. DAzure is still provisioning the load balancer's public IP
Show the answer and why
  • AThe service needs type ClusterIP before it can receive an external address

    Incorrect

    ClusterIP is internal only and never gets an external IP.

  • BThe pods failed their readiness probes, so the IP is withheld permanently

    Incorrect

    A pending external IP right after creation is normal provisioning, not a probe failure.

  • CAn Ingress resource must exist before any service can get an external IP

    Incorrect

    A LoadBalancer service gets its own IP without an Ingress controller.

  • DAzure is still provisioning the load balancer's public IP

    Correct

    A LoadBalancer service provisions an Azure load balancer and IP; watch the service until the pending value changes.

LoadBalancer services create an Azure load balancer resource with an external IP and connect the pods to its backend pool. Run kubectl get service <name> --watch until EXTERNAL-IP changes from <pending>.

Question 11 · choose 1

A deployment on AKS had pods evicted overnight. In the morning, kubectl get events shows nothing about it. You want to be able to investigate such events the next day in the future. What do you do?

  1. ARun kubectl get events with --all-namespaces the next morning
  2. BEnable Container insights to keep the events in Log Analytics
  3. CRaise the pod's terminationGracePeriodSeconds so events are kept longer
  4. DAdd a PodDisruptionBudget so that eviction events are kept longer
Show the answer and why
  • ARun kubectl get events with --all-namespaces the next morning

    Incorrect

    The events were already gone; widening the namespace scope doesn't bring back expired events.

  • BEnable Container insights to keep the events in Log Analytics

    Correct

    Kubernetes keeps events for only one hour; Container insights collects them for longer retention and querying.

  • CRaise the pod's terminationGracePeriodSeconds so events are kept longer

    Incorrect

    That setting controls shutdown time for pods, not event retention.

  • DAdd a PodDisruptionBudget so that eviction events are kept longer

    Incorrect

    A PodDisruptionBudget limits voluntary disruptions; it doesn't change how long Kubernetes keeps events.

Events capture the lifecycle of pods, nodes and other objects, with Warning and Normal types. Because Kubernetes has no event retention beyond one hour, enable Container insights to keep and query them.

Practise domain 1 →Practise all domains →