From 04954fcb040949770879ca4255eff2499e84f323 Mon Sep 17 00:00:00 2001 From: Richard Robert Reitz Date: Wed, 13 Nov 2024 09:05:04 +0100 Subject: [PATCH] Added documentation for crossplane provider-kind --- .../docs/solution/tools/Crossplane/_index.md | 4 + .../tools/Crossplane/provider-kind/_index.md | 706 ++++++++++++++++++ .../provider-kind/composition.drawio | 72 ++ .../Crossplane/provider-kind/composition.png | Bin 0 -> 41072 bytes .../provider-kind/kindserver_interface.drawio | 31 + .../provider-kind/kindserver_interface.png | Bin 0 -> 19357 bytes .../kindserver_provider-kind.drawio | 49 ++ .../kindserver_provider-kind.png | Bin 0 -> 26384 bytes .../provider-kind_providerconfig.drawio | 71 ++ .../provider-kind_providerconfig.png | Bin 0 -> 36166 bytes 10 files changed, 933 insertions(+) create mode 100644 content/en/docs/solution/tools/Crossplane/_index.md create mode 100644 content/en/docs/solution/tools/Crossplane/provider-kind/_index.md create mode 100644 content/en/docs/solution/tools/Crossplane/provider-kind/composition.drawio create mode 100644 content/en/docs/solution/tools/Crossplane/provider-kind/composition.png create mode 100644 content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_interface.drawio create mode 100644 content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_interface.png create mode 100644 content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.drawio create mode 100644 content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.png create mode 100644 content/en/docs/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.drawio create mode 100644 content/en/docs/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.png diff --git a/content/en/docs/solution/tools/Crossplane/_index.md b/content/en/docs/solution/tools/Crossplane/_index.md new file mode 100644 index 0000000..a6f2168 --- /dev/null +++ b/content/en/docs/solution/tools/Crossplane/_index.md @@ -0,0 +1,4 @@ +--- +title: Crossplane +description: Crossplane is a tool to provision cloud resources. it can act as a backend for platform orchestrators as well +--- diff --git a/content/en/docs/solution/tools/Crossplane/provider-kind/_index.md b/content/en/docs/solution/tools/Crossplane/provider-kind/_index.md new file mode 100644 index 0000000..53bc597 --- /dev/null +++ b/content/en/docs/solution/tools/Crossplane/provider-kind/_index.md @@ -0,0 +1,706 @@ +--- +title: Howto develop a crossplane kind provider +weight: 1 +description: A provider-kind allows using crossplane locally +--- + +To support local development and usage of crossplane compositions, a crossplane provider is needed. +Every big hyperscaler already has support in crossplane (e.g. provider-gcp and provider-aws). + +Each provider has two main parts, the provider config and implementations of the cloud resources. + +The provider config takes the credentials to log into the cloud provider and provides a token +(e.g. a kube config or even a service account) that the implementations can use to provision cloud resources. + +The implementations of the cloud resources reflect each type of cloud resource, typical resources are: + +- S3 Bucket +- Nodepool +- VPC +- GkeCluster + +## Architecture of provider-kind + +To have the crossplane concepts applied, the provider-kind consists of two components: kindserver and provider-kind. + +The kindserver is used to manage local kind clusters. It provides an HTTP REST interface to create, delete and get informations of a running cluster, using an Authorization HTTP header field used as a password: + +![kindserver_interface](./kindserver_interface.png) + +The two properties to connect the provider-kind to kindserver are the IP address and password of kindserver. The IP address is required because the kindserver needs to be executed outside the kind cluster, directly on the local machine, as it need to control +kind itself: + +![kindserver_provider-kind](./kindserver_provider-kind.png) + +The provider-kind provides two crossplane elements, the `ProviderConfig` and `KindCluster` as the (only) cloud resource. The +`ProviderConfig` is configured with the IP address and password of the running kindserver. The `KindCluster` type is configured +to use the provided `ProviderConfig`. Kind clusters can be managed by adding and removing kubernetes manifests of type +`KindCluster`. The crossplane reconcilation loop makes use of the kindserver HTTP GET method to see if a new cluster needs to be +created by HTTP POST or being removed by HTTP DELETE. + +The password used by `ProviderConfig` is configured as an kubernetes secret, while the kindserver IP address is configured +inside the `ProviderConfig` as the field endpoint. + +When provider-kind created a new cluster by processing a `KindCluster` manifest, the two providers which are used to deploy applications, provider-helm and provider-kubernetes, can be configured to use the `KindCluster`. + +![provider-kind_providerconfig](./provider-kind_providerconfig.png) + +A Crossplane composition can be created by concaternating different providers and their objects. A composition is managed as a +custom resource definition and defined in a single file. + +![composition](./composition.png) + +## Configuration + +Two kubernetes manifests are defines by provider-kind: `ProviderConfig` and `KindCluster`. The third needed kubernetes +object is a secret. + +The need for the following inputs arise when developing a provider-kind: + +- kindserver password as a kubernetes secret +- endpoint, the IP address of the kindserver as a detail of `ProviderConfig` +- kindConfig, the kind configuration file as a detail of `KindCluster` + +The following outputs arise: + +- kubernetesVersion, kubernetes version of a created kind cluster as a detail of `KindCluster` +- internalIP, IP address of a created kind cluster as a detail of `KindCluster` +- readiness as a detail of `KindCluster` +- kube config of a created kind cluster as a kubernetes secret reference of `KindCluster` + +### Inputs + +#### kindserver password + +The kindserver password needs to be defined first. It is realized as a kubernetes secret and contains the password +which the kindserver has been configured with: + +``` +apiVersion: v1 +data: + credentials: MTIzNDU= +kind: Secret +metadata: + name: kind-provider-secret + namespace: crossplane-system +type: Opaque +``` + +#### endpoint + +The IP address of the kindserver `endpoint` is configured in the provider-kind `ProviderConfig`. This config also references the kindserver password (`kind-provider-secret`): + +``` +apiVersion: kind.crossplane.io/v1alpha1 +kind: ProviderConfig +metadata: + name: kind-provider-config +spec: + credentials: + source: Secret + secretRef: + namespace: crossplane-system + name: kind-provider-secret + key: credentials + endpoint: + url: https://172.18.0.1:7443/api/v1/kindserver +``` + +It is suggested that the kindserver runs on the IP of the docker host, so that all kind clusters can access it without extra routing. + +#### kindConfig + +The kind config is provided as the field `kindConfig` in each `KindCluster` manifest. The manifest also references the provider-kind `ProviderConfig` (`kind-provider-config` in the `providerConfigRef` field): + +``` +apiVersion: container.kind.crossplane.io/v1alpha1 +kind: KindCluster +metadata: + name: example-kind-cluster +spec: + forProvider: + kindConfig: | + kind: Cluster + apiVersion: kind.x-k8s.io/v1alpha4 + nodes: + - role: control-plane + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + extraPortMappings: + - containerPort: 80 + hostPort: 80 + protocol: TCP + - containerPort: 443 + hostPort: 443 + protocol: TCP + containerdConfigPatches: + - |- + [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gitea.cnoe.localtest.me:443"] + endpoint = ["https://gitea.cnoe.localtest.me"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."gitea.cnoe.localtest.me".tls] + insecure_skip_verify = true + providerConfigRef: + name: kind-provider-config + writeConnectionSecretToRef: + namespace: default + name: kind-connection-secret +``` + +After the kind cluster has been created, it's kube config is stored in a kubernetes secret `kind-connection-secret` which `writeConnectionSecretToRef` references. + +### Outputs + +The three outputs can be recieved by getting the `KindCluster` manifest after the cluster has been created. The `KindCluster` is +available for reading even before the cluster has been created, but the three outputfields are empty until then. The ready state +will also switch from `false` to `true` after the cluster has finally been created. + +#### kubernetesVersion, internalIP and readiness + +This fields can be recieved with a standard kubectl get command: + +``` +$ kubectl get kindclusters kindcluster-fw252 -o yaml +... +status: + atProvider: + internalIP: 192.168.199.19 + kubernetesVersion: v1.31.0 + conditions: + - lastTransitionTime: "2024-11-12T18:22:39Z" + reason: Available + status: "True" + type: Ready + - lastTransitionTime: "2024-11-12T18:21:38Z" + reason: ReconcileSuccess + status: "True" + type: Synced +``` + +#### kube config + +The kube config is stored in a kubernetes secret (`kind-connection-secret`) which can be accessed after the cluster has been +created: + +``` +$ kubectl get kindclusters kindcluster-fw252 -o yaml +... + writeConnectionSecretToRef: + name: kind-connection-secret + namespace: default +... + +$ kubectl get secret kind-connection-secret +NAME TYPE DATA AGE +kind-connection-secret connection.crossplane.io/v1alpha1 2 107m +``` + +The API endpoint of the new cluster `endpoint` and it's kube config `kubeconfig` is stored in that secret. This values are set in +the Obbserve function of the kind controller of provider-kind. They are set with the special crossplane function managed +ExternalObservation. + +## The reconciler loop of a crossplane provider + +The reconciler loop is the heart of every crossplane provider. As it is coupled async, it's best to describe it working in words: + +Internally, the Connect function get's triggered in the kindcluster controller `internal/controller/kindcluster/kindcluster.go` +first, to setup the provider and configure it with the kindserver password and IP address of the kindserver. + +After that the provider-kind has been configured with the kindserver secret and it's `ProviderConfig`, the provider is ready to +be activated by applying a `KindCluster` manifest to kubernetes. + +When the user applies a new `KindCluster` manifest, a observe loop is started. The provider regulary triggers the `Observe` +function of the controller. As there has yet been created nothing yet, the controller will return +`managed.ExternalObservation{ResourceExists: false}` to signal that the kind cluster resource has not been created yet. +As the is a kindserver SDK available, the controller is using the `Get` function of the SDK to query the kindserver. + +The `KindCluster` is already applied and can be retrieved with `kubectl get kindclusters`. As the cluster has not been +created yet, it readiness state is `false`. + +In parallel, the `Create` function is triggered in the controller. This function has acces to the desired kind config +`cr.Spec.ForProvider.KindConfig` and the name of the kind cluster `cr.ObjectMeta.Name`. It can now call the kindserver SDK to +create a new cluster with the given config and name. The create function is supposed not to run too long, therefore +it directly returns in the case of provider-kind. The kindserver already knows the name of the new cluster and even it is +not yet ready, it will respond with a partial success. + +The observe loops is triggered regulary in parallel. It will be triggered after the create call but before the kind cluster has been +created. Now it will get a step further. It gets the information of kindserver, that the cluster is already knows, but not +finished creating yet. + +After the cluster has been finished creating, the kindserver has all important informations for the provider-kind. That is +The API server endpoint of the new cluster and it's kube config. After another round of the observer loop, the controller +gets now the full set of information of kindcluster (cluster ready, it's API server endpoint and it's kube config). +When this informations has been recieved by the kindserver SDk in form of a JSON file, it is able to signal successfull +creating of the cluster. That is done by returning the following structure from inside the observe function: + +``` + return managed.ExternalObservation{ + ResourceExists: true, + ResourceUpToDate: true, + ConnectionDetails: managed.ConnectionDetails{ + xpv1.ResourceCredentialsSecretEndpointKey: []byte(clusterInfo.Endpoint), + xpv1.ResourceCredentialsSecretKubeconfigKey: []byte(clusterInfo.KubeConfig), + }, + }, nil +``` + +Note that the managed.ConnectionDetails will automatically write the API server endpoint and it's kube config to the kubernetes +secret which `writeConnectionSecretToRef`of `KindCluster` points to. + +It also set the availability flag before returning, that will mark the `KindCluster` as ready: + +``` + cr.Status.SetConditions(xpv1.Available()) +``` + +Before returning, it will also set the informations which are transfered into fields of `kindCluster` which can be retrieved by a +`kubectl get`, the `kubernetesVersion` and the `internalIP` fields: + +``` + cr.Status.AtProvider.KubernetesVersion = clusterInfo.K8sVersion + cr.Status.AtProvider.InternalIP = clusterInfo.NodeIp +``` + +Now the `KindCluster` is setup completly and when it's data is retrieved by `kubectl get`, all data is available and it's readiness +is set to `true`. + +The observer loops continies to be called to enable drift detection. That detection is currently not implemented, but is +prepared for future implementations. When the observer function would detect that the kind cluster with a given name is set +up with a kind config other then the desired, the controller would call the controller `Update` function, which would +delete the currently runnign kind cluster and recreates it with the desired kind config. + +When the user is deleting the `KindCluster` manifest at a later stage, the `Delete` function of the controller is triggered +to call the kindserver SDK to delete the cluster with the given name. The observer loop will acknowledge that the cluster +is deleted successfully by retrieving `kind cluster not found` when the deletion had been successfull. If not, the controller +will trigger the delete function in a loop as well, until the kind cluster has been deleted. + +That assembles the reconciler loop. + +## kind API server IP address + +Each newly created kind cluster has a practially random kubernetes API server endpoint. As the IP address of a new kind cluster +can't determined before creation, the kindserver manages the API server field of the kind config. It will map all +kind server kubernets API endpoints on it's own IP address, but on different ports. That garantees that alls kind +clusters can access the kubernetes API endpoints of all other kind clusters by using the docker host IP of the kindserver +itself. This is needed as the kube config hardcodes the kubernets API server endpoint. By using the docker host IP +but with different ports, every usage of a kube config from one kind cluster to another is working successfully. + +The management of the kind config in the kindserver is implemented in the `Post` function of the kindserver `main.go` file. + +## Create a the crossplane provider-kind + +The official way for creating crossplane providers is to use the provider-template. Process the following steps to create +a new provider. + +First, clone the provider-template. The commit ID when this howto has been written is 2e0b022c22eb50a8f32de2e09e832f17161d7596. +Rename the new folder after cloning. + +``` +git clone https://github.com/crossplane/provider-template.git +mv provider-template provider-kind +cd provider-kind/ +``` + +The informations in the provided README.md are incomplete. Folow this steps to get it running: + +> Please use bash for the next commands (`${type,,}` e.g. is not a mistake) + +``` +make submodules +export provider_name=Kind # Camel case, e.g. GitHub +make provider.prepare provider=${provider_name} +export group=container # lower case e.g. core, cache, database, storage, etc. +export type=KindCluster # Camel casee.g. Bucket, Database, CacheCluster, etc. +make provider.addtype provider=${provider_name} group=${group} kind=${type} +sed -i "s/sample/${group}/g" apis/${provider_name,,}.go +sed -i "s/mytype/${type,,}/g" internal/controller/${provider_name,,}.go +``` + +Patch the Makefile: + +``` +dev: $(KIND) $(KUBECTL) + @$(INFO) Creating kind cluster ++ @$(KIND) delete cluster --name=$(PROJECT_NAME)-dev + @$(KIND) create cluster --name=$(PROJECT_NAME)-dev + @$(KUBECTL) cluster-info --context kind-$(PROJECT_NAME)-dev +- @$(INFO) Installing Crossplane CRDs +- @$(KUBECTL) apply --server-side -k https://github.com/crossplane/crossplane//cluster?ref=master ++ @$(INFO) Installing Crossplane ++ @helm install crossplane --namespace crossplane-system --create-namespace crossplane-stable/crossplane --wait + @$(INFO) Installing Provider Template CRDs + @$(KUBECTL) apply -R -f package/crds + @$(INFO) Starting Provider Template controllers +``` + +Generate, build and execute the new provider-kind: + +``` +make generate +make build +make dev +``` + +Now it's time to add the required fields (internalIP, endpoint, etc.) to the spec fields in go api sources found in: + +- apis/container/v1alpha1/kindcluster_types.go +- apis/v1alpha1/providerconfig_types.go + +The file `apis/kind.go` may also be modified. The word `sample` can be replaces with `container` in our case. + +When that's done, the yaml specifications needs to be modified to also include the required fields (internalIP, endpoint, etc.) + +Next, a kindserver SDK can be implemented. That is a helper class which encapsulates the get, create and delete HTTP calls to the kindserver. Connection infos (kindserver IP address and password) will be stored by the constructor. + +After that we can add the usage of the kindclient sdk in kindcluster controller `internal/controller/kindcluster/kindcluster.go`. + +Finally we can update the `Makefile` to better handle the primary kind cluster creation and adding of a cluster role binding +so that crossplane can access the `KindCluster` objects. Examples and updating the README.md will finish the development. + +All this steps are documented in: https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW/provider-kind/pulls/1 + +## Crossplane Composition `edfbuilder` + +Together with the implemented provider-kind and it's config to create a composition which can create kind clusters and +the ability to deploy helm and kubernetes objects in the newly created cluster. + +A composition is realized as a custom resource definition (CRD) considting of three parts: + +- A definition +- A composition +- One or more deplyoments of the composition + +### definition.yaml + +The definition of the CRD will most probably contain one additional fiel, the ArgoCD repository URL to easily select +the stacks which should be deployed: + +``` +apiVersion: apiextensions.crossplane.io/v1 +kind: CompositeResourceDefinition +metadata: + name: edfbuilders.edfbuilder.crossplane.io +spec: + connectionSecretKeys: + - kubeconfig + group: edfbuilder.crossplane.io + names: + kind: EDFBuilder + listKind: EDFBuilderList + plural: edfbuilders + singular: edfbuilders + versions: + - name: v1alpha1 + served: true + referenceable: true + schema: + openAPIV3Schema: + description: A EDFBuilder is a composite resource that represents a K8S Cluster with edfbuilder Installed + type: object + properties: + spec: + type: object + properties: + repoURL: + type: string + description: URL to ArgoCD stack of stacks repo + required: + - repoURL +``` + +### composition.yaml + +This is a shortened version of the file `examples/composition_deprecated/composition.yaml`. It combines a `KindCluster` with +deployments of of provider-helm and provider-kubernetes. Note that the `ProviderConfig` and the kindserver secret has already been +applied to kubernetes (by the Makefile) before applying this composition. + +``` +apiVersion: apiextensions.crossplane.io/v1 +kind: Composition +metadata: + name: edfbuilders.edfbuilder.crossplane.io +spec: + writeConnectionSecretsToNamespace: crossplane-system + compositeTypeRef: + apiVersion: edfbuilder.crossplane.io/v1alpha1 + kind: EDFBuilder + resources: + + ### kindcluster + - base: + apiVersion: container.kind.crossplane.io/v1alpha1 + kind: KindCluster + metadata: + name: example + spec: + forProvider: + kindConfig: | + kind: Cluster + apiVersion: kind.x-k8s.io/v1alpha4 + nodes: + - role: control-plane + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + extraPortMappings: + - containerPort: 80 + hostPort: 80 + protocol: TCP + - containerPort: 443 + hostPort: 443 + protocol: TCP + containerdConfigPatches: + - |- + [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gitea.cnoe.localtest.me:443"] + endpoint = ["https://gitea.cnoe.localtest.me"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."gitea.cnoe.localtest.me".tls] + insecure_skip_verify = true + providerConfigRef: + name: example-provider-config + writeConnectionSecretToRef: + namespace: default + name: my-connection-secret + + ### helm provider config + - base: + apiVersion: helm.crossplane.io/v1beta1 + kind: ProviderConfig + spec: + credentials: + source: Secret + secretRef: + namespace: default + name: my-connection-secret + key: kubeconfig + patches: + - fromFieldPath: metadata.name + toFieldPath: metadata.name + readinessChecks: + - type: None + + ### ingress-nginx + - base: + apiVersion: helm.crossplane.io/v1beta1 + kind: Release + metadata: + annotations: + crossplane.io/external-name: ingress-nginx + spec: + rollbackLimit: 99999 + forProvider: + chart: + name: ingress-nginx + repository: https://kubernetes.github.io/ingress-nginx + version: 4.11.3 + namespace: ingress-nginx + values: + controller: + updateStrategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 1 + hostPort: + enabled: true + terminationGracePeriodSeconds: 0 + service: + type: NodePort + watchIngressWithoutClass: true + + nodeSelector: + ingress-ready: "true" + tolerations: + - key: "node-role.kubernetes.io/master" + operator: "Equal" + effect: "NoSchedule" + - key: "node-role.kubernetes.io/control-plane" + operator: "Equal" + effect: "NoSchedule" + + publishService: + enabled: false + extraArgs: + publish-status-address: localhost + # added for idpbuilder + enable-ssl-passthrough: "" + + # added for idpbuilder + allowSnippetAnnotations: true + + # added for idpbuilder + config: + proxy-buffer-size: 32k + use-forwarded-headers: "true" + patches: + - fromFieldPath: metadata.name + toFieldPath: spec.providerConfigRef.name + + ### kubernetes provider config + - base: + apiVersion: kubernetes.crossplane.io/v1alpha1 + kind: ProviderConfig + spec: + credentials: + source: Secret + secretRef: + namespace: default + name: my-connection-secret + key: kubeconfig + patches: + - fromFieldPath: metadata.name + toFieldPath: metadata.name + readinessChecks: + - type: None + + ### kubernetes argocd stack of stacks application + - base: + apiVersion: kubernetes.crossplane.io/v1alpha2 + kind: Object + spec: + forProvider: + manifest: + apiVersion: argoproj.io/v1alpha1 + kind: Application + metadata: + name: edfbuilder + namespace: argocd + labels: + env: dev + spec: + destination: + name: in-cluster + namespace: argocd + source: + path: registry + repoURL: 'https://gitea.cnoe.localtest.me/giteaAdmin/edfbuilder-shoot' + targetRevision: HEAD + project: default + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true + patches: + - fromFieldPath: metadata.name + toFieldPath: spec.providerConfigRef.name +``` + +## Usage + +Set this values to allow many kind clusters running in parallel, if needed: + +``` +sudo sysctl fs.inotify.max_user_watches=524288 +sudo sysctl fs.inotify.max_user_instances=512 + +To make the changes persistent, edit the file /etc/sysctl.conf and add these lines: +fs.inotify.max_user_watches = 524288 +fs.inotify.max_user_instances = 512 +``` + +Start provider-kind: + +``` +make build +kind delete clusters $(kind get clusters) +kind create cluster --name=provider-kind-dev +DOCKER_HOST_IP="$(docker inspect $(docker ps | grep kindest | awk '{ print $1 }' | head -n1) | jq -r .[0].NetworkSettings.Networks.kind.Gateway)" make dev +``` + +Wait until debug output of the provider-kind is shown: + +``` +... +namespace/crossplane-system configured +secret/example-provider-secret created +providerconfig.kind.crossplane.io/example-provider-config created +14:49:50 [ .. ] Starting Provider Kind controllers +2024-11-12T14:49:54+01:00 INFO controller-runtime.metrics Starting metrics server +2024-11-12T14:49:54+01:00 INFO Starting EventSource {"controller": "providerconfig/providerconfig.kind.crossplane.io", "controllerGroup": "kind.crossplane.io", "controllerKind": "ProviderConfig", "source": "kind source: *v1alpha1.ProviderConfig"} +2024-11-12T14:49:54+01:00 INFO Starting EventSource {"controller": "providerconfig/providerconfig.kind.crossplane.io", "controllerGroup": "kind.crossplane.io", "controllerKind": "ProviderConfig", "source": "kind source: *v1alpha1.ProviderConfigUsage"} +2024-11-12T14:49:54+01:00 INFO Starting Controller {"controller": "providerconfig/providerconfig.kind.crossplane.io", "controllerGroup": "kind.crossplane.io", "controllerKind": "ProviderConfig"} +2024-11-12T14:49:54+01:00 INFO Starting EventSource {"controller": "managed/kindcluster.container.kind.crossplane.io", "controllerGroup": "container.kind.crossplane.io", "controllerKind": "KindCluster", "source": "kind source: *v1alpha1.KindCluster"} +2024-11-12T14:49:54+01:00 INFO Starting Controller {"controller": "managed/kindcluster.container.kind.crossplane.io", "controllerGroup": "container.kind.crossplane.io", "controllerKind": "KindCluster"} +2024-11-12T14:49:54+01:00 INFO controller-runtime.metrics Serving metrics server {"bindAddress": ":8080", "secure": false} +2024-11-12T14:49:54+01:00 INFO Starting workers {"controller": "providerconfig/providerconfig.kind.crossplane.io", "controllerGroup": "kind.crossplane.io", "controllerKind": "ProviderConfig", "worker count": 10} +2024-11-12T14:49:54+01:00 DEBUG provider-kind Reconciling {"controller": "providerconfig/providerconfig.kind.crossplane.io", "request": {"name":"example-provider-config"}} +2024-11-12T14:49:54+01:00 INFO Starting workers {"controller": "managed/kindcluster.container.kind.crossplane.io", "controllerGroup": "container.kind.crossplane.io", "controllerKind": "KindCluster", "worker count": 10} +2024-11-12T14:49:54+01:00 INFO KubeAPIWarningLogger metadata.finalizers: "in-use.crossplane.io": prefer a domain-qualified finalizer name to avoid accidental conflicts with other finalizer writers +2024-11-12T14:49:54+01:00 DEBUG provider-kind Reconciling {"controller": "providerconfig/providerconfig.kind.crossplane.io", "request": {"name":"example-provider-config"}} + +``` + +Start kindserver: + +see kindserver/README.md + +When kindserver is started: + +``` +cd examples/composition_deprecated +kubectl apply -f definition.yaml +kubectl apply -f composition.yaml +kubectl apply -f cluster.yaml +``` + +List the created elements, wait until the new cluster is created, then switch back to the primary cluster: + +``` +kubectl config use-context kind-provider-kind-dev +``` + +Show edfbuilder compositions: + +``` +kubectl get edfbuilders +NAME SYNCED READY COMPOSITION AGE +kindcluster True True edfbuilders.edfbuilder.crossplane.io 4m45s +``` + +Show kind clusters: + +``` +kubectl get kindclusters +NAME READY SYNCED EXTERNAL-NAME INTERNALIP VERSION AGE +kindcluster-wlxrt True True kindcluster-wlxrt 192.168.199.19 v1.31.0 5m12s +``` + +Show helm deployments: + +``` +kubectl get releases +NAME CHART VERSION SYNCED READY STATE REVISION DESCRIPTION AGE +kindcluster-29dgf ingress-nginx 4.11.3 True True deployed 1 Install complete 5m32s +kindcluster-w2dxl forgejo 10.0.2 True True deployed 1 Install complete 5m32s +kindcluster-x8x9k argo-cd 7.6.12 True True deployed 1 Install complete 5m32s +``` + +Show kubernetes objects: + +``` +kubectl get objects +NAME KIND PROVIDERCONFIG SYNCED READY AGE +kindcluster-8tbv8 ConfigMap kindcluster True True 5m50s +kindcluster-9lwc9 ConfigMap kindcluster True True 5m50s +kindcluster-9sgmd Deployment kindcluster True True 5m50s +kindcluster-ct2h7 Application kindcluster True True 5m50s +kindcluster-s5knq ConfigMap kindcluster True True 5m50s +``` + +Open the composition in VS Code: examples/composition_deprecated/composition.yaml + +## What is missing + +Currently missing is the third and final part, the imperative steps which need to be processed: + +- creation of TLS certificates and giteaAdmin password +- creation of a Forgejo repository for the stacks +- uploading the stacks in the Forgejo repository + +Connecting the definition field (ArgoCD repo URL) and composition interconnects (function-patch-and-transform) are also missing. \ No newline at end of file diff --git a/content/en/docs/solution/tools/Crossplane/provider-kind/composition.drawio b/content/en/docs/solution/tools/Crossplane/provider-kind/composition.drawio new file mode 100644 index 0000000..48abda4 --- /dev/null +++ b/content/en/docs/solution/tools/Crossplane/provider-kind/composition.drawio @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/en/docs/solution/tools/Crossplane/provider-kind/composition.png b/content/en/docs/solution/tools/Crossplane/provider-kind/composition.png new file mode 100644 index 0000000000000000000000000000000000000000..ce63ab8f8b19ef930455f3569b38aa5177989e5d GIT binary patch literal 41072 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 Pz(16t2C_olBJ_U%4(4_v literal 0 HcmV?d00001 diff --git a/content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_interface.drawio b/content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_interface.drawio new file mode 100644 index 0000000..4d11b51 --- /dev/null +++ b/content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_interface.drawio @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_interface.png b/content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..5d095300c726eaa0cf82a9a6a47f21d5e5f244ea GIT binary patch literal 19357 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.png b/content/en/docs/solution/tools/Crossplane/provider-kind/kindserver_provider-kind.png new file mode 100644 index 0000000000000000000000000000000000000000..c55fc61119b8a37a0f7aae7c871d2e6bae23c75c GIT binary patch literal 26384 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 A^#A|> literal 0 HcmV?d00001 diff --git a/content/en/docs/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.drawio b/content/en/docs/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.drawio new file mode 100644 index 0000000..44dd400 --- /dev/null +++ b/content/en/docs/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.drawio @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/content/en/docs/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.png b/content/en/docs/solution/tools/Crossplane/provider-kind/provider-kind_providerconfig.png new file mode 100644 index 0000000000000000000000000000000000000000..e588964309af809fd6d24bf8eb0e54b4767f1237 GIT binary patch literal 36166 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 fPlC%RfA^Qv2cJ()=5f_z@JCxiPyHp