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