1.4. Server-Side Apply를 사용하여 Prometheus 리소스 사용자 정의
server-Side Apply는 Kubernetes 리소스를 공동으로 관리할 수 있는 기능입니다. 컨트롤 플레인은 다양한 사용자와 컨트롤러가 Kubernetes 오브젝트 내에서 필드를 관리하는 방법을 추적합니다. 필드 관리자의 개념을 소개하고 필드의 소유권을 추적합니다. 이 중앙 집중식 제어는 충돌 감지 및 해결을 제공하며 의도하지 않은 덮어쓰기의 위험을 줄입니다.
Client-Side Apply와 비교하면 더 선언적이며 마지막으로 적용된 상태가 아니라 필드 관리를 추적합니다.
- server-Side 적용
 - 삭제하고 다시 생성할 필요 없이 리소스의 상태를 업데이트하여 선언적 구성 관리.
 - 필드 관리
 - 사용자는 다른 필드에 영향을 주지 않고 업데이트할 리소스의 필드를 지정할 수 있습니다.
 - 관리형 필드
 - 
							Kubernetes는 메타데이터 내의 
managedFields필드에 있는 각 오브젝트 필드를 관리하는 사용자에 대한 메타데이터를 저장합니다. - 충돌
 - 여러 관리자가 동일한 필드를 수정하려고 하면 충돌이 발생합니다. applier는 관리를 덮어쓰거나, 리클립싱(relinquish)하거나, 관리하도록 선택할 수 있습니다.
 - 병합 전략
 - server-Side Apply는 작업자를 관리하는 작업자에 따라 병합 필드를 적용합니다.
 
프로세스
다음 구성을 사용하여
MonitoringStack리소스를 추가합니다.MonitoringStack오브젝트의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow sample-monitoring-stack이라는 Prometheus 리소스는coo-demo네임스페이스에 생성됩니다. 다음 명령을 실행하여 생성된 Prometheus 리소스의 관리형 필드를 검색합니다.oc -n coo-demo get Prometheus.monitoring.rhobs -oyaml --show-managed-fields
$ oc -n coo-demo get Prometheus.monitoring.rhobs -oyaml --show-managed-fieldsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 
						
metadata.managedFields값을 확인하고,메타데이터및사양의 일부 필드가MonitoringStack리소스에서 관리되는지 확인합니다. MonitoringStack리소스에서 제어하지 않는 필드를 수정합니다.MonitoringStack리소스에서 설정하지 않은 필드인spec.enforcedSampleLimit를 변경합니다.prom-spec-edited.yaml파일을 생성합니다.prom-spec-edited.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 YAML을 적용합니다.
oc apply -f ./prom-spec-edited.yaml --server-side
$ oc apply -f ./prom-spec-edited.yaml --server-sideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고--server-side플래그를 사용해야 합니다.변경된 Prometheus 오브젝트를 가져오고
managedFields에spec.enforcedSampleLimit이 있는 섹션이 하나 더 있음을 확인합니다.oc get prometheus -n coo-demo
$ oc get prometheus -n coo-demoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
MonitoringStack리소스에서 관리하는 필드를 수정합니다.다음 YAML 구성을 사용하여
MonitoringStack리소스에서 관리하는 필드인spec.LogLevel을 변경합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
 spec.logLevel추가
다음 명령을 실행하여 YAML을 적용합니다.
oc apply -f ./prom-spec-edited.yaml --server-side
$ oc apply -f ./prom-spec-edited.yaml --server-sideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 
								
spec.logLevel필드는observability-operator에서 이미 관리하므로 Server-Side Apply를 사용하여 변경할 수 없습니다. --force-conflicts플래그를 사용하여 변경 사항을 강제 적용합니다.oc apply -f ./prom-spec-edited.yaml --server-side --force-conflicts
$ oc apply -f ./prom-spec-edited.yaml --server-side --force-conflictsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
prometheus.monitoring.rhobs/sample-monitoring-stack serverside-applied
prometheus.monitoring.rhobs/sample-monitoring-stack serverside-appliedCopy to Clipboard Copied! Toggle word wrap Toggle overflow --force-conflicts플래그를 사용하면 필드를 강제로 변경할 수 있지만 동일한 필드가MonitoringStack리소스에서도 관리되므로 Observability Operator는 변경 사항을 감지하고MonitoringStack리소스에서 설정한 값으로 되돌립니다.참고MonitoringStack리소스에서 생성한 일부 Prometheus 필드는MonitoringStack사양스탠자의 필드(예:logLevel)의 영향을 받습니다. 이는MonitoringStack사양을 변경하여 변경할 수 있습니다.Prometheus 오브젝트에서
logLevel을 변경하려면 다음 YAML을 적용하여MonitoringStack리소스를 변경합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항이 수행되었는지 확인하려면 다음 명령을 실행하여 로그 수준을 쿼리합니다.
oc -n coo-demo get Prometheus.monitoring.rhobs -o=jsonpath='{.items[0].spec.logLevel}'$ oc -n coo-demo get Prometheus.monitoring.rhobs -o=jsonpath='{.items[0].spec.logLevel}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
info
infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
새 버전의 Operator가 이전에 액터에 의해 생성 및 제어되는 필드를 생성하면 액터에 의해 설정된 값이 재정의됩니다.
예를 들어
MonitoringStack리소스에서 생성하지 않는enforcedSampleLimit필드를 관리하고 있습니다. Observability Operator가 업그레이드되고 새 버전의 Operator가enforcedSampleLimit에 대한 값을 생성하는 경우 이전에 설정한 값을 덮어씁니다.- 
							
MonitoringStack리소스에서 생성한Prometheus오브젝트에는 모니터링 스택에서 명시적으로 설정하지 않은 일부 필드가 포함될 수 있습니다. 이러한 필드는 기본값이 있기 때문에 나타납니다.