Skip to content

Add Watson daemon set to HCP cluster to meet KPI - #6820

Open
Jonathan CHang (jonathan34c) wants to merge 1 commit into
mainfrom
jonachang/hcpwatson
Open

Add Watson daemon set to HCP cluster to meet KPI#6820
Jonathan CHang (jonathan34c) wants to merge 1 commit into
mainfrom
jonachang/hcpwatson

Conversation

@jonathan34c

@jonathan34c Jonathan CHang (jonathan34c) commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

https://redhat.atlassian.net/jira/software/c/projects/ARO/boards/3274?assignee=64066bea4d5e4b44e233a4c8&selectedIssue=[ARO-29045](https://redhat.atlassian.net/browse/ARO-29045)

What

The Azure Watson container accesses coredumps from the service container once the generated coredumps is saved to a directory (also called incoming queue) on the host node. Azure Watson container relies on host node mounts to persist the dump files on the host node if the container stops unexpectedly and also to store larger dump files.

Why

We need to add watson daemon set to every cluster required by aks to meet KPI.

Testing

MGMT:

jonachang@DESKTOP-09U5LAV:~/microsoft/sdp-pipelines$ kubectl -n arobit get pods -l app.kubernetes.io/name=arobit-forwarder   -o custom-columns=NAME:.metadata.name,READY:.status.containerStatuses[*].ready,CONTAINERS:.spec.containers[*].name --no-headers
arobit-forwarder-22ksm   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-2q5tv   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-5xhxf   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-7hthq   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-8fth8   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-bz2kb   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-csjzc   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-dn96k   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-h7tcj   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-lpsqq   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-mfnch   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-nhz96   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-pkmfg   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-rgdxh   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-sb2tm   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-skfft   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-td5t9   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-whxpz   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-x6bms   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-xf86r   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-zs2hj   true,true,true,true    fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog
arobit-forwarder-zvz7v   true,true,true,false   fluentbit,watson-agent,mdsd-clusterlogs,mdsd-cert-watchdog

SVC:

jonachang@DESKTOP-09U5LAV:~/microsoft/sdp-pipelines$ kubectl -n arobit get pods -l app.kubernetes.io/name=arobit-forwarder \
  -o custom-columns=NAME:.metadata.name,READY:.status.containerStatuses[*].ready,CONTAINERS:.spec.containers[*].name --no-headers
arobit-forwarder-2p452   true,true   fluentbit,watson-agent
arobit-forwarder-6qpkw   true,true   fluentbit,watson-agent
arobit-forwarder-7fl9h   true,true   fluentbit,watson-agent
arobit-forwarder-8kpq4   true,true   fluentbit,watson-agent
arobit-forwarder-g2vxk   true,true   fluentbit,watson-agent
arobit-forwarder-gxvjt   true,true   fluentbit,watson-agent
arobit-forwarder-jcphh   true,true   fluentbit,watson-agent
arobit-forwarder-lcbtr   true,true   fluentbit,watson-agent
arobit-forwarder-p2n7z   true,true   fluentbit,watson-agent
arobit-forwarder-vgkrj   true,true   fluentbit,watson-agent
jonachang@DESKTOP-09U5LAV:~/microsoft/sdp-pipelines$ kubectl -n arobit get ds arobit-forwarder -o jsonpath='{.spec.template.spec.containers[*].name}'; echo
fluentbit watson-agent

Testing is required for feature completion and tests should be part of the pull
request along with the feature changes.

Describe the testing provided. If you did not add tests, provide a clear
justification.

Special notes for your reviewer

PR Checklist

  • PR is scoped to a single task (no mixed concerns)
  • Title follows Conventional Commits format
  • Summary explains the "Why" behind the change
  • Linked to relevant ticket/issue
  • Screenshots included (if dashboards or other UI changes)
  • Self-reviewed the diff
  • CI/CD checks are passing (ignore Tide)
  • Draft PR used for WIP (if applicable)
  • Commit history is clean (rebased/squashed)
  • Tricky code blocks are commented
  • Specific reviewers tagged
  • All comment threads resolved before merge

If E2E tests are included:

  • E2E tests follow Principles of Good E2E Test Case Design
  • If new E2E use case is covered (via a new test or new check/verifier),
    demonstrate that the test is able to detect a defect/error and fail with
    proper error message and logs which communicates nature of the problem.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The forwarder DaemonSet template introduces a functional regression risk for Shoebox logs (missing /shoebox-config mount in Fluent Bit) and includes dead/unwired Watson values that should be corrected before merge.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR adds the Azure Watson agent to the arobit-forwarder DaemonSet (svc and mgmt clusters) via new Helm values, wires Watson image/resources/securityContext into config/config.yaml + schema, and updates the rendered configs and Helm fixtures accordingly.

Changes:

  • Add watson configuration blocks to arobit svc/mgmt values and inject a watson-agent container + volumes into the forwarder-daemonset Helm template.
  • Extend config/config.yaml defaults and config/config.schema.json to include arobit.watson settings, then re-render dev configs.
  • Update Helm template fixtures / dev-infrastructure rendered fixtures to reflect the new container and volumes.
File summaries
File Description
observability/arobit/values-svc.yaml Adds Watson values for svc clusters.
observability/arobit/values-mgmt.yaml Adds Watson values for mgmt clusters.
observability/arobit/deploy/templates/forwarder-daemonset.yaml Adds watson-agent container and watson-crashdump volume to the forwarder DaemonSet.
observability/arobit/testdata/zz_fixture_TestHelmTemplate_helmtest_mdsd_and_kusto_enabled_svc.yaml Updates Helm fixture output for svc (mdsd+kusto enabled).
observability/arobit/testdata/zz_fixture_TestHelmTemplate_helmtest_mdsd_and_kusto_enabled_mgmt.yaml Updates Helm fixture output for mgmt (mdsd+kusto enabled).
observability/arobit/testdata/zz_fixture_TestHelmTemplate_helmtest_kusto_unlimited_memory_svc.yaml Updates Helm fixture output for svc (kusto unlimited memory).
observability/arobit/testdata/zz_fixture_TestHelmTemplate_helmtest_kusto_disabled_svc.yaml Updates Helm fixture output for svc (kusto disabled).
observability/arobit/testdata/zz_fixture_TestHelmTemplate_helmtest_buffering_disabled_svc.yaml Updates Helm fixture output for svc (buffering disabled).
dev-infrastructure/zz_fixture_TestHelmTemplate_dev_westus3_svc_1_arobit.yaml Updates rendered dev-infra fixture for svc.
dev-infrastructure/zz_fixture_TestHelmTemplate_dev_westus3_mgmt_1_arobit.yaml Updates rendered dev-infra fixture for mgmt.
config/rendered/dev/pers/westus3.yaml Materialized config includes new arobit.watson block.
config/rendered/dev/perf/westus3.yaml Materialized config includes new arobit.watson block.
config/rendered/dev/dev/westus3.yaml Materialized config includes new arobit.watson block.
config/rendered/dev/cspr/westus3.yaml Materialized config includes new arobit.watson block.
config/rendered/dev/ci01/centralus.yaml Materialized config includes new arobit.watson block.
config/rendered/dev/ci00/centralus.yaml Materialized config includes new arobit.watson block.
config/config.yaml Adds default arobit.watson configuration (image/resources/securityContext/volumes).
config/config.schema.json Adds schema for arobit.watson.
Review details

Suppressed comments (2)

observability/arobit/values-svc.yaml:121

  • watson.volumes.mdsdSocketHostPath is defined here but not referenced by the Helm templates, so it currently has no effect. Either wire it into the DaemonSet volume definition or remove it to avoid dead configuration.
  volumes:
    crashdumpHostPath: "{{ .arobit.watson.volumes.crashdumpHostPath }}"
    mdsdSocketHostPath: "/var/run/mdsd"

observability/arobit/values-mgmt.yaml:121

  • watson.volumes.mdsdSocketHostPath is defined here but not referenced by the Helm templates, so it currently has no effect. Either wire it into the DaemonSet volume definition or remove it to avoid dead configuration.
  volumes:
    crashdumpHostPath: "{{ .arobit.watson.volumes.crashdumpHostPath }}"
    mdsdSocketHostPath: "/var/run/mdsd"
  • Files reviewed: 18/18 changed files
  • Comments generated: 4
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines 102 to +106
- name: flb-config
mountPath: /forwarder/etc
readOnly: true
- name: watson-agent
image: {{ .Values.watson.image.registry }}/{{ .Values.watson.image.repository }}@{{ .Values.watson.image.digest }}
Comment thread observability/arobit/deploy/templates/forwarder-daemonset.yaml
Comment thread observability/arobit/values-mgmt.yaml
Comment thread observability/arobit/values-svc.yaml

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

It introduces dead/unused configuration (watson.volumes.mdsdSocketHostPath) and the PR metadata is not compliant with CONTRIBUTING.md (missing filled-in Why + ticket link).

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 18/18 changed files
  • Comments generated: 3
  • Review effort level: Lite

Comment thread config/config.yaml
Comment on lines +181 to +185
watson:
image:
registry: mcr.microsoft.com
repository: azure-watson/agent/azlinux3
digest: sha256:8e5ef3e76be33794cef7460712eb9ff0c73bce8b8e5ffc33c5c6bfe0762f5db0 # 1.24.128.0
Comment thread observability/arobit/values-mgmt.yaml Outdated
Comment thread observability/arobit/values-svc.yaml Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

It introduces a privileged, hostPath-mounting daemonset across clusters, which is security-sensitive and warrants final human review despite only minor fixups being needed.

Review details

Suppressed comments (2)

observability/arobit/values-svc.yaml:117

  • watson.volumes.mdsdSocketHostPath is defined here but isn’t referenced anywhere in the arobit Helm templates (only watson.volumes.crashdumpHostPath is used). Leaving unused values around is confusing and suggests there’s a missing chart wiring; either wire it into the DaemonSet template or remove it until needed.
  volumes:
    crashdumpHostPath: "{{ .arobit.watson.volumes.crashdumpHostPath }}"
    mdsdSocketHostPath: "/var/run/mdsd"

observability/arobit/values-mgmt.yaml:117

  • watson.volumes.mdsdSocketHostPath is defined here but isn’t referenced anywhere in the arobit Helm templates (only watson.volumes.crashdumpHostPath is used). Leaving unused values around is confusing and suggests there’s a missing chart wiring; either wire it into the DaemonSet template or remove it until needed.
  volumes:
    crashdumpHostPath: "{{ .arobit.watson.volumes.crashdumpHostPath }}"
    mdsdSocketHostPath: "/var/run/mdsd"
  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@jonathan34c

Copy link
Copy Markdown
Contributor Author

/retest-required

@jonathan34c

Copy link
Copy Markdown
Contributor Author

/test e2e-parallel

@jonathan34c

Copy link
Copy Markdown
Contributor Author

/retest-required

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The new watson.volumes.mdsdSocketHostPath value is introduced in Helm values but is unused by the chart, which is misleading and suggests incomplete wiring.

Review details

Suppressed comments (2)

observability/arobit/values-svc.yaml:117

  • watson.volumes.mdsdSocketHostPath is defined but not referenced anywhere in the arobit Helm templates (the watson-agent mounts mdsd-run-clusterlogs emptyDir instead). This unused value is misleading and makes it unclear whether the intent was to mount the host’s /var/run/mdsd into the pod.
  volumes:
    crashdumpHostPath: "{{ .arobit.watson.volumes.crashdumpHostPath }}"
    mdsdSocketHostPath: "/var/run/mdsd"

observability/arobit/values-mgmt.yaml:117

  • watson.volumes.mdsdSocketHostPath is defined but not referenced anywhere in the arobit Helm templates (the watson-agent mounts mdsd-run-clusterlogs emptyDir instead). This unused value is misleading and makes it unclear whether the intent was to mount the host’s /var/run/mdsd into the pod.
  volumes:
    crashdumpHostPath: "{{ .arobit.watson.volumes.crashdumpHostPath }}"
    mdsdSocketHostPath: "/var/run/mdsd"
  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

There’s a mismatch between the PR’s stated “Watson daemon set” intent and the actual implementation (sidecar in an existing DaemonSet), and a small Helm-template indentation issue should be corrected for maintainability.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 18/18 changed files
  • Comments generated: 2
  • Review effort level: Lite

Comment on lines +105 to +109
{{- if and .Values.forwarder.mdsd.enabled (eq .Values.forwarder.clusterType "mgmt") }}
- name: shoebox-mappings
mountPath: /shoebox-config
readOnly: true
{{- end }}
Comment on lines +110 to +113
- name: watson-agent
image: {{ .Values.watson.image.registry }}/{{ .Values.watson.image.repository }}@{{ .Values.watson.image.digest }}
imagePullPolicy: '{{ .Values.watson.image.pullPolicy }}'
env:
@jonathan34c

Copy link
Copy Markdown
Contributor Author

/retest

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm
/approve

@openshift-ci

openshift-ci Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: jonathan34c, stevekuznetsov

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Copilot AI review requested due to automatic review settings September 10, 2026 21:23
@openshift-ci openshift-ci Bot removed the lgtm label Sep 10, 2026
@openshift-ci

openshift-ci Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

New changes are detected. LGTM label has been removed.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved merge conflict markers remain in the Helm template and a generated fixture, which will break rendering/tests until resolved.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 18/18 changed files
  • Comments generated: 2
  • Review effort level: Lite

Comment thread observability/arobit/deploy/templates/forwarder-daemonset.yaml Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Fix service-cluster MDSD volume integration and rename the PR with a Conventional Commits prefix.

Review details

Suppressed comments (2)

config/config.yaml:187

  • The PR title Add Watson daemon set to HCP cluster to meet KPI does not use the required Conventional Commits prefix from CONTRIBUTING.md:79-83; please rename it, for example, to feat: add Watson daemon set to HCP cluster to meet KPI.
    watson:

observability/arobit/deploy/templates/forwarder-daemonset.yaml:358

  • On the svc chart, this emptyDir is the only backing volume for Watson's /var/run/mdsd, but the mdsd-clusterlogs container is gated to clusterType == "mgmt" above, so no process populates it. Service-cluster nodes expose Geneva through the host's /var/run/mdsd (docs/mise.md:51-56); with this volume, MDSD_ROLE_PREFIX=/var/run/mdsd/asa/ cannot reach the socket and Watson reports will not be sent. Select a /var/run/mdsd hostPath for svc while retaining emptyDir for mgmt.
        - name: mdsd-run-clusterlogs
          emptyDir: {}
  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The PR title lacks the required Conventional Commits prefix, and Watson's image digest is not tracked by the image-update workflow.

Review details

Suppressed comments (2)

config/config.yaml:187

  • The PR title does not use the repository's required Conventional Commits prefix. Please rename it to something like feat: add Watson DaemonSet to HCP clusters before merging.
    watson:

config/config.yaml:191

  • This introduces a third Arobit image, but tooling/image-updater/config.yaml:108-126 only tracks the forwarder and mdsd images. Consequently future Watson digest updates will not be picked up by the repository's image-update workflow, leaving this privileged agent pinned indefinitely unless updated manually. Add an updater component targeting defaults.arobit.watson.image.digest (or document why this image is intentionally excluded).
        digest: sha256:8e5ef3e76be33794cef7460712eb9ff0c73bce8b8e5ffc33c5c6bfe0762f5db0 # 1.24.128.0
  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@openshift-ci

openshift-ci Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Jonathan CHang (@jonathan34c): The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-parallel c99d95a link true /test e2e-parallel

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants