From bb18875b20bc9a1d1f4cadf897d6ca2013b0a7a5 Mon Sep 17 00:00:00 2001 From: Abhishek Dubey <abhishekbhardwaj510@gmail.com> Date: Sat, 6 Feb 2021 22:28:24 +0530 Subject: [PATCH] [Node port][Add] Added nodeport support for service (#38) * Added NodePort service support for redis operator Signed-off-by: iamabhishek-dubey <abhishekbhardwaj510@gmail.com> * Added nodePort service support Signed-off-by: iamabhishek-dubey <abhishekbhardwaj510@gmail.com> * Updated CHANGELOG with v0.4.0 info Signed-off-by: iamabhishek-dubey <abhishekbhardwaj510@gmail.com> --- CHANGELOG.md | 13 +++ Makefile | 4 +- api/v1beta1/redis_types.go | 8 +- helm-charts/redis-operator/Chart.yaml | 8 +- .../templates/operator-deployment.yaml | 31 ++++--- .../templates/role-binding.yaml | 16 +++- .../redis-operator/templates/role.yaml | 82 ------------------- .../templates/service-account.yaml | 7 ++ helm-charts/redis-operator/values.yaml | 14 +++- k8sutils/redis.go | 3 +- k8sutils/services.go | 2 + 11 files changed, 78 insertions(+), 110 deletions(-) delete mode 100644 helm-charts/redis-operator/templates/role.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f01135c..6061fd58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +### v0.4.0 +##### February 6, 2021 + +#### :tada: Features + +- Add Nodeport support for Kubernetes service + +#### :beetle: Bug Fixes + +- Updated helm chart with latest CRD configuration +- Optimized helm chart +- RBAC issus fixed + ### v0.3.0 ##### Decemeber 30, 2020 diff --git a/Makefile b/Makefile index 9d4795d8..9423d295 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # Current Operator version -VERSION ?= 0.0.1 +VERSION ?= 0.4.0 # Default bundle image tag BUNDLE_IMG ?= controller-bundle:$(VERSION) # Options for 'bundle-build' @@ -12,7 +12,7 @@ endif BUNDLE_METADATA_OPTS ?= $(BUNDLE_CHANNELS) $(BUNDLE_DEFAULT_CHANNEL) # Image URL to use all building/pushing image targets -IMG ?= quay.io/opstree/redis-operator:v0.3.0 +IMG ?= quay.io/opstree/redis-operator:v0.4.0 # Produce CRDs that work back to Kubernetes 1.11 (no version conversion) CRD_OPTIONS ?= "crd:trivialVersions=true,preserveUnknownFields=false" diff --git a/api/v1beta1/redis_types.go b/api/v1beta1/redis_types.go index e915b850..635a82d0 100644 --- a/api/v1beta1/redis_types.go +++ b/api/v1beta1/redis_types.go @@ -55,8 +55,8 @@ type Storage struct { // RedisMaster interface will have the redis master configuration type RedisMaster struct { Resources Resources `json:"resources,omitempty"` - RedisConfig map[string]string `json:"redisConfig"` - Service Service `json:"service"` + RedisConfig map[string]string `json:"redisConfig,omitempty"` + Service Service `json:"service,omitempty"` } // RedisExporter interface will have the information for redis exporter related stuff @@ -78,8 +78,8 @@ type GlobalConfig struct { // RedisSlave interface will have the redis slave configuration type RedisSlave struct { Resources Resources `json:"resources,omitempty"` - RedisConfig map[string]string `json:"redisConfig"` - Service Service `json:"service"` + RedisConfig map[string]string `json:"redisConfig,omitempty"` + Service Service `json:"service,omitempty"` } // ResourceDescription describes CPU and memory resources defined for a cluster. diff --git a/helm-charts/redis-operator/Chart.yaml b/helm-charts/redis-operator/Chart.yaml index dff5d045..ffe9691d 100644 --- a/helm-charts/redis-operator/Chart.yaml +++ b/helm-charts/redis-operator/Chart.yaml @@ -1,13 +1,15 @@ --- -apiVersion: v1 +apiVersion: v2 +appVersion: "0.4.0" description: Provides easy redis setup definitions for Kubernetes services, and deployment. engine: gotpl maintainers: - - name: Opstree Solutions + - name: Abhishek Dubey + - name: Sandeep Rawat name: redis-operator sources: - https://github.com/OT-CONTAINER-KIT/redis-operator -version: 0.2 +version: 0.4.0 home: https://github.com/OT-CONTAINER-KIT/redis-operator icon: https://github.com/OT-CONTAINER-KIT/redis-operator/raw/master/static/redis-operator-logo.svg keywords: diff --git a/helm-charts/redis-operator/templates/operator-deployment.yaml b/helm-charts/redis-operator/templates/operator-deployment.yaml index 0fa5cd7d..16bf04cc 100644 --- a/helm-charts/redis-operator/templates/operator-deployment.yaml +++ b/helm-charts/redis-operator/templates/operator-deployment.yaml @@ -3,8 +3,15 @@ apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.redisOperator.name }} + labels: + control-plane: "{{ .Values.redisOperator.name }}" + app.kubernetes.io/name: {{ .Values.redisOperator.name }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} spec: - replicas: 1 + replicas: {{ .Values.replicas }} selector: matchLabels: name: {{ .Values.redisOperator.name }} @@ -13,19 +20,17 @@ spec: labels: name: {{ .Values.redisOperator.name }} spec: - serviceAccountName: {{ .Values.redisOperator.name }} containers: - name: "{{ .Values.redisOperator.name }}" image: "{{ .Values.redisOperator.imageName }}:{{ .Values.redisOperator.imageTag }}" imagePullPolicy: {{ .Values.redisOperator.imagePullPolicy }} - env: - - name: WATCH_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: OPERATOR_NAME - value: "{{ .Values.redisOperator.name }}" + command: + - /manager + args: + - --leader-elect +{{- if .Values.resources }} + resources: +{{ toYaml .Values.resources | indent 10 }} +{{- end }} + serviceAccountName: "{{ .Values.serviceAccountName }}" + serviceAccount: "{{ .Values.serviceAccountName }}" diff --git a/helm-charts/redis-operator/templates/role-binding.yaml b/helm-charts/redis-operator/templates/role-binding.yaml index 70142a57..0c45e5c9 100644 --- a/helm-charts/redis-operator/templates/role-binding.yaml +++ b/helm-charts/redis-operator/templates/role-binding.yaml @@ -1,12 +1,20 @@ --- apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding +kind: ClusterRoleBinding metadata: name: {{ .Values.redisOperator.name }} + labels: + control-plane: "{{ .Values.redisOperator.name }}" + app.kubernetes.io/name: {{ .Values.redisOperator.name }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} subjects: - kind: ServiceAccount - name: {{ .Values.redisOperator.name }} + name: {{ .Values.serviceAccountName }} + namespace: {{ .Release.Namespace }} roleRef: - kind: Role - name: {{ .Values.redisOperator.name }} + kind: ClusterRole + name: cluster-admin apiGroup: rbac.authorization.k8s.io diff --git a/helm-charts/redis-operator/templates/role.yaml b/helm-charts/redis-operator/templates/role.yaml deleted file mode 100644 index 4d4c75c5..00000000 --- a/helm-charts/redis-operator/templates/role.yaml +++ /dev/null @@ -1,82 +0,0 @@ ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - creationTimestamp: null - name: {{ .Values.redisOperator.name }} -rules: -- apiGroups: - - "" - resources: - - pods - - pods/exec - - services - - services/finalizers - - endpoints - - persistentvolumeclaims - - events - - configmaps - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps - resources: - - deployments - - daemonsets - - replicasets - - statefulsets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - monitoring.coreos.com - resources: - - servicemonitors - verbs: - - get - - create -- apiGroups: - - apps - resourceNames: - - redis-operator - resources: - - deployments/finalizers - verbs: - - update -- apiGroups: - - "" - resources: - - pods - verbs: - - get -- apiGroups: - - apps - resources: - - replicasets - - deployments - verbs: - - get -- apiGroups: - - redis.opstreelabs.in - resources: - - '*' - verbs: - - create - - delete - - get - - list - - patch - - update - - watch diff --git a/helm-charts/redis-operator/templates/service-account.yaml b/helm-charts/redis-operator/templates/service-account.yaml index aa2b6a2d..54271623 100644 --- a/helm-charts/redis-operator/templates/service-account.yaml +++ b/helm-charts/redis-operator/templates/service-account.yaml @@ -3,3 +3,10 @@ apiVersion: v1 kind: ServiceAccount metadata: name: {{ .Values.redisOperator.name }} + labels: + control-plane: "{{ .Values.redisOperator.name }}" + app.kubernetes.io/name: {{ .Values.redisOperator.name }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} diff --git a/helm-charts/redis-operator/values.yaml b/helm-charts/redis-operator/values.yaml index e4ad4b16..5f66ce26 100644 --- a/helm-charts/redis-operator/values.yaml +++ b/helm-charts/redis-operator/values.yaml @@ -2,5 +2,17 @@ redisOperator: name: redis-operator imageName: quay.io/opstree/redis-operator - imageTag: v0.2 + imageTag: v0.4.0 imagePullPolicy: Always + +resources: + limits: + cpu: 100m + memory: 100Mi + requests: + cpu: 100m + memory: 100Mi + +replicas: 1 + +serviceAccountName: redis-operator diff --git a/k8sutils/redis.go b/k8sutils/redis.go index 5b1dcad7..c88805a0 100644 --- a/k8sutils/redis.go +++ b/k8sutils/redis.go @@ -155,7 +155,8 @@ func ExecuteCommand(cr *redisv1beta1.Redis, cmd []string) { targetContainer := -1 for i, tr := range pod.Spec.Containers { - if tr.Name+"-master" == cr.ObjectMeta.Name+"-master" { + reqLogger.Info("Pod Counted successfully", "Count", i, "Container Name", tr.Name) + if tr.Name == cr.ObjectMeta.Name+"-master" { targetContainer = i break } diff --git a/k8sutils/services.go b/k8sutils/services.go index 3090863d..3f81d712 100644 --- a/k8sutils/services.go +++ b/k8sutils/services.go @@ -57,6 +57,8 @@ func GenerateServiceDef(cr *redisv1beta1.Redis, labels map[string]string, portNu if typeService == "LoadBalancer" { serviceType = corev1.ServiceTypeLoadBalancer + } else if typeService == "NodePort" { + serviceType = corev1.ServiceTypeNodePort } else { serviceType = corev1.ServiceTypeClusterIP } -- GitLab