Add node-labeler helm chart

Change-Id: I286c283272a86eff81b479a9dad29eb2d958fecc
This commit is contained in:
okozachenko 2020-07-18 00:31:46 +03:00
parent 22efae206b
commit d3f81d5c4a
10 changed files with 212 additions and 0 deletions

11
charts/node-labeler/Chart.yaml Executable file
View File

@ -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

View File

@ -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 -}}

View File

@ -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

View File

@ -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 }}

View File

@ -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%

View File

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

View File

@ -0,0 +1 @@
---

22
playbooks/node-labeler/pre.yaml Executable file
View File

@ -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

40
playbooks/node-labeler/run.yaml Executable file
View File

@ -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

18
zuul.d/project.yaml Executable file
View File

@ -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