|
| 1 | +# Recommendation: master -> control plane |
| 2 | + |
| 3 | +**Last Updated**: 2020-10-16 |
| 4 | + |
| 5 | +**Status**: Draft |
| 6 | + |
| 7 | +## Recommendation |
| 8 | + |
| 9 | +Within the Kubernetes codebase, the term “master” is often used in reference to |
| 10 | +[the kubernetes control plane][architecture], either as a whole or to some |
| 11 | +subset of the components within. We recommend **control plane** to refer to the |
| 12 | +set of components as a whole. We recommend **context-specific alternatives** |
| 13 | +when talking about individual components or the roles they serve. |
| 14 | + |
| 15 | +## Suggested Alternatives |
| 16 | + |
| 17 | +### Control Plane |
| 18 | +- e.g. "The control plane is the set of all components responsible for |
| 19 | + controlling a kubernetes cluster" |
| 20 | +- e.g. "The control plane is the thing that can be communicated with in order to |
| 21 | + control a kubernetes cluster" |
| 22 | +- If it matters which specific component(s) or component instance is being |
| 23 | + communicated with, be specific: |
| 24 | + - endpoint, e.g. "we don't care whether a load balancer, apiserver, or other |
| 25 | + component is behind this endpoint; we will talk only to this endpoint and no |
| 26 | +other" |
| 27 | + - instance, e.g. "we are going to create multiple control plane apiserver |
| 28 | + instances; we will talk only to this specific instance" |
| 29 | + - <component name>, e.g. "we will simulate an etcd fault by running this |
| 30 | + command on instances where etcd is hosted" |
| 31 | + |
| 32 | +### Control Plane Node |
| 33 | +- "A node that hosts components that are part of the control plane", e.g. |
| 34 | + - https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/kubeadm/2067-rename-master-label-taint |
| 35 | + - https://github.com/kubernetes/kubernetes/pull/95053/files#diff-b4f6256abfd125f7ce69fd1ba1eaf595R886 |
| 36 | +- Also relevant for terms other than node, e.g. control plane machine, control |
| 37 | + plane host, control plane vm, control plane instance, e.g. |
| 38 | + - https://github.com/kubernetes/kubernetes/blob/99cc89b7da32d9c06916deb50b27fdb46934b777/cluster/gce/gci/master-helper.sh#L33 |
| 39 | + should be `create-control-plane-instance` |
| 40 | + |
| 41 | +### Leader |
| 42 | +- e.g. "The leader is the winner of a leader election" |
| 43 | +- When using an adjective instead of a noun to describe this concept, there is |
| 44 | + likely a more specific term: |
| 45 | + - active/passive, e.g. "The active controller-manager process is the one that |
| 46 | + wins its leader election" |
| 47 | + - primary/replica |
| 48 | + |
| 49 | +## Other Considerations |
| 50 | +- if the api field, flag, code, command etc. uses the literal word 'master' and |
| 51 | + cannot be immediately changed or has no alternative available, use this word |
| 52 | +only in direct reference to the code item |
| 53 | + - `master` branch being renamed to `main` branch falls under this |
| 54 | +- there are no strict guarantees about how and where control plane components |
| 55 | + can and will run, e.g. |
| 56 | + - they may run on machines that are not registered as Nodes for the Kubernetes |
| 57 | + cluster they control |
| 58 | + - they may run alongside user workloads on Nodes in the Kubernetes cluster |
| 59 | + they control |
| 60 | + - there may be one to many instances of each control plane component |
| 61 | +- When using terminology that could be seen as generic, consider whether there |
| 62 | + is enough context available to disambiguate potential meanings for the reader. |
| 63 | +e.g. |
| 64 | + - "instance" - an instance of what? |
| 65 | + - "apiserver" - is this a generic apiserver? is this a kubernetes apiserver? |
| 66 | + is this an apiserver that has been configured to be part of the kubernetes |
| 67 | +control plane? |
| 68 | + - "endpoint" - what's at the other end of this endpoint? |
| 69 | + |
| 70 | +## Context |
| 71 | + |
| 72 | +Master raises first-order concerns according to [our language evaluation |
| 73 | +framework][framework]: |
| 74 | +- it is overtly racist (ref: [django][django-master], [Drupal][drupal-master], |
| 75 | + [IETF][ietf-master], |
| 76 | +[Google][https://developers.google.com/style/word-list#master]) |
| 77 | + |
| 78 | +Master also raises third-order concerns: |
| 79 | +- within kubernetes it is used to represent a variety of overlapping or |
| 80 | + unrelated concepts (see the variety of suggested alternatives) |
| 81 | +- one class of usage represents a set of false assumptions: |
| 82 | + - there is exactly one instance of each control plane component |
| 83 | + - there is exactly one kubernetes node that hosts all of these components |
| 84 | + - these components are guaranteed to run in a specific manner (systemd units, |
| 85 | + on certain ports, etc.) |
| 86 | + |
| 87 | +Prior discussions: |
| 88 | +- [kubernetes-wg-naming@ - proposal: master/slave |
| 89 | + alternatives][wg-naming-thread] |
| 90 | +- [kubernetes-sig-architecture@ - Re: the way we discuss control plane |
| 91 | + members][sig-arch-thread] |
| 92 | + |
| 93 | +## Consequences |
| 94 | + |
| 95 | +TODO |
| 96 | + |
| 97 | +- hound search that approximates excluding some master-branch-in-docs |
| 98 | + references, and references in vendor/: |
| 99 | +https://cs.k8s.io/?q=master%5B%5E%2F%5D&i=nope&files=%5E%5B%5Ev%5D&repos= |
| 100 | +- references to master in test/e2e/framework |
| 101 | + (https://github.com/kubernetes/kubernetes/issues/94901) |
| 102 | +- references to master in test/integration |
| 103 | + (https://github.com/kubernetes/kubernetes/issues/94900) |
| 104 | +- known names/flags/fields/labels/annotations that may take time to change |
| 105 | + - `"system:masters"` aka |
| 106 | + [k8s.io/apiserver/pkg/authentication/user.SystemPrivilegedGroup][system-privileged-group] |
| 107 | + - `node-role.kubernetes.io/master` (tracking issue for KEP |
| 108 | + https://github.com/kubernetes/enhancements/issues/2067) |
| 109 | + - `--endpoint-reconciler-type master-count` |
| 110 | + - probably more |
| 111 | + |
| 112 | +[architecture]: https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md#architecture |
| 113 | +[wg-naming-thread]: https://groups.google.com/g/kubernetes-wg-naming/c/VqrBCdUHdPc |
| 114 | +[sig-arch-thread]: https://groups.google.com/u/1/g/kubernetes-sig-architecture/c/ZKUOPy2PNJ4/m/q3dC6pNtBQAJ |
| 115 | +[framework]: https://git.k8s.io/community/wg-naming/language-evaluation-framework.md |
| 116 | +[ietf-master]: https://tools.ietf.org/id/draft-knodel-terminology-00.html#master-slave |
| 117 | +[drupal-master]: https://www.drupal.org/node/2275877 |
| 118 | +[django-master]: https://github.com/django/django/pull/2692 |
| 119 | +[system-privileged-group]: https://github.com/kubernetes/kubernetes/blob/a9d1482710a4c4baf112890882f4ab3d4be158a6/staging/src/k8s.io/apiserver/pkg/authentication/user/user.go#L71 |
0 commit comments