diff --git a/.infrastructure/helm-chart/todoapp/.helmignore b/.infrastructure/helm-chart/todoapp/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/.infrastructure/helm-chart/todoapp/Chart.yaml b/.infrastructure/helm-chart/todoapp/Chart.yaml new file mode 100644 index 0000000..69b3db0 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/Chart.yaml @@ -0,0 +1,9 @@ +apiVersion: v2 +name: todoapp +description: A Helm chart for Kubernetes +type: application +version: 0.1.0 +appVersion: "1.16.0" + +dependencies: + - name: mysql diff --git a/.infrastructure/helm-chart/todoapp/charts/mysql/.helmignore b/.infrastructure/helm-chart/todoapp/charts/mysql/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/charts/mysql/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/.infrastructure/helm-chart/todoapp/charts/mysql/Chart.yaml b/.infrastructure/helm-chart/todoapp/charts/mysql/Chart.yaml new file mode 100644 index 0000000..2f18252 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/charts/mysql/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: mysql +description: A Helm chart for Kubernetes +type: application +version: 0.1.0 +appVersion: "1.16.0" diff --git a/.infrastructure/helm-chart/todoapp/charts/mysql/templates/configMap.yml b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/configMap.yml new file mode 100644 index 0000000..f20dbd9 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/configMap.yml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Values.mysql.namespace }} + labels: + app: {{ .Chart.Name }} +data: + init.sql: | + GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%'; + USE app_db; + CREATE TABLE counter ( + id INT AUTO_INCREMENT PRIMARY KEY, + value INT + ); diff --git a/.infrastructure/helm-chart/todoapp/charts/mysql/templates/ns.yml b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/ns.yml new file mode 100644 index 0000000..d5a8a94 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/ns.yml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.mysql.namespace }} diff --git a/.infrastructure/helm-chart/todoapp/charts/mysql/templates/secret.yml b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/secret.yml new file mode 100644 index 0000000..78f1131 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/secret.yml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Chart.Name }}-secrets + namespace: {{ .Values.mysql.namespace }} +type: Opaque +data: + {{- range $k, $v := .Values.mysql.secrets }} + {{ $k }}: {{ $v | b64enc}} + {{- end }} diff --git a/.infrastructure/helm-chart/todoapp/charts/mysql/templates/service.yml b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/service.yml new file mode 100644 index 0000000..a4a4375 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/service.yml @@ -0,0 +1,13 @@ +# Headless service for stable DNS entries of StatefulSet members. +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Values.mysql.namespace }} +spec: + selector: + app: {{ .Chart.Name }} + ports: + - name: {{ .Chart.Name }} + port: {{ .Values.mysql.port }} + clusterIP: {{ .Values.mysql.service.clusterIP }} diff --git a/.infrastructure/helm-chart/todoapp/charts/mysql/templates/statefulSet.yml b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/statefulSet.yml new file mode 100644 index 0000000..37f70a5 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/charts/mysql/templates/statefulSet.yml @@ -0,0 +1,92 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Values.mysql.namespace }} +spec: + selector: + matchLabels: + app: {{ .Chart.Name }} + replicas: {{ .Values.mysql.replicas }} + serviceName: {{ .Chart.Name }} + template: + metadata: + labels: + app: {{ .Chart.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.mysql.image.repository}}:{{ .Values.mysql.image.tag}} + env: + {{- range $k, $v := .Values.mysql.secrets }} + - name: {{ $k }} + valueFrom: + secretKeyRef: + name: mysql-secrets + key: {{ $k }} + {{- end }} + - name: MYSQL_DATABASE + value: app_db + ports: + - name: {{ .Chart.Name }} + containerPort: {{ .Values.mysql.port }} + volumeMounts: + - name: data + mountPath: /var/lib/mysql + subPath: mysql + - name: config-map + mountPath: /docker-entrypoint-initdb.d + resources: + requests: + cpu: {{ .Values.mysql.resources.requests.cpu }} + memory: {{ .Values.mysql.resources.requests.memory }} + limits: + cpu: {{ .Values.mysql.resources.limits.cpu }} + memory: {{ .Values.mysql.resources.limits.memory }} + livenessProbe: + exec: + command: ["mysqladmin", "ping"] + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + readinessProbe: + exec: + command: ["mysqladmin", "ping"] + initialDelaySeconds: 5 + periodSeconds: 2 + timeoutSeconds: 1 + volumes: + - name: config-map + configMap: + name: {{ .Chart.Name }} + tolerations: + - key: {{ .Values.mysql.tolerations.key}} + operator: {{ .Values.mysql.tolerations.operator}} + value: {{ .Values.mysql.tolerations.value}} + effect: {{ .Values.mysql.tolerations.effect}} + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: {{ .Values.mysql.affinity.key }} + operator: {{ .Values.mysql.affinity.operator }} + values: + - {{ .Values.mysql.affinity.values }} + topologyKey: {{ .Values.mysql.affinity.topologyKey }} + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: {{ .Values.mysql.affinity.nodeAffinity.key }} + operator: {{ .Values.mysql.affinity.nodeAffinity.operator }} + values: + - {{ .Values.mysql.affinity.nodeAffinity.values }} + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: {{ .Values.mysql.storage.size }} diff --git a/.infrastructure/helm-chart/todoapp/charts/mysql/values.yaml b/.infrastructure/helm-chart/todoapp/charts/mysql/values.yaml new file mode 100644 index 0000000..a2d87af --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/charts/mysql/values.yaml @@ -0,0 +1,42 @@ +mysql: + namespace: mysql + + image: + repository: mysql + tag: 8.0 + replicas: 2 + port: 3306 + + service: + clusterIP: None + + secrets: + MYSQL_ROOT_PASSWORD: "1234" + MYSQL_USER: "app_user" + MYSQL_PASSWORD: "1234" + + resources: + requests: + cpu: "500m" + memory: "1Gi" + limits: + cpu: "1" + memory: "2Gi" + storage: + size: "2Gi" + + tolerations: + key: "app" + operator: "Equal" + value: "mysql" + effect: "NoSchedule" + + affinity: + key: "app" + operator: In + values: "mysql" + topologyKey: "kubernetes.io/hostname" + nodeAffinity: + key: "app" + operator: In + values: "mysql" diff --git a/.infrastructure/helm-chart/todoapp/templates/clusterIp.yml b/.infrastructure/helm-chart/todoapp/templates/clusterIp.yml new file mode 100644 index 0000000..67ccfcf --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/clusterIp.yml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }}-service + namespace: {{ .Values.todoapp.namespace }} +spec: + type: {{ .Values.todoapp.service.type}} + selector: + app: {{ .Chart.Name }} + ports: + - protocol: TCP + port: {{ .Values.todoapp.service.port}} + targetPort: {{ .Values.todoapp.service.targetPort }} diff --git a/.infrastructure/helm-chart/todoapp/templates/configMap.yml b/.infrastructure/helm-chart/todoapp/templates/configMap.yml new file mode 100644 index 0000000..8bf9081 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/configMap.yml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Chart.Name }}-config + namespace: {{ .Values.todoapp.namespace }} +data: + PYTHONUNBUFFERED: "1" diff --git a/.infrastructure/helm-chart/todoapp/templates/deployment.yml b/.infrastructure/helm-chart/todoapp/templates/deployment.yml new file mode 100644 index 0000000..0b9c36d --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/deployment.yml @@ -0,0 +1,86 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }} + namespace: {{ .Values.todoapp.namespace }} +spec: + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: {{ .Values.todoapp.rollingUpdate.maxSurge}} + maxUnavailable: {{ .Values.todoapp.rollingUpdate.maxUnavailable}} + selector: + matchLabels: + app: {{ .Chart.Name }} + template: + metadata: + labels: + app: {{ .Chart.Name }} + spec: + serviceAccountName: {{ .Chart.Name }}-reader + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.todoapp.image.repository}}: {{ .Values.todoapp.image.tag }}" + volumeMounts: + - name: data + mountPath: /app/data + - name: app-secrets-volume + mountPath: "/app/secrets" + readOnly: true + - name: app-config-volume + mountPath: "/app/configs" + readOnly: true + resources: + requests: + memory: {{ .Values.todoapp.resources.requests.memory }} + cpu: {{ .Values.todoapp.resources.requests.cpu }} + limits: + memory: {{ .Values.todoapp.resources.limits.memory }} + cpu: {{ .Values.todoapp.resources.limits.cpu }} + env: + - name: PYTHONUNBUFFERED + valueFrom: + configMapKeyRef: + name: {{ .Chart.Name }}-config + key: PYTHONUNBUFFERED + {{- range $k, $v := .Values.todoapp.secrets }} + - name: {{ $k }} + valueFrom: + secretKeyRef: + name: todoapp-secret + key: {{ $k }} + {{- end }} + ports: + - containerPort: 8080 + livenessProbe: + httpGet: + path: api/health + port: 8080 + initialDelaySeconds: 60 + periodSeconds: 5 + readinessProbe: + httpGet: + path: api/ready + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 5 + volumes: + - name: data + persistentVolumeClaim: + claimName: {{ .Chart.Name }}-pvc-data + - name: app-secrets-volume + secret: + secretName: {{ .Chart.Name }}-secret + - name: app-config-volume + configMap: + name: {{ .Chart.Name }}-config + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + preference: + matchExpressions: + - key: app + operator: In + values: + - kube2py diff --git a/.infrastructure/helm-chart/todoapp/templates/hpa.yml b/.infrastructure/helm-chart/todoapp/templates/hpa.yml new file mode 100644 index 0000000..bb99368 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/hpa.yml @@ -0,0 +1,25 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: {{ .Chart.Name }} + namespace: {{ .Values.todoapp.namespace }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ .Release.Name}} - {{ .Chart.Name }} + minReplicas: {{ .Values.todoapp.autoscaling.minReplicas }} + maxReplicas: {{ .Values.todoapp.autoscaling.maxReplicas }} + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: {{ .Values.todoapp.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: {{ .Values.todoapp.autoscaling.targetMemoryUtilizationPercentage }} diff --git a/.infrastructure/helm-chart/todoapp/templates/ingress.yml b/.infrastructure/helm-chart/todoapp/templates/ingress.yml new file mode 100644 index 0000000..6fba00d --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/ingress.yml @@ -0,0 +1,18 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ .Chart.Name }}-ingress + namespace: {{ .Values.todoapp.namespace }} + annotations: + nginx.ingress.kubernetes.io/rewrite-target: /$2 +spec: + rules: + - http: + paths: + - pathType: Prefix + path: /(|$)(.*) + backend: + service: + name: {{ .Chart.Name }}-service + port: + number: {{ .Values.todoapp.service.port }} diff --git a/.infrastructure/helm-chart/todoapp/templates/nodeport.yml b/.infrastructure/helm-chart/todoapp/templates/nodeport.yml new file mode 100644 index 0000000..6ebce50 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/nodeport.yml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }}-nodeport + namespace: {{ .Values.todoapp.namespace }} +spec: + type: NodePort + selector: + app: {{ .Chart.Name }} + ports: + - protocol: TCP + port: {{ .Values.todoapp.service.port }} + targetPort: {{ .Values.todoapp.service.targetPort }} + nodePort: {{ .Values.todoapp.service.nodePort }} diff --git a/.infrastructure/helm-chart/todoapp/templates/ns.yml b/.infrastructure/helm-chart/todoapp/templates/ns.yml new file mode 100644 index 0000000..5b90b3f --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/ns.yml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.todoapp.namespace }} diff --git a/.infrastructure/helm-chart/todoapp/templates/pv.yml b/.infrastructure/helm-chart/todoapp/templates/pv.yml new file mode 100644 index 0000000..ae6db47 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/pv.yml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: {{ .Chart.Name }}-pv-data + namespace: {{ .Values.todoapp.namespace }} +spec: + storageClassName: standard + persistentVolumeReclaimPolicy: Delete + accessModes: + - ReadWriteMany + capacity: + storage: {{ .Values.todoapp.volumes.persistentVolume.capacity }} + hostPath: + path: /data/ diff --git a/.infrastructure/helm-chart/todoapp/templates/pvc.yml b/.infrastructure/helm-chart/todoapp/templates/pvc.yml new file mode 100644 index 0000000..af1366d --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/pvc.yml @@ -0,0 +1,13 @@ + +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ .Chart.Name }}-pvc-data + namespace: {{ .Values.todoapp.namespace }} +spec: + volumeName: {{ .Chart.Name }}-pv-data + accessModes: + - ReadWriteMany + resources: + requests: + storage: {{ .Values.todoapp.volumes.persistentVolumeClaim.requestStorage }} diff --git a/.infrastructure/helm-chart/todoapp/templates/rbac.yml b/.infrastructure/helm-chart/todoapp/templates/rbac.yml new file mode 100644 index 0000000..09485de --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/rbac.yml @@ -0,0 +1,30 @@ +kind: ServiceAccount +apiVersion: v1 +metadata: + name: {{ .Chart.Name }}-secrets-reader + namespace: {{ .Values.todoapp.namespace }} + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + namespace: {{ .Values.todoapp.namespace }} + name: {{ .Chart.Name }}-secrets-reader +rules: +- apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "watch", "list"] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: secrets-reader-binding + namespace: {{ .Values.todoapp.namespace }} +subjects: +- kind: ServiceAccount + name: secrets-reader +roleRef: + kind: Role + name: secrets-reader + apiGroup: rbac.authorization.k8s.io diff --git a/.infrastructure/helm-chart/todoapp/templates/secret.yml b/.infrastructure/helm-chart/todoapp/templates/secret.yml new file mode 100644 index 0000000..e1999f5 --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/templates/secret.yml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Chart.Name }}-secret + namespace: {{ .Values.todoapp.namespace }} +type: Opaque +data: +{{- range $k, $v:= .Values.todoapp.secrets }} + {{ $k }}: {{ $v | b64enc }} +{{- end }} diff --git a/.infrastructure/helm-chart/todoapp/values.yaml b/.infrastructure/helm-chart/todoapp/values.yaml new file mode 100644 index 0000000..bd4a6cb --- /dev/null +++ b/.infrastructure/helm-chart/todoapp/values.yaml @@ -0,0 +1,56 @@ +todoapp: + namespace: todoapp + image: + repository: ikulyk404/todoapp + tag: 4.0.1 + replicaCount: 1 + + secrets: + SECRET_KEY: "@e2(yx)v&tgh3_s=0yja-i!dpebxsz^dg47x)-k&kq_3zf*9e*" + DB_NAME: "app_db" + DB_USER: "app_user" + DB_PASSWORD: "1234" + DB_HOST: "mysql-0.mysql.mysql.svc.cluster.local" + + resources: + limits: + cpu: "150m" + memory: "256Mi" + requests: + cpu: "150m" + memory: "256Mi" + + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + + service: + type: ClusterIP + port: 80 + targetPort: 8080 + nodePort: 30007 + + ingress: + enabled: false + className: "" + annotations: {} + + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + + autoscaling: + enabled: true + minReplicas: 2 + maxReplicas: 5 + targetCPUUtilizationPercentage: 70 + targetMemoryUtilizationPercentage: 70 + + volumes: + persistentVolume: + capacity: "1Gi" + persistentVolumeClaim: + requestStorage: "1Gi" diff --git a/output.log b/output.log new file mode 100644 index 0000000..fd7760b --- /dev/null +++ b/output.log @@ -0,0 +1,86 @@ +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system pod/coredns-7db6d8ff4d-hkklq 1/1 Running 0 4h4m +kube-system pod/coredns-7db6d8ff4d-rk97w 1/1 Running 0 4h4m +kube-system pod/etcd-kind-control-plane 1/1 Running 0 4h5m +kube-system pod/kindnet-cgx5p 1/1 Running 0 4h4m +kube-system pod/kindnet-f4lvp 1/1 Running 0 4h4m +kube-system pod/kindnet-g6xgj 1/1 Running 0 4h4m +kube-system pod/kindnet-g9wn9 1/1 Running 0 4h4m +kube-system pod/kindnet-kbb62 1/1 Running 0 4h4m +kube-system pod/kindnet-ss2wb 1/1 Running 0 4h4m +kube-system pod/kindnet-xshvx 1/1 Running 0 4h4m +kube-system pod/kube-apiserver-kind-control-plane 1/1 Running 0 4h5m +kube-system pod/kube-controller-manager-kind-control-plane 1/1 Running 0 4h5m +kube-system pod/kube-proxy-27kkc 1/1 Running 0 4h4m +kube-system pod/kube-proxy-4xf28 1/1 Running 0 4h4m +kube-system pod/kube-proxy-9rrj7 1/1 Running 0 4h4m +kube-system pod/kube-proxy-bvc5q 1/1 Running 0 4h4m +kube-system pod/kube-proxy-grl5r 1/1 Running 0 4h4m +kube-system pod/kube-proxy-p6fgj 1/1 Running 0 4h4m +kube-system pod/kube-proxy-q8bkm 1/1 Running 0 4h4m +kube-system pod/kube-scheduler-kind-control-plane 1/1 Running 0 4h5m +local-path-storage pod/local-path-provisioner-988d74bc-ftlhz 1/1 Running 0 4h4m +mysql pod/mysql-0 1/1 Running 0 3m26s +mysql pod/mysql-1 1/1 Running 0 4m3s + +NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +default service/kubernetes ClusterIP 10.96.0.1 443/TCP 4h5m +kube-system service/kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 4h5m +mysql service/mysql ClusterIP None 3306/TCP 4h4m +todoapp service/todoapp-nodeport NodePort 10.96.176.44 80:30007/TCP 4h4m +todoapp service/todoapp-service ClusterIP 10.96.9.27 80/TCP 4h4m + +NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE +kube-system daemonset.apps/kindnet 7 7 7 7 7 kubernetes.io/os=linux 4h5m +kube-system daemonset.apps/kube-proxy 7 7 7 7 7 kubernetes.io/os=linux 4h5m + +NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE +kube-system deployment.apps/coredns 2/2 2 2 4h5m +local-path-storage deployment.apps/local-path-provisioner 1/1 1 1 4h4m +todoapp deployment.apps/todoapp-release-todoapp 0/1 0 0 77m + +NAMESPACE NAME DESIRED CURRENT READY AGE +kube-system replicaset.apps/coredns-7db6d8ff4d 2 2 2 4h4m +local-path-storage replicaset.apps/local-path-provisioner-988d74bc 1 1 1 4h4m +todoapp replicaset.apps/todoapp-release-todoapp-c6f4f9867 1 0 0 77m + +NAMESPACE NAME READY AGE +mysql statefulset.apps/mysql 2/2 4h4m + +NAMESPACE NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE +todoapp horizontalpodautoscaler.autoscaling/todoapp Deployment/todoapp-release - todoapp cpu: /70%, memory: /70% 2 5 2 4h4m + +NAMESPACE NAME DATA AGE +default configmap/kube-root-ca.crt 1 4h4m +kube-node-lease configmap/kube-root-ca.crt 1 4h4m +kube-public configmap/cluster-info 2 4h5m +kube-public configmap/kube-root-ca.crt 1 4h4m +kube-system configmap/coredns 1 4h5m +kube-system configmap/extension-apiserver-authentication 6 4h5m +kube-system configmap/kube-apiserver-legacy-service-account-token-tracking 1 4h5m +kube-system configmap/kube-proxy 2 4h5m +kube-system configmap/kube-root-ca.crt 1 4h4m +kube-system configmap/kubeadm-config 1 4h5m +kube-system configmap/kubelet-config 1 4h5m +local-path-storage configmap/kube-root-ca.crt 1 4h4m +local-path-storage configmap/local-path-config 4 4h4m +mysql configmap/kube-root-ca.crt 1 4h4m +mysql configmap/mysql 1 4h4m +todoapp configmap/kube-root-ca.crt 1 4h4m +todoapp configmap/todoapp-config 1 84m + +NAMESPACE NAME TYPE DATA AGE +default secret/sh.helm.release.v1.todoapp-release.v1 helm.sh/release.v1 1 4h4m +default secret/sh.helm.release.v1.todoapp-release.v2 helm.sh/release.v1 1 84m +default secret/sh.helm.release.v1.todoapp-release.v3 helm.sh/release.v1 1 83m +default secret/sh.helm.release.v1.todoapp-release.v4 helm.sh/release.v1 1 82m +default secret/sh.helm.release.v1.todoapp-release.v5 helm.sh/release.v1 1 80m +default secret/sh.helm.release.v1.todoapp-release.v6 helm.sh/release.v1 1 77m +default secret/sh.helm.release.v1.todoapp-release.v7 helm.sh/release.v1 1 8m20s +default secret/sh.helm.release.v1.todoapp-release.v8 helm.sh/release.v1 1 4m6s +kube-system secret/bootstrap-token-abcdef bootstrap.kubernetes.io/token 6 4h5m +mysql secret/mysql-secrets Opaque 3 4h4m +todoapp secret/todoapp-secret Opaque 5 84m + +NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE +todoapp ingress.networking.k8s.io/todoapp-ingress * 80 4h4m