sigs.k8s.io/kubebuilder/v3@v3.14.0/pkg/plugins/common/kustomize/v2/scaffolds/internal/templates/config/manager/config.go (about)

     1  /*
     2  Copyright 2020 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package manager
    18  
    19  import (
    20  	"path/filepath"
    21  
    22  	"sigs.k8s.io/kubebuilder/v3/pkg/machinery"
    23  )
    24  
    25  var _ machinery.Template = &Config{}
    26  
    27  // Config scaffolds a file that defines the namespace and the manager deployment
    28  type Config struct {
    29  	machinery.TemplateMixin
    30  	machinery.ComponentConfigMixin
    31  	machinery.ProjectNameMixin
    32  
    33  	// Image is controller manager image name
    34  	Image string
    35  }
    36  
    37  // SetTemplateDefaults implements file.Template
    38  func (f *Config) SetTemplateDefaults() error {
    39  	if f.Path == "" {
    40  		f.Path = filepath.Join("config", "manager", "manager.yaml")
    41  	}
    42  
    43  	f.TemplateBody = configTemplate
    44  
    45  	return nil
    46  }
    47  
    48  const configTemplate = `apiVersion: v1
    49  kind: Namespace
    50  metadata:
    51    labels:
    52      control-plane: controller-manager
    53      app.kubernetes.io/name: namespace
    54      app.kubernetes.io/instance: system
    55      app.kubernetes.io/component: manager
    56      app.kubernetes.io/created-by: {{ .ProjectName }}
    57      app.kubernetes.io/part-of: {{ .ProjectName }}
    58      app.kubernetes.io/managed-by: kustomize
    59    name: system
    60  ---
    61  apiVersion: apps/v1
    62  kind: Deployment
    63  metadata:
    64    name: controller-manager
    65    namespace: system
    66    labels:
    67      control-plane: controller-manager
    68      app.kubernetes.io/name: deployment
    69      app.kubernetes.io/instance: controller-manager
    70      app.kubernetes.io/component: manager
    71      app.kubernetes.io/created-by: {{ .ProjectName }}
    72      app.kubernetes.io/part-of: {{ .ProjectName }}
    73      app.kubernetes.io/managed-by: kustomize
    74  spec:
    75    selector:
    76      matchLabels:
    77        control-plane: controller-manager
    78    replicas: 1
    79    template:
    80      metadata:
    81        annotations:
    82          kubectl.kubernetes.io/default-container: manager
    83        labels:
    84          control-plane: controller-manager
    85      spec:
    86        # TODO(user): Uncomment the following code to configure the nodeAffinity expression
    87        # according to the platforms which are supported by your solution.
    88        # It is considered best practice to support multiple architectures. You can
    89        # build your manager image using the makefile target docker-buildx.
    90        # affinity:
    91        #   nodeAffinity:
    92        #     requiredDuringSchedulingIgnoredDuringExecution:
    93        #       nodeSelectorTerms:
    94        #         - matchExpressions:
    95        #           - key: kubernetes.io/arch
    96        #             operator: In
    97        #             values:
    98        #               - amd64
    99        #               - arm64
   100        #               - ppc64le
   101        #               - s390x
   102        #           - key: kubernetes.io/os
   103        #             operator: In
   104        #             values:
   105        #               - linux
   106        securityContext:
   107          runAsNonRoot: true
   108          # TODO(user): For common cases that do not require escalating privileges
   109          # it is recommended to ensure that all your Pods/Containers are restrictive.
   110          # More info: https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted
   111          # Please uncomment the following code if your project does NOT have to work on old Kubernetes
   112          # versions < 1.19 or on vendors versions which do NOT support this field by default (i.e. Openshift < 4.11 ).
   113          # seccompProfile:
   114          #   type: RuntimeDefault
   115        containers:
   116        - command:
   117          - /manager
   118  {{- if not .ComponentConfig }}
   119          args:
   120          - --leader-elect
   121  {{- end }}
   122          image: {{ .Image }}
   123          name: manager
   124          securityContext:
   125            allowPrivilegeEscalation: false
   126            capabilities:
   127              drop:
   128              - "ALL"
   129          livenessProbe:
   130            httpGet:
   131              path: /healthz
   132              port: 8081
   133            initialDelaySeconds: 15
   134            periodSeconds: 20
   135          readinessProbe:
   136            httpGet:
   137              path: /readyz
   138              port: 8081
   139            initialDelaySeconds: 5
   140            periodSeconds: 10
   141          # TODO(user): Configure the resources accordingly based on the project requirements.
   142          # More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
   143          resources:
   144            limits:
   145              cpu: 500m
   146              memory: 128Mi
   147            requests:
   148              cpu: 10m
   149              memory: 64Mi
   150        serviceAccountName: controller-manager
   151        terminationGracePeriodSeconds: 10
   152  `