Add node-labeler helm chart

Change-Id: I286c283272a86eff81b479a9dad29eb2d958fecc
changes/22/741722/24
okozachenko 3 years ago
parent 22efae206b
commit d3f81d5c4a

@ -0,0 +1,11 @@
---
apiVersion: v1
name: node-labeler
version: 0.5.3
description: Node labeler for Kubernetes
home: https://github.com/vexxhost/node-labeler
maintainers:
- name: Mohammed Naser
email: mnaser@vexxhost.com
url: https://github.com/mnaser
appVersion: v0.1.1

@ -0,0 +1,41 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "node-labeler.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "node-labeler.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{/*
Generate basic labels
*/}}
{{- define "node-labeler.labels" }}
app.kubernetes.io/name: {{ include "node-labeler.fullname" . }}
app.kubernetes.io/instance: {{ include "node-labeler.chart" . }}
app.kubernetes.io/version: {{ .Chart.Version }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "node-labeler.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

@ -0,0 +1,15 @@
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: {{ include "node-labeler.fullname" . }}
labels:
{{ include "node-labeler.labels" . | indent 4 }}
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- patch

@ -0,0 +1,15 @@
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: {{ include "node-labeler.fullname" . }}
labels:
{{ include "node-labeler.labels" . | indent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "node-labeler.fullname" . }}
subjects:
- kind: ServiceAccount
name: {{ include "node-labeler.fullname" . }}
namespace: {{ .Release.Namespace }}

@ -0,0 +1,41 @@
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: {{ include "node-labeler.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{ include "node-labeler.labels" . | indent 4 }}
spec:
selector:
matchLabels:
{{ include "node-labeler.labels" . | indent 6 }}
template:
metadata:
labels:
{{ include "node-labeler.labels" . | indent 8 }}
spec:
tolerations:
- operator: Exists
effect: NoSchedule
serviceAccountName: {{ include "node-labeler.fullname" . }}
containers:
- name: node-labeler
image: vexxhost/node-labeler:latest
resources:
requests:
cpu: "100m"
memory: "50Mi"
limits:
cpu: "100m"
memory: "50Mi"
env:
- name: NODE
valueFrom:
fieldRef:
fieldPath: spec.nodeName
nodeSelector:
kubernetes.io/arch: amd64
updateStrategy:
rollingUpdate:
maxUnavailable: 10%

@ -0,0 +1,8 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "node-labeler.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{ include "node-labeler.labels" . | indent 4 }}

@ -0,0 +1,22 @@
---
# Copyright (c) 2020 VEXXHOST, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
- hosts: all
roles:
- name: helm-template
helm_release_name: node-labeler
helm_chart: ./charts/node-labeler
helm_values_file: ./charts/node-labeler/values.yaml

@ -0,0 +1,40 @@
---
# Copyright (c) 2020 VEXXHOST, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
- hosts: all
tasks:
- name: Get node name
shell: kubectl get nodes -o=name | head -1
register: _node_name
until: _node_name is success
retries: 60
delay: 5
failed_when: |
{{ _node_name.stdout_lines | length == 0 }}
- name: Get the node labels
shell: kubectl label {{ _node_name.stdout }} --list
register: _node_labels
- name: Check the label node.vexxhost.com/vendor is set
fail:
msg: node.vexxhost.com/vendor label is missing.
when: (_node_labels.stdout is search('node.vexxhost.com/vendor'))==False
- name: Check the label node.vexxhost.com/product is set
fail:
msg: node.vexxhost.com/product label is missing.
when: (_node_labels.stdout is search('node.vexxhost.com/product'))==False

@ -0,0 +1,18 @@
- job:
name: helm-charts:node-labeler
parent: apply-helm-charts
pre-run: playbooks/node-labeler/pre.yaml
run: playbooks/node-labeler/run.yaml
vars:
minikube_dns_resolvers: [1.1.1.1, 8.8.8.8]
collect_kubernetes_logs_namespace: kube-system
- project:
check:
jobs:
- chart-testing-lint
- helm-charts:node-labeler
gate:
jobs:
- chart-testing-lint
- helm-charts:node-labeler
Loading…
Cancel
Save