2 min read | by Jordi Prats
There are just slight differences between a Project and a Namespace in OpenShift, what can be shocking is the fact that Project's metadata is (with exceptions) immutable.
Creating a Project we'll get the Namespace object created as well:
$ kubectl get project test-project NAME DISPLAY NAME STATUS test-project Active $ kubectl get ns test-project NAME STATUS AGE test-project Active 23h
But if we try to edit the Project like so (or reapplying it's definition):
$ kubectl edit project test-project
We'll get an error if we try to add or update one labels:
* metadata.labels[test]: Invalid value: "demo": field is immutable, , try updating the namespace
* metadata.annotations[test]: Invalid value: "demo": field is immutable, try updating the namespace
As the error says, we can edit the Namespace object instead, but then it kind of misses the point of creating Projects.
There's an exception, we'll be able to update the annotations that starts with openshift.io, for example to change it's Display name:
apiVersion: project.openshift.io/v1 kind: Project metadata: annotations: openshift.io/display-name: a (...)
If you are expecting some consistency, these annotations should be immutable if we are changing them using the Namespace object, right?
$ kubectl edit ns test-project
Unfortunately, there is no such restriction, we'll be able to update all the annotations (no exceptions) using the Namespace object instead of the Project
apiVersion: v1 kind: Namespace metadata: annotations: openshift.io/display-name: b
Posted on 04/11/2022