mirror of
https://github.com/openshift/openshift-docs.git
synced 2026-02-05 12:46:18 +01:00
190 lines
5.5 KiB
Plaintext
190 lines
5.5 KiB
Plaintext
// Module included in the following assemblies:
|
|
//
|
|
// * storage/container_storage_interface/persistent-storage-csi-vol-populators.adoc
|
|
|
|
:_mod-docs-content-type: PROCEDURE
|
|
[id="persistent-storage-csi-vol-populator-procedure-admin_{context}"]
|
|
= Creating CRDs for volume populators
|
|
|
|
The following procedure explains how to create an example "hello, world" custom resource definition (CRD) for a volume populator.
|
|
|
|
Users can then create instances of this CRD to populate persistent volume claims (PVCs).
|
|
|
|
.Prerequisites
|
|
|
|
* Access to the {product-title} web console.
|
|
|
|
* Access to the cluster with cluster-admin privileges.
|
|
|
|
.Procedure
|
|
|
|
. Create a namespace for the logical grouping and operation of the populator, and related resources, using the following example YAML file:
|
|
+
|
|
.Example namespace YAML file
|
|
[source,yaml]
|
|
----
|
|
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: hello
|
|
----
|
|
|
|
. Create a CRD for your data source using the following example YAML file:
|
|
+
|
|
.Example CRD YAML file
|
|
[source,yaml]
|
|
----
|
|
apiVersion: apiextensions.k8s.io/v1
|
|
kind: CustomResourceDefinition
|
|
metadata:
|
|
name: hellos.hello.example.com
|
|
spec:
|
|
group: hello.example.com
|
|
names:
|
|
kind: Hello
|
|
listKind: HelloList
|
|
plural: hellos
|
|
singular: hello
|
|
scope: Namespaced
|
|
versions:
|
|
- name: v1alpha1
|
|
schema:
|
|
openAPIV3Schema:
|
|
description: Hello is a specification for a Hello resource
|
|
properties:
|
|
apiVersion:
|
|
description: 'APIVersion defines the versioned schema of this representation
|
|
of an object. Servers should convert recognized schemas to the latest
|
|
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
|
type: string
|
|
kind:
|
|
description: 'Kind is a string value representing the REST resource this
|
|
object represents. Servers may infer this from the endpoint the client
|
|
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
|
type: string
|
|
spec:
|
|
description: HelloSpec is the spec for a Hello resource
|
|
properties:
|
|
fileContents:
|
|
type: string
|
|
fileName:
|
|
type: string
|
|
required:
|
|
- fileContents
|
|
- fileName
|
|
type: object
|
|
required:
|
|
- spec
|
|
type: object
|
|
served: true
|
|
storage: true
|
|
----
|
|
|
|
. Deploy the controller by creating a `ServiceAccount`, `ClusterRole`, `ClusterRoleBindering`, and `Deployment` to run the logic that implements the population:
|
|
|
|
.. Create a service account for the populator using the following example YAML file:
|
|
+
|
|
.Example service account YAML file
|
|
[source,yaml]
|
|
----
|
|
apiVersion: v1
|
|
kind: ServiceAccount
|
|
metadata:
|
|
name: hello-account
|
|
namespace: hello <1>
|
|
----
|
|
<1> Reference the namespace that you created earlier.
|
|
|
|
.. Create a cluster role for the populator using the following example YAML file:
|
|
+
|
|
.Example cluster role YAML file
|
|
[source,yaml]
|
|
----
|
|
kind: ClusterRole
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
metadata:
|
|
name: hello-role
|
|
rules:
|
|
- apiGroups: [hello.example.com]
|
|
resources: [hellos]
|
|
verbs: [get, list, watch]
|
|
----
|
|
|
|
.. Create a cluster role binding using the following example YAML file:
|
|
+
|
|
.Example cluster role binding YAML file
|
|
[source,yaml]
|
|
----
|
|
kind: ClusterRoleBinding
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
metadata:
|
|
name: hello-binding <1>
|
|
subjects:
|
|
- kind: ServiceAccount
|
|
name: hello-account <2>
|
|
namespace: hello <3>
|
|
roleRef:
|
|
kind: ClusterRole
|
|
name: hello-role <4>
|
|
apiGroup: rbac.authorization.k8s.io
|
|
----
|
|
<1> Role binding name.
|
|
<2> Reference the name of the service account that you created earlier.
|
|
<3> Reference the name of the namespace for the service account that you created earlier.
|
|
<4> Reference the cluster role you created earlier.
|
|
|
|
.. Create a Deployment for the populator using the following example YAML file:
|
|
+
|
|
.Example deployment YAML file
|
|
[source,yaml]
|
|
----
|
|
kind: Deployment
|
|
apiVersion: apps/v1
|
|
metadata:
|
|
name: hello-populator
|
|
namespace: hello <1>
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app: hello
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: hello
|
|
spec:
|
|
serviceAccount: hello-account <2>
|
|
containers:
|
|
- name: hello
|
|
image: registry.k8s.io/sig-storage/hello-populator:v1.0.1
|
|
imagePullPolicy: IfNotPresent
|
|
args:
|
|
- --mode=controller
|
|
- --image-name=registry.k8s.io/sig-storage/hello-populator:v1.0.1
|
|
- --http-endpoint=:8080
|
|
ports:
|
|
- containerPort: 8080
|
|
name: http-endpoint
|
|
protocol: TCP
|
|
----
|
|
<1> Reference the namespace that you created earlier.
|
|
<2> Reference the service account that you created earlier.
|
|
|
|
. Create a volume populator to register the `kind:Hello` resource as a valid data source for the volume using the following example YAML file:
|
|
+
|
|
.Example volume populator YAML file
|
|
[source,yaml]
|
|
----
|
|
kind: VolumePopulator
|
|
apiVersion: populator.storage.k8s.io/v1beta1
|
|
metadata:
|
|
name: hello-populator <1>
|
|
sourceKind:
|
|
group: hello.example.com
|
|
kind: Hello
|
|
----
|
|
<1> Volume populator name.
|
|
+
|
|
PVCs that use an unregistered populator generate an event: "The datasource for this PVC does not match any registered VolumePopulator", indicating that the PVC might not be provisioned because you are using an unknown (unregistered) populator.
|
|
|
|
.Next steps
|
|
* You can now create CR instances of this CRD to populate PVCs. |