MCO는 Cluster level의 오퍼레이터로 Openshift Container Platform에서 노드의 운영체제를 최신으로 유지하고 관리한다. MCO를 통해서 노드의 systemd, cri-o/kubelet, kernel, NetworkManager 등을 관리할 수 있다. 그렇게 하기 위해 MCO는 렌더링 된 각 노드의 MachineConfig 파일을 생성하고 이 설정대로 각 노드의 Machine Config Daemon에 의해 업데이트된다.
MachineConfigMachine configuration의 소스이며 노드의 First-boot와 업그레이드, 설치에 사용된다. MachineConfig는 정적이어야 한다(동적으로 configuration을 생성하는 link나 remote location을 포함해서는 안된다).
MachineConfigPoolRoleBinding과 비슷하게 사용된다. Node : MachineConfig = User : Role
렌더 컨트롤러가 MachineConfigPool객체의 변화를 감지하여 정적 Machine config 객체를 생성하고 이후 적용된다.

MachineConfig 객체에 정의된 desired configuration으로 노드들을 업그레이드 한다.
노드를 직접 업데이트하거나 클러스터에 조인하려는 노드에 ignition config를 제공하는 역할은 담당하지 않는다.
predefined role을 위한 MachineConfig를 생성하는 역할(master, worker)
OpenShift-owned MachineConfigs를 생성하기위해 controller config를 감시한다.
각 노드의 MachineConfigDaemon과 협력하여 desired MachineConfig에 맞도록 업그레이드 하는 역할. UpdateController는 .Status.CurrentMachineConfig 가 업데이트 되었는지 감시한다.
MachineConfigPool에 정의된 MachineConfigSelector를 기반으로 desired MachineConfig 객체를 생성함.
MachineConfigSelector를 사용하여 모든 MachineConfig 객체를 찾고, 생성된 MachineConfig로 CurrentMachineConfig를 업데이트하기 위해 MachineConfigPool 객체의 변화를 관찰한다.MachineConfig 객체의 변화를 감시하고 모든 MachineConfigPool 객체를 새로운 CurrentMachineConfig와 동기화한다.KubeletConfig CRD를 관리한다. KubeletConfig CRDs의 변화를 감시하고, 변경사항을 merge한다.
KubeletConfig를 Validate.KubeletConfiguration구조체에 current MachineConfig를 렌더한다.KubeletConfig 인스턴스를 로드한다.mergo라이브러리를 통해 두 구조체를 병합한다.KubeletConfig를 JSON으로 변환한다./etc/kubernetes/kubelet.conf와 함께 MachineConfig를 생성하거나 업데이트한다.Ignition config를 클러스터에 들어오는 새로운 노드에게 제공. 마스터 노드에서 데몬셋으로 실행될 것을 권장.
/config/<machine-config-pool-name> Endpoint에서 Ignition 제공.
업데이트 중 새로운 MachineConfig를 적용하거나, 요청된 MachineConfig와 현재 상태가 맞는지 검증한다.MachineConfigDaemon은 노드에서 스크립트를 실행하지 않는다.
클러스터 내에서 DaemonSet으로 실행되며, Openshift4내의 노드 업데이트를 수행한다. 업데이트는 systemd units, files on dist, OS upgrade 등을 포함한다. MachineConfigDaemon은 MachineConfigController에 조정된 MachineConfig에 의해 정의된 configuration에 맞도록 업데이트한다.

currentConfig = desiredConfig로 설정했을 때 ->DoneWorkingDegraded