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
Or annotations
* 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