diff --git a/Makefile b/Makefile
index 4d52999..22dcc15 100644
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,8 @@
CHART_VERSION = v0.2.0
# Defines the versions to use for cluster API components.
-CAPI_VERSION = v1.7.2
-CAPO_VERSION = v0.10.3
+CAPI_VERSION = v1.7.4
+CAPO_VERSION = v0.10.4
# All the charts we can generate.
CHARTS = cluster-api-core \
diff --git a/README.md b/README.md
index a06ccab..096de67 100644
--- a/README.md
+++ b/README.md
@@ -2,13 +2,13 @@
## Why?
-`clusterctl` is very opinionated, it will pull down some kustomize generated maifests, then do some environment substitution on them.
+`clusterctl` is very opinionated, it will pull down some kustomize generated manifests, then do some environment substitution on them.
This isn't compatible with ArgoCD for example, hence this project.
## How
In simple terms, we run `kubectl kustomize`, chop up the manifests and auto generate templates.
-When we encounter one of the annoying evironment variables, we replace it with Go templating, then add the replacement into `values.yaml`.
+When we encounter one of the annoying environment variables, we replace it with Go templating, then add the replacement into `values.yaml`.
## Deploying Prerequisites
@@ -22,7 +22,7 @@ This chart requires the following to be installed on the target cluster first:
```shell
helm repo add jetstack https://charts.jetstack.io
helm repo update
-helm install cert-manager jetstack/cert-manager --version v1.10.1 --namespace cert-manager --create-namespace
+helm install cert-manager jetstack/cert-manager --version v1.15.1 --namespace cert-manager --create-namespace --set crds.enabled=true
```
@@ -30,6 +30,7 @@ helm install cert-manager jetstack/cert-manager --version v1.10.1 --namespace ce
ArgoCD
```yaml
+---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
@@ -40,14 +41,14 @@ spec:
source:
chart: cert-manager
repoURL: https://charts.jetstack.io
- targetRevision: v1.10.1
+ targetRevision: v1.15.1
helm:
releaseName: cert-manager
parameters:
- name: installCRDs
- value: true
+ value: "true"
destination:
- name: ${TARGET_VCLUSTER}
+ server: https://kubernetes.default.svc
namespace: cert-manager
syncPolicy:
automated:
@@ -67,7 +68,7 @@ There is a top level chart-of-charts that will just install everything as a big
```shell
helm repo add unikorn-cloud-capi https://unikorn-cloud.github.io/helm-cluster-api
helm repo update
-helm install unikorn-cloud-capi/cluster-api --version v0.1.1
+helm install cluster-api unikorn-cloud-capi/cluster-api --version v0.2.0
```
@@ -75,6 +76,7 @@ helm install unikorn-cloud-capi/cluster-api --version v0.1.1
ArgoCD
```yaml
+---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
@@ -85,9 +87,10 @@ spec:
source:
repoURL: https://unikorn-cloud.github.io/helm-cluster-api
chart: cluster-api
- targetRevision: v0.1.9
+ targetRevision: v0.2.0
destination:
- server: https://172.18.255.200:443
+ server: https://kubernetes.default.svc
+ namespace: foo
ignoreDifferences:
# Aggregated roles are mangically updated by the API.
- group: rbac.authorization.k8s.io
@@ -125,7 +128,7 @@ You may want to be a little less gung-ho and deploy the pieces as separate appli
```shell
helm repo add unikorn-cloud-capi https://unikorn-cloud.github.io/helm-cluster-api
helm repo update
-helm install unikorn-cloud-capi/cluster-api-core --version v0.1.1
+helm install cluster-api-core unikorn-cloud-capi/cluster-api-core --version v0.2.0
```
@@ -133,6 +136,7 @@ helm install unikorn-cloud-capi/cluster-api-core --version v0.1.1
ArgoCD
```yaml
+---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
@@ -143,9 +147,10 @@ spec:
source:
repoURL: https://unikorn-cloud.github.io/helm-cluster-api
chart: cluster-api-core
- targetRevision: v0.1.9
+ targetRevision: v0.2.0
destination:
- server: https://172.18.255.200:443
+ server: https://kubernetes.default.svc
+ namespace: foo
ignoreDifferences:
# Aggregated roles are mangically updated by the API.
- group: rbac.authorization.k8s.io
@@ -174,7 +179,7 @@ spec:
```shell
helm repo add unikorn-cloud-capi https://unikorn-cloud.github.io/helm-cluster-api
helm repo update
-helm install unikorn-cloud-capi/cluster-api-bootstrap-kubeadm --version v0.1.1
+helm install cluster-api-bootstrap-kubeadm unikorn-cloud-capi/cluster-api-bootstrap-kubeadm --version v0.2.0
```
@@ -182,6 +187,7 @@ helm install unikorn-cloud-capi/cluster-api-bootstrap-kubeadm --version v0.1.1
ArgoCD
```yaml
+---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
@@ -192,9 +198,10 @@ spec:
source:
repoURL: https://unikorn-cloud.github.io/helm-cluster-api
chart: cluster-api-bootstrap-kubeadm
- targetRevision: v0.1.9
+ targetRevision: v0.2.0
destination:
- server: https://172.18.255.200:443
+ server: https://kubernetes.default.svc
+ namespace: foo
ignoreDifferences:
- group: apiextensions.k8s.io
jsonPointers:
@@ -216,7 +223,7 @@ spec:
```shell
helm repo add unikorn-cloud-capi https://unikorn-cloud.github.io/helm-cluster-api
helm repo update
-helm install unikorn-cloud-capi/cluster-api-control-plane-kubeadm --version v0.1.1
+helm install cluster-api-control-plane-kubeadm unikorn-cloud-capi/cluster-api-control-plane-kubeadm --version v0.2.0
```
@@ -224,6 +231,7 @@ helm install unikorn-cloud-capi/cluster-api-control-plane-kubeadm --version v0.1
ArgoCD
```yaml
+---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
@@ -234,9 +242,10 @@ spec:
source:
repoURL: https://unikorn-cloud.github.io/helm-cluster-api
chart: cluster-api-control-plane-kubeadm
- targetRevision: v0.1.9
+ targetRevision: v0.2.0
destination:
- server: https://172.18.255.200:443
+ server: https://kubernetes.default.svc
+ namespace: foo
ignoreDifferences:
- group: rbac.authorization.k8s.io
jsonPointers:
diff --git a/charts/cluster-api-bootstrap-kubeadm/Chart.yaml b/charts/cluster-api-bootstrap-kubeadm/Chart.yaml
index 2422722..a179b1e 100644
--- a/charts/cluster-api-bootstrap-kubeadm/Chart.yaml
+++ b/charts/cluster-api-bootstrap-kubeadm/Chart.yaml
@@ -1,5 +1,5 @@
apiVersion: v2
-appVersion: v1.7.2
+appVersion: v1.7.4
description: A Helm chart for deploying cluster API.
icon: https://assets.unikorn-cloud.org/assets/images/logos/dark-on-light/icon.png
name: cluster-api-bootstrap-kubeadm
diff --git a/charts/cluster-api-bootstrap-kubeadm/crds/kubeadmconfigs.bootstrap.cluster.x-k8s.io.yaml b/charts/cluster-api-bootstrap-kubeadm/crds/kubeadmconfigs.bootstrap.cluster.x-k8s.io.yaml
index 3cc1213..062044e 100644
--- a/charts/cluster-api-bootstrap-kubeadm/crds/kubeadmconfigs.bootstrap.cluster.x-k8s.io.yaml
+++ b/charts/cluster-api-bootstrap-kubeadm/crds/kubeadmconfigs.bootstrap.cluster.x-k8s.io.yaml
@@ -3503,6 +3503,181 @@ spec:
BootstrapToken and File are mutually exclusive'
properties:
+ kubeConfig:
+ description: 'KubeConfig is used (optionally) to generate
+ a KubeConfig based on the KubeadmConfig''s information.
+
+ The file is generated at the path specified in KubeConfigPath.
+
+
+
+ Host address (server field) information is automatically
+ populated based on the Cluster''s ControlPlaneEndpoint.
+
+ Certificate Authority (certificate-authority-data field)
+ is gathered from the cluster''s CA secret.'
+ properties:
+ cluster:
+ description: 'Cluster contains information about how
+ to communicate with the kubernetes cluster.
+
+
+
+ By default the following fields are automatically
+ populated:
+
+ - Server with the Cluster''s ControlPlaneEndpoint.
+
+ - CertificateAuthorityData with the Cluster''s CA
+ certificate.'
+ properties:
+ certificateAuthorityData:
+ description: 'CertificateAuthorityData contains
+ PEM-encoded certificate authority certificates.
+
+
+
+ Defaults to the Cluster''s CA certificate if
+ empty.'
+ format: byte
+ type: string
+ insecureSkipTLSVerify:
+ description: InsecureSkipTLSVerify skips the validity
+ check for the server's certificate. This will
+ make your HTTPS connections insecure.
+ type: boolean
+ proxyURL:
+ description: 'ProxyURL is the URL to the proxy
+ to be used for all requests made by this
+
+ client. URLs with "http", "https", and "socks5"
+ schemes are supported. If
+
+ this configuration is not provided or the empty
+ string, the client
+
+ attempts to construct a proxy configuration
+ from http_proxy and
+
+ https_proxy environment variables. If these
+ environment variables are not
+
+ set, the client does not attempt to proxy requests.
+
+
+
+ socks5 proxying does not currently support spdy
+ streaming endpoints (exec,
+
+ attach, port forward).'
+ type: string
+ server:
+ description: 'Server is the address of the kubernetes
+ cluster (https://hostname:port).
+
+
+
+ Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.'
+ type: string
+ tlsServerName:
+ description: TLSServerName is used to check server
+ certificate. If TLSServerName is empty, the
+ hostname used to contact the server is used.
+ type: string
+ type: object
+ user:
+ description: 'User contains information that describes
+ identity information.
+
+ This is used to tell the kubernetes cluster who
+ you are.'
+ properties:
+ authProvider:
+ description: AuthProvider specifies a custom authentication
+ plugin for the kubernetes cluster.
+ properties:
+ config:
+ additionalProperties:
+ type: string
+ description: Config holds the parameters for
+ the authentication plugin.
+ type: object
+ name:
+ description: Name is the name of the authentication
+ plugin.
+ type: string
+ required:
+ - name
+ type: object
+ exec:
+ description: Exec specifies a custom exec-based
+ authentication plugin for the kubernetes cluster.
+ properties:
+ apiVersion:
+ description: 'Preferred input version of the
+ ExecInfo. The returned ExecCredentials MUST
+ use
+
+ the same encoding version as the input.
+
+ Defaults to client.authentication.k8s.io/v1
+ if not set.'
+ type: string
+ args:
+ description: Arguments to pass to the command
+ when executing it.
+ items:
+ type: string
+ type: array
+ command:
+ description: Command to execute.
+ type: string
+ env:
+ description: 'Env defines additional environment
+ variables to expose to the process. These
+
+ are unioned with the host''s environment,
+ as well as variables client-go uses
+
+ to pass argument to the plugin.'
+ items:
+ description: 'KubeConfigAuthExecEnv is used
+ for setting environment variables when
+ executing an exec-based
+
+ credential plugin.'
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ provideClusterInfo:
+ description: 'ProvideClusterInfo determines
+ whether or not to provide cluster information,
+
+ which could potentially contain very large
+ CA data, to this exec plugin as a
+
+ part of the KUBERNETES_EXEC_INFO environment
+ variable. By default, it is set
+
+ to false. Package k8s.io/client-go/tools/auth/exec
+ provides helper methods for
+
+ reading this environment variable.'
+ type: boolean
+ required:
+ - command
+ type: object
+ type: object
+ required:
+ - user
+ type: object
kubeConfigPath:
description: KubeConfigPath is used to specify the actual
file path or URL to the kubeconfig file from which to
diff --git a/charts/cluster-api-bootstrap-kubeadm/crds/kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io.yaml b/charts/cluster-api-bootstrap-kubeadm/crds/kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io.yaml
index 8415e5b..f506ee3 100644
--- a/charts/cluster-api-bootstrap-kubeadm/crds/kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io.yaml
+++ b/charts/cluster-api-bootstrap-kubeadm/crds/kubeadmconfigtemplates.bootstrap.cluster.x-k8s.io.yaml
@@ -3532,6 +3532,196 @@ spec:
BootstrapToken and File are mutually exclusive'
properties:
+ kubeConfig:
+ description: 'KubeConfig is used (optionally)
+ to generate a KubeConfig based on the KubeadmConfig''s
+ information.
+
+ The file is generated at the path specified
+ in KubeConfigPath.
+
+
+
+ Host address (server field) information is automatically
+ populated based on the Cluster''s ControlPlaneEndpoint.
+
+ Certificate Authority (certificate-authority-data
+ field) is gathered from the cluster''s CA secret.'
+ properties:
+ cluster:
+ description: 'Cluster contains information
+ about how to communicate with the kubernetes
+ cluster.
+
+
+
+ By default the following fields are automatically
+ populated:
+
+ - Server with the Cluster''s ControlPlaneEndpoint.
+
+ - CertificateAuthorityData with the Cluster''s
+ CA certificate.'
+ properties:
+ certificateAuthorityData:
+ description: 'CertificateAuthorityData
+ contains PEM-encoded certificate authority
+ certificates.
+
+
+
+ Defaults to the Cluster''s CA certificate
+ if empty.'
+ format: byte
+ type: string
+ insecureSkipTLSVerify:
+ description: InsecureSkipTLSVerify skips
+ the validity check for the server's
+ certificate. This will make your HTTPS
+ connections insecure.
+ type: boolean
+ proxyURL:
+ description: 'ProxyURL is the URL to the
+ proxy to be used for all requests made
+ by this
+
+ client. URLs with "http", "https", and
+ "socks5" schemes are supported. If
+
+ this configuration is not provided or
+ the empty string, the client
+
+ attempts to construct a proxy configuration
+ from http_proxy and
+
+ https_proxy environment variables. If
+ these environment variables are not
+
+ set, the client does not attempt to
+ proxy requests.
+
+
+
+ socks5 proxying does not currently support
+ spdy streaming endpoints (exec,
+
+ attach, port forward).'
+ type: string
+ server:
+ description: 'Server is the address of
+ the kubernetes cluster (https://hostname:port).
+
+
+
+ Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.'
+ type: string
+ tlsServerName:
+ description: TLSServerName is used to
+ check server certificate. If TLSServerName
+ is empty, the hostname used to contact
+ the server is used.
+ type: string
+ type: object
+ user:
+ description: 'User contains information that
+ describes identity information.
+
+ This is used to tell the kubernetes cluster
+ who you are.'
+ properties:
+ authProvider:
+ description: AuthProvider specifies a
+ custom authentication plugin for the
+ kubernetes cluster.
+ properties:
+ config:
+ additionalProperties:
+ type: string
+ description: Config holds the parameters
+ for the authentication plugin.
+ type: object
+ name:
+ description: Name is the name of the
+ authentication plugin.
+ type: string
+ required:
+ - name
+ type: object
+ exec:
+ description: Exec specifies a custom exec-based
+ authentication plugin for the kubernetes
+ cluster.
+ properties:
+ apiVersion:
+ description: 'Preferred input version
+ of the ExecInfo. The returned ExecCredentials
+ MUST use
+
+ the same encoding version as the
+ input.
+
+ Defaults to client.authentication.k8s.io/v1
+ if not set.'
+ type: string
+ args:
+ description: Arguments to pass to
+ the command when executing it.
+ items:
+ type: string
+ type: array
+ command:
+ description: Command to execute.
+ type: string
+ env:
+ description: 'Env defines additional
+ environment variables to expose
+ to the process. These
+
+ are unioned with the host''s environment,
+ as well as variables client-go uses
+
+ to pass argument to the plugin.'
+ items:
+ description: 'KubeConfigAuthExecEnv
+ is used for setting environment
+ variables when executing an exec-based
+
+ credential plugin.'
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ provideClusterInfo:
+ description: 'ProvideClusterInfo determines
+ whether or not to provide cluster
+ information,
+
+ which could potentially contain
+ very large CA data, to this exec
+ plugin as a
+
+ part of the KUBERNETES_EXEC_INFO
+ environment variable. By default,
+ it is set
+
+ to false. Package k8s.io/client-go/tools/auth/exec
+ provides helper methods for
+
+ reading this environment variable.'
+ type: boolean
+ required:
+ - command
+ type: object
+ type: object
+ required:
+ - user
+ type: object
kubeConfigPath:
description: KubeConfigPath is used to specify
the actual file path or URL to the kubeconfig
diff --git a/charts/cluster-api-bootstrap-kubeadm/values.yaml b/charts/cluster-api-bootstrap-kubeadm/values.yaml
index 17b3c9b..771a780 100644
--- a/charts/cluster-api-bootstrap-kubeadm/values.yaml
+++ b/charts/cluster-api-bootstrap-kubeadm/values.yaml
@@ -2,5 +2,5 @@ capi_diagnostics_address: :8443
capi_insecure_diagnostics: false
exp_kubeadm_bootstrap_format_ignition: false
exp_machine_pool: true
-image: registry.k8s.io/cluster-api/kubeadm-bootstrap-controller:v1.7.2
+image: registry.k8s.io/cluster-api/kubeadm-bootstrap-controller:v1.7.4
kubeadm_bootstrap_token_ttl: 15m
diff --git a/charts/cluster-api-cluster-openstack/README.md b/charts/cluster-api-cluster-openstack/README.md
index 6e0b163..e17639a 100644
--- a/charts/cluster-api-cluster-openstack/README.md
+++ b/charts/cluster-api-cluster-openstack/README.md
@@ -1,6 +1,6 @@
# Installing an OpenStack Cluster
-... is quite involved!
+... is quite involved!
## Configuration Variables
@@ -20,6 +20,7 @@ This is the only supported method of operation.
Here's an example application:
```yaml
+---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
@@ -27,13 +28,13 @@ metadata:
namespace: argocd
spec:
destination:
- server: kubernetes.default.svc
+ server: https://kubernetes.default.svc
namespace: foo
project: default
source:
repoURL: https://unikorn-cloud.github.io/helm-cluster-api
chart: cluster-api-cluster-openstack
- targetRevision: v0.1.2
+ targetRevision: v0.4.3
helm:
releaseName: foo
# Remove the default work queue.
@@ -49,28 +50,24 @@ spec:
region: en-west-1
failureDomain: eu-west-1a
externalNetworkID: dadfef54-d1c5-447a-8933-f515eeadd822
- cluster:
- taints:
- - key: node.cilium.io/agent-not-ready
- effect: NoSchedule
- value: 'true'
api:
allowList:
- 123.45.67.89
certificateSANs:
- kubernetes.my-domain.com
controlPlane:
+ version: v1.30.2
replicas: 3
+ skipKubeProxy: false
machine:
- version: v1.25.4
imageID: 7a517603-aa70-47a9-a6f3-c102d30e67c0
flavorID: 061f0cf2-2503-4005-89ed-ff1dc217874f
diskSize: 40
workloadPools:
general-purpose:
replicas: 3
+ version: v1.30.2
machine:
- version: v1.25.4
imageID: 7a517603-aa70-47a9-a6f3-c102d30e67c0
flavorID: 061f0cf2-2503-4005-89ed-ff1dc217874f
diskSize: 100
@@ -82,9 +79,9 @@ spec:
cpu: 4
memory: 16G
gpu:
+ version: v1.30.2
replicas: 3
machine:
- version: v1.25.4
imageID: 7a517603-aa70-47a9-a6f3-c102d30e67c0
flavorID: 061f0cf2-2503-4005-89ed-ff1dc217874f
diskSize: 100
@@ -119,7 +116,7 @@ See below for more details.
### Getting Working Cluster
-To acheive a working cluster that is correctly scaled and works, you will also need to concurrently install:
+To achieve a working cluster that is correctly scaled and works, you will also need to concurrently install:
* A CNI
* [The Openstack cloud provider](https://github.com/kubernetes/cloud-provider-openstack)
diff --git a/charts/cluster-api-cluster-openstack/values.yaml b/charts/cluster-api-cluster-openstack/values.yaml
index 511bbf6..a385b56 100644
--- a/charts/cluster-api-cluster-openstack/values.yaml
+++ b/charts/cluster-api-cluster-openstack/values.yaml
@@ -45,6 +45,7 @@ openstack:
# cluster:
# Applies taints to all nodes on creation. Once a node is provisioned you
# will need to manually update these.
+ # NOTE: Cilium chart will automatically add these taints shown below
# taints:
# - key: node.cilium.io/agent-not-ready
# effect: NoSchedule
diff --git a/charts/cluster-api-control-plane-kubeadm/Chart.yaml b/charts/cluster-api-control-plane-kubeadm/Chart.yaml
index a0166a6..3bba173 100644
--- a/charts/cluster-api-control-plane-kubeadm/Chart.yaml
+++ b/charts/cluster-api-control-plane-kubeadm/Chart.yaml
@@ -1,5 +1,5 @@
apiVersion: v2
-appVersion: v1.7.2
+appVersion: v1.7.4
description: A Helm chart for deploying cluster API.
icon: https://assets.unikorn-cloud.org/assets/images/logos/dark-on-light/icon.png
name: cluster-api-control-plane-kubeadm
diff --git a/charts/cluster-api-control-plane-kubeadm/crds/kubeadmcontrolplanes.controlplane.cluster.x-k8s.io.yaml b/charts/cluster-api-control-plane-kubeadm/crds/kubeadmcontrolplanes.controlplane.cluster.x-k8s.io.yaml
index 79a1227..c317ea8 100644
--- a/charts/cluster-api-control-plane-kubeadm/crds/kubeadmcontrolplanes.controlplane.cluster.x-k8s.io.yaml
+++ b/charts/cluster-api-control-plane-kubeadm/crds/kubeadmcontrolplanes.controlplane.cluster.x-k8s.io.yaml
@@ -4125,6 +4125,187 @@ spec:
BootstrapToken and File are mutually exclusive'
properties:
+ kubeConfig:
+ description: 'KubeConfig is used (optionally) to generate
+ a KubeConfig based on the KubeadmConfig''s information.
+
+ The file is generated at the path specified in KubeConfigPath.
+
+
+
+ Host address (server field) information is automatically
+ populated based on the Cluster''s ControlPlaneEndpoint.
+
+ Certificate Authority (certificate-authority-data
+ field) is gathered from the cluster''s CA secret.'
+ properties:
+ cluster:
+ description: 'Cluster contains information about
+ how to communicate with the kubernetes cluster.
+
+
+
+ By default the following fields are automatically
+ populated:
+
+ - Server with the Cluster''s ControlPlaneEndpoint.
+
+ - CertificateAuthorityData with the Cluster''s
+ CA certificate.'
+ properties:
+ certificateAuthorityData:
+ description: 'CertificateAuthorityData contains
+ PEM-encoded certificate authority certificates.
+
+
+
+ Defaults to the Cluster''s CA certificate
+ if empty.'
+ format: byte
+ type: string
+ insecureSkipTLSVerify:
+ description: InsecureSkipTLSVerify skips the
+ validity check for the server's certificate.
+ This will make your HTTPS connections insecure.
+ type: boolean
+ proxyURL:
+ description: 'ProxyURL is the URL to the proxy
+ to be used for all requests made by this
+
+ client. URLs with "http", "https", and "socks5"
+ schemes are supported. If
+
+ this configuration is not provided or the
+ empty string, the client
+
+ attempts to construct a proxy configuration
+ from http_proxy and
+
+ https_proxy environment variables. If these
+ environment variables are not
+
+ set, the client does not attempt to proxy
+ requests.
+
+
+
+ socks5 proxying does not currently support
+ spdy streaming endpoints (exec,
+
+ attach, port forward).'
+ type: string
+ server:
+ description: 'Server is the address of the
+ kubernetes cluster (https://hostname:port).
+
+
+
+ Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.'
+ type: string
+ tlsServerName:
+ description: TLSServerName is used to check
+ server certificate. If TLSServerName is
+ empty, the hostname used to contact the
+ server is used.
+ type: string
+ type: object
+ user:
+ description: 'User contains information that describes
+ identity information.
+
+ This is used to tell the kubernetes cluster
+ who you are.'
+ properties:
+ authProvider:
+ description: AuthProvider specifies a custom
+ authentication plugin for the kubernetes
+ cluster.
+ properties:
+ config:
+ additionalProperties:
+ type: string
+ description: Config holds the parameters
+ for the authentication plugin.
+ type: object
+ name:
+ description: Name is the name of the authentication
+ plugin.
+ type: string
+ required:
+ - name
+ type: object
+ exec:
+ description: Exec specifies a custom exec-based
+ authentication plugin for the kubernetes
+ cluster.
+ properties:
+ apiVersion:
+ description: 'Preferred input version
+ of the ExecInfo. The returned ExecCredentials
+ MUST use
+
+ the same encoding version as the input.
+
+ Defaults to client.authentication.k8s.io/v1
+ if not set.'
+ type: string
+ args:
+ description: Arguments to pass to the
+ command when executing it.
+ items:
+ type: string
+ type: array
+ command:
+ description: Command to execute.
+ type: string
+ env:
+ description: 'Env defines additional environment
+ variables to expose to the process.
+ These
+
+ are unioned with the host''s environment,
+ as well as variables client-go uses
+
+ to pass argument to the plugin.'
+ items:
+ description: 'KubeConfigAuthExecEnv
+ is used for setting environment variables
+ when executing an exec-based
+
+ credential plugin.'
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ provideClusterInfo:
+ description: 'ProvideClusterInfo determines
+ whether or not to provide cluster information,
+
+ which could potentially contain very
+ large CA data, to this exec plugin as
+ a
+
+ part of the KUBERNETES_EXEC_INFO environment
+ variable. By default, it is set
+
+ to false. Package k8s.io/client-go/tools/auth/exec
+ provides helper methods for
+
+ reading this environment variable.'
+ type: boolean
+ required:
+ - command
+ type: object
+ type: object
+ required:
+ - user
+ type: object
kubeConfigPath:
description: KubeConfigPath is used to specify the
actual file path or URL to the kubeconfig file from
diff --git a/charts/cluster-api-control-plane-kubeadm/crds/kubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io.yaml b/charts/cluster-api-control-plane-kubeadm/crds/kubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io.yaml
index ff79366..32c170e 100644
--- a/charts/cluster-api-control-plane-kubeadm/crds/kubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io.yaml
+++ b/charts/cluster-api-control-plane-kubeadm/crds/kubeadmcontrolplanetemplates.controlplane.cluster.x-k8s.io.yaml
@@ -2581,6 +2581,205 @@ spec:
BootstrapToken and File are mutually exclusive'
properties:
+ kubeConfig:
+ description: 'KubeConfig is used (optionally)
+ to generate a KubeConfig based on the KubeadmConfig''s
+ information.
+
+ The file is generated at the path specified
+ in KubeConfigPath.
+
+
+
+ Host address (server field) information
+ is automatically populated based on the
+ Cluster''s ControlPlaneEndpoint.
+
+ Certificate Authority (certificate-authority-data
+ field) is gathered from the cluster''s CA
+ secret.'
+ properties:
+ cluster:
+ description: 'Cluster contains information
+ about how to communicate with the kubernetes
+ cluster.
+
+
+
+ By default the following fields are
+ automatically populated:
+
+ - Server with the Cluster''s ControlPlaneEndpoint.
+
+ - CertificateAuthorityData with the
+ Cluster''s CA certificate.'
+ properties:
+ certificateAuthorityData:
+ description: 'CertificateAuthorityData
+ contains PEM-encoded certificate
+ authority certificates.
+
+
+
+ Defaults to the Cluster''s CA certificate
+ if empty.'
+ format: byte
+ type: string
+ insecureSkipTLSVerify:
+ description: InsecureSkipTLSVerify
+ skips the validity check for the
+ server's certificate. This will
+ make your HTTPS connections insecure.
+ type: boolean
+ proxyURL:
+ description: 'ProxyURL is the URL
+ to the proxy to be used for all
+ requests made by this
+
+ client. URLs with "http", "https",
+ and "socks5" schemes are supported. If
+
+ this configuration is not provided
+ or the empty string, the client
+
+ attempts to construct a proxy configuration
+ from http_proxy and
+
+ https_proxy environment variables.
+ If these environment variables are
+ not
+
+ set, the client does not attempt
+ to proxy requests.
+
+
+
+ socks5 proxying does not currently
+ support spdy streaming endpoints
+ (exec,
+
+ attach, port forward).'
+ type: string
+ server:
+ description: 'Server is the address
+ of the kubernetes cluster (https://hostname:port).
+
+
+
+ Defaults to https:// + Cluster.Spec.ControlPlaneEndpoint.'
+ type: string
+ tlsServerName:
+ description: TLSServerName is used
+ to check server certificate. If
+ TLSServerName is empty, the hostname
+ used to contact the server is used.
+ type: string
+ type: object
+ user:
+ description: 'User contains information
+ that describes identity information.
+
+ This is used to tell the kubernetes
+ cluster who you are.'
+ properties:
+ authProvider:
+ description: AuthProvider specifies
+ a custom authentication plugin for
+ the kubernetes cluster.
+ properties:
+ config:
+ additionalProperties:
+ type: string
+ description: Config holds the
+ parameters for the authentication
+ plugin.
+ type: object
+ name:
+ description: Name is the name
+ of the authentication plugin.
+ type: string
+ required:
+ - name
+ type: object
+ exec:
+ description: Exec specifies a custom
+ exec-based authentication plugin
+ for the kubernetes cluster.
+ properties:
+ apiVersion:
+ description: 'Preferred input
+ version of the ExecInfo. The
+ returned ExecCredentials MUST
+ use
+
+ the same encoding version as
+ the input.
+
+ Defaults to client.authentication.k8s.io/v1
+ if not set.'
+ type: string
+ args:
+ description: Arguments to pass
+ to the command when executing
+ it.
+ items:
+ type: string
+ type: array
+ command:
+ description: Command to execute.
+ type: string
+ env:
+ description: 'Env defines additional
+ environment variables to expose
+ to the process. These
+
+ are unioned with the host''s
+ environment, as well as variables
+ client-go uses
+
+ to pass argument to the plugin.'
+ items:
+ description: 'KubeConfigAuthExecEnv
+ is used for setting environment
+ variables when executing an
+ exec-based
+
+ credential plugin.'
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ provideClusterInfo:
+ description: 'ProvideClusterInfo
+ determines whether or not to
+ provide cluster information,
+
+ which could potentially contain
+ very large CA data, to this
+ exec plugin as a
+
+ part of the KUBERNETES_EXEC_INFO
+ environment variable. By default,
+ it is set
+
+ to false. Package k8s.io/client-go/tools/auth/exec
+ provides helper methods for
+
+ reading this environment variable.'
+ type: boolean
+ required:
+ - command
+ type: object
+ type: object
+ required:
+ - user
+ type: object
kubeConfigPath:
description: KubeConfigPath is used to specify
the actual file path or URL to the kubeconfig
diff --git a/charts/cluster-api-control-plane-kubeadm/values.yaml b/charts/cluster-api-control-plane-kubeadm/values.yaml
index 1d51068..7cd2057 100644
--- a/charts/cluster-api-control-plane-kubeadm/values.yaml
+++ b/charts/cluster-api-control-plane-kubeadm/values.yaml
@@ -4,4 +4,4 @@ capi_use_deprecated_infra_machine_naming: false
cluster_topology: false
exp_kubeadm_bootstrap_format_ignition: false
exp_machine_pool: true
-image: registry.k8s.io/cluster-api/kubeadm-control-plane-controller:v1.7.2
+image: registry.k8s.io/cluster-api/kubeadm-control-plane-controller:v1.7.4
diff --git a/charts/cluster-api-core/Chart.yaml b/charts/cluster-api-core/Chart.yaml
index c313042..729efb5 100644
--- a/charts/cluster-api-core/Chart.yaml
+++ b/charts/cluster-api-core/Chart.yaml
@@ -1,5 +1,5 @@
apiVersion: v2
-appVersion: v1.7.2
+appVersion: v1.7.4
description: A Helm chart for deploying cluster API.
icon: https://assets.unikorn-cloud.org/assets/images/logos/dark-on-light/icon.png
name: cluster-api-core
diff --git a/charts/cluster-api-core/crds/clusterclasses.cluster.x-k8s.io.yaml b/charts/cluster-api-core/crds/clusterclasses.cluster.x-k8s.io.yaml
index 243e698..dcf011b 100644
--- a/charts/cluster-api-core/crds/clusterclasses.cluster.x-k8s.io.yaml
+++ b/charts/cluster-api-core/crds/clusterclasses.cluster.x-k8s.io.yaml
@@ -629,10 +629,33 @@ spec:
"selector" are not healthy.'
x-kubernetes-int-or-string: true
nodeStartupTimeout:
- description: 'Machines older than this duration without a
- node will be considered to have
+ description: 'NodeStartupTimeout allows to set the maximum
+ time for MachineHealthCheck
- failed and will be remediated.
+ to consider a Machine unhealthy if a corresponding Node
+ isn''t associated
+
+ through a `Spec.ProviderID` field.
+
+
+
+ The duration set in this field is compared to the greatest
+ of:
+
+ - Cluster''s infrastructure ready condition timestamp (if
+ and when available)
+
+ - Control Plane''s initialized condition timestamp (if and
+ when available)
+
+ - Machine''s infrastructure ready condition timestamp (if
+ and when available)
+
+ - Machine''s metadata creation timestamp
+
+
+
+ Defaults to 10 minutes.
If you wish to disable this feature, set the value explicitly
to 0.'
@@ -1584,10 +1607,33 @@ spec:
"selector" are not healthy.'
x-kubernetes-int-or-string: true
nodeStartupTimeout:
- description: 'Machines older than this duration without
- a node will be considered to have
+ description: 'NodeStartupTimeout allows to set the maximum
+ time for MachineHealthCheck
+
+ to consider a Machine unhealthy if a corresponding
+ Node isn''t associated
- failed and will be remediated.
+ through a `Spec.ProviderID` field.
+
+
+
+ The duration set in this field is compared to the
+ greatest of:
+
+ - Cluster''s infrastructure ready condition timestamp
+ (if and when available)
+
+ - Control Plane''s initialized condition timestamp
+ (if and when available)
+
+ - Machine''s infrastructure ready condition timestamp
+ (if and when available)
+
+ - Machine''s metadata creation timestamp
+
+
+
+ Defaults to 10 minutes.
If you wish to disable this feature, set the value
explicitly to 0.'
@@ -1801,6 +1847,55 @@ spec:
NOTE: This value can be overridden while defining a Cluster.Topology
using this MachineDeploymentClass.'
properties:
+ remediation:
+ description: 'Remediation controls the strategy of remediating
+ unhealthy machines
+
+ and how remediating operations should occur during
+ the lifecycle of the dependant MachineSets.'
+ properties:
+ maxInFlight:
+ anyOf:
+ - type: integer
+ - type: string
+ description: 'MaxInFlight determines how many in
+ flight remediations should happen at the same
+ time.
+
+
+
+ Remediation only happens on the MachineSet with
+ the most current revision, while
+
+ older MachineSets (usually present during rollout
+ operations) aren''t allowed to remediate.
+
+
+
+ Note: In general (independent of remediations),
+ unhealthy machines are always
+
+ prioritized during scale down operations over
+ healthy ones.
+
+
+
+ MaxInFlight can be set to a fixed number or a
+ percentage.
+
+ Example: when this is set to 20%, the MachineSet
+ controller deletes at most 20% of
+
+ the desired replicas.
+
+
+
+ If not set, remediation is limited to all machines
+ (bounded by replicas)
+
+ under the active MachineSet''s management.'
+ x-kubernetes-int-or-string: true
+ type: object
rollingUpdate:
description: 'Rolling update config params. Present
only if
diff --git a/charts/cluster-api-core/crds/clusters.cluster.x-k8s.io.yaml b/charts/cluster-api-core/crds/clusters.cluster.x-k8s.io.yaml
index 65e175d..3105687 100644
--- a/charts/cluster-api-core/crds/clusters.cluster.x-k8s.io.yaml
+++ b/charts/cluster-api-core/crds/clusters.cluster.x-k8s.io.yaml
@@ -1162,10 +1162,33 @@ spec:
"selector" are not healthy.'
x-kubernetes-int-or-string: true
nodeStartupTimeout:
- description: 'Machines older than this duration without
- a node will be considered to have
+ description: 'NodeStartupTimeout allows to set the maximum
+ time for MachineHealthCheck
- failed and will be remediated.
+ to consider a Machine unhealthy if a corresponding Node
+ isn''t associated
+
+ through a `Spec.ProviderID` field.
+
+
+
+ The duration set in this field is compared to the greatest
+ of:
+
+ - Cluster''s infrastructure ready condition timestamp
+ (if and when available)
+
+ - Control Plane''s initialized condition timestamp (if
+ and when available)
+
+ - Machine''s infrastructure ready condition timestamp
+ (if and when available)
+
+ - Machine''s metadata creation timestamp
+
+
+
+ Defaults to 10 minutes.
If you wish to disable this feature, set the value explicitly
to 0.'
@@ -1370,6 +1393,62 @@ spec:
support for this field, this value will be ignored.'
format: int32
type: integer
+ variables:
+ description: Variables can be used to customize the ControlPlane
+ through patches.
+ properties:
+ overrides:
+ description: Overrides can be used to override Cluster
+ level variables.
+ items:
+ description: 'ClusterVariable can be used to customize
+ the Cluster through patches. Each ClusterVariable
+ is associated with a
+
+ Variable definition in the ClusterClass `status` variables.'
+ properties:
+ definitionFrom:
+ description: 'DefinitionFrom specifies where the
+ definition of this Variable is from. DefinitionFrom
+ is `inline` when the
+
+ definition is from the ClusterClass `.spec.variables`
+ or the name of a patch defined in the ClusterClass
+
+ `.spec.patches` where the patch is external and
+ provides external variables.
+
+ This field is mandatory if the variable has `DefinitionsConflict:
+ true` in ClusterClass `status.variables[]`'
+ type: string
+ name:
+ description: Name of the variable.
+ type: string
+ value:
+ description: 'Value of the variable.
+
+ Note: the value will be validated against the
+ schema of the corresponding ClusterClassVariable
+
+ from the ClusterClass.
+
+ Note: We have to use apiextensionsv1.JSON instead
+ of a custom JSON type, because controller-tools
+ has a
+
+ hard-coded schema for apiextensionsv1.JSON which
+ cannot be produced by another type via controller-tools,
+
+ i.e. it is not possible to have no type field.
+
+ Ref: https://github.com/kubernetes-sigs/controller-tools/blob/d0e03a142d0ecdd5491593e941ee1d6b5d91dba6/pkg/crd/known_types.go#L106-L111'
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ type: object
type: object
rolloutAfter:
description: 'RolloutAfter performs a rollout of the entire cluster
@@ -1500,10 +1579,33 @@ spec:
"selector" are not healthy.'
x-kubernetes-int-or-string: true
nodeStartupTimeout:
- description: 'Machines older than this duration
- without a node will be considered to have
+ description: 'NodeStartupTimeout allows to set the
+ maximum time for MachineHealthCheck
+
+ to consider a Machine unhealthy if a corresponding
+ Node isn''t associated
+
+ through a `Spec.ProviderID` field.
+
- failed and will be remediated.
+
+ The duration set in this field is compared to
+ the greatest of:
+
+ - Cluster''s infrastructure ready condition timestamp
+ (if and when available)
+
+ - Control Plane''s initialized condition timestamp
+ (if and when available)
+
+ - Machine''s infrastructure ready condition timestamp
+ (if and when available)
+
+ - Machine''s metadata creation timestamp
+
+
+
+ Defaults to 10 minutes.
If you wish to disable this feature, set the value
explicitly to 0.'
@@ -1737,6 +1839,55 @@ spec:
new ones.'
properties:
+ remediation:
+ description: 'Remediation controls the strategy
+ of remediating unhealthy machines
+
+ and how remediating operations should occur during
+ the lifecycle of the dependant MachineSets.'
+ properties:
+ maxInFlight:
+ anyOf:
+ - type: integer
+ - type: string
+ description: 'MaxInFlight determines how many
+ in flight remediations should happen at the
+ same time.
+
+
+
+ Remediation only happens on the MachineSet
+ with the most current revision, while
+
+ older MachineSets (usually present during
+ rollout operations) aren''t allowed to remediate.
+
+
+
+ Note: In general (independent of remediations),
+ unhealthy machines are always
+
+ prioritized during scale down operations over
+ healthy ones.
+
+
+
+ MaxInFlight can be set to a fixed number or
+ a percentage.
+
+ Example: when this is set to 20%, the MachineSet
+ controller deletes at most 20% of
+
+ the desired replicas.
+
+
+
+ If not set, remediation is limited to all
+ machines (bounded by replicas)
+
+ under the active MachineSet''s management.'
+ x-kubernetes-int-or-string: true
+ type: object
rollingUpdate:
description: 'Rolling update config params. Present
only if
diff --git a/charts/cluster-api-core/crds/machinedeployments.cluster.x-k8s.io.yaml b/charts/cluster-api-core/crds/machinedeployments.cluster.x-k8s.io.yaml
index 3d60b82..e0ba1f8 100644
--- a/charts/cluster-api-core/crds/machinedeployments.cluster.x-k8s.io.yaml
+++ b/charts/cluster-api-core/crds/machinedeployments.cluster.x-k8s.io.yaml
@@ -1661,6 +1661,52 @@ spec:
new ones.'
properties:
+ remediation:
+ description: 'Remediation controls the strategy of remediating
+ unhealthy machines
+
+ and how remediating operations should occur during the lifecycle
+ of the dependant MachineSets.'
+ properties:
+ maxInFlight:
+ anyOf:
+ - type: integer
+ - type: string
+ description: 'MaxInFlight determines how many in flight remediations
+ should happen at the same time.
+
+
+
+ Remediation only happens on the MachineSet with the most
+ current revision, while
+
+ older MachineSets (usually present during rollout operations)
+ aren''t allowed to remediate.
+
+
+
+ Note: In general (independent of remediations), unhealthy
+ machines are always
+
+ prioritized during scale down operations over healthy ones.
+
+
+
+ MaxInFlight can be set to a fixed number or a percentage.
+
+ Example: when this is set to 20%, the MachineSet controller
+ deletes at most 20% of
+
+ the desired replicas.
+
+
+
+ If not set, remediation is limited to all machines (bounded
+ by replicas)
+
+ under the active MachineSet''s management.'
+ x-kubernetes-int-or-string: true
+ type: object
rollingUpdate:
description: 'Rolling update config params. Present only if
diff --git a/charts/cluster-api-core/crds/machinehealthchecks.cluster.x-k8s.io.yaml b/charts/cluster-api-core/crds/machinehealthchecks.cluster.x-k8s.io.yaml
index 98b2b72..f05ba3b 100644
--- a/charts/cluster-api-core/crds/machinehealthchecks.cluster.x-k8s.io.yaml
+++ b/charts/cluster-api-core/crds/machinehealthchecks.cluster.x-k8s.io.yaml
@@ -796,12 +796,31 @@ spec:
"selector" are not healthy.'
x-kubernetes-int-or-string: true
nodeStartupTimeout:
- description: 'Machines older than this duration without a node will
- be considered to have
+ description: 'NodeStartupTimeout allows to set the maximum time for
+ MachineHealthCheck
- failed and will be remediated.
+ to consider a Machine unhealthy if a corresponding Node isn''t associated
- If not set, this value is defaulted to 10 minutes.
+ through a `Spec.ProviderID` field.
+
+
+
+ The duration set in this field is compared to the greatest of:
+
+ - Cluster''s infrastructure ready condition timestamp (if and when
+ available)
+
+ - Control Plane''s initialized condition timestamp (if and when
+ available)
+
+ - Machine''s infrastructure ready condition timestamp (if and when
+ available)
+
+ - Machine''s metadata creation timestamp
+
+
+
+ Defaults to 10 minutes.
If you wish to disable this feature, set the value explicitly to
0.'
diff --git a/charts/cluster-api-core/values.yaml b/charts/cluster-api-core/values.yaml
index 4a3f148..8c87632 100644
--- a/charts/cluster-api-core/values.yaml
+++ b/charts/cluster-api-core/values.yaml
@@ -6,4 +6,4 @@ exp_cluster_resource_set: true
exp_machine_pool: true
exp_machine_set_preflight_checks: false
exp_runtime_sdk: false
-image: registry.k8s.io/cluster-api/cluster-api-controller:v1.7.2
+image: registry.k8s.io/cluster-api/cluster-api-controller:v1.7.4
diff --git a/charts/cluster-api-provider-openstack/Chart.yaml b/charts/cluster-api-provider-openstack/Chart.yaml
index 635f0e6..2e8edd8 100644
--- a/charts/cluster-api-provider-openstack/Chart.yaml
+++ b/charts/cluster-api-provider-openstack/Chart.yaml
@@ -1,5 +1,5 @@
apiVersion: v2
-appVersion: v0.10.3
+appVersion: v0.10.4
description: A Helm chart for deploying cluster API.
icon: https://assets.unikorn-cloud.org/assets/images/logos/dark-on-light/icon.png
name: cluster-api-provider-openstack
diff --git a/charts/cluster-api-provider-openstack/README.md b/charts/cluster-api-provider-openstack/README.md
new file mode 100644
index 0000000..60a85f6
--- /dev/null
+++ b/charts/cluster-api-provider-openstack/README.md
@@ -0,0 +1,46 @@
+# Installing Cluster API Provider OpenStack
+
+
+Helm
+
+```shell
+helm repo add unikorn-cloud-capi https://unikorn-cloud.github.io/helm-cluster-api
+helm repo update
+helm install cluster-api-provider-openstack unikorn-cloud-capi/cluster-api-provider-openstack --version v0.2.0
+```
+
+
+
+ArgoCD
+
+```yaml
+---
+
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+ name: cluster-api-provider-openstack
+ namespace: argocd
+spec:
+ project: default
+ source:
+ repoURL: https://unikorn-cloud.github.io/helm-cluster-api
+ chart: cluster-api-provider-openstack
+ targetRevision: v0.2.0
+ destination:
+ server: https://kubernetes.default.svc
+ namespace: foo
+ ignoreDifferences:
+ - group: apiextensions.k8s.io
+ kind: CustomResourceDefinition
+ jsonPointers:
+ - /spec/conversion/webhook/clientConfig/caBundle
+ syncPolicy:
+ automated:
+ selfHeal: true
+ syncOptions:
+ - RespectIgnoreDifferences=true
+ - CreateNamespace=true
+```
+
+
diff --git a/charts/cluster-api-provider-openstack/values.yaml b/charts/cluster-api-provider-openstack/values.yaml
index a6f48a2..b044b5c 100644
--- a/charts/cluster-api-provider-openstack/values.yaml
+++ b/charts/cluster-api-provider-openstack/values.yaml
@@ -1 +1 @@
-image: registry.k8s.io/capi-openstack/capi-openstack-controller:v0.10.3
+image: registry.k8s.io/capi-openstack/capi-openstack-controller:v0.10.4
diff --git a/charts/cluster-api/values.yaml b/charts/cluster-api/values.yaml
index f5148ba..c1e5f23 100644
--- a/charts/cluster-api/values.yaml
+++ b/charts/cluster-api/values.yaml
@@ -15,14 +15,14 @@ cluster-api-core:
exp_machine_pool: true
exp_machine_set_preflight_checks: false
exp_runtime_sdk: false
- image: registry.k8s.io/cluster-api/cluster-api-controller:v1.7.2
+ image: registry.k8s.io/cluster-api/cluster-api-controller:v1.7.4
cluster-api-bootstrap-kubeadm:
capi_diagnostics_address: :8443
capi_insecure_diagnostics: false
exp_kubeadm_bootstrap_format_ignition: false
exp_machine_pool: true
- image: registry.k8s.io/cluster-api/kubeadm-bootstrap-controller:v1.7.2
+ image: registry.k8s.io/cluster-api/kubeadm-bootstrap-controller:v1.7.4
kubeadm_bootstrap_token_ttl: 15m
cluster-api-control-plane-kubeadm:
@@ -32,7 +32,7 @@ cluster-api-control-plane-kubeadm:
cluster_topology: false
exp_kubeadm_bootstrap_format_ignition: false
exp_machine_pool: true
- image: registry.k8s.io/cluster-api/kubeadm-control-plane-controller:v1.7.2
+ image: registry.k8s.io/cluster-api/kubeadm-control-plane-controller:v1.7.4
cluster-api-provider-openstack:
- image: registry.k8s.io/capi-openstack/capi-openstack-controller:v0.10.3
+ image: registry.k8s.io/capi-openstack/capi-openstack-controller:v0.10.4