GithubHelp home page GithubHelp logo

letubert / machine-config-operator Goto Github PK

View Code? Open in Web Editor NEW

This project forked from openshift/machine-config-operator

0.0 3.0 0.0 7.57 MB

License: Apache License 2.0

Makefile 0.41% Go 97.65% Shell 1.93%

machine-config-operator's Introduction

machine-config-operator

This operator is an integral part of the operator-focused OpenShift 4 platform. It manages and applies configuration and updates of the base operating system and container runtime; essentially everything between the kernel and kubelet.

The approach here is a "fusion" of code from the original CoreOS Tectonic as well as some components of Red Hat Enterprise Linux Atomic Host, as well as some fundamentally new design.

The MCO (for short) interacts closely with both the installer as well as Red Hat CoreOS. See also the machine-api-operator which handles provisioning of new machines - once the machine-api-operator provisions a machine (with a "pristine" base Red hat CoreOS), the MCO will take care of configuring it.

One way to view the MCO is to treat the operating system itself as "just another Kubernetes component" that you can inspect and manage with oc.

The MCO uses CoreOS Ignition as a configuration format. Operating system updates use rpm-ostree.

Sub-components and design

This operator is split into 4 components; the above covers the operator. Here are links to design docs for the sub-components:

Interacting with the MCO

View operator status: oc describe clusteroperator/machine-config-operator

Inspect the status of the machineconfigpool objects which track upgrades: oc describe machineconfigpool

Applying configuration changes to the cluster

The MCO has "high level" knobs for some components of the cluster state; for example, SSH keys and kubelet configuration. However, there are obviously a quite large number of things one may want to configure on a system. For example, offline environments may want to specify an internal NTP pool. Another example is static network configuration. By providing a MachineConfig object containing Ignition configuration, systemd units can be provided, arbitrary files can be laid down into /etc and /var, etc.

One known ergonomic issue right now for supplying files is that you must encode file contents via data: URIs. This is part of the current Ignition specification.

In the example below, the mode is in octal (notice the leading 0); however, decimal is the canonical representation for mode when inspecting MachineConfigs (in the example, it's 420 below).

This example MachineConfig object replaces /etc/chrony.conf with some custom NTP time servers; see the chrony docs.

# This example MachineConfig replaces /etc/chrony.conf
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 50-examplecorp-chrony
spec:
  config:
    storage:
      files:
      - contents:
          source: data:,server%20foo.example.net%20maxdelay%200.4%20offline%0Aserver%20bar.example.net%20maxdelay%200.4%20offline%0Aserver%20baz.example.net%20maxdelay%200.4%20offline
        filesystem: root
        mode: 0644
        path: /etc/chrony.conf
# oc get machineconfigs -o yaml 50-examplecorp-chrony
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  creationTimestamp: 2019-02-03T16:51:18Z
  generation: 1
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 50-examplecorp-chrony
  resourceVersion: "24634"
  selfLink: /apis/machineconfiguration.openshift.io/v1/machineconfigs/50-examplecorp-chrony
  uid: ed13afd1-27d3-11e9-a281-067ebaf71038
spec:
  config:
    storage:
      files:
      - contents:
          source: data:,server%20foo.example.net%20maxdelay%200.4%20offline%0Aserver%20bar.example.net%20maxdelay%200.4%20offline%0Aserver%20baz.example.net%20maxdelay%200.4%20offline
          verification: {}
        filesystem: root
        mode: 420
        path: /etc/chrony.conf

The controller will notice the new MachineConfig and generate a new "rendered" version that looks like worker-<hash>. Use oc describe machineconfigpool/worker to monitor the status of the rollout of the new rendered config to each node.

Note this configuration only applies to workers (see the role: worker label); currently if you want to apply to both master and workers, you must create two separate MachineConfig objects.

Practically speaking, one may find it useful to generate your custom MachineConfig objects from a higher level tool. Although in the future ergonomic improvements are planned such as having a single MC apply to multiple labels, inline file encoding, etc.

Developing the MCO

See HACKING.md.

machine-config-operator's People

Contributors

abhinavdahiya avatar ashcrow avatar cgwalters avatar crawford avatar deads2k avatar derekwaynecarr avatar flaper87 avatar gnufied avatar hexfusion avatar jlebon avatar kikisdeliveryservice avatar lorbuschris avatar michaelgugino avatar openshift-merge-robot avatar paulfantom avatar rphillips avatar runcom avatar sdemos avatar sjenning avatar smarterclayton avatar squeed avatar sttts avatar umohnani8 avatar vrutkovs avatar wking avatar yuqi-zhang avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.