* codes Signed-off-by: toyamagu2021@gmail.com <toyamagu2021@gmail.com> * codegen Signed-off-by: toyamagu2021@gmail.com <toyamagu2021@gmail.com> * docs Signed-off-by: toyamagu2021@gmail.com <toyamagu2021@gmail.com> * refactor Signed-off-by: toyamagu <toyamagu2021@gmail.com> * fix omitenmpty Signed-off-by: toyamagu2021@gmail.com <toyamagu2021@gmail.com> * fix typos and add tests Signed-off-by: toyamagu2021@gmail.com <toyamagu2021@gmail.com> * codegen Signed-off-by: toyamagu2021@gmail.com <toyamagu2021@gmail.com> * chainge KustomizeReplica.counts type from int to intstr.IntOrString Signed-off-by: toyamagu2021@gmail.com <toyamagu2021@gmail.com> * add namespace to zero-check Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: toyamagu2021@gmail.com <toyamagu2021@gmail.com> Signed-off-by: toyamagu <toyamagu2021@gmail.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
5.1 KiB
Kustomize
The following configuration options are available for Kustomize:
namePrefixis a prefix appended to resources for Kustomize appsnameSuffixis a suffix appended to resources for Kustomize appsimagesis a list of Kustomize image overridesreplicasis a list of Kustomize replica overridescommonLabelsis a string map of additional labelsforceCommonLabelsis a boolean value which defines if it's allowed to override existing labelscommonAnnotationsis a string map of additional annotationsnamespaceis a kubernetes resources namespaceforceCommonAnnotationsis a boolean value which defines if it's allowed to override existing annotationscommonAnnotationsEnvsubstis a boolean value which enables env variables substition in annotation values
To use Kustomize with an overlay, point your path to the overlay.
!!! tip
If you're generating resources, you should read up how to ignore those generated resources using the IgnoreExtraneous compare option.
Private Remote Bases
If you have remote bases that are either (a) HTTPS and need username/password (b) SSH and need SSH private key, then they'll inherit that from the app's repo.
This will work if the remote bases uses the same credentials/private key. It will not work if they use different ones. For security reasons your app only ever knows about its own repo (not other team's or users repos), and so you won't be able to access other private repos, even if Argo CD knows about them.
Read more about private repos.
kustomize build Options/Parameters
To provide build options to kustomize build of default Kustomize version, use kustomize.buildOptions field of argocd-cm ConfigMap. Use kustomize.buildOptions.<version> to register version specific build options.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
kustomize.buildOptions: --load-restrictor LoadRestrictionsNone
kustomize.buildOptions.v4.4.0: --output /tmp
Custom Kustomize versions
Argo CD supports using multiple Kustomize versions simultaneously and specifies required version per application.
To add additional versions make sure required versions are bundled and then
use kustomize.path.<version> fields of argocd-cm ConfigMap to register bundled additional versions.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
kustomize.path.v3.5.1: /custom-tools/kustomize_3_5_1
kustomize.path.v3.5.4: /custom-tools/kustomize_3_5_4
Once a new version is configured you can reference it in an Application spec as follows:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
spec:
source:
repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: HEAD
path: kustomize-guestbook
kustomize:
version: v3.5.4
Additionally, the application kustomize version can be configured using the Parameters tab of the Application Details page, or using the following CLI command:
argocd app set <appName> --kustomize-version v3.5.4
Build Environment
Kustomize apps have access to the standard build environment which can be used in combination with a config managment plugin to alter the rendered manifests.
Kustomizing Helm charts
It's possible to render Helm charts with Kustomize.
Doing so requires that you pass the --enable-helm flag to the kustomize build command.
This flag is not part of the Kustomize options within Argo CD.
If you would like to render Helm charts through Kustomize in an Argo CD application, you have two options:
You can either create a custom plugin, or modify the argocd-cm ConfigMap to include the --enable-helm flag globally for all Kustomize applications:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
kustomize.buildOptions: --enable-helm
Setting the manifests' namespace
The spec.destination.namespace field only adds a namespace when it's missing from the manifests generated by Kustomize. It also uses kubectl to set the namespace, which sometimes misses namespace fields in certain resources (for example, custom resources). In these cases, you might get an error like this: ClusterRoleBinding.rbac.authorization.k8s.io "example" is invalid: subjects[0].namespace: Required value.
Using Kustomize directly to set the missing namespaces can resolve this problem. Setting spec.source.kustomize.namespace instructs Kustomize to set namespace fields to the given value.
If spec.destination.namespace and spec.source.kustomize.namespace are both set, Argo CD will defer to the latter, the namespace value set by Kustomize.