{"id":20152995,"url":"https://github.com/csye7125-fall2023-group05/webapp-helm-chart","last_synced_at":"2026-03-07T05:32:11.877Z","repository":{"id":218845227,"uuid":"708990606","full_name":"csye7125-fall2023-group05/webapp-helm-chart","owner":"csye7125-fall2023-group05","description":"Helm chart to deploy a highly reliable and available REST API with Postgresql on a kubernetes cluster","archived":false,"fork":false,"pushed_at":"2023-12-11T20:28:04.000Z","size":117,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-03T01:25:18.470Z","etag":null,"topics":["helm","helm-chart","helm-charts","helmfile","kubernetes-deployment"],"latest_commit_sha":null,"homepage":"","language":"Smarty","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/csye7125-fall2023-group05.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-10-23T19:44:23.000Z","updated_at":"2024-12-07T04:27:45.000Z","dependencies_parsed_at":"2024-01-24T05:49:04.962Z","dependency_job_id":null,"html_url":"https://github.com/csye7125-fall2023-group05/webapp-helm-chart","commit_stats":null,"previous_names":["csye7125-fall2023-group05/webapp-helm-chart"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/csye7125-fall2023-group05/webapp-helm-chart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csye7125-fall2023-group05%2Fwebapp-helm-chart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csye7125-fall2023-group05%2Fwebapp-helm-chart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csye7125-fall2023-group05%2Fwebapp-helm-chart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csye7125-fall2023-group05%2Fwebapp-helm-chart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/csye7125-fall2023-group05","download_url":"https://codeload.github.com/csye7125-fall2023-group05/webapp-helm-chart/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/csye7125-fall2023-group05%2Fwebapp-helm-chart/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30208731,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T05:23:27.321Z","status":"ssl_error","status_checked_at":"2026-03-07T05:00:17.256Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["helm","helm-chart","helm-charts","helmfile","kubernetes-deployment"],"created_at":"2024-11-13T23:16:22.902Z","updated_at":"2026-03-07T05:32:11.843Z","avatar_url":"https://github.com/csye7125-fall2023-group05.png","language":"Smarty","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Webapp Helm Chart\n\nHelm is the best way to find, share, and use software built for Kubernetes. In a way, it is a package manager for Kubernetes.\n\nHelm helps you manage Kubernetes applications — `Helm Charts` help you define, install, and upgrade even the most complex Kubernetes application.\n\n## Installation\n\n\u003e NOTE: The below steps mentioned are for MacOS only. For other distros, please refer the [official documentation](https://helm.sh/docs/intro/install/).\n\nTo install Helm, use the following command:\n\n```bash\nbrew install helm\n```\n\n## Helm Concepts\n\n- A _Chart_ is a Helm package. It contains all of the resource definitions necessary to run an application, tool, or service inside of a Kubernetes cluster. Think of it like the Kubernetes equivalent of a Homebrew formula, an Apt dpkg, or a Yum RPM file.\n- A _Repository_ is the place where charts can be collected and shared.\n- A _Release_ is an instance of a chart running in a Kubernetes cluster. One chart can often be installed many times into the same cluster. And each time it is installed, a new _release_ is created. Consider a MySQL chart. If you want two databases running in your cluster, you can install that chart twice. Each one will have its own _release_, which will in turn have its own _release name_.\n\nHelm installs _charts_ into Kubernetes, creating a new _release_ for each installation. And to find new charts, you can search Helm chart _repositories_.\n\n### The Chart File Structure\n\nA chart is organized as a collection of files inside of a directory. The directory name is the name of the chart (without versioning information). Thus, a chart describing WordPress would be stored in a `wordpress/` directory.\n\nInside of this directory, Helm will expect a structure that matches this:\n\n```text\nwordpress/\n  Chart.yaml          # A YAML file containing information about the chart\n  LICENSE             # OPTIONAL: A plain text file containing the license for the chart\n  README.md           # OPTIONAL: A human-readable README file\n  values.yaml         # The default configuration values for this chart\n  values.schema.json  # OPTIONAL: A JSON Schema for imposing a structure on the values.yaml file\n  charts/             # A directory containing any charts upon which this chart depends.\n  crds/               # Custom Resource Definitions\n  templates/          # A directory of templates that, when combined with values,\n                      # will generate valid Kubernetes manifest files.\n  templates/NOTES.txt # OPTIONAL: A plain text file containing short usage notes\n```\n\n\u003e Helm reserves use of the `charts/`, `crds/`, and `templates/` directories, and of the listed file names. Other files will be left as they are.\n\n### Chart.yaml\n\nThe `Chart.yaml` file is required for a chart. It contains the following fields:\n\n```yaml\napiVersion: The chart API version (required)\nname: The name of the chart (required)\nversion: A SemVer 2 version (required)\nkubeVersion: A SemVer range of compatible Kubernetes versions (optional)\ndescription: A single-sentence description of this project (optional)\ntype: The type of the chart (optional)\nkeywords:\n  - A list of keywords about this project (optional)\nhome: The URL of this projects home page (optional)\nsources:\n  - A list of URLs to source code for this project (optional)\ndependencies: # A list of the chart requirements (optional)\n  - name: The name of the chart (nginx)\n    version: The version of the chart (\"1.2.3\")\n    repository: (optional) The repository URL (\"https://example.com/charts\") or alias (\"@repo-name\")\n    condition: (optional) A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )\n    tags: # (optional)\n      - Tags can be used to group charts for enabling/disabling together\n    import-values: # (optional)\n      - ImportValues holds the mapping of source values to parent key to be imported. Each item can be a string or pair of child/parent sublist items.\n    alias: (optional) Alias to be used for the chart. Useful when you have to add the same chart multiple times\nmaintainers: # (optional)\n  - name: The maintainers name (required for each maintainer)\n    email: The maintainers email (optional for each maintainer)\n    url: A URL for the maintainer (optional for each maintainer)\nicon: A URL to an SVG or PNG image to be used as an icon (optional).\nappVersion: The version of the app that this contains (optional). Needn't be SemVer. Quotes recommended.\ndeprecated: Whether this chart is deprecated (optional, boolean)\nannotations:\n  example: A list of annotations keyed by name (optional).\n```\n\n\u003e As of `v3.3.2`, additional fields are not allowed. The recommended approach is to add custom metadata in `annotations`.\n\nTo know more about how to work with `values.yaml` and `./templates/_helpers.tpl`, i.e., using template functions and variables in Helm, refer the [official documentation](https://helm.sh/docs/chart_template_guide/).\n\n## Using charts in Helm\n\n- To create a chart:\n\n```bash\n# helm create [chart-name]\nhelm create webapp-helm-chart\n```\n\n- To debug your k8s configuration and test it against the k8s api server, use the following command:\n\n```bash\n# helm install [release-name] --debug -dry-run [chart-name]\nhelm install webapp-helm-release --debug --dry-run webapp-helm-chart\n```\n\n\u003e This command actually verifies your configuration mentioned in the `yaml` files against a k8s api server\n\n- To verify your configuration, but not against a k8s api server, we use `templates`, which will render the chart templates locally:\n\n```bash\n# helm template [chart-name]\nhelm template webapp-helm-chart\n```\n\n- To find any errors or misconfigurations in your helm configurations, we use `lint`:\n\n```bash\n# helm lint [chart-name]\nhelm lint webapp-helm-chart\n```\n\n- To install a chart onto a k8s cluster:\n\n```bash\n# helm install [release-name] [chart-name]\nhelm install webapp-helm-release webapp-helm-chart\n```\n\n- To update a chart in an already running k8s cluster:\n\n```bash\n# helm upgrade [release-name] [chart-name]\nhelm upgrade webapp-helm-release webapp-helm-chart\n```\n\n- To uninstall a chart, use:\n\n```bash\n# helm uninstall [release-name]\nhelm uninstall webapp-helm-release\n```\n\n- To update your helm dependencies, use the command:\n\n```bash\nhelm dependency upgrade\n```\n\n- Once you have edited a chart, helm can package it into a chart archive for you:\n\n```bash\n# helm package [chart-name]\nhelm package webapp-helm-chart\n```\n\n## 📈 Chart Dependencies\n\nIn case we want to use another chart as a dependency for our custom Helm chart, we can use them by adding a `dependencies` section in the `Chart.yaml`.\n\n- For our use-case, let us assume we need a Postgresql Helm chart. In order to add it as a dependency for our custom chart, we need to edit the following files with the given example code:\n\n```yaml\n# values.yaml\npsql:\n  enabled: true\n```\n\n```yaml\n# Chart.yaml\ndependencies:\n  - name: postgresql\n    version: \"13.1.5\"\n    repository: https://charts.bitnami.com/bitnami\n    condition: psql.enabled # referenced from `values.yaml`\n```\n\n\u003e NOTE: You also need to overwrite the postgresql database username and passwords in order for the webapp to connect to the postgresql stateful set with the correct user.\n\n- Now we need to add the `bitnami` Helm repository, we can do that by running:\n\n```bash\n# add bitnami to repositories\nhelm repo add bitnami https://charts.bitnami.com/bitnami\n```\n\n- Pull the `postgresql` Helm chart from the bitnami repo:\n\n```bash\n# the --untar will untar the bitnami/postgresql Helm chart\nhelm pull bitnami/postgresql --untar\n```\n\n- To add the latest \"pulled\" `bitnami/postgresql` Helm chart as a dependency to our custom Helm chart:\n\n```bash\nhelm dependency update\n```\n\n## Enable Metrics Server in Minikube\n\n- In order for HPA to work we need to **ENABLE** `metrics` server which we first need to enable it in the cluster\n- This is the command to enable metrics server in **minikube**\n\n```bash\n minikube addons enable metrics-server\n```\n\n## Enable Cilium for N/w Policies to work in Minikube\n\n- Install `cilium-cli` on your local workstation\n\n```bash\n# macOS only\nbrew install cilium-cli\n```\n\n- In order to run the below steps your cluster(minikube) should be up\n- Also, we need to install `cilium`to run the below commands\n\n```bash\n# to install cilium in cluster\ncilium install\n\n# to test the connectivity with cluster\ncilium connectivity test\n```\n\n## Istio Setup  [official documentation](https://istio.io/latest/docs/setup/getting-started/)\n\n- Download \u0026 move in that downloaded directory of Istio\n\n```bash\ncurl -L https://istio.io/downloadIstio | sh -\nexport PATH=$PWD/bin:$PATH\n```\n\n- Install istio\n\n```bash\nistioctl install\n```\n\n- Label the namespace where we would want our Envoy Proxy to be deployed\n\n```bash\n# this helps istio to identify where to deploy envoy proxies as a side car\nkubectl label namespace webapp istio-injection=enabled\n```\n\n- After installing helm chart we would need to create a tunnel if testing in minikube else just need to use the external IP exposed by the istio-ingress service\n\n```bash\nminikube tunnel\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsye7125-fall2023-group05%2Fwebapp-helm-chart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcsye7125-fall2023-group05%2Fwebapp-helm-chart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcsye7125-fall2023-group05%2Fwebapp-helm-chart/lists"}