From 9fff9995ff817f0d699f3872832ae8cdac428870 Mon Sep 17 00:00:00 2001 From: snehlatamohite Date: Fri, 7 Sep 2018 04:07:06 -0700 Subject: [PATCH 1/6] Added chaoskube, influxdb metrics-server hadoop and nginx-ingress helm charts --- repo/beta/ibm-chaoskube-0.7.0.tgz | Bin 0 -> 7614 bytes repo/beta/ibm-hadoop-1.0.5.tgz | Bin 0 -> 13635 bytes repo/beta/ibm-influxdb-0.10.0.tgz | Bin 0 -> 12106 bytes repo/beta/ibm-metrics-server-0.0.2.tgz | Bin 0 -> 7534 bytes repo/beta/ibm-nginx-ingress-0.28.1.tgz | Bin 0 -> 17686 bytes repo/beta/index.yaml | 126 +++++- stable/ibm-chaoskube/Chart.yaml | 19 + stable/ibm-chaoskube/LICENSE | 202 +++++++++ stable/ibm-chaoskube/OWNERS | 4 + stable/ibm-chaoskube/README.md | 88 ++++ stable/ibm-chaoskube/RELEASENOTES.md | 17 + stable/ibm-chaoskube/templates/NOTES.txt | 9 + .../ibm-chaoskube/templates/clusterrole.yaml | 19 + .../templates/clusterrolebinding.yaml | 19 + .../ibm-chaoskube/templates/deployment.yaml | 59 +++ stable/ibm-chaoskube/templates/role.yaml | 19 + .../ibm-chaoskube/templates/rolebinding.yaml | 19 + .../templates/serviceaccount.yaml | 11 + stable/ibm-chaoskube/values-metadata.yaml | 14 + stable/ibm-chaoskube/values.yaml | 59 +++ stable/ibm-hadoop/.helmignore | 21 + stable/ibm-hadoop/Chart.yaml | 21 + stable/ibm-hadoop/LICENSE | 202 +++++++++ stable/ibm-hadoop/README.md | 89 ++++ stable/ibm-hadoop/RELEASENOTES.md | 17 + stable/ibm-hadoop/templates/NOTES.txt | 26 ++ stable/ibm-hadoop/templates/_helpers.yaml | 16 + .../templates/hadoop-configmap.yaml | 296 ++++++++++++++ stable/ibm-hadoop/templates/hdfs-dn-pdb.yaml | 18 + stable/ibm-hadoop/templates/hdfs-dn-pvc.yaml | 25 ++ .../templates/hdfs-dn-statefulset.yaml | 95 +++++ stable/ibm-hadoop/templates/hdfs-dn-svc.yaml | 23 ++ stable/ibm-hadoop/templates/hdfs-nn-pdb.yaml | 18 + stable/ibm-hadoop/templates/hdfs-nn-pvc.yaml | 25 ++ .../templates/hdfs-nn-statefulset.yaml | 95 +++++ stable/ibm-hadoop/templates/hdfs-nn-svc.yaml | 23 ++ stable/ibm-hadoop/templates/yarn-nm-pdb.yaml | 18 + .../templates/yarn-nm-statefulset.yaml | 105 +++++ stable/ibm-hadoop/templates/yarn-nm-svc.yaml | 24 ++ stable/ibm-hadoop/templates/yarn-rm-pdb.yaml | 18 + .../templates/yarn-rm-statefulset.yaml | 89 ++++ stable/ibm-hadoop/templates/yarn-rm-svc.yaml | 20 + stable/ibm-hadoop/templates/yarn-ui-svc.yaml | 18 + stable/ibm-hadoop/tools/calc_resources.sh | 75 ++++ stable/ibm-hadoop/values-metadata.yaml | 14 + stable/ibm-hadoop/values.yaml | 82 ++++ stable/ibm-influxdb/.helmignore | 21 + stable/ibm-influxdb/Chart.yaml | 20 + stable/ibm-influxdb/LICENSE | 202 +++++++++ stable/ibm-influxdb/README.md | 93 +++++ stable/ibm-influxdb/RELEASENOTES.md | 17 + stable/ibm-influxdb/templates/NOTES.txt | 15 + stable/ibm-influxdb/templates/_helpers.tpl | 20 + stable/ibm-influxdb/templates/config.yaml | 157 +++++++ stable/ibm-influxdb/templates/deployment.yaml | 104 +++++ stable/ibm-influxdb/templates/ingress.yaml | 28 ++ .../templates/post-install-set-auth.yaml | 44 ++ stable/ibm-influxdb/templates/pvc.yaml | 24 ++ stable/ibm-influxdb/templates/secret.yaml | 18 + stable/ibm-influxdb/templates/service.yaml | 62 +++ stable/ibm-influxdb/values-metadata.yaml | 14 + stable/ibm-influxdb/values.yaml | 234 +++++++++++ stable/ibm-metrics-server/.helmignore | 21 + stable/ibm-metrics-server/Chart.yaml | 19 + stable/ibm-metrics-server/LICENSE | 202 +++++++++ stable/ibm-metrics-server/README.md | 34 ++ stable/ibm-metrics-server/RELEASENOTES.md | 17 + stable/ibm-metrics-server/ci/ci-values.yaml | 5 + stable/ibm-metrics-server/templates/NOTES.txt | 11 + .../ibm-metrics-server/templates/_helpers.tpl | 51 +++ .../templates/auth-delegator-crb.yaml | 20 + .../templates/cluster-role.yaml | 22 + .../templates/metric-server-service.yaml | 17 + .../templates/metrics-api-service.yaml | 20 + .../templates/metrics-server-crb.yaml | 19 + .../templates/metrics-server-deployment.yaml | 42 ++ .../metrics-server-serviceaccount.yaml | 11 + .../templates/role-binding.yaml | 20 + .../ibm-metrics-server/values-metadata.yaml | 14 + stable/ibm-metrics-server/values.yaml | 25 ++ stable/ibm-nginx-ingress/.helmignore | 21 + stable/ibm-nginx-ingress/Chart.yaml | 20 + stable/ibm-nginx-ingress/LICENSE | 202 +++++++++ stable/ibm-nginx-ingress/README.md | 263 ++++++++++++ stable/ibm-nginx-ingress/RELEASENOTES.md | 17 + stable/ibm-nginx-ingress/ci/psp-values.yaml | 2 + stable/ibm-nginx-ingress/templates/NOTES.txt | 64 +++ .../ibm-nginx-ingress/templates/_helpers.tpl | 72 ++++ .../templates/clusterrole.yaml | 69 ++++ .../templates/clusterrolebinding.yaml | 19 + .../templates/controller-configmap.yaml | 18 + .../templates/controller-daemonset.yaml | 205 ++++++++++ .../templates/controller-deployment.yaml | 211 ++++++++++ .../templates/controller-hpa.yaml | 30 ++ .../templates/controller-metrics-service.yaml | 38 ++ .../controller-poddisruptionbudget.yaml | 19 + .../templates/controller-service.yaml | 72 ++++ .../templates/controller-stats-service.yaml | 38 ++ .../templates/default-backend-deployment.yaml | 86 ++++ .../default-backend-poddisruptionbudget.yaml | 19 + .../templates/default-backend-service.yaml | 39 ++ .../templates/headers-configmap.yaml | 14 + .../templates/podsecuritypolicy.yaml | 47 +++ stable/ibm-nginx-ingress/templates/role.yaml | 89 ++++ .../templates/rolebinding.yaml | 19 + .../templates/serviceaccount.yaml | 11 + .../templates/tcp-configmap.yaml | 14 + .../templates/udp-configmap.yaml | 14 + stable/ibm-nginx-ingress/values-metadata.yaml | 14 + stable/ibm-nginx-ingress/values.yaml | 382 ++++++++++++++++++ 110 files changed, 5927 insertions(+), 1 deletion(-) create mode 100644 repo/beta/ibm-chaoskube-0.7.0.tgz create mode 100644 repo/beta/ibm-hadoop-1.0.5.tgz create mode 100644 repo/beta/ibm-influxdb-0.10.0.tgz create mode 100644 repo/beta/ibm-metrics-server-0.0.2.tgz create mode 100644 repo/beta/ibm-nginx-ingress-0.28.1.tgz create mode 100755 stable/ibm-chaoskube/Chart.yaml create mode 100755 stable/ibm-chaoskube/LICENSE create mode 100755 stable/ibm-chaoskube/OWNERS create mode 100755 stable/ibm-chaoskube/README.md create mode 100755 stable/ibm-chaoskube/RELEASENOTES.md create mode 100755 stable/ibm-chaoskube/templates/NOTES.txt create mode 100755 stable/ibm-chaoskube/templates/clusterrole.yaml create mode 100755 stable/ibm-chaoskube/templates/clusterrolebinding.yaml create mode 100755 stable/ibm-chaoskube/templates/deployment.yaml create mode 100755 stable/ibm-chaoskube/templates/role.yaml create mode 100755 stable/ibm-chaoskube/templates/rolebinding.yaml create mode 100755 stable/ibm-chaoskube/templates/serviceaccount.yaml create mode 100755 stable/ibm-chaoskube/values-metadata.yaml create mode 100755 stable/ibm-chaoskube/values.yaml create mode 100755 stable/ibm-hadoop/.helmignore create mode 100755 stable/ibm-hadoop/Chart.yaml create mode 100755 stable/ibm-hadoop/LICENSE create mode 100755 stable/ibm-hadoop/README.md create mode 100755 stable/ibm-hadoop/RELEASENOTES.md create mode 100755 stable/ibm-hadoop/templates/NOTES.txt create mode 100755 stable/ibm-hadoop/templates/_helpers.yaml create mode 100755 stable/ibm-hadoop/templates/hadoop-configmap.yaml create mode 100755 stable/ibm-hadoop/templates/hdfs-dn-pdb.yaml create mode 100755 stable/ibm-hadoop/templates/hdfs-dn-pvc.yaml create mode 100755 stable/ibm-hadoop/templates/hdfs-dn-statefulset.yaml create mode 100755 stable/ibm-hadoop/templates/hdfs-dn-svc.yaml create mode 100755 stable/ibm-hadoop/templates/hdfs-nn-pdb.yaml create mode 100755 stable/ibm-hadoop/templates/hdfs-nn-pvc.yaml create mode 100755 stable/ibm-hadoop/templates/hdfs-nn-statefulset.yaml create mode 100755 stable/ibm-hadoop/templates/hdfs-nn-svc.yaml create mode 100755 stable/ibm-hadoop/templates/yarn-nm-pdb.yaml create mode 100755 stable/ibm-hadoop/templates/yarn-nm-statefulset.yaml create mode 100755 stable/ibm-hadoop/templates/yarn-nm-svc.yaml create mode 100755 stable/ibm-hadoop/templates/yarn-rm-pdb.yaml create mode 100755 stable/ibm-hadoop/templates/yarn-rm-statefulset.yaml create mode 100755 stable/ibm-hadoop/templates/yarn-rm-svc.yaml create mode 100755 stable/ibm-hadoop/templates/yarn-ui-svc.yaml create mode 100755 stable/ibm-hadoop/tools/calc_resources.sh create mode 100755 stable/ibm-hadoop/values-metadata.yaml create mode 100755 stable/ibm-hadoop/values.yaml create mode 100644 stable/ibm-influxdb/.helmignore create mode 100755 stable/ibm-influxdb/Chart.yaml create mode 100755 stable/ibm-influxdb/LICENSE create mode 100644 stable/ibm-influxdb/README.md create mode 100755 stable/ibm-influxdb/RELEASENOTES.md create mode 100644 stable/ibm-influxdb/templates/NOTES.txt create mode 100644 stable/ibm-influxdb/templates/_helpers.tpl create mode 100644 stable/ibm-influxdb/templates/config.yaml create mode 100644 stable/ibm-influxdb/templates/deployment.yaml create mode 100644 stable/ibm-influxdb/templates/ingress.yaml create mode 100644 stable/ibm-influxdb/templates/post-install-set-auth.yaml create mode 100644 stable/ibm-influxdb/templates/pvc.yaml create mode 100644 stable/ibm-influxdb/templates/secret.yaml create mode 100644 stable/ibm-influxdb/templates/service.yaml create mode 100755 stable/ibm-influxdb/values-metadata.yaml create mode 100644 stable/ibm-influxdb/values.yaml create mode 100755 stable/ibm-metrics-server/.helmignore create mode 100755 stable/ibm-metrics-server/Chart.yaml create mode 100755 stable/ibm-metrics-server/LICENSE create mode 100755 stable/ibm-metrics-server/README.md create mode 100755 stable/ibm-metrics-server/RELEASENOTES.md create mode 100755 stable/ibm-metrics-server/ci/ci-values.yaml create mode 100755 stable/ibm-metrics-server/templates/NOTES.txt create mode 100755 stable/ibm-metrics-server/templates/_helpers.tpl create mode 100755 stable/ibm-metrics-server/templates/auth-delegator-crb.yaml create mode 100755 stable/ibm-metrics-server/templates/cluster-role.yaml create mode 100755 stable/ibm-metrics-server/templates/metric-server-service.yaml create mode 100755 stable/ibm-metrics-server/templates/metrics-api-service.yaml create mode 100755 stable/ibm-metrics-server/templates/metrics-server-crb.yaml create mode 100755 stable/ibm-metrics-server/templates/metrics-server-deployment.yaml create mode 100755 stable/ibm-metrics-server/templates/metrics-server-serviceaccount.yaml create mode 100755 stable/ibm-metrics-server/templates/role-binding.yaml create mode 100755 stable/ibm-metrics-server/values-metadata.yaml create mode 100755 stable/ibm-metrics-server/values.yaml create mode 100644 stable/ibm-nginx-ingress/.helmignore create mode 100644 stable/ibm-nginx-ingress/Chart.yaml create mode 100755 stable/ibm-nginx-ingress/LICENSE create mode 100644 stable/ibm-nginx-ingress/README.md create mode 100755 stable/ibm-nginx-ingress/RELEASENOTES.md create mode 100644 stable/ibm-nginx-ingress/ci/psp-values.yaml create mode 100644 stable/ibm-nginx-ingress/templates/NOTES.txt create mode 100644 stable/ibm-nginx-ingress/templates/_helpers.tpl create mode 100644 stable/ibm-nginx-ingress/templates/clusterrole.yaml create mode 100644 stable/ibm-nginx-ingress/templates/clusterrolebinding.yaml create mode 100644 stable/ibm-nginx-ingress/templates/controller-configmap.yaml create mode 100644 stable/ibm-nginx-ingress/templates/controller-daemonset.yaml create mode 100644 stable/ibm-nginx-ingress/templates/controller-deployment.yaml create mode 100644 stable/ibm-nginx-ingress/templates/controller-hpa.yaml create mode 100644 stable/ibm-nginx-ingress/templates/controller-metrics-service.yaml create mode 100644 stable/ibm-nginx-ingress/templates/controller-poddisruptionbudget.yaml create mode 100644 stable/ibm-nginx-ingress/templates/controller-service.yaml create mode 100644 stable/ibm-nginx-ingress/templates/controller-stats-service.yaml create mode 100644 stable/ibm-nginx-ingress/templates/default-backend-deployment.yaml create mode 100644 stable/ibm-nginx-ingress/templates/default-backend-poddisruptionbudget.yaml create mode 100644 stable/ibm-nginx-ingress/templates/default-backend-service.yaml create mode 100644 stable/ibm-nginx-ingress/templates/headers-configmap.yaml create mode 100644 stable/ibm-nginx-ingress/templates/podsecuritypolicy.yaml create mode 100644 stable/ibm-nginx-ingress/templates/role.yaml create mode 100644 stable/ibm-nginx-ingress/templates/rolebinding.yaml create mode 100644 stable/ibm-nginx-ingress/templates/serviceaccount.yaml create mode 100644 stable/ibm-nginx-ingress/templates/tcp-configmap.yaml create mode 100644 stable/ibm-nginx-ingress/templates/udp-configmap.yaml create mode 100755 stable/ibm-nginx-ingress/values-metadata.yaml create mode 100644 stable/ibm-nginx-ingress/values.yaml diff --git a/repo/beta/ibm-chaoskube-0.7.0.tgz b/repo/beta/ibm-chaoskube-0.7.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..fa1c760ef5d5c76d222b76c0765fb6c42328586d GIT binary patch literal 7614 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 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-hadoop-1.0.5.tgz b/repo/beta/ibm-hadoop-1.0.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f6df40d7483b0f396789fa267b7a1eb989d71ef4 GIT binary patch literal 13635 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 VuRFZ{UjP6A|NoxQo>%}f0RR-Y;kf_+ literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-influxdb-0.10.0.tgz b/repo/beta/ibm-influxdb-0.10.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..49d0fa42a8fbae38e82abb7250b0234bf49f56d6 GIT binary patch literal 12106 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 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-metrics-server-0.0.2.tgz b/repo/beta/ibm-metrics-server-0.0.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..192278ab037f29b22c5e6c6e85b291c85b6d827f GIT binary patch literal 7534 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 E0IUij%>V!Z literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-nginx-ingress-0.28.1.tgz b/repo/beta/ibm-nginx-ingress-0.28.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1df86760a5e01042ca175773dbbe3d1ec8374776 GIT binary patch literal 17686 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.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-chaoskube-0.7.0.tgz + version: 0.7.0 ibm-elasticsearch-exporter: - apiVersion: v1 appVersion: 1.0.2 @@ -88,6 +112,57 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-elasticsearch-exporter-0.2.2.tgz version: 0.2.2 + ibm-hadoop: + - apiVersion: v1 + appVersion: 2.7.3 + created: 2018-09-07T04:01:06.485050201-07:00 + description: The Apache Hadoop software library is a framework that allows for + the distributed processing of large data sets across clusters of computers using + simple programming models. + digest: 62fe37cb5c4bab6d519f7bb1b7039c290467baa39ce47353ccb1d2e05f28121c + home: https://hadoop.apache.org/ + icon: http://hadoop.apache.org/images/hadoop-logo.jpg + keywords: + - Limited + - ppc64le + - Tools + - ICP + - hadoop + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-hadoop + sources: + - https://github.com/apache/hadoop + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-hadoop-1.0.5.tgz + version: 1.0.5 + ibm-influxdb: + - appVersion: "1.4" + created: 2018-09-07T04:01:06.486257549-07:00 + description: Scalable datastore for metrics, events, and real-time analytics. + digest: 3d420af85013ba3967edbf2551c150cbf532cb7ebdb5b92a1c51615f0348741b + engine: gotpl + home: https://www.influxdata.com/time-series-platform/influxdb/ + keywords: + - influxdb + - database + - timeseries + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-influxdb + sources: + - https://github.com/influxdata/influxdb + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-influxdb-0.10.0.tgz + version: 0.10.0 ibm-kube-state-metrics: - apiVersion: v1 appVersion: 1.3.1 @@ -141,6 +216,55 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-memcached-2.1.1.tgz version: 2.1.1 + ibm-metrics-server: + - apiVersion: v1 + appVersion: 0.2.1 + created: 2018-09-07T04:01:06.4872229-07:00 + description: Metrics Server is a cluster-wide aggregator of resource usage data. + digest: b74d4f28c81909b96589168af79105c710faed4ce24489bedc0d76d01a73c936 + home: https://github.com/kubernetes-incubator/metrics-server + keywords: + - metrics-server + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-metrics-server + sources: + - https://github.com/kubernetes-incubator/metrics-server + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-metrics-server-0.0.2.tgz + version: 0.0.2 + ibm-nginx-ingress: + - appVersion: 0.19.0 + created: 2018-09-07T04:01:06.48903206-07:00 + description: An nginx Ingress controller that uses ConfigMap to store the nginx + configuration. + digest: 61208f916228d8cceb37141010604b51699b08bf78472dfc9fc19ee11853f7bd + engine: gotpl + home: https://github.com/kubernetes/ingress-nginx + icon: https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Nginx_logo.svg/500px-Nginx_logo.svg.png + keywords: + - ingress + - nginx + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-nginx-ingress + sources: + - https://github.com/kubernetes/ingress-nginx + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-nginx-ingress-0.28.1.tgz + version: 0.28.1 ibm-openldap: - appVersion: 2.4.44 created: 2018-09-05T03:55:49.790973967-07:00 @@ -216,4 +340,4 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-prometheus-pushgateway-0.1.2.tgz version: 0.1.2 -generated: 2018-09-05T03:55:49.787898663-07:00 +generated: 2018-09-07T04:01:06.482448087-07:00 diff --git a/stable/ibm-chaoskube/Chart.yaml b/stable/ibm-chaoskube/Chart.yaml new file mode 100755 index 0000000..0db0186 --- /dev/null +++ b/stable/ibm-chaoskube/Chart.yaml @@ -0,0 +1,19 @@ +appVersion: 0.8.0 +description: Chaoskube periodically kills random pods in your Kubernetes cluster. +engine: gotpl +home: https://github.com/linki/chaoskube +keywords: + - adapter + - chaoskube + - Limited + - ppc64le + - Tools + - ICP +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +name: ibm-chaoskube +sources: +- https://github.com/linki/chaoskube +version: 0.7.0 +tillerVersion: '>=2.7.2' diff --git a/stable/ibm-chaoskube/LICENSE b/stable/ibm-chaoskube/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-chaoskube/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-chaoskube/OWNERS b/stable/ibm-chaoskube/OWNERS new file mode 100755 index 0000000..c9e2122 --- /dev/null +++ b/stable/ibm-chaoskube/OWNERS @@ -0,0 +1,4 @@ +approvers: +- linki +reviewers: +- linki diff --git a/stable/ibm-chaoskube/README.md b/stable/ibm-chaoskube/README.md new file mode 100755 index 0000000..1fe08a7 --- /dev/null +++ b/stable/ibm-chaoskube/README.md @@ -0,0 +1,88 @@ +## Introduction +# Chaoskube Helm Chart + +[chaoskube](https://github.com/linki/chaoskube) periodically kills random pods in your Kubernetes cluster. + +## Note +The original work for this helm chart is present @ [Helm Charts]( https://github.com/helm/charts) Based on the [chaoskube]( https://github.com/helm/charts/tree/master/stable/chaoskube) chart + +## TL;DR; + +```console +$ helm install stable/chaoskube +``` +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Chart Details +Chaoskube Helm Chart which periodically kills random pods in your Kubernetes cluster. + +## Prerequisites +-Tiller 2.6.0 or later + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/chaoskube +``` + +The command deploys chaoskube on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation. + +## Uninstalling the Chart + +To uninstall/delete the my-release deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Configuration + +By default `chaoskube` runs in dry-run mode so it doesn't actually kill anything. +If you're sure you want to use it run `helm` with: + +```console +$ helm install stable/chaoskube --set dryRun=false +``` + +| Parameter | Description | Default | +|---------------------------|-----------------------------------------------------|-----------------------------------| +| `name` | container name | chaoskube | +| `image` | docker image | quay.io/linki/chaoskube | +| `imageTag` | docker image tag | v0.8.0 | +| `replicas` | number of replicas to run | 1 | +| `interval` | interval between pod terminations | 10m | +| `labels` | label selector to filter pods by | "" (matches everything) | +| `annotations` | annotation selector to filter pods by | "" (matches everything) | +| `namespaces` | namespace selector to filter pods by | "" (all namespaces) | +| `dryRun` | don't kill pods, only log what would have been done | true | +| `timezone` | Set timezone for running actions (Optional) | "" (UTC) | +| `excludedWeekdays` | Set Days of the Week to avoid actions (Optional) | "" (Don't skip any weekdays) | +| `excludedTimesOfDay` | Set Time Range to avoid actions (Optional) | "" (Don't skip any times of day) | +| `excludedDaysOfYear` | Set Days of the Year to avoid actions (Optional) | "" (Don't skip any days) | +| `resources.cpu` | cpu resource requests and limits | 10m | +| `resources.memory` | memory resource requests and limits | 16Mi | +| `rbac.create` | create rbac service account and roles | false | +| `rbac.serviceAccountName` | name of serviceAccount to use when create is false | default | +| `nodeSelector` | node labels for pod assignment | `{}` | + +Setting label and namespaces selectors from the shell can be tricky but is possible (example with zsh): + +```console +$ helm install \ + --set labels='app=mate\,stage!=prod',namespaces='!kube-system\,!production' \ + stable/chaoskube --debug --dry-run | grep -A7 args + args: + - --interval=10m + - --labels=app=foo,stage!=prod + - --namespaces=!kube-system,!production + - --timezone=America/New_York + - --excludedWeekdays="Sat,Tue" + - --excludedTimesOfDay="12:00-18:00" + - --excludedDaysOfYear="Apr1,Dec24" +``` +## Limitations diff --git a/stable/ibm-chaoskube/RELEASENOTES.md b/stable/ibm-chaoskube/RELEASENOTES.md new file mode 100755 index 0000000..e88280c --- /dev/null +++ b/stable/ibm-chaoskube/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.7.0 | September 7, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-chaoskube/templates/NOTES.txt b/stable/ibm-chaoskube/templates/NOTES.txt new file mode 100755 index 0000000..9912c6e --- /dev/null +++ b/stable/ibm-chaoskube/templates/NOTES.txt @@ -0,0 +1,9 @@ +chaoskube is running and will kill arbitrary pods every {{ .Values.interval }}. + +You can follow the logs to see what chaoskube does: + + POD=$(kubectl get pods -l app={{ printf "%s-%s" .Release.Name .Values.name }} --namespace {{ .Release.Namespace }} --output name) + kubectl logs -f $POD --namespace={{ .Release.Namespace }} +{{ if .Values.dryRun }} +You are running in dry-run mode. No pod is actually terminated. +{{ end -}} diff --git a/stable/ibm-chaoskube/templates/clusterrole.yaml b/stable/ibm-chaoskube/templates/clusterrole.yaml new file mode 100755 index 0000000..9271a9a --- /dev/null +++ b/stable/ibm-chaoskube/templates/clusterrole.yaml @@ -0,0 +1,19 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRole +metadata: + labels: + app: {{ printf "%s-%s" .Release.Name .Values.name }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ printf "%s-%s" .Release.Name .Values.name }} +rules: + - apiGroups: + - "" + resources: + - pods + verbs: + - list + - delete +{{- end -}} diff --git a/stable/ibm-chaoskube/templates/clusterrolebinding.yaml b/stable/ibm-chaoskube/templates/clusterrolebinding.yaml new file mode 100755 index 0000000..ec62a55 --- /dev/null +++ b/stable/ibm-chaoskube/templates/clusterrolebinding.yaml @@ -0,0 +1,19 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + labels: + app: {{ printf "%s-%s" .Release.Name .Values.name }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ printf "%s-%s" .Release.Name .Values.name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ printf "%s-%s" .Release.Name .Values.name }} +subjects: + - kind: ServiceAccount + name: {{ printf "%s-%s" .Release.Name .Values.name }} + namespace: {{ .Release.Namespace }} +{{- end -}} diff --git a/stable/ibm-chaoskube/templates/deployment.yaml b/stable/ibm-chaoskube/templates/deployment.yaml new file mode 100755 index 0000000..eb45921 --- /dev/null +++ b/stable/ibm-chaoskube/templates/deployment.yaml @@ -0,0 +1,59 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ printf "%s-%s" .Release.Name .Values.name }} + labels: + app: {{ printf "%s-%s" .Release.Name .Values.name }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicas }} + template: + metadata: + labels: + app: {{ printf "%s-%s" .Release.Name .Values.name }} + chart: {{ .Chart.Name }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Values.name }} + image: {{ .Values.image }}:{{ .Values.imageTag }} + command: ["sh","-c","/bin/chaoskube"] + args: + - --interval={{ .Values.interval }} + - --labels={{ .Values.labels }} + - --annotations={{ .Values.annotations }} + - --namespaces={{ .Values.namespaces }} + {{- if not .Values.dryRun }} + - --no-dry-run + {{- end }} + - --excluded-weekdays={{ .Values.excludedWeekdays }} + - --excluded-times-of-day={{ .Values.excludedTimesOfDay }} + - --excluded-days-of-year={{ .Values.excludedDaysOfYear }} + - --timezone={{ .Values.timezone }} + resources: + requests: + cpu: {{ .Values.resources.cpu }} + memory: {{ .Values.resources.memory }} + limits: + cpu: {{ .Values.resources.cpu }} + memory: {{ .Values.resources.memory }} + serviceAccountName: {{ if .Values.rbac.create }}{{ printf "%s-%s" .Release.Name .Values.name }}{{ else }}"{{ .Values.rbac.serviceAccountName }}"{{ end }} +{{- if .Values.nodeSelector }} + nodeSelector: +{{ toYaml .Values.nodeSelector | indent 8 }} +{{- end -}} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-chaoskube/templates/role.yaml b/stable/ibm-chaoskube/templates/role.yaml new file mode 100755 index 0000000..40d2234 --- /dev/null +++ b/stable/ibm-chaoskube/templates/role.yaml @@ -0,0 +1,19 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: Role +metadata: + labels: + app: {{ printf "%s-%s" .Release.Name .Values.name }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ printf "%s-%s" .Release.Name .Values.name }} +rules: + - apiGroups: + - "" + resources: + - pods + verbs: + - list + - delete +{{- end -}} diff --git a/stable/ibm-chaoskube/templates/rolebinding.yaml b/stable/ibm-chaoskube/templates/rolebinding.yaml new file mode 100755 index 0000000..87e09d1 --- /dev/null +++ b/stable/ibm-chaoskube/templates/rolebinding.yaml @@ -0,0 +1,19 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: RoleBinding +metadata: + labels: + app: {{ printf "%s-%s" .Release.Name .Values.name }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ printf "%s-%s" .Release.Name .Values.name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ printf "%s-%s" .Release.Name .Values.name }} +subjects: + - kind: ServiceAccount + name: {{ printf "%s-%s" .Release.Name .Values.name }} + namespace: {{ .Release.Namespace }} +{{- end -}} diff --git a/stable/ibm-chaoskube/templates/serviceaccount.yaml b/stable/ibm-chaoskube/templates/serviceaccount.yaml new file mode 100755 index 0000000..a101fe0 --- /dev/null +++ b/stable/ibm-chaoskube/templates/serviceaccount.yaml @@ -0,0 +1,11 @@ +{{- if .Values.rbac.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: {{ printf "%s-%s" .Release.Name .Values.name }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ printf "%s-%s" .Release.Name .Values.name }} +{{- end -}} diff --git a/stable/ibm-chaoskube/values-metadata.yaml b/stable/ibm-chaoskube/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-chaoskube/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-chaoskube/values.yaml b/stable/ibm-chaoskube/values.yaml new file mode 100755 index 0000000..2ae6d9f --- /dev/null +++ b/stable/ibm-chaoskube/values.yaml @@ -0,0 +1,59 @@ +# container name +name: chaoskube + +# docker image +#image: quay.io/linki/chaoskube +image: hchenxa1986/chaoskube-ppc64le + +# docker image tag +#imageTag: v0.9.0-ppc64le +imageTag: latest + +# number of replicas to run +replicas: 1 + +# interval between pod terminations +interval: 10m + +# label selector to filter pods by, e.g. app=foo,stage!=prod +labels: + +# annotation selector to filter pods by, e.g. chaos.alpha.kubernetes.io/enabled=true +annotations: + +# namespace selector to filter pods by, e.g. '!kube-system,!production' (use quotes) +namespaces: 'default,testing,staging' + +# don't kill pods, only log what would have been done +dryRun: true + +node: "ppc64le" + +# Set values for exempting specific week days from Chaoskube Actions +excludedWeekdays: + +# Set values for exempting specific times of day from Chaoskube Actions +#excludedTimesOfDay: + +# Set values for exempting specific days of the year from Chaoskube Actions (Dec24,Jan1) +excludedDaysOfYear: + +# Set specific Timezone for Actions to take place +timezone: IST + +# resource requests and limits +resources: + cpu: 20m + memory: 100Mi + +# create service account with permission to list and kill pods +rbac: + create: false + + # only used when create is false + serviceAccountName: default + +# Node labels for pod assignment +# Ref: https://kubernetes.io/docs/user-guide/node-selection/ +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" diff --git a/stable/ibm-hadoop/.helmignore b/stable/ibm-hadoop/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-hadoop/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-hadoop/Chart.yaml b/stable/ibm-hadoop/Chart.yaml new file mode 100755 index 0000000..f6bd293 --- /dev/null +++ b/stable/ibm-hadoop/Chart.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +appVersion: 2.7.3 +description: The Apache Hadoop software library is a framework that allows for the + distributed processing of large data sets across clusters of computers using simple + programming models. +home: https://hadoop.apache.org/ +icon: http://hadoop.apache.org/images/hadoop-logo.jpg +keywords: + - Limited + - ppc64le + - Tools + - ICP + - hadoop +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +name: ibm-hadoop +sources: +- https://github.com/apache/hadoop +version: 1.0.5 +tillerVersion: '>=2.7.2' diff --git a/stable/ibm-hadoop/LICENSE b/stable/ibm-hadoop/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-hadoop/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-hadoop/README.md b/stable/ibm-hadoop/README.md new file mode 100755 index 0000000..ec048f2 --- /dev/null +++ b/stable/ibm-hadoop/README.md @@ -0,0 +1,89 @@ +## Introduction +# Hadoop Chart + +[Hadoop](https://hadoop.apache.org/) is a framework for running large scale distributed applications. + +This chart is primarily intended to be used for YARN and MapReduce job execution where HDFS is just used as a means to transport small artifacts within the framework and not for a distributed filesystem. Data should be read from cloud based datastores such as Google Cloud Storage, S3 or Swift. + +## Chart Details + +## Note +The original work for this helm chart is present @ [Helm Charts]( https://github.com/helm/charts) Based on the [hadoop]( https://github.com/helm/charts/tree/master/stable/hadoop) chart + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Prerequisites +-Kubernetes 1.7+ with Beta APIs enabled +-Tiller 2.6.0 or later + +## Installing the Chart + +To install the chart with the release name `hadoop` that utilizes 50% of the available node resources: + +``` +$ helm install --name hadoop $(stable/hadoop/tools/calc_resources.sh 50) stable/hadoop +``` + +> Note that you need at least 2GB of free memory per NodeManager pod, if your cluster isn't large enough, not all pods will be scheduled. + +The optional [`calc_resources.sh`](./tools/calc_resources.sh) script is used as a convenience helper to set the `yarn.numNodes`, and `yarn.nodeManager.resources` appropriately to utilize all nodes in the Kubernetes cluster and a given percentage of their resources. For example, with a 3 node `n1-standard-4` GKE cluster and an argument of `50`, this would create 3 NodeManager pods claiming 2 cores and 7.5Gi of memory. + +### Persistence + +To install the chart with persistent volumes: + +``` +$ helm install --name hadoop $(stable/hadoop/tools/calc_resources.sh 50) \ + --set persistence.nameNode.enabled=true \ + --set persistence.nameNode.storageClass=standard \ + --set persistence.dataNode.enabled=true \ + --set persistence.dataNode.storageClass=standard \ + stable/hadoop +``` + +> Change the value of `storageClass` to match your volume driver. `standard` works for Google Container Engine clusters. + +## Configuration + +The following table lists the configurable parameters of the Hadoop chart and their default values. + +| Parameter | Description | Default | +| ------------------------------------------------- | ------------------------------- | ---------------------------------------------------------------- | +| `image` | Hadoop image ([source](https://github.com/Comcast/kube-yarn/tree/master/image)) | `danisla/hadoop:{VERSION}` | +| `imagePullPolicy` | Pull policy for the images | `IfNotPresent` | +| `hadoopVersion` | Version of hadoop libraries being used | `{VERSION}` | +| `antiAffinity` | Pod antiaffinity, `hard` or `soft` | `hard` | +| `hdfs.nameNode.pdbMinAvailable` | PDB for HDFS NameNode | `1` | +| `hdfs.nameNode.resources` | resources for the HDFS NameNode | `requests:memory=256Mi,cpu=10m,limits:memory=2048Mi,cpu=1000m` | +| `hdfs.dataNode.replicas` | Number of HDFS DataNode replicas | `1` | +| `hdfs.dataNode.pdbMinAvailable` | PDB for HDFS DataNode | `1` | +| `hdfs.dataNode.resources` | resources for the HDFS DataNode | `requests:memory=256Mi,cpu=10m,limits:memory=2048Mi,cpu=1000m` | +| `yarn.resourceManager.pdbMinAvailable` | PDB for the YARN ResourceManager | `1` | +| `yarn.resourceManager.resources` | resources for the YARN ResourceManager | `requests:memory=256Mi,cpu=10m,limits:memory=2048Mi,cpu=1000m` | +| `yarn.nodeManager.pdbMinAvailable` | PDB for the YARN NodeManager | `1` | +| `yarn.nodeManager.replicas` | Number of YARN NodeManager replicas | `2` | +| `yarn.nodeManager.parallelCreate` | Create all nodeManager statefulset pods in parallel (K8S 1.7+) | `false` | +| `yarn.nodeManager.resources` | Resource limits and requests for YARN NodeManager pods | `requests:memory=2048Mi,cpu=1000m,limits:memory=2048Mi,cpu=1000m`| +| `persistence.nameNode.enabled` | Enable/disable persistent volume | `false` | +| `persistence.nameNode.storageClass` | Name of the StorageClass to use per your volume provider | `-` | +| `persistence.nameNode.accessMode` | Access mode for the volume | `ReadWriteOnce` | +| `persistence.nameNode.size` | Size of the volume | `50Gi` | +| `persistence.dataNode.enabled` | Enable/disable persistent volume | `false` | +| `persistence.dataNode.storageClass` | Name of the StorageClass to use per your volume provider | `-` | +| `persistence.dataNode.accessMode` | Access mode for the volume | `ReadWriteOnce` | +| `persistence.dataNode.size` | Size of the volume | `200Gi` | + +## Related charts + +The [Zeppelin Notebook](https://github.com/kubernetes/charts/tree/master/stable/zeppelin) chart can use the hadoop config for the hadoop cluster and use the YARN executor: + +``` +helm install --set hadoop.useConfigMap=true stable/zeppelin +``` + +# References + +- Original K8S Hadoop adaptation this chart was derived from: https://github.com/Comcast/kube-yarn + +## Limitations diff --git a/stable/ibm-hadoop/RELEASENOTES.md b/stable/ibm-hadoop/RELEASENOTES.md new file mode 100755 index 0000000..09adb3f --- /dev/null +++ b/stable/ibm-hadoop/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 1.0.5 | September 7, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-hadoop/templates/NOTES.txt b/stable/ibm-hadoop/templates/NOTES.txt new file mode 100755 index 0000000..63cb206 --- /dev/null +++ b/stable/ibm-hadoop/templates/NOTES.txt @@ -0,0 +1,26 @@ +1. You can check the status of HDFS by running this command: + kubectl exec -n {{ .Release.Namespace }} -it {{ template "hadoop.fullname" . }}-hdfs-nn-0 -- /usr/lib/hadoop/bin/hdfs dfsadmin -report + +2. You can list the yarn nodes by running this command: + kubectl exec -n {{ .Release.Namespace }} -it {{ template "hadoop.fullname" . }}-yarn-rm-0 -- /usr/lib/hadoop/bin/yarn node -list + +3. Create a port-forward to the yarn resource manager UI: + kubectl port-forward -n {{ .Release.Namespace }} {{ template "hadoop.fullname" . }}-yarn-rm-0 8088:8088 + + Then open the ui in your browser: + + open http://localhost:8088 + +4. You can run included hadoop tests like this: + kubectl exec -n {{ .Release.Namespace }} -it {{ template "hadoop.fullname" . }}-yarn-nm-0 -- /usr/lib/hadoop/bin/hadoop jar /usr/lib/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-{{ .Values.hadoopVersion }}-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 128MB -resFile /tmp/TestDFSIOwrite.txt + +5. You can list the mapreduce jobs like this: + kubectl exec -n {{ .Release.Namespace }} -it {{ template "hadoop.fullname" . }}-yarn-rm-0 -- /usr/lib/hadoop/bin/mapred job -list + +6. This chart can also be used with the zeppelin chart + helm install --namespace {{ .Release.Namespace }} --set hadoop.useConfigMap=true,hadoop.configMapName={{ template "hadoop.fullname" . }} stable/zeppelin + +7. You can scale the number of yarn nodes like this: + helm upgrade {{ .Release.Name }} --set yarn.nodeManager.replicas=4 stable/hadoop + + Make sure to update the values.yaml if you want to make this permanent. diff --git a/stable/ibm-hadoop/templates/_helpers.yaml b/stable/ibm-hadoop/templates/_helpers.yaml new file mode 100755 index 0000000..f480938 --- /dev/null +++ b/stable/ibm-hadoop/templates/_helpers.yaml @@ -0,0 +1,16 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "hadoop.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). +*/}} +{{- define "hadoop.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-hadoop/templates/hadoop-configmap.yaml b/stable/ibm-hadoop/templates/hadoop-configmap.yaml new file mode 100755 index 0000000..d010f1f --- /dev/null +++ b/stable/ibm-hadoop/templates/hadoop-configmap.yaml @@ -0,0 +1,296 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "hadoop.fullname" . }} + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +data: + bootstrap.sh: | + #!/bin/bash + + : ${HADOOP_PREFIX:=/usr/local/hadoop} + + . $HADOOP_PREFIX/etc/hadoop/hadoop-env.sh + + # Directory to find config artifacts + CONFIG_DIR="/tmp/hadoop-config" + + # Copy config files from volume mount + + for f in slaves core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml; do + if [[ -e ${CONFIG_DIR}/$f ]]; then + cp ${CONFIG_DIR}/$f $HADOOP_PREFIX/etc/hadoop/$f + else + echo "ERROR: Could not find $f in $CONFIG_DIR" + exit 1 + fi + done + + # installing libraries if any - (resource urls added comma separated to the ACP system variable) + cd $HADOOP_PREFIX/share/hadoop/common ; for cp in ${ACP//,/ }; do echo == $cp; curl -LO $cp ; done; cd - + + if [[ "${HOSTNAME}" =~ "hdfs-nn" ]]; then + mkdir -p /root/hdfs/namenode + $HADOOP_PREFIX/bin/hdfs namenode -format -force -nonInteractive + sed -i s/{{ template "hadoop.fullname" . }}-hdfs-nn/0.0.0.0/ /usr/local/hadoop/etc/hadoop/core-site.xml + $HADOOP_PREFIX/sbin/hadoop-daemon.sh start namenode + fi + + if [[ "${HOSTNAME}" =~ "hdfs-dn" ]]; then + mkdir -p /root/hdfs/datanode + + # wait up to 30 seconds for namenode + (while [[ $count -lt 15 && -z `curl -sf http://{{ template "hadoop.fullname" . }}-hdfs-nn:50070` ]]; do ((count=count+1)) ; echo "Waiting for {{ template "hadoop.fullname" . }}-hdfs-nn" ; sleep 2; done && [[ $count -lt 15 ]]) + [[ $? -ne 0 ]] && echo "Timeout waiting for hdfs-nn, exiting." && exit 1 + + $HADOOP_PREFIX/sbin/hadoop-daemon.sh start datanode + fi + + if [[ "${HOSTNAME}" =~ "yarn-rm" ]]; then + sed -i s/{{ template "hadoop.fullname" . }}-yarn-rm/0.0.0.0/ $HADOOP_PREFIX/etc/hadoop/yarn-site.xml + cp ${CONFIG_DIR}/start-yarn-rm.sh $HADOOP_PREFIX/sbin/ + cd $HADOOP_PREFIX/sbin + chmod +x start-yarn-rm.sh + ./start-yarn-rm.sh + fi + + if [[ "${HOSTNAME}" =~ "yarn-nm" ]]; then + sed -i '/<\/configuration>/d' $HADOOP_PREFIX/etc/hadoop/yarn-site.xml + cat >> $HADOOP_PREFIX/etc/hadoop/yarn-site.xml <<- EOM + + yarn.nodemanager.resource.memory-mb + ${MY_MEM_LIMIT:-2048} + + + + yarn.nodemanager.resource.cpu-vcores + ${MY_CPU_LIMIT:-2} + + EOM + echo '' >> $HADOOP_PREFIX/etc/hadoop/yarn-site.xml + cp ${CONFIG_DIR}/start-yarn-nm.sh $HADOOP_PREFIX/sbin/ + cd $HADOOP_PREFIX/sbin + chmod +x start-yarn-nm.sh + + # wait up to 30 seconds for resourcemanager + (while [[ $count -lt 15 && -z `curl -sf http://{{ template "hadoop.fullname" . }}-yarn-rm:8088/ws/v1/cluster/info` ]]; do ((count=count+1)) ; echo "Waiting for {{ template "hadoop.fullname" . }}-yarn-rm" ; sleep 2; done && [[ $count -lt 15 ]]) + [[ $? -ne 0 ]] && echo "Timeout waiting for yarn-rm, exiting." && exit 1 + + ./start-yarn-nm.sh + fi + + if [[ $1 == "-d" ]]; then + until find ${HADOOP_PREFIX}/logs -mmin -1 | egrep -q '.*'; echo "`date`: Waiting for logs..." ; do sleep 2 ; done + tail -F ${HADOOP_PREFIX}/logs/* & + while true; do sleep 1000; done + fi + + if [[ $1 == "-bash" ]]; then + /bin/bash + fi + + core-site.xml: | + + + + + fs.defaultFS + hdfs://{{ template "hadoop.fullname" . }}-hdfs-nn:9000/ + NameNode URI + + + + hdfs-site.xml: | + + + + + dfs.datanode.use.datanode.hostname + false + + + + dfs.client.use.datanode.hostname + false + + + + dfs.replication + 3 + + + + dfs.datanode.data.dir + file:///root/hdfs/datanode + DataNode directory + + + + dfs.namenode.name.dir + file:///root/hdfs/namenode + NameNode directory for namespace and transaction logs storage. + + + + dfs.namenode.datanode.registration.ip-hostname-check + false + + + + mapred-site.xml: | + + + + + + mapreduce.framework.name + yarn + + + mapreduce.jobhistory.address + {{ template "hadoop.fullname" . }}-yarn-rm-0.{{ template "hadoop.fullname" . }}-yarn-rm.{{ .Release.Namespace }}.svc.cluster.local:10020 + + + mapreduce.jobhistory.webapp.address + {{ template "hadoop.fullname" . }}-yarn-rm-0.{{ template "hadoop.fullname" . }}-yarn-rm.{{ .Release.Namespace }}.svc.cluster.local:19888 + + + + slaves: | + localhost + + start-yarn-nm.sh: | + #!/usr/bin/env bash + + # Licensed to the Apache Software Foundation (ASF) under one or more + # contributor license agreements. See the NOTICE file distributed with + # this work for additional information regarding copyright ownership. + # The ASF licenses this file to You 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. + + + # Start all yarn daemons. Run this on master node. + + echo "starting yarn daemons" + + bin=`dirname "${BASH_SOURCE-$0}"` + bin=`cd "$bin"; pwd` + + DEFAULT_LIBEXEC_DIR="$bin"/../libexec + HADOOP_LIBEXEC_DIR=${HADOOP_LIBEXEC_DIR:-$DEFAULT_LIBEXEC_DIR} + . $HADOOP_LIBEXEC_DIR/yarn-config.sh + + # start resourceManager + # "$bin"/yarn-daemon.sh --config $YARN_CONF_DIR start resourcemanager + # start nodeManager + "$bin"/yarn-daemon.sh --config $YARN_CONF_DIR start nodemanager + # start proxyserver + #"$bin"/yarn-daemon.sh --config $YARN_CONF_DIR start proxyserver + + start-yarn-rm.sh: | + #!/usr/bin/env bash + + # Licensed to the Apache Software Foundation (ASF) under one or more + # contributor license agreements. See the NOTICE file distributed with + # this work for additional information regarding copyright ownership. + # The ASF licenses this file to You 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. + + + # Start all yarn daemons. Run this on master node. + + echo "starting yarn daemons" + + bin=`dirname "${BASH_SOURCE-$0}"` + bin=`cd "$bin"; pwd` + + DEFAULT_LIBEXEC_DIR="$bin"/../libexec + HADOOP_LIBEXEC_DIR=${HADOOP_LIBEXEC_DIR:-$DEFAULT_LIBEXEC_DIR} + . $HADOOP_LIBEXEC_DIR/yarn-config.sh + + # start resourceManager + "$bin"/yarn-daemon.sh --config $YARN_CONF_DIR start resourcemanager + # start nodeManager + # "$bin"/yarn-daemons.sh --config $YARN_CONF_DIR start nodemanager + # start proxyserver + "$bin"/yarn-daemon.sh --config $YARN_CONF_DIR start proxyserver + + yarn-site.xml: | + + + + + + yarn.resourcemanager.hostname + {{ template "hadoop.fullname" . }}-yarn-rm + + + + yarn.nodemanager.vmem-check-enabled + false + + + + yarn.nodemanager.aux-services + mapreduce_shuffle + + + + yarn.nodemanager.aux-services.mapreduce_shuffle.class + org.apache.hadoop.mapred.ShuffleHandler + + + + List of directories to store localized files in. + yarn.nodemanager.local-dirs + /var/lib/hadoop-yarn/cache/${user.name}/nm-local-dir + + + + Where to store container logs. + yarn.nodemanager.log-dirs + /var/log/hadoop-yarn/containers + + + + Where to aggregate logs to. + yarn.nodemanager.remote-app-log-dir + /var/log/hadoop-yarn/apps + + + + yarn.application.classpath + + /usr/local/hadoop/etc/hadoop, + /usr/local/hadoop/share/hadoop/common/*, + /usr/local/hadoop/share/hadoop/common/lib/*, + /usr/local/hadoop/share/hadoop/hdfs/*, + /usr/local/hadoop/share/hadoop/hdfs/lib/*, + /usr/local/hadoop/share/hadoop/mapreduce/*, + /usr/local/hadoop/share/hadoop/mapreduce/lib/*, + /usr/local/hadoop/share/hadoop/yarn/*, + /usr/local/hadoop/share/hadoop/yarn/lib/* + + + diff --git a/stable/ibm-hadoop/templates/hdfs-dn-pdb.yaml b/stable/ibm-hadoop/templates/hdfs-dn-pdb.yaml new file mode 100755 index 0000000..ccb77fb --- /dev/null +++ b/stable/ibm-hadoop/templates/hdfs-dn-pdb.yaml @@ -0,0 +1,18 @@ +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + name: {{ template "hadoop.fullname" . }}-hdfs-dn + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: hdfs-dn +spec: + selector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + component: hdfs-dn + minAvailable: {{ .Values.hdfs.dataNode.pdbMinAvailable }} + \ No newline at end of file diff --git a/stable/ibm-hadoop/templates/hdfs-dn-pvc.yaml b/stable/ibm-hadoop/templates/hdfs-dn-pvc.yaml new file mode 100755 index 0000000..1d6ec16 --- /dev/null +++ b/stable/ibm-hadoop/templates/hdfs-dn-pvc.yaml @@ -0,0 +1,25 @@ +{{- if .Values.persistence.dataNode.enabled -}} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ template "hadoop.fullname" . }}-hdfs-dn + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: hdfs-dn +spec: + accessModes: + - {{ .Values.persistence.dataNode.accessMode | quote }} + resources: + requests: + storage: {{ .Values.persistence.dataNode.size | quote }} +{{- if .Values.persistence.dataNode.storageClass }} +{{- if (eq "-" .Values.persistence.dataNode.storageClass) }} + storageClassName: "" +{{- else }} + storageClassName: "{{ .Values.persistence.dataNode.storageClass }}" +{{- end }} +{{- end }} +{{- end -}} diff --git a/stable/ibm-hadoop/templates/hdfs-dn-statefulset.yaml b/stable/ibm-hadoop/templates/hdfs-dn-statefulset.yaml new file mode 100755 index 0000000..67fa20c --- /dev/null +++ b/stable/ibm-hadoop/templates/hdfs-dn-statefulset.yaml @@ -0,0 +1,95 @@ +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: {{ template "hadoop.fullname" . }}-hdfs-dn + annotations: + checksum/config: {{ include (print $.Template.BasePath "/hadoop-configmap.yaml") . | sha256sum }} + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: hdfs-dn +spec: + serviceName: {{ template "hadoop.fullname" . }}-hdfs-dn + replicas: {{ .Values.hdfs.dataNode.replicas }} + template: + metadata: + labels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + chart: {{ .Chart.Name }} + component: hdfs-dn + spec: + affinity: + podAntiAffinity: + {{- if eq .Values.antiAffinity "hard" }} + requiredDuringSchedulingIgnoredDuringExecution: + - topologyKey: "kubernetes.io/hostname" + labelSelector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name | quote }} + component: hdfs-dn + {{- else if eq .Values.antiAffinity "soft" }} + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 5 + podAffinityTerm: + topologyKey: "kubernetes.io/hostname" + labelSelector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name | quote }} + component: hdfs-dn + {{- end }} + terminationGracePeriodSeconds: 0 + containers: + - name: hdfs-dn + image: {{ .Values.image }} + imagePullPolicy: {{ .Values.imagePullPolicy }} + command: + - "/bin/bash" + - "/bootstrap.sh" + - "-d" + resources: +{{ toYaml .Values.hdfs.dataNode.resources | indent 10 }} + readinessProbe: + httpGet: + path: / + port: 50075 + initialDelaySeconds: 5 + timeoutSeconds: 2 + livenessProbe: + httpGet: + path: / + port: 50075 + initialDelaySeconds: 10 + timeoutSeconds: 2 + volumeMounts: + - name: hadoop-config + mountPath: /tmp/hadoop-config + - name: dfs + mountPath: /root/hdfs/datanode + volumes: + - name: hadoop-config + configMap: + name: {{ template "hadoop.fullname" . }} + - name: dfs + {{- if .Values.persistence.dataNode.enabled }} + persistentVolumeClaim: + claimName: {{ template "hadoop.fullname" . }}-hdfs-dn + {{- else }} + emptyDir: {} + {{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} diff --git a/stable/ibm-hadoop/templates/hdfs-dn-svc.yaml b/stable/ibm-hadoop/templates/hdfs-dn-svc.yaml new file mode 100755 index 0000000..e809788 --- /dev/null +++ b/stable/ibm-hadoop/templates/hdfs-dn-svc.yaml @@ -0,0 +1,23 @@ +# A headless service to create DNS records +apiVersion: v1 +kind: Service +metadata: + name: {{ template "hadoop.fullname" . }}-hdfs-dn + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: hdfs-dn +spec: + ports: + - name: dfs + port: 9000 + protocol: TCP + - name: webhdfs + port: 50075 + clusterIP: None + selector: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + component: hdfs-dn \ No newline at end of file diff --git a/stable/ibm-hadoop/templates/hdfs-nn-pdb.yaml b/stable/ibm-hadoop/templates/hdfs-nn-pdb.yaml new file mode 100755 index 0000000..4fd3b3c --- /dev/null +++ b/stable/ibm-hadoop/templates/hdfs-nn-pdb.yaml @@ -0,0 +1,18 @@ +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + name: {{ template "hadoop.fullname" . }}-hdfs-nn + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: hdfs-nn +spec: + selector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + component: hdfs-nn + minAvailable: {{ .Values.hdfs.nameNode.pdbMinAvailable }} + \ No newline at end of file diff --git a/stable/ibm-hadoop/templates/hdfs-nn-pvc.yaml b/stable/ibm-hadoop/templates/hdfs-nn-pvc.yaml new file mode 100755 index 0000000..6d86211 --- /dev/null +++ b/stable/ibm-hadoop/templates/hdfs-nn-pvc.yaml @@ -0,0 +1,25 @@ +{{- if .Values.persistence.nameNode.enabled -}} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ template "hadoop.fullname" . }}-hdfs-nn + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: hdfs-nn +spec: + accessModes: + - {{ .Values.persistence.nameNode.accessMode | quote }} + resources: + requests: + storage: {{ .Values.persistence.nameNode.size | quote }} +{{- if .Values.persistence.nameNode.storageClass }} +{{- if (eq "-" .Values.persistence.nameNode.storageClass) }} + storageClassName: "" +{{- else }} + storageClassName: "{{ .Values.persistence.nameNode.storageClass }}" +{{- end }} +{{- end }} +{{- end -}} diff --git a/stable/ibm-hadoop/templates/hdfs-nn-statefulset.yaml b/stable/ibm-hadoop/templates/hdfs-nn-statefulset.yaml new file mode 100755 index 0000000..5342cbf --- /dev/null +++ b/stable/ibm-hadoop/templates/hdfs-nn-statefulset.yaml @@ -0,0 +1,95 @@ +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: {{ template "hadoop.fullname" . }}-hdfs-nn + annotations: + checksum/config: {{ include (print $.Template.BasePath "/hadoop-configmap.yaml") . | sha256sum }} + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: hdfs-nn +spec: + serviceName: {{ template "hadoop.fullname" . }}-hdfs-nn + replicas: 1 + template: + metadata: + labels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + chart: {{ .Chart.Name }} + heritage: {{ .Release.Service }} + component: hdfs-nn + spec: + affinity: + podAntiAffinity: + {{- if eq .Values.antiAffinity "hard" }} + requiredDuringSchedulingIgnoredDuringExecution: + - topologyKey: "kubernetes.io/hostname" + labelSelector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name | quote }} + component: hdfs-nn + {{- else if eq .Values.antiAffinity "soft" }} + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 5 + podAffinityTerm: + topologyKey: "kubernetes.io/hostname" + labelSelector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name | quote }} + component: hdfs-nn + {{- end }} + terminationGracePeriodSeconds: 0 + containers: + - name: hdfs-nn + image: {{ .Values.image }} + imagePullPolicy: {{ .Values.imagePullPolicy }} + command: + - "/bin/bash" + - "/bootstrap.sh" + - "-d" + resources: +{{ toYaml .Values.hdfs.nameNode.resources | indent 10 }} + readinessProbe: + httpGet: + path: / + port: 50070 + initialDelaySeconds: 5 + timeoutSeconds: 2 + livenessProbe: + httpGet: + path: / + port: 50070 + initialDelaySeconds: 10 + timeoutSeconds: 2 + volumeMounts: + - name: hadoop-config + mountPath: /tmp/hadoop-config + - name: dfs + mountPath: /root/hdfs/namenode + volumes: + - name: hadoop-config + configMap: + name: {{ template "hadoop.fullname" . }} + - name: dfs + {{- if .Values.persistence.nameNode.enabled }} + persistentVolumeClaim: + claimName: {{ template "hadoop.fullname" . }}-hdfs-nn + {{- else }} + emptyDir: {} + {{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} diff --git a/stable/ibm-hadoop/templates/hdfs-nn-svc.yaml b/stable/ibm-hadoop/templates/hdfs-nn-svc.yaml new file mode 100755 index 0000000..c577629 --- /dev/null +++ b/stable/ibm-hadoop/templates/hdfs-nn-svc.yaml @@ -0,0 +1,23 @@ +# A headless service to create DNS records +apiVersion: v1 +kind: Service +metadata: + name: {{ template "hadoop.fullname" . }}-hdfs-nn + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: hdfs-nn +spec: + ports: + - name: dfs + port: 9000 + protocol: TCP + - name: webhdfs + port: 50070 + clusterIP: None + selector: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + component: hdfs-nn \ No newline at end of file diff --git a/stable/ibm-hadoop/templates/yarn-nm-pdb.yaml b/stable/ibm-hadoop/templates/yarn-nm-pdb.yaml new file mode 100755 index 0000000..cd4e459 --- /dev/null +++ b/stable/ibm-hadoop/templates/yarn-nm-pdb.yaml @@ -0,0 +1,18 @@ +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + name: {{ template "hadoop.fullname" . }}-yarn-nm + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: yarn-nm +spec: + selector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + component: yarn-nm + minAvailable: {{ .Values.yarn.nodeManager.pdbMinAvailable }} + \ No newline at end of file diff --git a/stable/ibm-hadoop/templates/yarn-nm-statefulset.yaml b/stable/ibm-hadoop/templates/yarn-nm-statefulset.yaml new file mode 100755 index 0000000..464f2cf --- /dev/null +++ b/stable/ibm-hadoop/templates/yarn-nm-statefulset.yaml @@ -0,0 +1,105 @@ +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: {{ template "hadoop.fullname" . }}-yarn-nm + annotations: + checksum/config: {{ include (print $.Template.BasePath "/hadoop-configmap.yaml") . | sha256sum }} + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: yarn-nm +spec: + serviceName: {{ template "hadoop.fullname" . }}-yarn-nm + replicas: {{ .Values.yarn.nodeManager.replicas }} +{{- if .Values.yarn.nodeManager.parallelCreate }} + podManagementPolicy: Parallel +{{- end }} + template: + metadata: + labels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + chart: {{ .Chart.Name }} + heritage: {{ .Release.Service }} + component: yarn-nm + spec: + affinity: + podAntiAffinity: + {{- if eq .Values.antiAffinity "hard" }} + requiredDuringSchedulingIgnoredDuringExecution: + - topologyKey: "kubernetes.io/hostname" + labelSelector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name | quote }} + component: yarn-nm + {{- else if eq .Values.antiAffinity "soft" }} + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 5 + podAffinityTerm: + topologyKey: "kubernetes.io/hostname" + labelSelector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name | quote }} + component: yarn-nm + {{- end }} + terminationGracePeriodSeconds: 0 + containers: + - name: yarn-nm + image: {{ .Values.image }} + imagePullPolicy: {{ .Values.imagePullPolicy }} + ports: + - containerPort: 8088 + name: web + command: + - "/bin/bash" + - "/bootstrap.sh" + - "-d" + resources: +{{ toYaml .Values.yarn.nodeManager.resources | indent 10 }} +# readinessProbe: +# httpGet: +# path: /node +# port: 8042 +# initialDelaySeconds: 10 +# timeoutSeconds: 2 +# livenessProbe: +# httpGet: +# path: /node +# port: 8042 +# initialDelaySeconds: 10 +# timeoutSeconds: 2 + env: + - name: MY_CPU_LIMIT + valueFrom: + resourceFieldRef: + containerName: yarn-nm + resource: limits.cpu + divisor: 1 + - name: MY_MEM_LIMIT + valueFrom: + resourceFieldRef: + containerName: yarn-nm + resource: limits.memory + divisor: 1M + volumeMounts: + - name: hadoop-config + mountPath: /tmp/hadoop-config + volumes: + - name: hadoop-config + configMap: + name: {{ template "hadoop.fullname" . }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} diff --git a/stable/ibm-hadoop/templates/yarn-nm-svc.yaml b/stable/ibm-hadoop/templates/yarn-nm-svc.yaml new file mode 100755 index 0000000..da3297e --- /dev/null +++ b/stable/ibm-hadoop/templates/yarn-nm-svc.yaml @@ -0,0 +1,24 @@ +# A headless service to create DNS records +apiVersion: v1 +kind: Service +metadata: + name: {{ template "hadoop.fullname" . }}-yarn-nm + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: yarn-nm +spec: + ports: + - port: 8088 + name: web + - port: 8082 + name: web2 + - port: 8042 + name: api + clusterIP: None + selector: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + component: yarn-nm \ No newline at end of file diff --git a/stable/ibm-hadoop/templates/yarn-rm-pdb.yaml b/stable/ibm-hadoop/templates/yarn-rm-pdb.yaml new file mode 100755 index 0000000..f066771 --- /dev/null +++ b/stable/ibm-hadoop/templates/yarn-rm-pdb.yaml @@ -0,0 +1,18 @@ +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + name: {{ template "hadoop.fullname" . }}-yarn-rm + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: yarn-rm +spec: + selector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + component: yarn-rm + minAvailable: {{ .Values.yarn.resourceManager.pdbMinAvailable }} + \ No newline at end of file diff --git a/stable/ibm-hadoop/templates/yarn-rm-statefulset.yaml b/stable/ibm-hadoop/templates/yarn-rm-statefulset.yaml new file mode 100755 index 0000000..bf4545d --- /dev/null +++ b/stable/ibm-hadoop/templates/yarn-rm-statefulset.yaml @@ -0,0 +1,89 @@ +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: {{ template "hadoop.fullname" . }}-yarn-rm + annotations: + checksum/config: {{ include (print $.Template.BasePath "/hadoop-configmap.yaml") . | sha256sum }} + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: yarn-rm +spec: + serviceName: {{ template "hadoop.fullname" . }}-yarn-rm + replicas: 1 + template: + metadata: + labels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + component: yarn-rm + chart: {{ .Chart.Name }} + heritage: {{ .Release.Service }} + spec: + affinity: + podAntiAffinity: + {{- if eq .Values.antiAffinity "hard" }} + requiredDuringSchedulingIgnoredDuringExecution: + - topologyKey: "kubernetes.io/hostname" + labelSelector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name | quote }} + component: yarn-rm + {{- else if eq .Values.antiAffinity "soft" }} + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 5 + podAffinityTerm: + topologyKey: "kubernetes.io/hostname" + labelSelector: + matchLabels: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name | quote }} + component: yarn-rm + {{- end }} + terminationGracePeriodSeconds: 0 + containers: + - name: yarn-rm + image: {{ .Values.image }} + imagePullPolicy: {{ .Values.imagePullPolicy }} + ports: + - containerPort: 8088 + name: web + command: + - "/bin/bash" + - "/bootstrap.sh" + - "-d" + resources: +{{ toYaml .Values.yarn.resourceManager.resources | indent 10 }} + readinessProbe: + httpGet: + path: /ws/v1/cluster/info + port: 8088 + initialDelaySeconds: 5 + timeoutSeconds: 2 + livenessProbe: + httpGet: + path: /ws/v1/cluster/info + port: 8088 + initialDelaySeconds: 10 + timeoutSeconds: 2 + volumeMounts: + - name: hadoop-config + mountPath: /tmp/hadoop-config + volumes: + - name: hadoop-config + configMap: + name: {{ template "hadoop.fullname" . }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} diff --git a/stable/ibm-hadoop/templates/yarn-rm-svc.yaml b/stable/ibm-hadoop/templates/yarn-rm-svc.yaml new file mode 100755 index 0000000..ea4e0a5 --- /dev/null +++ b/stable/ibm-hadoop/templates/yarn-rm-svc.yaml @@ -0,0 +1,20 @@ +# A headless service to create DNS records +apiVersion: v1 +kind: Service +metadata: + name: {{ template "hadoop.fullname" . }}-yarn-rm + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: yarn-rm +spec: + ports: + - port: 8088 + name: web + clusterIP: None + selector: + app: {{ template "hadoop.name" . }} + release: {{ .Release.Name }} + component: yarn-rm \ No newline at end of file diff --git a/stable/ibm-hadoop/templates/yarn-ui-svc.yaml b/stable/ibm-hadoop/templates/yarn-ui-svc.yaml new file mode 100755 index 0000000..48405da --- /dev/null +++ b/stable/ibm-hadoop/templates/yarn-ui-svc.yaml @@ -0,0 +1,18 @@ +# Service to access the yarn web ui +apiVersion: v1 +kind: Service +metadata: + name: {{ template "hadoop.fullname" . }}-yarn-ui + labels: + app: {{ template "hadoop.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + component: yarn-ui +spec: + ports: + - port: 8088 + name: web + selector: + app: {{ template "hadoop.name" . }} + component: yarn-rm \ No newline at end of file diff --git a/stable/ibm-hadoop/tools/calc_resources.sh b/stable/ibm-hadoop/tools/calc_resources.sh new file mode 100755 index 0000000..6005d31 --- /dev/null +++ b/stable/ibm-hadoop/tools/calc_resources.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Calculates cluster resources given a percentage based on what is currently allocatable. +# Related issue to programmatic resource query: https://github.com/kubernetes/kubernetes/issues/27404 + +TARGET_PCT=$1 + +[[ -z "${TARGET_PCT}" ]] && echo "USAGE: $0 " && exit 1 + +NODES=$(kubectl get nodes -o jsonpath='{.items..metadata.name}') +NUM_NODES=$(echo "${NODES}" | tr ' ' '\n' | wc -l | xargs echo -n) + +TOTAL_CPU=$(kubectl get nodes -o jsonpath='{.items[0].status.allocatable.cpu}') +# Convert CPU to nanocores +TOTAL_CPU=$(bc <<< "${TOTAL_CPU} * 1000000000") + +# Start kube proxy to get to node stats summary api +kubectl proxy >/dev/null 2>&1 & +export kproxy=%1 + +# Cleanup kproxy on exit +function finish { + kill $kproxy +} +trap finish EXIT + +# Wait for proxy +(while [[ $count -lt 5 && -z "$(curl -s localhost:8001/api/v1)" ]]; do ((count=count+1)) ; sleep 2; done && [[ $count -lt 5 ]]) +[[ $? -ne 0 ]] && echo "ERROR: could not start kube proxy to fetch node stats summary" && exit 1 + +declare -a NODE_STATS +declare -a AVAIL_CPU +declare -a AVAIL_MEM +i=0 +for NODE in ${NODES}; do + NODE_STATS[$i]=$(curl -sf localhost:8001/api/v1/proxy/nodes/${NODE}:10255/stats/summary) + [[ $? -ne 0 ]] && echo "ERROR: Could not get stats summary for node: ${NODE}" && exit 1 + + # Get available memory + AVAIL_MEM[$i]=$(jq '.node.memory.availableBytes' <<< "${NODE_STATS[$i]}") + AVAIL_MEM[$i]=$(bc -l <<< "scale=0; ${AVAIL_MEM[$i]}/1024/1024") + + # Derive available CPU + USED_CPU=$(jq '.node.cpu.usageNanoCores' <<< "${NODE_STATS[$i]}") + AVAIL_CPU[$i]=$(bc -l <<< "scale=2; (${TOTAL_CPU} - ${USED_CPU})/1000000") + ((i=i+1)) +done + +# Optimize per the min resources on any node. +CORES=$(echo "${AVAIL_CPU[*]}" | tr ' ' '\n' | sort -n | head -1) +MEMORY=$(echo "${AVAIL_MEM[*]}" | tr ' ' '\n' | sort -n | head -1) + +# Subtract resources used by the chart. Note these are default values. +HADOOP_SHARE_CPU=400 +CORES=$(bc -l <<< "scale=0; (${CORES} - ${HADOOP_SHARE_CPU})") + +HADOOP_SHARE_MEM=1024 +MEMORY=$(bc -l <<< "scale=0; (${MEMORY} - ${HADOOP_SHARE_MEM})") + +CPU_PER_NODE=$(bc -l <<< "scale=2; (${CORES} * ${TARGET_PCT}/100)") +MEM_PER_NODE=$(bc -l <<< "scale=2; (${MEMORY} * ${TARGET_PCT}/100)") + +# Round cpu to lower mCPU +CPU_PER_NODE=$(bc -l <<< "scale=0; ${CPU_PER_NODE} - (${CPU_PER_NODE} % 10)") + +# Round mem to lower Mi +MEM_PER_NODE=$(bc -l <<< "scale=0; ${MEM_PER_NODE} - (${MEM_PER_NODE} % 100)") + +[[ "${CPU_PER_NODE/%.*/}" -lt 100 ]] && echo "WARN: Insufficient available CPU for scheduling" >&2 +[[ "${MEM_PER_NODE/%.*/}" -lt 2048 ]] && MEM_PER_NODE=2048.0 && echo "WARN: Insufficient available Memory for scheduling" >&2 + +CPU_LIMIT=${CPU_PER_NODE/%.*/m} +MEM_LIMIT=${MEM_PER_NODE/%.*/Mi} + +echo -n "--set yarn.nodeManager.replicas=${NUM_NODES},yarn.nodeManager.resources.requests.cpu=${CPU_LIMIT},yarn.nodeManager.resources.requests.memory=${MEM_LIMIT},yarn.nodeManager.resources.limits.cpu=${CPU_LIMIT},yarn.nodeManager.resources.limits.memory=${MEM_LIMIT}" diff --git a/stable/ibm-hadoop/values-metadata.yaml b/stable/ibm-hadoop/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-hadoop/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-hadoop/values.yaml b/stable/ibm-hadoop/values.yaml new file mode 100755 index 0000000..1fbb9f8 --- /dev/null +++ b/stable/ibm-hadoop/values.yaml @@ -0,0 +1,82 @@ +# The base hadoop image to use for all components. +# See this repo for image build details: https://github.com/Comcast/kube-yarn/tree/master/image +image: ynwa/ubuntu-apache-hadoop-ppc64le:2.7.1 +imagePullPolicy: IfNotPresent + +# The version of the hadoop libraries being used in the image. +hadoopVersion: 2.7.1 + +# Select anitAffinity as either hard or soft, default is hard +#antiAffinity: "soft" +antiAffinity: "xyz" + +hdfs: + nameNode: + pdbMinAvailable: 1 + + resources: + requests: + memory: "256Mi" + cpu: "10m" + limits: + memory: "2048Mi" + cpu: "1000m" + + dataNode: + replicas: 1 + + pdbMinAvailable: 1 + + resources: + requests: + memory: "256Mi" + cpu: "10m" + limits: + memory: "2048Mi" + cpu: "1000m" + +yarn: + resourceManager: + pdbMinAvailable: 1 + + resources: + requests: + memory: "256Mi" + cpu: "10m" + limits: + memory: "2048Mi" + cpu: "2000m" + + + nodeManager: + pdbMinAvailable: 1 + + # The number of YARN NodeManager instances. + replicas: 2 + + # Create statefulsets in parallel (K8S 1.7+) + parallelCreate: false + + # CPU and memory resources allocated to each node manager pod. + # This should be tuned to fit your workload. + resources: + requests: + memory: "2048Mi" + cpu: "1000m" + limits: + memory: "2048Mi" + cpu: "1000m" + +node: "ppc64le" +persistence: + nameNode: + enabled: false + storageClass: "-" + accessMode: ReadWriteOnce + size: 50Gi + + dataNode: + enabled: false + storageClass: "-" + accessMode: ReadWriteOnce + size: 200Gi diff --git a/stable/ibm-influxdb/.helmignore b/stable/ibm-influxdb/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-influxdb/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-influxdb/Chart.yaml b/stable/ibm-influxdb/Chart.yaml new file mode 100755 index 0000000..3a534f7 --- /dev/null +++ b/stable/ibm-influxdb/Chart.yaml @@ -0,0 +1,20 @@ +name: ibm-influxdb +version: 0.10.0 +appVersion: 1.4 +description: Scalable datastore for metrics, events, and real-time analytics. +keywords: +- influxdb +- database +- timeseries +- Limited +- ppc64le +- Tools +- ICP +home: https://www.influxdata.com/time-series-platform/influxdb/ +sources: +- https://github.com/influxdata/influxdb +maintainers: +- name: IBM ISV Team + email: smohite@us.ibm.com +engine: gotpl +tillerVersion: '>=2.7.2' diff --git a/stable/ibm-influxdb/LICENSE b/stable/ibm-influxdb/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-influxdb/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-influxdb/README.md b/stable/ibm-influxdb/README.md new file mode 100644 index 0000000..231c61f --- /dev/null +++ b/stable/ibm-influxdb/README.md @@ -0,0 +1,93 @@ +# InfluxDB + +## An Open-Source Time Series Database + +[InfluxDB](https://github.com/influxdata/influxdb) is an open source time series database built by the folks over at [InfluxData](https://influxdata.com) with no external dependencies. It's useful for recording metrics, events, and performing analytics. + +## Note +The original work for this helm chart is present @ [Helm Charts]( https://github.com/helm/charts) Based on the [influxdb]( https://github.com/helm/charts/tree/master/stable/influxdb) chart + +## QuickStart + +```bash +$ helm install stable/influxdb --name foo --namespace bar +``` + +## Introduction + +This chart bootstraps an InfluxDB deployment and service on a Kubernetes cluster using the Helm Package manager. + +## Chart Details +This chart bootstraps an InfluxDB deployment and service on a Kubernetes cluster. + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Prerequisites + +- Kubernetes 1.4+ +- PV provisioner support in the underlying infrastructure (optional) + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```bash +$ helm install --name my-release stable/influxdb +``` + +The command deploys InfluxDB on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation. + +> **Tip**: List all releases using `helm list` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```bash +$ helm delete my-release --purge +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Configuration + +The default configuration values for this chart are listed in `values.yaml`. + +The [full image documentation](https://hub.docker.com/_/influxdb/) contains more information about running InfluxDB in docker. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, + +```bash +$ helm install --name my-release \ + --set persistence.enabled=true,persistence.size=200Gi \ + stable/influxdb +``` + +The above command enables persistence and changes the size of the requested data volume to 200GB. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/influxdb +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Persistence + +The [InfluxDB](https://hub.docker.com/_/influxdb/) image stores data in the `/var/lib/influxdb` directory in the container. + +The chart mounts a [Persistent Volume](http://kubernetes.io/docs/user-guide/persistent-volumes/) at this location. The volume is created using dynamic volume provisioning. + +## Starting with authentication + +In `values.yaml` change `.Values.config.http.auth_enabled` to `true`. + +Influxdb requires also a user to be set in order for authentication to be enforced. See more details [here](https://docs.influxdata.com/influxdb/v1.2/query_language/authentication_and_authorization/#set-up-authentication). + +To handle this setup on startup, a job can be enabled in `values.yaml` by setting `.Values.setDefaultUser.enabled` to `true`. + +Make sure to uncomment or configure the job settings after enabling it. If a password is not set, a random password will be generated. + +## Limitations diff --git a/stable/ibm-influxdb/RELEASENOTES.md b/stable/ibm-influxdb/RELEASENOTES.md new file mode 100755 index 0000000..1f8842f --- /dev/null +++ b/stable/ibm-influxdb/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.10.0 | September 7, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-influxdb/templates/NOTES.txt b/stable/ibm-influxdb/templates/NOTES.txt new file mode 100644 index 0000000..1e759c3 --- /dev/null +++ b/stable/ibm-influxdb/templates/NOTES.txt @@ -0,0 +1,15 @@ +InfluxDB can be accessed via port {{ .Values.config.http.bind_address }} on the following DNS name from within your cluster: + +- http://{{ template "influxdb.fullname" . }}.{{ .Release.Namespace }}:{{ .Values.config.http.bind_address }} + +You can easily connect to the remote instance with your local influx cli. To forward the API port to localhost:8086 run the following: + +- kubectl port-forward --namespace {{ .Release.Namespace }} $(kubectl get pods --namespace {{ .Release.Namespace }} -l app={{ template "influxdb.fullname" . }} -o jsonpath='{ .items[0].metadata.name }') 8086:{{ .Values.config.http.bind_address }} + +You can also connect to the influx cli from inside the container. To open a shell session in the InfluxDB pod run the following: + +- kubectl exec -i -t --namespace {{ .Release.Namespace }} $(kubectl get pods --namespace {{ .Release.Namespace }} -l app={{ template "influxdb.fullname" . }} -o jsonpath='{.items[0].metadata.name}') /bin/sh + +To tail the logs for the InfluxDB pod run the following: + +- kubectl logs -f --namespace {{ .Release.Namespace }} $(kubectl get pods --namespace {{ .Release.Namespace }} -l app={{ template "influxdb.fullname" . }} -o jsonpath='{ .items[0].metadata.name }') diff --git a/stable/ibm-influxdb/templates/_helpers.tpl b/stable/ibm-influxdb/templates/_helpers.tpl new file mode 100644 index 0000000..98504c0 --- /dev/null +++ b/stable/ibm-influxdb/templates/_helpers.tpl @@ -0,0 +1,20 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "influxdb.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). +*/}} +{{- define "influxdb.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} diff --git a/stable/ibm-influxdb/templates/config.yaml b/stable/ibm-influxdb/templates/config.yaml new file mode 100644 index 0000000..f943e08 --- /dev/null +++ b/stable/ibm-influxdb/templates/config.yaml @@ -0,0 +1,157 @@ + +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "influxdb.fullname" . }} + labels: + app: {{ template "influxdb.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +data: + influxdb.conf: |+ + reporting-disabled = {{ .Values.config.reporting_disabled | default false }} + bind-address = ":{{ .Values.config.bind_address }}" + + [meta] + dir = "{{ .Values.config.storage_directory }}/meta" + retention-autocreate = {{ .Values.config.meta.retention_autocreate }} + logging-enabled = {{ .Values.config.meta.logging_enabled }} + + [data] + dir = "{{ .Values.config.storage_directory }}/data" + wal-dir = "{{ .Values.config.storage_directory }}/wal" + query-log-enabled = {{ .Values.config.data.query_log_enabled }} + cache-max-memory-size = {{ .Values.config.data.cache_max_memory_size | int64 }} + cache-snapshot-memory-size = {{ .Values.config.data.cache_snapshot_memory_size | int64 }} + cache-snapshot-write-cold-duration = "{{ .Values.config.data.cache_snapshot_write_cold_duration }}" + compact-full-write-cold-duration = "{{ .Values.config.data.compact_full_write_cold_duration }}" + max-series-per-database = {{ .Values.config.data.max_series_per_database | int64 }} + max-values-per-tag = {{ .Values.config.data.max_values_per_tag | int64 }} + trace-logging-enabled = {{ .Values.config.data.trace_logging_enabled }} + + [coordinator] + write-timeout = "{{ .Values.config.coordinator.write_timeout }}" + max-concurrent-queries = {{ .Values.config.coordinator.max_concurrent_queries | int64 }} + query-timeout = "{{ .Values.config.coordinator.query_timeout }}" + log-queries-after = "{{ .Values.config.coordinator.log_queries_after }}" + max-select-point = {{ .Values.config.coordinator.max_select_point | int64 }} + max-select-series = {{ .Values.config.coordinator.max_select_series | int64 }} + max-select-buckets = {{ .Values.config.coordinator.max_select_buckets | int64 }} + + [retention] + enabled = {{ .Values.config.retention.enabled }} + check-interval = "{{ .Values.config.retention.check_interval }}" + + [shard-precreation] + enabled = {{ .Values.config.shard_precreation.enabled }} + check-interval = "{{ .Values.config.shard_precreation.check_interval }}" + advance-period = "{{ .Values.config.shard_precreation.advance_period }}" + + [admin] + enabled = {{ .Values.config.admin.enabled }} + bind-address = ":{{ .Values.config.admin.bind_address }}" + https-enabled = {{ .Values.config.admin.https_enabled }} + https-certificate = "{{ .Values.config.admin.https_certificate }}" + + [monitor] + store-enabled = {{ .Values.config.monitor.store_enabled }} + store-database = "{{ .Values.config.monitor.store_database }}" + store-interval = "{{ .Values.config.monitor.store_interval }}" + + [subscriber] + enabled = {{ .Values.config.subscriber.enabled }} + http-timeout = "{{ .Values.config.subscriber.http_timeout }}" + insecure-skip-verify = {{ .Values.config.subscriber.insecure_skip_verify }} + ca-certs = "{{ .Values.config.subscriber.ca_certs }}" + write-concurrency = {{ .Values.config.subscriber.write_concurrency | int64 }} + write-buffer-size = {{ .Values.config.subscriber.write_buffer_size | int64 }} + + [http] + enabled = {{ .Values.config.http.enabled }} + bind-address = ":{{ .Values.config.http.bind_address }}" + auth-enabled = {{ .Values.config.http.auth_enabled }} + log-enabled = {{ .Values.config.http.log_enabled }} + write-tracing = {{ .Values.config.http.write_tracing }} + pprof-enabled = {{ .Values.config.http.pprof_enabled }} + https-enabled = {{ .Values.config.http.https_enabled }} + https-certificate = "{{ .Values.config.http.https_certificate }}" + https-private-key = "{{ .Values.config.http.https_private_key }}" + max-row-limit = {{ .Values.config.http.max_row_limit | int64 }} + max-connection-limit = {{ .Values.config.http.max_connection_limit | int64 }} + shared-secret = "{{ .Values.config.http.shared_secret }}" + realm = "{{ .Values.config.http.realm }}" + unix-socket-enabled = {{ .Values.config.http.unix_socket_enabled }} + bind-socket = "{{ .Values.config.http.bind_socket }}" + + # TODO: allow multiple graphite listeners + + [[graphite]] + enabled = {{ .Values.config.graphite.enabled }} + bind-address = ":{{ .Values.config.graphite.bind_address }}" + database = "{{ .Values.config.graphite.database }}" + retention-policy = "{{ .Values.config.graphite.retention_policy }}" + protocol = "{{ .Values.config.graphite.protocol }}" + batch-size = {{ .Values.config.graphite.batch_size | int64 }} + batch-pending = {{ .Values.config.graphite.batch_pending | int64 }} + batch-timeout = "{{ .Values.config.graphite.batch_timeout }}" + consistency-level = "{{ .Values.config.graphite.consistency_level }}" + separator = "{{ .Values.config.graphite.separator }}" + udp-read-buffer = {{ .Values.config.graphite.udp_read_buffer | int64 }} + {{- if .Values.config.graphite.templates }} + templates = [ + {{- range .Values.config.graphite.templates }} + {{ quote . }}, + {{- end }} + ] + {{- end }} + + # TODO: allow multiple collectd listeners with templates + + [[collectd]] + enabled = {{ .Values.config.collectd.enabled }} + bind-address = ":{{ .Values.config.collectd.bind_address }}" + database = "{{ .Values.config.collectd.database }}" + retention-policy = "{{ .Values.config.collectd.retention_policy }}" + batch-size = {{ .Values.config.collectd.batch_size | int64 }} + batch-pending = {{ .Values.config.collectd.batch_pending | int64 }} + batch-timeout = "{{ .Values.config.collectd.batch_timeout }}" + read-buffer = {{ .Values.config.collectd.read_buffer | int64 }} + typesdb = "{{ .Values.config.collectd.typesdb }}" + security-level = "{{ .Values.config.collectd.security_level }}" + auth-file = "{{ .Values.config.collectd.auth_file }}" + + # TODO: allow multiple opentsdb listeners with templates + + [[opentsdb]] + enabled = {{ .Values.config.opentsdb.enabled }} + bind-address = ":{{ .Values.config.opentsdb.bind_address }}" + database = "{{ .Values.config.opentsdb.database }}" + retention-policy = "{{ .Values.config.opentsdb.retention_policy }}" + consistency-level = "{{ .Values.config.opentsdb.consistency_level }}" + tls-enabled = {{ .Values.config.opentsdb.tls_enabled }} + certificate = "{{ .Values.config.opentsdb.certificate }}" + batch-size = {{ .Values.config.opentsdb.batch_size | int64 }} + batch-pending = {{ .Values.config.opentsdb.batch_pending | int64 }} + batch-timeout = "{{ .Values.config.opentsdb.batch_timeout }}" + log-point-errors = {{ .Values.config.opentsdb.log_point_errors }} + + # TODO: allow multiple udp listeners with templates + + [[udp]] + enabled = {{ .Values.config.udp.enabled }} + bind-address = ":{{ .Values.config.udp.bind_address }}" + database = "{{ .Values.config.udp.database }}" + retention-policy = "{{ .Values.config.udp.retention_policy }}" + batch-size = {{ .Values.config.udp.batch_size | int64 }} + batch-pending = {{ .Values.config.udp.batch_pending | int64 }} + read-buffer = {{ .Values.config.udp.read_buffer | int64 }} + batch-timeout = "{{ .Values.config.udp.batch_timeout }}" + precision = "{{ .Values.config.udp.precision }}" + + [continuous_queries] + log-enabled = {{ .Values.config.continuous_queries.log_enabled }} + enabled = {{ .Values.config.continuous_queries.enabled }} + run-interval = "{{ .Values.config.continuous_queries.run_interval }}" + + diff --git a/stable/ibm-influxdb/templates/deployment.yaml b/stable/ibm-influxdb/templates/deployment.yaml new file mode 100644 index 0000000..4a24c3b --- /dev/null +++ b/stable/ibm-influxdb/templates/deployment.yaml @@ -0,0 +1,104 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ template "influxdb.fullname" . }} + labels: + app: {{ template "influxdb.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + replicas: 1 + template: + metadata: + labels: + app: {{ template "influxdb.fullname" . }} + chart: "{{ .Chart.Name }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + spec: + containers: + - name: {{ template "influxdb.fullname" . }} + image: "{{ .Values.image.repo }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy | quote }} + resources: +{{ toYaml .Values.resources | indent 10 }} + ports: + - name: api + containerPort: {{ .Values.config.http.bind_address }} + {{ if .Values.config.admin.enabled -}} + - name: admin + containerPort: {{ .Values.config.admin.bind_address }} + {{- end }} + {{ if .Values.config.graphite.enabled -}} + - name: graphite + containerPort: {{ .Values.config.graphite.bind_address }} + {{- end }} + {{ if .Values.config.collectd.enabled -}} + - name: collectd + containerPort: {{ .Values.config.collectd.bind_address }} + {{- end }} + {{ if .Values.config.udp.enabled -}} + - name: udp + containerPort: {{ .Values.config.udp.bind_address }} + {{- end }} + {{ if .Values.config.opentsdb.enabled -}} + - name: opentsdb + containerPort: {{ .Values.config.opentsdb.bind_address }} + {{- end }} + {{ if .Values.env }} + env: +{{ toYaml .Values.env | indent 10 }} + {{- end }} + livenessProbe: + httpGet: + path: /ping + port: api + initialDelaySeconds: 30 + timeoutSeconds: 5 + readinessProbe: + httpGet: + path: /ping + port: api + initialDelaySeconds: 5 + timeoutSeconds: 1 + volumeMounts: + - name: data + mountPath: {{ .Values.config.storage_directory }} + - name: config + mountPath: /etc/influxdb + volumes: + - name: data + {{- if .Values.persistence.enabled }} + {{- if not (empty .Values.persistence.name) }} + persistentVolumeClaim: + claimName: {{ .Values.persistence.name }} + {{- else }} + persistentVolumeClaim: + claimName: {{ template "influxdb.fullname" . }} + {{- end }} + {{- else }} + emptyDir: {} + {{- end }} + - name: config + configMap: + name: {{ template "influxdb.fullname" . }} + {{- if .Values.schedulerName }} + schedulerName: "{{ .Values.schedulerName }}" + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: +{{ toYaml .Values.nodeSelector | indent 8 }} + {{- end -}} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-influxdb/templates/ingress.yaml b/stable/ibm-influxdb/templates/ingress.yaml new file mode 100644 index 0000000..089c65c --- /dev/null +++ b/stable/ibm-influxdb/templates/ingress.yaml @@ -0,0 +1,28 @@ +{{- if .Values.ingress.enabled -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ template "influxdb.fullname" . }} + labels: + app: {{ template "influxdb.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + annotations: +{{ toYaml .Values.ingress.annotations | indent 4 }} +spec: +{{- if .Values.ingress.tls }} + tls: + - hosts: + - {{ .Values.ingress.hostname | quote }} + secretName: {{ .Values.ingress.secretName }} +{{- end }} + rules: + - host: {{ .Values.ingress.hostname }} + http: + paths: + - path: / + backend: + serviceName: {{ template "influxdb.fullname" . }} + servicePort: 8086 +{{- end -}} diff --git a/stable/ibm-influxdb/templates/post-install-set-auth.yaml b/stable/ibm-influxdb/templates/post-install-set-auth.yaml new file mode 100644 index 0000000..582b44f --- /dev/null +++ b/stable/ibm-influxdb/templates/post-install-set-auth.yaml @@ -0,0 +1,44 @@ +{{- if .Values.setDefaultUser.enabled -}} +apiVersion: batch/v1 +kind: Job +metadata: + labels: + app: {{ template "influxdb.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + name: {{ template "influxdb.fullname" . }}-set-auth + annotations: + "helm.sh/hook": post-install + "helm.sh/hook-delete-policy": hook-succeeded +spec: + activeDeadlineSeconds: {{ .Values.setDefaultUser.activeDeadlineSeconds }} + template: + metadata: + labels: + app: {{ template "influxdb.fullname" . }} + release: "{{ .Release.Name }}" + spec: + containers: + - name: {{ template "influxdb.fullname" . }}-set-auth + image: "{{ .Values.setDefaultUser.image }}" + env: + - name: INFLUXDB_USER + valueFrom: + secretKeyRef: + name: {{ template "influxdb.fullname" . }}-auth + key: influxdb-user + - name: INFLUXDB_PASSWORD + valueFrom: + secretKeyRef: + name: {{ template "influxdb.fullname" . }}-auth + key: influxdb-password + args: + - "/bin/sh" + - "-c" + - | + curl -X POST http://{{ template "influxdb.fullname" . }}:{{ .Values.config.http.bind_address }}/query \ + --data-urlencode \ + "q=CREATE USER \"${INFLUXDB_USER}\" WITH PASSWORD '${INFLUXDB_PASSWORD}' {{ .Values.setDefaultUser.user.privileges }}" + restartPolicy: {{ .Values.setDefaultUser.restartPolicy }} +{{- end -}} diff --git a/stable/ibm-influxdb/templates/pvc.yaml b/stable/ibm-influxdb/templates/pvc.yaml new file mode 100644 index 0000000..94a8d7a --- /dev/null +++ b/stable/ibm-influxdb/templates/pvc.yaml @@ -0,0 +1,24 @@ +{{- if and (.Values.persistence.enabled) (not .Values.persistence.useExisting) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: "{{- if not (empty .Values.persistence.name) }}{{ .Values.persistence.name }}{{- else }}{{ template "influxdb.fullname" . }}{{- end }}" + labels: + app: "{{- if not (empty .Values.persistence.name) }}{{ .Values.persistence.name }}{{- else }}{{ template "influxdb.fullname" . }}{{- end }}" + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + accessModes: + - {{ .Values.persistence.accessMode | quote }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} +{{- if .Values.persistence.storageClass }} +{{- if (eq "-" .Values.persistence.storageClass) }} + storageClassName: "" +{{- else }} + storageClassName: "{{ .Values.persistence.storageClass }}" +{{- end }} +{{- end }} +{{- end }} diff --git a/stable/ibm-influxdb/templates/secret.yaml b/stable/ibm-influxdb/templates/secret.yaml new file mode 100644 index 0000000..703c7f0 --- /dev/null +++ b/stable/ibm-influxdb/templates/secret.yaml @@ -0,0 +1,18 @@ +{{- if .Values.setDefaultUser.enabled -}} +apiVersion: v1 +kind: Secret +metadata: + labels: + app: {{ template "influxdb.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + heritage: "{{ .Release.Service }}" + release: "{{ .Release.Name }}" + name: {{ template "influxdb.fullname" . }}-auth +data: + {{- if .Values.setDefaultUser.user.password }} + influxdb-password: {{ .Values.setDefaultUser.user.password | b64enc | quote }} + {{- else }} + influxdb-password: {{ randAlphaNum 10 | b64enc | quote }} + {{- end }} + influxdb-user: {{ .Values.setDefaultUser.user.username | b64enc | quote }} +{{- end -}} diff --git a/stable/ibm-influxdb/templates/service.yaml b/stable/ibm-influxdb/templates/service.yaml new file mode 100644 index 0000000..b44dc4d --- /dev/null +++ b/stable/ibm-influxdb/templates/service.yaml @@ -0,0 +1,62 @@ +apiVersion: v1 +kind: Service +metadata: +{{- if .Values.service.annotations }} + annotations: +{{ toYaml .Values.service.annotations | indent 4 }} +{{- end }} + name: {{ template "influxdb.fullname" . }} + labels: + app: {{ template "influxdb.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + type: {{ .Values.service.type }} + {{- if .Values.service.clusterIP }} + clusterIP: {{ .Values.service.clusterIP }} + {{- end }} + {{- if .Values.service.externalIPs }} + externalIPs: + {{ toYaml .Values.service.externalIPs | indent 4 }} + {{- end }} + {{- if .Values.service.loadBalancerIP }} + loadBalancerIP: {{ .Values.service.loadBalancerIP }} + {{- end }} + {{- if .Values.service.loadBalancerSourceRanges }} + loadBalancerSourceRanges: + {{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} + {{- end }} + ports: + {{- if .Values.config.http.enabled }} + - name: api + port: {{ .Values.config.http.bind_address }} + targetPort: {{ .Values.config.http.bind_address }} + {{- end }} + {{- if .Values.config.admin.enabled }} + - name: admin + port: {{ .Values.config.admin.bind_address }} + targetPort: {{ .Values.config.admin.bind_address }} + {{- end }} + {{- if .Values.config.graphite.enabled }} + - name: graphite + port: {{ .Values.config.graphite.bind_address }} + targetPort: {{ .Values.config.graphite.bind_address }} + {{- end }} + {{- if .Values.config.collectd.enabled }} + - name: collectd + port: {{ .Values.config.collectd.bind_address }} + targetPort: {{ .Values.config.collectd.bind_address }} + {{- end }} + {{- if .Values.config.udp.enabled }} + - name: udp + port: {{ .Values.config.udp.bind_address }} + targetPort: {{ .Values.config.udp.bind_address }} + {{- end }} + {{- if .Values.config.opentsdb.enabled }} + - name: opentsdb + port: {{ .Values.config.opentsdb.bind_address }} + targetPort: {{ .Values.config.opentsdb.bind_address }} + {{- end }} + selector: + app: {{ template "influxdb.fullname" . }} diff --git a/stable/ibm-influxdb/values-metadata.yaml b/stable/ibm-influxdb/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-influxdb/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-influxdb/values.yaml b/stable/ibm-influxdb/values.yaml new file mode 100644 index 0000000..10697b1 --- /dev/null +++ b/stable/ibm-influxdb/values.yaml @@ -0,0 +1,234 @@ +## influxdb image version +## ref: https://hub.docker.com/r/library/influxdb/tags/ +image: + repo: "ibmcom/influxdb-ppc64le" + tag: "0.10" + pullPolicy: IfNotPresent + +## Specify a service type +## NodePort is default +## ref: http://kubernetes.io/docs/user-guide/services/ +## +service: + ## Add annotations to service + # annotations: {} + type: ClusterIP + ## Add IP Cluster + # clusterIP: "" + ## Add external IPs that route to one or more cluster nodes + # externalIPs: [] + ## Specify LoadBalancer IP (only allow on some cloud provider) + # loadBalancerIP: "" + ## Allow source IPs to access on service (if empty, any access allow) + # loadBalancerSourceRanges: [] + +## Persist data to a persistent volume +## +persistence: + enabled: false + ## If true will use an existing PVC instead of creating one + # useExisting: false + ## Name of existing PVC to be used in the influx deployment + # name: + ## influxdb data Persistent Volume Storage Class + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + ## + # storageClass: "-" + accessMode: ReadWriteOnce + size: 8Gi + +node: "ppc64le" +## Create default user through Kubernetes job +## Defaults indicated below +## +setDefaultUser: + enabled: false + + ## Image of the container used for job + ## Default: appropriate/curl:latest + ## + image: appropriate/curl:latest + + ## Deadline for job so it does not retry forever. + ## Default: activeDeadline: 300 + ## + ##activeDeadline: 300 + + ## Restart policy for job + ## Default: OnFailure + restartPolicy: OnFailure + + user: + + ## The user name + ## Default: "admin" + username: "admin" + + ## User password + ## single quotes must be escaped (\') + ## Default: (Randomly generated 10 characters of AlphaNum) + # password: + + ## User privileges + ## Default: "WITH ALL PRIVILEGES" + privileges: "WITH ALL PRIVILEGES" + +## Configure resource requests and limits +## ref: http://kubernetes.io/docs/user-guide/compute-resources/ +resources: + requests: + memory: 256Mi + cpu: 0.1 + limits: + memory: 16Gi + cpu: 8 + +ingress: + enabled: false + tls: false + # secretName: my-tls-cert # only needed if tls above is true + hostname: influxdb.foobar.com + annotations: + # kubernetes.io/ingress.class: "nginx" + # kubernetes.io/tls-acme: "true" + +## Use an alternate scheduler, e.g. "stork". +## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ +## +# schedulerName: + +## Node labels for pod assignment +## Ref: https://kubernetes.io/docs/user-guide/node-selection/ +## +nodeSelector: {} + +## The InfluxDB image uses several environment variables to automatically +## configure certain parts of the server. +## Ref: https://hub.docker.com/_/influxdb/ +env: + # - name: INFLUXDB_DB + # value: "demo" + +## Change InfluxDB configuration parameters below: +## Defaults are indicated +## ref: https://docs.influxdata.com/influxdb/v1.1/administration/config/ +config: + reporting_disabled: false + bind_address: 8088 + storage_directory: /var/lib/influxdb + meta: + retention_autocreate: true + logging_enabled: true + data: + query_log_enabled: true + cache_max_memory_size: 1073741824 + cache_snapshot_memory_size: 26214400 + cache_snapshot_write_cold_duration: 10m0s + compact_full_write_cold_duration: 4h0m0s + max_series_per_database: 1000000 + max_values_per_tag: 100000 + trace_logging_enabled: false + coordinator: + write_timeout: 10s + max_concurrent_queries: 0 + query_timeout: 0s + log_queries_after: 0s + max_select_point: 0 + max_select_series: 0 + max_select_buckets: 0 + retention: + enabled: true + check_interval: 30m0s + shard_precreation: + enabled: true + check_interval: 10m0s + advance_period: 30m0s + admin: + enabled: false + bind_address: 8083 + https_enabled: false + https_certificate: /etc/ssl/influxdb.pem + monitor: + store_enabled: true + store_database: _internal + store_interval: 10s + subscriber: + enabled: true + http_timeout: 30s + insecure_skip_verify: false + ca_certs: "" + write_concurrency: 40 + write_buffer_size: 1000 + http: + enabled: true + bind_address: 8086 + auth_enabled: false + log_enabled: true + write_tracing: false + pprof_enabled: true + https_enabled: false + https_certificate: /etc/ssl/influxdb.pem + https_private_key: "" + max_row_limit: 10000 + max_connection_limit: 0 + shared_secret: "beetlejuicebeetlejuicebeetlejuice" + realm: InfluxDB + unix_socket_enabled: false + bind_socket: /var/run/influxdb.sock + graphite: + enabled: false + bind_address: 2003 + database: graphite + retention_policy: autogen + protocol: tcp + batch_size: 5000 + batch_pending: 10 + batch_timeout: 1s + consistency_level: one + separator: . + udp_read_buffer: 0 + # Uncomment to define graphite templates + # templates: + # - "graphite.metric.*.*.* measurement.run" + collectd: + enabled: false + bind_address: 25826 + database: collectd + retention_policy: autogen + batch_size: 5000 + batch_pending: 10 + batch_timeout: 10s + read_buffer: 0 + typesdb: /usr/share/collectd/types.db + security_level: none + auth_file: /etc/collectd/auth_file + opentsdb: + enabled: false + bind_address: 4242 + database: opentsdb + retention_policy: autogen + consistency_level: one + tls_enabled: false + certificate: /etc/ssl/influxdb.pem + batch_size: 1000 + batch_pending: 5 + batch_timeout: 1s + log_point_errors: true + udp: + enabled: false + bind_address: 8089 + database: udp + retention_policy: autogen + batch_size: 5000 + batch_pending: 10 + read_buffer: 0 + batch_timeout: 1s + precision: "ns" + continuous_queries: + log_enabled: true + enabled: true + run_interval: 1s diff --git a/stable/ibm-metrics-server/.helmignore b/stable/ibm-metrics-server/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-metrics-server/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-metrics-server/Chart.yaml b/stable/ibm-metrics-server/Chart.yaml new file mode 100755 index 0000000..30ea979 --- /dev/null +++ b/stable/ibm-metrics-server/Chart.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +appVersion: 0.2.1 +description: Metrics Server is a cluster-wide aggregator of resource usage data. +home: https://github.com/kubernetes-incubator/metrics-server +keywords: +- metrics-server +- Limited +- ppc64le +- Tools +- ICP + +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +name: ibm-metrics-server +sources: +- https://github.com/kubernetes-incubator/metrics-server +version: 0.0.2 +tillerVersion: '>=2.7.2' diff --git a/stable/ibm-metrics-server/LICENSE b/stable/ibm-metrics-server/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-metrics-server/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-metrics-server/README.md b/stable/ibm-metrics-server/README.md new file mode 100755 index 0000000..4b9ff91 --- /dev/null +++ b/stable/ibm-metrics-server/README.md @@ -0,0 +1,34 @@ +## Introduction +# metric-server + +Metrics Server is a cluster-wide aggregator of resource usage data. + +## Note +The original work for this helm chart is present @ [Helm Charts]( https://github.com/helm/charts) Based on the [metrics-server]( https://github.com/helm/charts/tree/master/stable/metrics-server) chart + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Chart Details +The Chart is used to deploy Metrics Server. + +## Prerequisites +-Tiller 2.6.0 or later + +## Installing the Chart +To install the chart +- helm install --name stable/ibm-metrics-server +## Configuration + +Parameter | Description | Default +--- | --- | --- +`rbac.create` | Enable Role-based authentication | `true` +`serviceAccount.create` | If `true`, create a new service account | `true` +`serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the fullname template | `` +`apiService.create` | Create the v1beta1.metrics.k8s.io API service | `true` +`image.repository` | Image repository | `gcr.io/google_containers/metrics-server-amd64` +`image.tag` | Image tag | `v0.2.1` +`image.pullPolicy` | Image pull policy | `IfNotPresent` + +## Limitations + diff --git a/stable/ibm-metrics-server/RELEASENOTES.md b/stable/ibm-metrics-server/RELEASENOTES.md new file mode 100755 index 0000000..acb2b55 --- /dev/null +++ b/stable/ibm-metrics-server/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.0.2 | September 7, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-metrics-server/ci/ci-values.yaml b/stable/ibm-metrics-server/ci/ci-values.yaml new file mode 100755 index 0000000..fa9fa63 --- /dev/null +++ b/stable/ibm-metrics-server/ci/ci-values.yaml @@ -0,0 +1,5 @@ +# CI is running on GKE, which already ships metrics-server. This cause +# conflicts on the apiService resource. + +apiService: + create: false \ No newline at end of file diff --git a/stable/ibm-metrics-server/templates/NOTES.txt b/stable/ibm-metrics-server/templates/NOTES.txt new file mode 100755 index 0000000..1034c12 --- /dev/null +++ b/stable/ibm-metrics-server/templates/NOTES.txt @@ -0,0 +1,11 @@ +The metric server has been deployed. +{{ if .Values.apiService.create }} +In a few minutes you should be able to list metrics using the following +command: + + kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" +{{ else }} +NOTE: You have disabled the API service creation for this release. The metrics +API will not work with this release unless you configure the metrics API +service outside of this Helm chart. +{{- end -}} diff --git a/stable/ibm-metrics-server/templates/_helpers.tpl b/stable/ibm-metrics-server/templates/_helpers.tpl new file mode 100755 index 0000000..39105d1 --- /dev/null +++ b/stable/ibm-metrics-server/templates/_helpers.tpl @@ -0,0 +1,51 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "metrics-server.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 "metrics-server.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "metrics-server.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a service name that defaults to app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "metrics-server.service.fullname" -}} +{{- .Values.service.nameOverride | default .Chart.Name }} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "metrics-server.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (include "metrics-server.fullname" .) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} diff --git a/stable/ibm-metrics-server/templates/auth-delegator-crb.yaml b/stable/ibm-metrics-server/templates/auth-delegator-crb.yaml new file mode 100755 index 0000000..e1db383 --- /dev/null +++ b/stable/ibm-metrics-server/templates/auth-delegator-crb.yaml @@ -0,0 +1,20 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "metrics-server.fullname" . }}:system:auth-delegator + namespace: kube-system + labels: + app: {{ template "metrics-server.name" . }} + chart: {{ template "metrics-server.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:auth-delegator +subjects: + - kind: ServiceAccount + name: {{ template "metrics-server.fullname" . }} + namespace: {{ .Release.Namespace }} +{{- end -}} diff --git a/stable/ibm-metrics-server/templates/cluster-role.yaml b/stable/ibm-metrics-server/templates/cluster-role.yaml new file mode 100755 index 0000000..d79fb62 --- /dev/null +++ b/stable/ibm-metrics-server/templates/cluster-role.yaml @@ -0,0 +1,22 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: system:{{ template "metrics-server.fullname" . }} + labels: + app: {{ template "metrics-server.name" . }} + chart: {{ template "metrics-server.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +rules: + - apiGroups: + - "" + resources: + - pods + - nodes + - namespaces + verbs: + - get + - list + - watch +{{- end -}} diff --git a/stable/ibm-metrics-server/templates/metric-server-service.yaml b/stable/ibm-metrics-server/templates/metric-server-service.yaml new file mode 100755 index 0000000..ddf03e1 --- /dev/null +++ b/stable/ibm-metrics-server/templates/metric-server-service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "metrics-server.fullname" . }} + labels: + app: {{ template "metrics-server.name" . }} + chart: {{ template "metrics-server.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + ports: + - port: 443 + protocol: TCP + targetPort: 443 + selector: + app: {{ template "metrics-server.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-metrics-server/templates/metrics-api-service.yaml b/stable/ibm-metrics-server/templates/metrics-api-service.yaml new file mode 100755 index 0000000..88e0065 --- /dev/null +++ b/stable/ibm-metrics-server/templates/metrics-api-service.yaml @@ -0,0 +1,20 @@ +{{- if .Values.apiService.create -}} +apiVersion: apiregistration.k8s.io/v1beta1 +kind: APIService +metadata: + name: v1beta1.metrics.k8s.io + labels: + app: {{ template "metrics-server.name" . }} + chart: {{ template "metrics-server.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + service: + name: {{ template "metrics-server.fullname" . }} + namespace: {{ .Release.Namespace }} + group: metrics.k8s.io + version: v1beta1 + insecureSkipTLSVerify: true + groupPriorityMinimum: 100 + versionPriority: 100 +{{- end -}} \ No newline at end of file diff --git a/stable/ibm-metrics-server/templates/metrics-server-crb.yaml b/stable/ibm-metrics-server/templates/metrics-server-crb.yaml new file mode 100755 index 0000000..18ac6f3 --- /dev/null +++ b/stable/ibm-metrics-server/templates/metrics-server-crb.yaml @@ -0,0 +1,19 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: system:{{ template "metrics-server.fullname" . }} + labels: + app: {{ template "metrics-server.name" . }} + chart: {{ template "metrics-server.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:{{ template "metrics-server.fullname" . }} +subjects: + - kind: ServiceAccount + name: {{ template "metrics-server.fullname" . }} + namespace: {{ .Release.Namespace }} +{{- end -}} diff --git a/stable/ibm-metrics-server/templates/metrics-server-deployment.yaml b/stable/ibm-metrics-server/templates/metrics-server-deployment.yaml new file mode 100755 index 0000000..56771d3 --- /dev/null +++ b/stable/ibm-metrics-server/templates/metrics-server-deployment.yaml @@ -0,0 +1,42 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "metrics-server.fullname" . }} + labels: + app: {{ template "metrics-server.name" . }} + chart: {{ template "metrics-server.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + selector: + matchLabels: + app: {{ template "metrics-server.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "metrics-server.name" . }} + release: {{ .Release.Name }} + chart: {{ template "metrics-server.chart" . }} + heritage: {{ .Release.Service }} + spec: + serviceAccountName: {{ template "metrics-server.serviceAccountName" . }} + containers: + - name: metrics-server + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: + - /metrics-server + - --source=kubernetes.summary_api:https://kubernetes.default.svc?kubeletHttps=true&kubeletPort=10250&insecure=true +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-metrics-server/templates/metrics-server-serviceaccount.yaml b/stable/ibm-metrics-server/templates/metrics-server-serviceaccount.yaml new file mode 100755 index 0000000..5fbedb4 --- /dev/null +++ b/stable/ibm-metrics-server/templates/metrics-server-serviceaccount.yaml @@ -0,0 +1,11 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "metrics-server.fullname" . }} + labels: + app: {{ template "metrics-server.name" . }} + chart: {{ template "metrics-server.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- end -}} diff --git a/stable/ibm-metrics-server/templates/role-binding.yaml b/stable/ibm-metrics-server/templates/role-binding.yaml new file mode 100755 index 0000000..2585878 --- /dev/null +++ b/stable/ibm-metrics-server/templates/role-binding.yaml @@ -0,0 +1,20 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: RoleBinding +metadata: + name: {{ template "metrics-server.fullname" . }}-auth-reader + namespace: kube-system + labels: + app: {{ template "metrics-server.name" . }} + chart: {{ template "metrics-server.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: extension-apiserver-authentication-reader +subjects: + - kind: ServiceAccount + name: {{ template "metrics-server.fullname" . }} + namespace: {{ .Release.Namespace }} +{{- end -}} \ No newline at end of file diff --git a/stable/ibm-metrics-server/values-metadata.yaml b/stable/ibm-metrics-server/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-metrics-server/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-metrics-server/values.yaml b/stable/ibm-metrics-server/values.yaml new file mode 100755 index 0000000..cde1002 --- /dev/null +++ b/stable/ibm-metrics-server/values.yaml @@ -0,0 +1,25 @@ +rbac: + # Specifies whether RBAC resources should be created + create: true + +serviceAccount: + # Specifies whether a ServiceAccount should be created + create: true + # The name of the ServiceAccount to use. + # If not set and create is true, a name is generated using the fullname template + name: + +apiService: + # Specifies if the v1beta1.metrics.k8s.io API service should be created. + # + # You typically want this enabled! If you disable API service creation you have to + # manage it outside of this chart for e.g horizontal pod autoscaling to + # work with this release. + create: true + +node: "ppc64le" + +image: + repository: ibmcom/metrics-server-ppc64le + tag: v0.2.1 + pullPolicy: IfNotPresent diff --git a/stable/ibm-nginx-ingress/.helmignore b/stable/ibm-nginx-ingress/.helmignore new file mode 100644 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-nginx-ingress/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-nginx-ingress/Chart.yaml b/stable/ibm-nginx-ingress/Chart.yaml new file mode 100644 index 0000000..5455772 --- /dev/null +++ b/stable/ibm-nginx-ingress/Chart.yaml @@ -0,0 +1,20 @@ +name: ibm-nginx-ingress +version: 0.28.1 +appVersion: 0.19.0 +home: https://github.com/kubernetes/ingress-nginx +description: An nginx Ingress controller that uses ConfigMap to store the nginx configuration. +icon: https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Nginx_logo.svg/500px-Nginx_logo.svg.png +keywords: + - ingress + - nginx + - Limited + - ppc64le + - Tools + - ICP +sources: + - https://github.com/kubernetes/ingress-nginx +maintainers: + - name: IBM ISV Team + email: smohite@us.ibm.com +engine: gotpl +tillerVersion: '>=2.7.2' diff --git a/stable/ibm-nginx-ingress/LICENSE b/stable/ibm-nginx-ingress/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-nginx-ingress/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-nginx-ingress/README.md b/stable/ibm-nginx-ingress/README.md new file mode 100644 index 0000000..fea656b --- /dev/null +++ b/stable/ibm-nginx-ingress/README.md @@ -0,0 +1,263 @@ +# nginx-ingress + +[nginx-ingress](https://github.com/kubernetes/ingress-nginx) is an Ingress controller that uses ConfigMap to store the nginx configuration. + +To use, add the `kubernetes.io/ingress.class: nginx` annotation to your Ingress resources. + +## Note +The original work for this helm chart is present @ [Helm Charts]( https://github.com/helm/charts) Based on the [nginx-ingress]( https://github.com/helm/charts/tree/master/stable/nginx-ingress) chart + +## TL;DR; + +```console +$ helm install stable/nginx-ingress +``` + +## Introduction + +This chart bootstraps an nginx-ingress deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + +## Chart Details + +This chart bootstraps an nginx-ingress + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Prerequisites + - Kubernetes 1.6+ + - Tiller 2.6.0 or later + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/nginx-ingress +``` + +The command deploys nginx-ingress on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation. + +> **Tip**: List all releases using `helm list` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Configuration + +The following table lists the configurable parameters of the nginx-ingress chart and their default values. + +Parameter | Description | Default +--- | --- | --- +`controller.name` | name of the controller component | `controller` +`controller.image.repository` | controller container image repository | `quay.io/kubernetes-ingress-controller/nginx-ingress-controller` +`controller.image.tag` | controller container image tag | `0.18.0` +`controller.image.pullPolicy` | controller container image pull policy | `IfNotPresent` +`controller.config` | nginx ConfigMap entries | none +`controller.hostNetwork` | If the nginx deployment / daemonset should run on the host's network namespace. Do not set this when `controller.service.externalIPs` is set and `kube-proxy` is used as there will be a port-conflict for port `80` | false +`controller.defaultBackendService` | default 404 backend service; required only if `defaultBackend.enabled = false` | `""` +`controller.electionID` | election ID to use for the status update | `ingress-controller-leader` +`controller.extraEnvs` | any additional environment variables to set in the pods | `{}` +`controller.extraContainers` | Sidecar containers to add to the controller pod. See [LemonLDAP::NG controller](https://github.com/lemonldap-ng-controller/lemonldap-ng-controller) as example | `{}` +`controller.extraVolumeMounts` | Additional volumeMounts to the controller main container | `{}` +`controller.extraVolumes` | Additional volumes to the controller pod | `{}` +`controller.extraInitContainers` | Containers, which are run before the app containers are started | `[]` +`controller.ingressClass` | name of the ingress class to route through this controller | `nginx` +`controller.scope.enabled` | limit the scope of the ingress controller | `false` (watch all namespaces) +`controller.scope.namespace` | namespace to watch for ingress | `""` (use the release namespace) +`controller.extraArgs` | Additional controller container arguments | `{}` +`controller.kind` | install as Deployment or DaemonSet | `Deployment` +`controller.daemonset.useHostPort` | If `controller.kind` is `DaemonSet`, this will enable `hostPort` for TCP/80 and TCP/443 | false +`controller.daemonset.hostPorts.http` | If `controller.daemonset.useHostPort` is `true` and this is non-empty, it sets the hostPort | `"80"` +`controller.daemonset.hostPorts.https` | If `controller.daemonset.useHostPort` is `true` and this is non-empty, it sets the hostPort | `"443"` +`controller.tolerations` | node taints to tolerate (requires Kubernetes >=1.6) | `[]` +`controller.affinity` | node/pod affinities (requires Kubernetes >=1.6) | `{}` +`controller.minReadySeconds` | how many seconds a pod needs to be ready before killing the next, during update | `0` +`controller.nodeSelector` | node labels for pod assignment | `{}` +`controller.podAnnotations` | annotations to be added to pods | `{}` +`controller.podLabels` | labels to add to the pod container metadata | `{}` +`controller.replicaCount` | desired number of controller pods | `1` +`controller.minAvailable` | minimum number of available controller pods for PodDisruptionBudget | `1` +`controller.resources` | controller pod resource requests & limits | `{}` +`controller.priorityClassName` | controller priorityClassName | `nil` +`controller.lifecycle` | controller pod lifecycle hooks | `{}` +`controller.service.annotations` | annotations for controller service | `{}` +`controller.service.labels` | labels for controller service | `{}` +`controller.publishService.enabled` | if true, the controller will set the endpoint records on the ingress objects to reflect those on the service | `false` +`controller.publishService.pathOverride` | override of the default publish-service name | `""` +`controller.service.clusterIP` | internal controller cluster service IP | `""` +`controller.service.externalIPs` | controller service external IP addresses. Do not set this when `controller.hostNetwork` is set to `true` and `kube-proxy` is used as there will be a port-conflict for port `80` | `[]` +`controller.service.externalTrafficPolicy` | If `controller.service.type` is `NodePort` or `LoadBalancer`, set this to `Local` to enable [source IP preservation](https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typenodeport) | `"Cluster"` +`controller.service.healthCheckNodePort` | If `controller.service.type` is `NodePort` or `LoadBalancer` and `controller.service.externalTrafficPolicy` is set to `Local`, set this to [the managed health-check port the kube-proxy will expose](https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typenodeport). If blank, a random port in the `NodePort` range will be assigned | `""` +`controller.service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""` +`controller.service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to load balancer (if supported) | `[]` +`controller.service.enableHttp` | if port 80 should be opened for service | `true` +`controller.service.enableHttps` | if port 443 should be opened for service | `true` +`controller.service.targetPorts.http` | Sets the targetPort that maps to the Ingress' port 80 | `80` +`controller.service.targetPorts.https` | Sets the targetPort that maps to the Ingress' port 443 | `443` +`controller.service.type` | type of controller service to create | `LoadBalancer` +`controller.service.nodePorts.http` | If `controller.service.type` is `NodePort` and this is non-empty, it sets the nodePort that maps to the Ingress' port 80 | `""` +`controller.service.nodePorts.https` | If `controller.service.type` is `NodePort` and this is non-empty, it sets the nodePort that maps to the Ingress' port 443 | `""` +`controller.livenessProbe.initialDelaySeconds` | Delay before liveness probe is initiated | 10 +`controller.livenessProbe.periodSeconds` | How often to perform the probe | 10 +`controller.livenessProbe.timeoutSeconds` | When the probe times out | 5 +`controller.livenessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. | 1 +`controller.livenessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | 3 +`controller.livenessProbe.port` | The port number that the liveness probe will listen on. | 10254 +`controller.readinessProbe.initialDelaySeconds` | Delay before readiness probe is initiated | 10 +`controller.readinessProbe.periodSeconds` | How often to perform the probe | 10 +`controller.readinessProbe.timeoutSeconds` | When the probe times out | 1 +`controller.readinessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. | 1 +`controller.readinessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | 3 +`controller.readinessProbe.port` | The port number that the readiness probe will listen on. | 10254 +`controller.stats.enabled` | if `true`, enable "vts-status" page | `false` +`controller.stats.service.annotations` | annotations for controller stats service | `{}` +`controller.stats.service.clusterIP` | internal controller stats cluster service IP | `""` +`controller.stats.service.externalIPs` | controller service stats external IP addresses | `[]` +`controller.stats.service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""` +`controller.stats.service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to load balancer (if supported) | `[]` +`controller.stats.service.type` | type of controller stats service to create | `ClusterIP` +`controller.metrics.enabled` | if `true`, enable Prometheus metrics (`controller.stats.enabled` must be `true` as well) | `false` +`controller.metrics.service.annotations` | annotations for Prometheus metrics service | `{}` +`controller.metrics.service.clusterIP` | cluster IP address to assign to service | `""` +`controller.metrics.service.externalIPs` | Prometheus metrics service external IP addresses | `[]` +`controller.metrics.service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""` +`controller.metrics.service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to load balancer (if supported) | `[]` +`controller.metrics.service.servicePort` | Prometheus metrics service port | `9913` +`controller.metrics.service.type` | type of Prometheus metrics service to create | `ClusterIP` +`controller.customTemplate.configMapName` | configMap containing a custom nginx template | `""` +`controller.customTemplate.configMapKey` | configMap key containing the nginx template | `""` +`controller.headers` | configMap key:value pairs containing the [custom headers](https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/customization/custom-headers) for Nginx | `{}` +`controller.updateStrategy` | allows setting of RollingUpdate strategy | `{}` +`defaultBackend.enabled` | If false, controller.defaultBackendService must be provided | `true` +`defaultBackend.name` | name of the default backend component | `default-backend` +`defaultBackend.image.repository` | default backend container image repository | `k8s.gcr.io/defaultbackend` +`defaultBackend.image.tag` | default backend container image tag | `1.4` +`defaultBackend.image.pullPolicy` | default backend container image pull policy | `IfNotPresent` +`defaultBackend.extraArgs` | Additional default backend container arguments | `{}` +`defaultBackend.port` | Http port number | `8080` +`defaultBackend.tolerations` | node taints to tolerate (requires Kubernetes >=1.6) | `[]` +`defaultBackend.affinity` | node/pod affinities (requires Kubernetes >=1.6) | `{}` +`defaultBackend.nodeSelector` | node labels for pod assignment | `{}` +`defaultBackend.podAnnotations` | annotations to be added to pods | `{}` +`defaultBackend.podLabels` | labels to add to the pod container metadata | `{}` +`defaultBackend.replicaCount` | desired number of default backend pods | `1` +`defaultBackend.minAvailable` | minimum number of available default backend pods for PodDisruptionBudget | `1` +`defaultBackend.resources` | default backend pod resource requests & limits | `{}` +`defaultBackend.priorityClassName` | default backend priorityClassName | `nil` +`defaultBackend.service.annotations` | annotations for default backend service | `{}` +`defaultBackend.service.clusterIP` | internal default backend cluster service IP | `""` +`defaultBackend.service.externalIPs` | default backend service external IP addresses | `[]` +`defaultBackend.service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""` +`defaultBackend.service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to load balancer (if supported) | `[]` +`defaultBackend.service.type` | type of default backend service to create | `ClusterIP` +`imagePullSecrets` | name of Secret resource containing private registry credentials | `nil` +`rbac.create` | if `true`, create & use RBAC resources | `true` +`podSecurityPolicy.enabled` | if `true`, create & use Pod Security Policy resources | `false` +`serviceAccount.create` | if `true`, create a service account | `` +`serviceAccount.name` | The name of the service account to use. If not set and `create` is `true`, a name is generated using the fullname template. | `` +`revisionHistoryLimit` | The number of old history to retain to allow rollback. | `10` +`tcp` | TCP service key:value pairs | `{}` +`udp` | UDP service key:value pairs | `{}` + +```console +$ helm install stable/nginx-ingress --name my-release \ + --set controller.stats.enabled=true +``` + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```console +$ helm install stable/nginx-ingress --name my-release -f values.yaml +``` + +A useful trick to debug issues with ingress is to increase the logLevel +as described [here](https://github.com/kubernetes/ingress-nginx/blob/master/docs/troubleshooting.md#debug) + +```console +$ helm install stable/nginx-ingress --set controller.extraArgs.v=2 +``` + +## PodDisruptionBudget +Note that the PodDisruptionBudget resource will only be defined if the replicaCount is greater than one, +else it would make it impossible to evacuate a node. See [gh issue #7127](https://github.com/helm/charts/issues/7127) for more info. + +## Prometheus Metrics + +The Nginx ingress controller can export Prometheus metrics. In order for this to work, the VTS dashboard must be enabled as well. + +```console +$ helm install stable/nginx-ingress --name my-release \ + --set controller.stats.enabled=true \ + --set controller.metrics.enabled=true +``` + +You can add Prometheus annotations to the metrics service using `controller.metrics.service.annotations`. Alternatively, if you use the Prometheus Operator, you need to create a ServiceMonitor as follows: + +```yaml +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: nginx-ingress-service-monitor +spec: + jobLabel: nginx-ingress + selector: + matchLabels: + app: nginx-ingress + release: + namespaceSelector: + matchNames: + - + endpoints: + - port: metrics + interval: 30s +``` +> **Tip**: You can use the default [values.yaml](values.yaml) + +## ExternalDNS Service configuration + +Add an [ExternalDNS](https://github.com/kubernetes-incubator/external-dns) annotation to the LoadBalancer service: + +```yaml +annotations: + external-dns.alpha.kubernetes.io/hostname: kubernetes-example.com. +``` + +## AWS L7 ELB with SSL Termination + +Annotate the controller as shown in the [nginx-ingress l7 patch](https://github.com/kubernetes/ingress-nginx/blob/master/deploy/provider/aws/service-l7.yaml): + +```yaml +controller: + service: + targetPorts: + http: http + https: http + annotations: + service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:XX-XXXX-X:XXXXXXXXX:certificate/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX + service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http" + service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https" + service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '3600' +``` + +## AWS route53-mapper + +To configure the LoadBalancer service with the [route53-mapper addon](https://github.com/kubernetes/kops/tree/master/addons/route53-mapper), add the `domainName` annotation and `dns` label: + +```yaml +controller: + service: + labels: + dns: "route53" + annotations: + domainName: "kubernetes-example.com" +``` + +## Limitations diff --git a/stable/ibm-nginx-ingress/RELEASENOTES.md b/stable/ibm-nginx-ingress/RELEASENOTES.md new file mode 100755 index 0000000..3e1fea2 --- /dev/null +++ b/stable/ibm-nginx-ingress/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.28.1 | September 7, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-nginx-ingress/ci/psp-values.yaml b/stable/ibm-nginx-ingress/ci/psp-values.yaml new file mode 100644 index 0000000..7aae860 --- /dev/null +++ b/stable/ibm-nginx-ingress/ci/psp-values.yaml @@ -0,0 +1,2 @@ +podSecurityPolicy: + enabled: true diff --git a/stable/ibm-nginx-ingress/templates/NOTES.txt b/stable/ibm-nginx-ingress/templates/NOTES.txt new file mode 100644 index 0000000..2b73f87 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/NOTES.txt @@ -0,0 +1,64 @@ +The nginx-ingress controller has been installed. + +{{- if contains "NodePort" .Values.controller.service.type }} +Get the application URL by running these commands: + +{{- if (not (empty .Values.controller.service.nodePorts.http)) }} + export HTTP_NODE_PORT={{ .Values.controller.service.nodePorts.http }} +{{- else }} + export HTTP_NODE_PORT=$(kubectl --namespace {{ .Release.Namespace }} get services -o jsonpath="{.spec.ports[0].nodePort}" {{ template "nginx-ingress.controller.fullname" . }}) +{{- end }} +{{- if (not (empty .Values.controller.service.nodePorts.https)) }} + export HTTPS_NODE_PORT={{ .Values.controller.service.nodePorts.https }} +{{- else }} + export HTTPS_NODE_PORT=$(kubectl --namespace {{ .Release.Namespace }} get services -o jsonpath="{.spec.ports[1].nodePort}" {{ template "nginx-ingress.controller.fullname" . }}) +{{- end }} + export NODE_IP=$(kubectl --namespace {{ .Release.Namespace }} get nodes -o jsonpath="{.items[0].status.addresses[1].address}") + + echo "Visit http://$NODE_IP:$HTTP_NODE_PORT to access your application via HTTP." + echo "Visit https://$NODE_IP:$HTTPS_NODE_PORT to access your application via HTTPS." +{{- else if contains "LoadBalancer" .Values.controller.service.type }} +It may take a few minutes for the LoadBalancer IP to be available. +You can watch the status by running 'kubectl --namespace {{ .Release.Namespace }} get services -o wide -w {{ template "nginx-ingress.controller.fullname" . }}' +{{- else if contains "ClusterIP" .Values.controller.service.type }} +Get the application URL by running these commands: + export POD_NAME=$(kubectl --namespace {{ .Release.Namespace }} get pods -o jsonpath="{.items[0].metadata.name}" -l "app={{ template "nginx-ingress.name" . }},component={{ .Values.controller.name }},release={{ .Release.Name }}") + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 + echo "Visit http://127.0.0.1:8080 to access your application." +{{- end }} + +An example Ingress that makes use of the controller: + + apiVersion: extensions/v1beta1 + kind: Ingress + metadata: + annotations: + kubernetes.io/ingress.class: {{ .Values.controller.ingressClass }} + name: example + namespace: foo + spec: + rules: + - host: www.example.com + http: + paths: + - backend: + serviceName: exampleService + servicePort: 80 + path: / + # This section is only required if TLS is to be enabled for the Ingress + tls: + - hosts: + - www.example.com + secretName: example-tls + +If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided: + + apiVersion: v1 + kind: Secret + metadata: + name: example-tls + namespace: foo + data: + tls.crt: + tls.key: + type: kubernetes.io/tls diff --git a/stable/ibm-nginx-ingress/templates/_helpers.tpl b/stable/ibm-nginx-ingress/templates/_helpers.tpl new file mode 100644 index 0000000..c2ba892 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/_helpers.tpl @@ -0,0 +1,72 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "nginx-ingress.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). +*/}} +{{- define "nginx-ingress.fullname" -}} +{{- $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 -}} + +{{/* +Create a default fully qualified controller name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "nginx-ingress.controller.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- printf "%s-%s" .Release.Name .Values.controller.name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s-%s" .Release.Name $name .Values.controller.name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} + +{{/* +Construct the path for the publish-service. + +By convention this will simply use the / to match the name of the +service generated. + +Users can provide an override for an explicit service they want bound via `.Values.controller.publishService.pathOverride` + +*/}} +{{- define "nginx-ingress.controller.publishServicePath" -}} +{{- $defServiceName := printf "%s/%s" .Release.Namespace (include "nginx-ingress.controller.fullname" .) -}} +{{- $servicePath := default $defServiceName .Values.controller.publishService.pathOverride }} +{{- print $servicePath | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified default backend name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "nginx-ingress.defaultBackend.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- printf "%s-%s" .Release.Name .Values.defaultBackend.name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s-%s" .Release.Name $name .Values.defaultBackend.name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "nginx-ingress.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (include "nginx-ingress.fullname" .) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} diff --git a/stable/ibm-nginx-ingress/templates/clusterrole.yaml b/stable/ibm-nginx-ingress/templates/clusterrole.yaml new file mode 100644 index 0000000..ec8de05 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/clusterrole.yaml @@ -0,0 +1,69 @@ +{{- if and .Values.rbac.create (not .Values.controller.scope.enabled) -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRole +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.fullname" . }} +rules: + - apiGroups: + - "" + resources: + - configmaps + - endpoints + - nodes + - pods + - secrets + verbs: + - list + - watch +{{- if and .Values.controller.scope.enabled .Values.controller.scope.namespace }} + - apiGroups: + - "" + resources: + - namespaces + resourceNames: + - "{{ .Values.controller.scope.namespace }}" + verbs: + - get +{{- end }} + - apiGroups: + - "" + resources: + - nodes + verbs: + - get + - apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - update + - watch + - apiGroups: + - extensions + resources: + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - extensions + resources: + - ingresses/status + verbs: + - update +{{- end -}} diff --git a/stable/ibm-nginx-ingress/templates/clusterrolebinding.yaml b/stable/ibm-nginx-ingress/templates/clusterrolebinding.yaml new file mode 100644 index 0000000..080d948 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/clusterrolebinding.yaml @@ -0,0 +1,19 @@ +{{- if and .Values.rbac.create (not .Values.controller.scope.enabled) -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.fullname" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "nginx-ingress.fullname" . }} +subjects: + - kind: ServiceAccount + name: {{ template "nginx-ingress.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +{{- end -}} diff --git a/stable/ibm-nginx-ingress/templates/controller-configmap.yaml b/stable/ibm-nginx-ingress/templates/controller-configmap.yaml new file mode 100644 index 0000000..ef9372f --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/controller-configmap.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.controller.fullname" . }} +data: + enable-vts-status: "{{ .Values.controller.stats.enabled }}" +{{- if .Values.controller.headers }} + proxy-set-headers: {{ .Release.Namespace }}/{{ template "nginx-ingress.fullname" . }}-custom-headers +{{- end }} +{{- if .Values.controller.config }} +{{ toYaml .Values.controller.config | indent 2 }} +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/controller-daemonset.yaml b/stable/ibm-nginx-ingress/templates/controller-daemonset.yaml new file mode 100644 index 0000000..b945f4f --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/controller-daemonset.yaml @@ -0,0 +1,205 @@ +{{- if eq .Values.controller.kind "DaemonSet" }} +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.controller.fullname" . }} +spec: + revisionHistoryLimit: {{ .Values.revisionHistoryLimit }} + updateStrategy: +{{ toYaml .Values.controller.updateStrategy | indent 4 }} + minReadySeconds: {{ .Values.controller.minReadySeconds }} + template: + metadata: + annotations: + checksum/config: {{ include (print $.Template.BasePath "/controller-configmap.yaml") . | sha256sum }} + {{- if .Values.controller.podAnnotations }} +{{ toYaml .Values.controller.podAnnotations | indent 8}} + {{- end }} + labels: + app: {{ template "nginx-ingress.name" . }} + component: "{{ .Values.controller.name }}" + release: {{ .Release.Name }} + {{- if .Values.controller.podLabels }} +{{ toYaml .Values.controller.podLabels | indent 8}} + {{- end }} + spec: + dnsPolicy: {{ .Values.controller.dnsPolicy }} + {{- if .Values.imagePullSecrets }} + imagePullSecrets: +{{ toYaml .Values.imagePullSecrets | indent 8 }} + {{- end }} +{{- if .Values.controller.priorityClassName }} + priorityClassName: "{{ .Values.controller.priorityClassName }}" +{{- end }} + containers: + - name: {{ template "nginx-ingress.name" . }}-{{ .Values.controller.name }} + image: "{{ .Values.controller.image.repository }}:{{ .Values.controller.image.tag }}" + imagePullPolicy: "{{ .Values.controller.image.pullPolicy }}" + {{- if .Values.controller.lifecycle }} + lifecycle: +{{ toYaml .Values.controller.lifecycle | indent 12 }} + {{- end }} + args: + - /nginx-ingress-controller + - --default-backend-service={{ if .Values.defaultBackend.enabled }}{{ .Release.Namespace }}/{{ template "nginx-ingress.defaultBackend.fullname" . }}{{ else }}{{ .Values.controller.defaultBackendService }}{{ end }} + {{- if and (semverCompare ">=0.9.0-beta.1" .Values.controller.image.tag) .Values.controller.publishService.enabled }} + - --publish-service={{ template "nginx-ingress.controller.publishServicePath" . }} + {{- end }} + {{- if (semverCompare ">=0.9.0-beta.1" .Values.controller.image.tag) }} + - --election-id={{ .Values.controller.electionID }} + {{- end }} + {{- if (semverCompare ">=0.9.0-beta.1" .Values.controller.image.tag) }} + - --ingress-class={{ .Values.controller.ingressClass }} + {{- end }} + {{- if (semverCompare ">=0.9.0-beta.1" .Values.controller.image.tag) }} + - --configmap={{ .Release.Namespace }}/{{ template "nginx-ingress.controller.fullname" . }} + {{- else }} + - --nginx-configmap={{ .Release.Namespace }}/{{ template "nginx-ingress.controller.fullname" . }} + {{- end }} + {{- if .Values.tcp }} + - --tcp-services-configmap={{ .Release.Namespace }}/{{ template "nginx-ingress.fullname" . }}-tcp + {{- end }} + {{- if .Values.udp }} + - --udp-services-configmap={{ .Release.Namespace }}/{{ template "nginx-ingress.fullname" . }}-udp + {{- end }} + {{- if .Values.controller.scope.enabled }} + - --watch-namespace={{ default .Release.Namespace .Values.controller.scope.namespace }} + {{- end }} + {{- range $key, $value := .Values.controller.extraArgs }} + {{- if $value }} + - --{{ $key }}={{ $value }} + {{- else }} + - --{{ $key }} + {{- end }} + {{- end }} + {{- if (semverCompare ">=0.16.0" .Values.controller.image.tag) }} + securityContext: + capabilities: + drop: + - ALL + add: + - NET_BIND_SERVICE + # www-data -> 33 + runAsUser: 33 + {{- end }} + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + {{- if .Values.controller.extraEnvs }} +{{ toYaml .Values.controller.extraEnvs | indent 12 }} + {{- end }} + livenessProbe: + httpGet: + path: /healthz + port: {{ .Values.controller.livenessProbe.port }} + scheme: HTTP + initialDelaySeconds: {{ .Values.controller.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.controller.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.controller.livenessProbe.timeoutSeconds }} + successThreshold: {{ .Values.controller.livenessProbe.successThreshold }} + failureThreshold: {{ .Values.controller.livenessProbe.failureThreshold }} + ports: + - name: http + containerPort: 80 + protocol: TCP + {{- if .Values.controller.daemonset.useHostPort }} + hostPort: {{ .Values.controller.daemonset.hostPorts.http }} + {{- end }} + - name: https + containerPort: 443 + protocol: TCP + {{- if .Values.controller.daemonset.useHostPort }} + hostPort: {{ .Values.controller.daemonset.hostPorts.https }} + {{- end }} + {{- if .Values.controller.stats.enabled }} + - name: stats + containerPort: 18080 + protocol: TCP + {{- if .Values.controller.metrics.enabled }} + - name: metrics + containerPort: 10254 + protocol: TCP + {{- end }} + {{- end }} + {{- range $key, $value := .Values.tcp }} + - name: "{{ $key }}-tcp" + containerPort: {{ $key }} + protocol: TCP + {{- end }} + {{- range $key, $value := .Values.udp }} + - name: "{{ $key }}-udp" + containerPort: {{ $key }} + protocol: UDP + {{- end }} + readinessProbe: + httpGet: + path: /healthz + port: {{ .Values.controller.readinessProbe.port }} + scheme: HTTP + initialDelaySeconds: {{ .Values.controller.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.controller.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.controller.readinessProbe.timeoutSeconds }} + successThreshold: {{ .Values.controller.readinessProbe.successThreshold }} + failureThreshold: {{ .Values.controller.readinessProbe.failureThreshold }} +{{- if (or .Values.controller.customTemplate.configMapName .Values.controller.extraVolumeMounts) }} + volumeMounts: +{{- end }} +{{- if .Values.controller.customTemplate.configMapName }} + - mountPath: /etc/nginx/template + name: nginx-template-volume + readOnly: true +{{- end }} +{{- if .Values.controller.extraVolumeMounts }} +{{ toYaml .Values.controller.extraVolumeMounts | indent 10}} +{{- end }} + resources: +{{ toYaml .Values.controller.resources | indent 12 }} +{{- if .Values.controller.extraContainers }} +{{ toYaml .Values.controller.extraContainers | indent 8}} +{{- end }} +{{- if .Values.controller.extraInitContainers }} + initContainers: +{{ toYaml .Values.controller.extraInitContainers | indent 8}} +{{- end }} + hostNetwork: {{ .Values.controller.hostNetwork }} + {{- if .Values.controller.nodeSelector }} + nodeSelector: +{{ toYaml .Values.controller.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.controller.tolerations }} + tolerations: +{{ toYaml .Values.controller.tolerations | indent 8 }} + {{- end }} + {{- if .Values.controller.affinity }} + affinity: +{{ toYaml .Values.controller.affinity | indent 8 }} + {{- end }} + serviceAccountName: {{ template "nginx-ingress.serviceAccountName" . }} + terminationGracePeriodSeconds: 60 +{{- if (or .Values.controller.customTemplate.configMapName .Values.controller.extraVolumes) }} + volumes: +{{- end }} +{{- if .Values.controller.customTemplate.configMapName }} + - name: nginx-template-volume + configMap: + name: {{ .Values.controller.customTemplate.configMapName }} + items: + - key: {{ .Values.controller.customTemplate.configMapKey }} + path: nginx.tmpl +{{- end }} +{{- if .Values.controller.extraVolumes }} +{{ toYaml .Values.controller.extraVolumes | indent 6}} +{{- end }} +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/controller-deployment.yaml b/stable/ibm-nginx-ingress/templates/controller-deployment.yaml new file mode 100644 index 0000000..0bc623c --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/controller-deployment.yaml @@ -0,0 +1,211 @@ +{{- if eq .Values.controller.kind "Deployment" }} +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.controller.fullname" . }} +spec: + replicas: {{ .Values.controller.replicaCount }} + revisionHistoryLimit: {{ .Values.revisionHistoryLimit }} + strategy: +{{ toYaml .Values.controller.updateStrategy | indent 4 }} + minReadySeconds: {{ .Values.controller.minReadySeconds }} + template: + metadata: + {{- if .Values.controller.podAnnotations }} + annotations: +{{ toYaml .Values.controller.podAnnotations | indent 8}} + {{- end }} + labels: + app: {{ template "nginx-ingress.name" . }} + component: "{{ .Values.controller.name }}" + release: {{ .Release.Name }} + {{- if .Values.controller.podLabels }} +{{ toYaml .Values.controller.podLabels | indent 8 }} + {{- end }} + spec: + dnsPolicy: {{ .Values.controller.dnsPolicy }} + {{- if .Values.imagePullSecrets }} + imagePullSecrets: +{{ toYaml .Values.imagePullSecrets | indent 8 }} + {{- end }} +{{- if .Values.controller.priorityClassName }} + priorityClassName: "{{ .Values.controller.priorityClassName }}" +{{- end }} + containers: + - name: {{ template "nginx-ingress.name" . }}-{{ .Values.controller.name }} + image: "{{ .Values.controller.image.repository }}:{{ .Values.controller.image.tag }}" + imagePullPolicy: "{{ .Values.controller.image.pullPolicy }}" + {{- if .Values.controller.lifecycle }} + lifecycle: +{{ toYaml .Values.controller.lifecycle | indent 12 }} + {{- end }} + args: + - /nginx-ingress-controller + - --default-backend-service={{ if .Values.defaultBackend.enabled }}{{ .Release.Namespace }}/{{ template "nginx-ingress.defaultBackend.fullname" . }}{{ else }}{{ .Values.controller.defaultBackendService }}{{ end }} + {{- if and (semverCompare ">=0.9.0-beta.1" .Values.controller.image.tag) .Values.controller.publishService.enabled }} + - --publish-service={{ template "nginx-ingress.controller.publishServicePath" . }} + {{- end }} + {{- if (semverCompare ">=0.9.0-beta.1" .Values.controller.image.tag) }} + - --election-id={{ .Values.controller.electionID }} + {{- end }} + {{- if (semverCompare ">=0.9.0-beta.1" .Values.controller.image.tag) }} + - --ingress-class={{ .Values.controller.ingressClass }} + {{- end }} + {{- if (semverCompare ">=0.9.0-beta.1" .Values.controller.image.tag) }} + - --configmap={{ .Release.Namespace }}/{{ template "nginx-ingress.controller.fullname" . }} + {{- else }} + - --nginx-configmap={{ .Release.Namespace }}/{{ template "nginx-ingress.controller.fullname" . }} + {{- end }} + {{- if .Values.tcp }} + - --tcp-services-configmap={{ .Release.Namespace }}/{{ template "nginx-ingress.fullname" . }}-tcp + {{- end }} + {{- if .Values.udp }} + - --udp-services-configmap={{ .Release.Namespace }}/{{ template "nginx-ingress.fullname" . }}-udp + {{- end }} + {{- if .Values.controller.scope.enabled }} + - --watch-namespace={{ default .Release.Namespace .Values.controller.scope.namespace }} + {{- end }} + {{- range $key, $value := .Values.controller.extraArgs }} + {{- if $value }} + - --{{ $key }}={{ $value }} + {{- else }} + - --{{ $key }} + {{- end }} + {{- end }} + {{- if (semverCompare ">=0.16.0" .Values.controller.image.tag) }} + securityContext: + capabilities: + drop: + - ALL + add: + - NET_BIND_SERVICE + # www-data -> 33 + runAsUser: 33 + {{- end }} + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + {{- if .Values.controller.extraEnvs }} +{{ toYaml .Values.controller.extraEnvs | indent 12 }} + {{- end }} + livenessProbe: + httpGet: + path: /healthz + port: {{ .Values.controller.livenessProbe.port }} + scheme: HTTP + initialDelaySeconds: {{ .Values.controller.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.controller.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.controller.livenessProbe.timeoutSeconds }} + successThreshold: {{ .Values.controller.livenessProbe.successThreshold }} + failureThreshold: {{ .Values.controller.livenessProbe.failureThreshold }} + ports: + - name: http + containerPort: 80 + protocol: TCP + - name: https + containerPort: 443 + protocol: TCP + {{- if .Values.controller.stats.enabled }} + - name: stats + containerPort: 18080 + protocol: TCP + {{- if .Values.controller.metrics.enabled }} + - name: metrics + containerPort: 10254 + protocol: TCP + {{- end }} + {{- end }} + {{- range $key, $value := .Values.tcp }} + - name: "{{ $key }}-tcp" + containerPort: {{ $key }} + protocol: TCP + {{- end }} + {{- range $key, $value := .Values.udp }} + - name: "{{ $key }}-udp" + containerPort: {{ $key }} + protocol: UDP + {{- end }} + readinessProbe: + httpGet: + path: /healthz + port: {{ .Values.controller.readinessProbe.port }} + scheme: HTTP + initialDelaySeconds: {{ .Values.controller.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.controller.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.controller.readinessProbe.timeoutSeconds }} + successThreshold: {{ .Values.controller.readinessProbe.successThreshold }} + failureThreshold: {{ .Values.controller.readinessProbe.failureThreshold }} +{{- if (or .Values.controller.customTemplate.configMapName .Values.controller.extraVolumeMounts) }} + volumeMounts: +{{- end }} +{{- if .Values.controller.customTemplate.configMapName }} + - mountPath: /etc/nginx/template + name: nginx-template-volume + readOnly: true +{{- end }} +{{- if .Values.controller.extraVolumeMounts }} +{{ toYaml .Values.controller.extraVolumeMounts | indent 12}} +{{- end }} + resources: +{{ toYaml .Values.controller.resources | indent 12 }} +{{- if .Values.controller.extraContainers }} +{{ toYaml .Values.controller.extraContainers | indent 8}} +{{- end }} +{{- if .Values.controller.extraInitContainers }} + initContainers: +{{ toYaml .Values.controller.extraInitContainers | indent 8}} +{{- end }} + hostNetwork: {{ .Values.controller.hostNetwork }} + {{- if .Values.controller.nodeSelector }} + nodeSelector: +{{ toYaml .Values.controller.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.controller.tolerations }} + tolerations: +{{ toYaml .Values.controller.tolerations | indent 8 }} + {{- end }} + {{- if .Values.controller.affinity }} + affinity: +{{ toYaml .Values.controller.affinity | indent 8 }} + {{- end }} + serviceAccountName: {{ template "nginx-ingress.serviceAccountName" . }} + terminationGracePeriodSeconds: 60 +{{- if (or .Values.controller.customTemplate.configMapName .Values.controller.extraVolumes) }} + volumes: +{{- end }} +{{- if .Values.controller.customTemplate.configMapName }} + - name: nginx-template-volume + configMap: + name: {{ .Values.controller.customTemplate.configMapName }} + items: + - key: {{ .Values.controller.customTemplate.configMapKey }} + path: nginx.tmpl +{{- end }} +{{- if .Values.controller.extraVolumes }} +{{ toYaml .Values.controller.extraVolumes | indent 8}} +{{- end }} +{{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-nginx-ingress/templates/controller-hpa.yaml b/stable/ibm-nginx-ingress/templates/controller-hpa.yaml new file mode 100644 index 0000000..9c7f8af --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/controller-hpa.yaml @@ -0,0 +1,30 @@ +{{- if eq .Values.controller.kind "Deployment" }} +{{- if .Values.controller.autoscaling.enabled }} +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.controller.fullname" . }} +spec: + scaleTargetRef: + apiVersion: apps/v1beta1 + kind: Deployment + name: {{ template "nginx-ingress.controller.fullname" . }} + minReplicas: {{ .Values.controller.autoscaling.minReplicas }} + maxReplicas: {{ .Values.controller.autoscaling.maxReplicas }} + metrics: + - type: Resource + resource: + name: cpu + targetAverageUtilization: {{ .Values.controller.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: memory + targetAverageUtilization: {{ .Values.controller.autoscaling.targetMemoryUtilizationPercentage }} +{{- end }} +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/controller-metrics-service.yaml b/stable/ibm-nginx-ingress/templates/controller-metrics-service.yaml new file mode 100644 index 0000000..eeaf297 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/controller-metrics-service.yaml @@ -0,0 +1,38 @@ +{{- if and .Values.controller.stats.enabled .Values.controller.metrics.enabled }} +apiVersion: v1 +kind: Service +metadata: +{{- if .Values.controller.metrics.service.annotations }} + annotations: +{{ toYaml .Values.controller.metrics.service.annotations | indent 4 }} +{{- end }} + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.controller.fullname" . }}-metrics +spec: + clusterIP: "{{ .Values.controller.metrics.service.clusterIP }}" +{{- if .Values.controller.metrics.service.externalIPs }} + externalIPs: +{{ toYaml .Values.controller.metrics.service.externalIPs | indent 4 }} +{{- end }} +{{- if .Values.controller.metrics.service.loadBalancerIP }} + loadBalancerIP: "{{ .Values.controller.metrics.service.loadBalancerIP }}" +{{- end }} +{{- if .Values.controller.metrics.service.loadBalancerSourceRanges }} + loadBalancerSourceRanges: +{{ toYaml .Values.controller.metrics.service.loadBalancerSourceRanges | indent 4 }} +{{- end }} + ports: + - name: metrics + port: {{ .Values.controller.metrics.service.servicePort }} + targetPort: metrics + selector: + app: {{ template "nginx-ingress.name" . }} + component: "{{ .Values.controller.name }}" + release: {{ .Release.Name }} + type: "{{ .Values.controller.metrics.service.type }}" +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/controller-poddisruptionbudget.yaml b/stable/ibm-nginx-ingress/templates/controller-poddisruptionbudget.yaml new file mode 100644 index 0000000..cf57deb --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/controller-poddisruptionbudget.yaml @@ -0,0 +1,19 @@ +{{- if gt .Values.controller.replicaCount 1.0 }} +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.controller.fullname" . }} +spec: + selector: + matchLabels: + app: {{ template "nginx-ingress.name" . }} + release: {{ .Release.Name }} + component: "{{ .Values.controller.name }}" + minAvailable: {{ .Values.controller.minAvailable }} +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/controller-service.yaml b/stable/ibm-nginx-ingress/templates/controller-service.yaml new file mode 100644 index 0000000..23de6d5 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/controller-service.yaml @@ -0,0 +1,72 @@ +apiVersion: v1 +kind: Service +metadata: +{{- if .Values.controller.service.annotations }} + annotations: +{{ toYaml .Values.controller.service.annotations | indent 4 }} +{{- end }} + labels: +{{- if .Values.controller.service.labels }} +{{ toYaml .Values.controller.service.labels | indent 4 }} +{{- end }} + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.controller.fullname" . }} +spec: + clusterIP: "{{ .Values.controller.service.clusterIP }}" +{{- if .Values.controller.service.externalIPs }} + externalIPs: +{{ toYaml .Values.controller.service.externalIPs | indent 4 }} +{{- end }} +{{- if .Values.controller.service.loadBalancerIP }} + loadBalancerIP: "{{ .Values.controller.service.loadBalancerIP }}" +{{- end }} +{{- if .Values.controller.service.loadBalancerSourceRanges }} + loadBalancerSourceRanges: +{{ toYaml .Values.controller.service.loadBalancerSourceRanges | indent 4 }} +{{- end }} +{{- if and (semverCompare ">=1.7-0" .Capabilities.KubeVersion.GitVersion) (.Values.controller.service.externalTrafficPolicy) }} + externalTrafficPolicy: "{{ .Values.controller.service.externalTrafficPolicy }}" +{{- end }} +{{- if and (semverCompare ">=1.7-0" .Capabilities.KubeVersion.GitVersion) (.Values.controller.service.healthCheckNodePort) }} + healthCheckNodePort: {{ .Values.controller.service.healthCheckNodePort }} +{{- end }} + ports: + {{- if .Values.controller.service.enableHttp }} + - name: http + port: 80 + protocol: TCP + targetPort: {{ .Values.controller.service.targetPorts.http }} + {{- if (and (eq .Values.controller.service.type "NodePort") (not (empty .Values.controller.service.nodePorts.http))) }} + nodePort: {{ .Values.controller.service.nodePorts.http }} + {{- end }} + {{- end }} + {{- if .Values.controller.service.enableHttps }} + - name: https + port: 443 + protocol: TCP + targetPort: {{ .Values.controller.service.targetPorts.https }} + {{- if (and (eq .Values.controller.service.type "NodePort") (not (empty .Values.controller.service.nodePorts.https))) }} + nodePort: {{ .Values.controller.service.nodePorts.https }} + {{- end }} + {{- end }} + {{- range $key, $value := .Values.tcp }} + - name: "{{ $key }}-tcp" + port: {{ $key }} + protocol: TCP + targetPort: "{{ $key }}-tcp" + {{- end }} + {{- range $key, $value := .Values.udp }} + - name: "{{ $key }}-udp" + port: {{ $key }} + protocol: UDP + targetPort: "{{ $key }}-udp" + {{- end }} + selector: + app: {{ template "nginx-ingress.name" . }} + component: "{{ .Values.controller.name }}" + release: {{ .Release.Name }} + type: "{{ .Values.controller.service.type }}" diff --git a/stable/ibm-nginx-ingress/templates/controller-stats-service.yaml b/stable/ibm-nginx-ingress/templates/controller-stats-service.yaml new file mode 100644 index 0000000..cfa1922 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/controller-stats-service.yaml @@ -0,0 +1,38 @@ +{{- if .Values.controller.stats.enabled }} +apiVersion: v1 +kind: Service +metadata: +{{- if .Values.controller.stats.service.annotations }} + annotations: +{{ toYaml .Values.controller.stats.service.annotations | indent 4 }} +{{- end }} + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.controller.fullname" . }}-stats +spec: + clusterIP: "{{ .Values.controller.stats.service.clusterIP }}" +{{- if .Values.controller.stats.service.externalIPs }} + externalIPs: +{{ toYaml .Values.controller.stats.service.externalIPs | indent 4 }} +{{- end }} +{{- if .Values.controller.stats.service.loadBalancerIP }} + loadBalancerIP: "{{ .Values.controller.stats.service.loadBalancerIP }}" +{{- end }} +{{- if .Values.controller.stats.service.loadBalancerSourceRanges }} + loadBalancerSourceRanges: +{{ toYaml .Values.controller.stats.service.loadBalancerSourceRanges | indent 4 }} +{{- end }} + ports: + - name: stats + port: {{ .Values.controller.stats.service.servicePort }} + targetPort: stats + selector: + app: {{ template "nginx-ingress.name" . }} + component: "{{ .Values.controller.name }}" + release: {{ .Release.Name }} + type: "{{ .Values.controller.stats.service.type }}" +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/default-backend-deployment.yaml b/stable/ibm-nginx-ingress/templates/default-backend-deployment.yaml new file mode 100644 index 0000000..54a71fa --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/default-backend-deployment.yaml @@ -0,0 +1,86 @@ +{{- if .Values.defaultBackend.enabled }} +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.defaultBackend.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.defaultBackend.fullname" . }} +spec: + replicas: {{ .Values.defaultBackend.replicaCount }} + revisionHistoryLimit: {{ .Values.revisionHistoryLimit }} + template: + metadata: + {{- if .Values.defaultBackend.podAnnotations }} + annotations: +{{ toYaml .Values.defaultBackend.podAnnotations | indent 8 }} + {{- end }} + labels: + app: {{ template "nginx-ingress.name" . }} + component: "{{ .Values.defaultBackend.name }}" + release: {{ .Release.Name }} + {{- if .Values.defaultBackend.podLabels }} +{{ toYaml .Values.defaultBackend.podLabels | indent 8 }} + {{- end }} + spec: + {{- if .Values.imagePullSecrets }} + imagePullSecrets: +{{ toYaml .Values.imagePullSecrets | indent 8 }} + {{- end }} +{{- if .Values.defaultBackend.priorityClassName }} + priorityClassName: "{{ .Values.defaultBackend.priorityClassName }}" +{{- end }} + containers: + - name: {{ template "nginx-ingress.name" . }}-{{ .Values.defaultBackend.name }} + image: "{{ .Values.defaultBackend.image.repository }}:{{ .Values.defaultBackend.image.tag }}" + imagePullPolicy: "{{ .Values.defaultBackend.image.pullPolicy }}" + args: + {{- range $key, $value := .Values.defaultBackend.extraArgs }} + {{- if $value }} + - --{{ $key }}={{ $value }} + {{- else }} + - --{{ $key }} + {{- end }} + {{- end }} + livenessProbe: + httpGet: + path: /healthz + port: {{ .Values.defaultBackend.port }} + scheme: HTTP + initialDelaySeconds: 30 + timeoutSeconds: 5 + ports: + - name: http + containerPort: {{ .Values.defaultBackend.port }} + protocol: TCP + resources: +{{ toYaml .Values.defaultBackend.resources | indent 12 }} + {{- if .Values.defaultBackend.nodeSelector }} + nodeSelector: +{{ toYaml .Values.defaultBackend.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.defaultBackend.tolerations }} + tolerations: +{{ toYaml .Values.defaultBackend.tolerations | indent 8 }} + {{- end }} + {{- if .Values.defaultBackend.affinity }} + affinity: +{{ toYaml .Values.defaultBackend.affinity | indent 8 }} + {{- end }} + terminationGracePeriodSeconds: 60 +{{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-nginx-ingress/templates/default-backend-poddisruptionbudget.yaml b/stable/ibm-nginx-ingress/templates/default-backend-poddisruptionbudget.yaml new file mode 100644 index 0000000..94e9a8d --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/default-backend-poddisruptionbudget.yaml @@ -0,0 +1,19 @@ +{{- if gt .Values.defaultBackend.replicaCount 1.0 }} +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.defaultBackend.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.defaultBackend.fullname" . }} +spec: + selector: + matchLabels: + app: {{ template "nginx-ingress.name" . }} + release: {{ .Release.Name }} + component: "{{ .Values.defaultBackend.name }}" + minAvailable: {{ .Values.defaultBackend.minAvailable }} +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/default-backend-service.yaml b/stable/ibm-nginx-ingress/templates/default-backend-service.yaml new file mode 100644 index 0000000..8508ef0 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/default-backend-service.yaml @@ -0,0 +1,39 @@ +{{- if .Values.defaultBackend.enabled }} +apiVersion: v1 +kind: Service +metadata: +{{- if .Values.defaultBackend.service.annotations }} + annotations: +{{ toYaml .Values.defaultBackend.service.annotations | indent 4 }} +{{- end }} + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.defaultBackend.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.defaultBackend.fullname" . }} +spec: + clusterIP: "{{ .Values.defaultBackend.service.clusterIP }}" +{{- if .Values.defaultBackend.service.externalIPs }} + externalIPs: +{{ toYaml .Values.defaultBackend.service.externalIPs | indent 4 }} +{{- end }} +{{- if .Values.defaultBackend.service.loadBalancerIP }} + loadBalancerIP: "{{ .Values.defaultBackend.service.loadBalancerIP }}" +{{- end }} +{{- if .Values.defaultBackend.service.loadBalancerSourceRanges }} + loadBalancerSourceRanges: +{{ toYaml .Values.defaultBackend.service.loadBalancerSourceRanges | indent 4 }} +{{- end }} + ports: + - name: http + port: {{ .Values.defaultBackend.service.servicePort }} + protocol: TCP + targetPort: http + selector: + app: {{ template "nginx-ingress.name" . }} + component: "{{ .Values.defaultBackend.name }}" + release: {{ .Release.Name }} + type: "{{ .Values.defaultBackend.service.type }}" +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/headers-configmap.yaml b/stable/ibm-nginx-ingress/templates/headers-configmap.yaml new file mode 100644 index 0000000..c85f008 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/headers-configmap.yaml @@ -0,0 +1,14 @@ +{{- if .Values.controller.headers }} +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.fullname" . }}-custom-headers +data: +{{ toYaml .Values.controller.headers | indent 2 }} +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/podsecuritypolicy.yaml b/stable/ibm-nginx-ingress/templates/podsecuritypolicy.yaml new file mode 100644 index 0000000..c51d216 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/podsecuritypolicy.yaml @@ -0,0 +1,47 @@ +{{- if .Values.podSecurityPolicy.enabled}} +apiVersion: extensions/v1beta1 +kind: PodSecurityPolicy +metadata: + name: {{ template "nginx-ingress.fullname" . }} + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + allowedCapabilities: + - NET_BIND_SERVICE + privileged: false + allowPrivilegeEscalation: true + # Allow core volume types. + volumes: + - 'configMap' + #- 'emptyDir' + #- 'projected' + - 'secret' + #- 'downwardAPI' + hostNetwork: false + hostIPC: false + hostPID: false + runAsUser: + # Require the container to run without root privileges. + rule: 'MustRunAsNonRoot' + supplementalGroups: + rule: 'MustRunAs' + ranges: + # Forbid adding the root group. + - min: 1 + max: 65535 + fsGroup: + rule: 'MustRunAs' + ranges: + # Forbid adding the root group. + - min: 1 + max: 65535 + readOnlyRootFilesystem: false + seLinux: + rule: 'RunAsAny' + hostPorts: + - max: 65535 + min: 1 +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/role.yaml b/stable/ibm-nginx-ingress/templates/role.yaml new file mode 100644 index 0000000..64c47ca --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/role.yaml @@ -0,0 +1,89 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: Role +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.fullname" . }} +rules: + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - apiGroups: + - "" + resources: + - configmaps + - pods + - secrets + - endpoints + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - update + - watch + - apiGroups: + - extensions + resources: + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - extensions + resources: + - ingresses/status + verbs: + - update + - apiGroups: + - "" + resources: + - configmaps + resourceNames: + - {{ .Values.controller.electionID }}-{{ .Values.controller.ingressClass }} + verbs: + - get + - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - apiGroups: + - "" + resources: + - endpoints + verbs: + - create + - get + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +{{- if .Values.podSecurityPolicy.enabled }} + - apiGroups: ['extensions'] + resources: ['podsecuritypolicies'] + verbs: ['use'] + resourceNames: [{{ template "nginx-ingress.fullname" . }}] +{{- end }} + +{{- end -}} diff --git a/stable/ibm-nginx-ingress/templates/rolebinding.yaml b/stable/ibm-nginx-ingress/templates/rolebinding.yaml new file mode 100644 index 0000000..f2e157f --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/rolebinding.yaml @@ -0,0 +1,19 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: RoleBinding +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.fullname" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ template "nginx-ingress.fullname" . }} +subjects: + - kind: ServiceAccount + name: {{ template "nginx-ingress.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +{{- end -}} diff --git a/stable/ibm-nginx-ingress/templates/serviceaccount.yaml b/stable/ibm-nginx-ingress/templates/serviceaccount.yaml new file mode 100644 index 0000000..2c69834 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/serviceaccount.yaml @@ -0,0 +1,11 @@ +{{- if or .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.serviceAccountName" . }} +{{- end -}} diff --git a/stable/ibm-nginx-ingress/templates/tcp-configmap.yaml b/stable/ibm-nginx-ingress/templates/tcp-configmap.yaml new file mode 100644 index 0000000..fdbf282 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/tcp-configmap.yaml @@ -0,0 +1,14 @@ +{{- if .Values.tcp }} +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.fullname" . }}-tcp +data: +{{ toYaml .Values.tcp | indent 2 }} +{{- end }} diff --git a/stable/ibm-nginx-ingress/templates/udp-configmap.yaml b/stable/ibm-nginx-ingress/templates/udp-configmap.yaml new file mode 100644 index 0000000..75ce163 --- /dev/null +++ b/stable/ibm-nginx-ingress/templates/udp-configmap.yaml @@ -0,0 +1,14 @@ +{{- if .Values.udp }} +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app: {{ template "nginx-ingress.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + component: "{{ .Values.controller.name }}" + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "nginx-ingress.fullname" . }}-udp +data: +{{ toYaml .Values.udp | indent 2 }} +{{- end }} diff --git a/stable/ibm-nginx-ingress/values-metadata.yaml b/stable/ibm-nginx-ingress/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-nginx-ingress/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-nginx-ingress/values.yaml b/stable/ibm-nginx-ingress/values.yaml new file mode 100644 index 0000000..c644187 --- /dev/null +++ b/stable/ibm-nginx-ingress/values.yaml @@ -0,0 +1,382 @@ +## nginx configuration +## Ref: https://github.com/kubernetes/ingress/blob/master/controllers/nginx/configuration.md +## + +node: "ppc64le" +controller: + name: controller + image: + repository: ibmcom/nginx-ingress-controller-ppc64le + tag: "0.9.0-beta.13" + pullPolicy: IfNotPresent + + config: {} + # Will add custom header to Nginx https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/customization/custom-headers + headers: {} + + # Required for use with CNI based kubernetes installations (such as ones set up by kubeadm), + # since CNI and hostport don't mix yet. Can be deprecated once https://github.com/kubernetes/kubernetes/issues/23920 + # is merged + hostNetwork: false + + # Optionally change this to ClusterFirstWithHostNet in case you have 'hostNetwork: true'. + # By default, while using host network, name resolution uses the host's DNS. If you wish nginx-controller + # to keep resolving names inside the k8s network, use ClusterFirstWithHostNet. + dnsPolicy: ClusterFirst + + ## Use host ports 80 and 443 + daemonset: + useHostPort: false + + hostPorts: + http: 80 + https: 443 + + ## Required only if defaultBackend.enabled = false + ## Must be / + ## + defaultBackendService: "" + + ## Election ID to use for status update + ## + electionID: ingress-controller-leader + + ## Name of the ingress class to route through this controller + ## + ingressClass: nginx + + # labels to add to the pod container metadata + podLabels: {} + # key: value + + ## Allows customization of the external service + ## the ingress will be bound to via DNS + publishService: + enabled: false + ## Allows overriding of the publish service to bind to + ## Must be / + ## + pathOverride: "" + + ## Limit the scope of the controller + ## + scope: + enabled: false + namespace: "" # defaults to .Release.Namespace + + ## Additional command line arguments to pass to nginx-ingress-controller + ## E.g. to specify the default SSL certificate you can use + ## extraArgs: + ## default-ssl-certificate: "/" + extraArgs: {} + + ## Additional environment variables to set + extraEnvs: [] + # extraEnvs: + # - name: FOO + # valueFrom: + # secretKeyRef: + # key: FOO + # name: secret-resource + + ## DaemonSet or Deployment + ## + kind: Deployment + + # The update strategy to apply to the Deployment or DaemonSet + ## + updateStrategy: {} + # rollingUpdate: + # maxUnavailable: 1 + # type: RollingUpdate + + # minReadySeconds to avoid killing pods before we are ready + ## + minReadySeconds: 0 + + + ## Node tolerations for server scheduling to nodes with taints + ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ + ## + tolerations: [] + # - key: "key" + # operator: "Equal|Exists" + # value: "value" + # effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)" + + affinity: {} + + ## Node labels for controller pod assignment + ## Ref: https://kubernetes.io/docs/user-guide/node-selection/ + ## + nodeSelector: {} + ## Liveness and readiness probe values + ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes + ## + livenessProbe: + failureThreshold: 3 + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + port: 10254 + readinessProbe: + failureThreshold: 3 + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + port: 10254 + + ## Annotations to be added to controller pods + ## + podAnnotations: {} + + replicaCount: 1 + + minAvailable: 1 + + resources: {} + # limits: + # cpu: 100m + # memory: 64Mi + # requests: + # cpu: 100m + # memory: 64Mi + + autoscaling: + enabled: false + # minReplicas: 1 + # maxReplicas: 11 + # targetCPUUtilizationPercentage: 50 + # targetMemoryUtilizationPercentage: 50 + + ## Override NGINX template + customTemplate: + configMapName: "" + configMapKey: "" + + service: + annotations: {} + labels: {} + clusterIP: "" + + ## List of IP addresses at which the controller services are available + ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips + ## + externalIPs: [] + + loadBalancerIP: "" + loadBalancerSourceRanges: [] + + enableHttp: true + enableHttps: true + + ## Set external traffic policy to: "Local" to preserve source IP on + ## providers supporting it + ## Ref: https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer + externalTrafficPolicy: "" + + healthCheckNodePort: 0 + + targetPorts: + http: http + https: https + + type: LoadBalancer + + # type: NodePort + # nodePorts: + # http: 32080 + # https: 32443 + nodePorts: + http: "" + https: "" + + extraContainers: [] + ## Additional containers to be added to the controller pod. + ## See https://github.com/lemonldap-ng-controller/lemonldap-ng-controller as example. + # - name: my-sidecar + # image: nginx:latest + # - name: lemonldap-ng-controller + # image: lemonldapng/lemonldap-ng-controller:0.2.0 + # args: + # - /lemonldap-ng-controller + # - --alsologtostderr + # - --configmap=$(POD_NAMESPACE)/lemonldap-ng-configuration + # env: + # - name: POD_NAME + # valueFrom: + # fieldRef: + # fieldPath: metadata.name + # - name: POD_NAMESPACE + # valueFrom: + # fieldRef: + # fieldPath: metadata.namespace + # volumeMounts: + # - name: copy-portal-skins + # mountPath: /srv/var/lib/lemonldap-ng/portal/skins + + extraVolumeMounts: [] + ## Additional volumeMounts to the controller main container. + # - name: copy-portal-skins + # mountPath: /var/lib/lemonldap-ng/portal/skins + + extraVolumes: [] + ## Additional volumes to the controller pod. + # - name: copy-portal-skins + # emptyDir: {} + + extraInitContainers: [] + ## Containers, which are run before the app containers are started. + # - name: init-myservice + # image: busybox + # command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] + + + stats: + enabled: false + + service: + annotations: {} + clusterIP: "" + + ## List of IP addresses at which the stats service is available + ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips + ## + externalIPs: [] + + loadBalancerIP: "" + loadBalancerSourceRanges: [] + servicePort: 18080 + type: ClusterIP + + ## If controller.stats.enabled = true and controller.metrics.enabled = true, Prometheus metrics will be exported + ## + metrics: + enabled: false + + service: + annotations: {} + # prometheus.io/scrape: "true" + # prometheus.io/port: "10254" + + clusterIP: "" + + ## List of IP addresses at which the stats-exporter service is available + ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips + ## + externalIPs: [] + + loadBalancerIP: "" + loadBalancerSourceRanges: [] + servicePort: 9913 + type: ClusterIP + + lifecycle: {} + + priorityClassName: "" + +## Rollback limit +## +revisionHistoryLimit: 10 + +## Default 404 backend +## +defaultBackend: + + ## If false, controller.defaultBackendService must be provided + ## + enabled: true + + name: default-backend + image: + repository: ibmcom/defaultbackend-ppc64le + tag: "1.2" + pullPolicy: IfNotPresent + + extraArgs: {} + + port: 8080 + + ## Node tolerations for server scheduling to nodes with taints + ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ + ## + tolerations: [] + # - key: "key" + # operator: "Equal|Exists" + # value: "value" + # effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)" + + affinity: {} + + # labels to add to the pod container metadata + podLabels: {} + # key: value + + ## Node labels for default backend pod assignment + ## Ref: https://kubernetes.io/docs/user-guide/node-selection/ + ## + nodeSelector: {} + + ## Annotations to be added to default backend pods + ## + podAnnotations: {} + + replicaCount: 1 + + minAvailable: 1 + + resources: {} + # limits: + # cpu: 10m + # memory: 20Mi + # requests: + # cpu: 10m + # memory: 20Mi + + service: + annotations: {} + clusterIP: "" + + ## List of IP addresses at which the default backend service is available + ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips + ## + externalIPs: [] + + loadBalancerIP: "" + loadBalancerSourceRanges: [] + servicePort: 80 + type: ClusterIP + + priorityClassName: "" + +## Enable RBAC as per https://github.com/kubernetes/ingress/tree/master/examples/rbac/nginx and https://github.com/kubernetes/ingress/issues/266 +rbac: + create: true + +# If true, create & use Pod Security Policy resources +# https://kubernetes.io/docs/concepts/policy/pod-security-policy/ +podSecurityPolicy: + enabled: false + +serviceAccount: + create: true + name: + +## Optional array of imagePullSecrets containing private registry credentials +## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ +imagePullSecrets: [] +# - name: secretName + +# TCP service key:value pairs +# Ref: https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx/examples/tcp +## +tcp: {} +# 8080: "default/example-tcp-svc:9000" + +# UDP service key:value pairs +# Ref: https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx/examples/udp +## +udp: {} +# 53: "kube-system/kube-dns:53" From 5c69698e0bae0a429fea286541e851dd51c914e3 Mon Sep 17 00:00:00 2001 From: Lysanne Fernandes Date: Mon, 10 Sep 2018 17:45:56 +0530 Subject: [PATCH 2/6] Added Adminer, CrateDB, Jetty, Open-Liberty, Tomee --- repo/beta/ibm-adminer-0.1.0.tgz | Bin 0 -> 7797 bytes repo/beta/ibm-crate-0.1.0.tgz | Bin 0 -> 7841 bytes repo/beta/ibm-jetty-0.1.0.tgz | Bin 0 -> 7878 bytes repo/beta/ibm-open-liberty-0.1.0.tgz | Bin 0 -> 7835 bytes repo/beta/ibm-tomee-0.1.0.tgz | Bin 0 -> 7955 bytes repo/beta/index.yaml | 135 +++++++++++- stable/ibm-adminer/.helmignore | 21 ++ stable/ibm-adminer/Chart.yaml | 23 ++ stable/ibm-adminer/LICENSE | 202 ++++++++++++++++++ stable/ibm-adminer/README.md | 69 ++++++ stable/ibm-adminer/RELEASENOTES.md | 19 ++ stable/ibm-adminer/templates/NOTES.txt | 19 ++ stable/ibm-adminer/templates/_helpers.tpl | 32 +++ stable/ibm-adminer/templates/deployment.yaml | 54 +++++ stable/ibm-adminer/templates/ingress.yaml | 39 ++++ stable/ibm-adminer/templates/service.yaml | 19 ++ stable/ibm-adminer/values-metadata.yaml | 14 ++ stable/ibm-adminer/values.yaml | 45 ++++ stable/ibm-crate/.helmignore | 21 ++ stable/ibm-crate/Chart.yaml | 21 ++ stable/ibm-crate/LICENSE | 202 ++++++++++++++++++ stable/ibm-crate/README.md | 69 ++++++ stable/ibm-crate/RELEASENOTES.md | 19 ++ stable/ibm-crate/templates/NOTES.txt | 19 ++ stable/ibm-crate/templates/_helpers.tpl | 32 +++ stable/ibm-crate/templates/deployment.yaml | 53 +++++ stable/ibm-crate/templates/ingress.yaml | 39 ++++ stable/ibm-crate/templates/service.yaml | 19 ++ stable/ibm-crate/values-metadata.yaml | 14 ++ stable/ibm-crate/values.yaml | 48 +++++ stable/ibm-jetty/.helmignore | 21 ++ stable/ibm-jetty/Chart.yaml | 24 +++ stable/ibm-jetty/LICENSE | 202 ++++++++++++++++++ stable/ibm-jetty/README.md | 69 ++++++ stable/ibm-jetty/RELEASENOTES.md | 19 ++ stable/ibm-jetty/templates/NOTES.txt | 19 ++ stable/ibm-jetty/templates/_helpers.tpl | 32 +++ stable/ibm-jetty/templates/deployment.yaml | 64 ++++++ stable/ibm-jetty/templates/ingress.yaml | 39 ++++ stable/ibm-jetty/templates/service.yaml | 22 ++ stable/ibm-jetty/values-metadata.yaml | 14 ++ stable/ibm-jetty/values.yaml | 51 +++++ stable/ibm-open-liberty/.helmignore | 21 ++ stable/ibm-open-liberty/Chart.yaml | 22 ++ stable/ibm-open-liberty/LICENSE | 202 ++++++++++++++++++ stable/ibm-open-liberty/README.md | 69 ++++++ stable/ibm-open-liberty/RELEASENOTES.md | 19 ++ stable/ibm-open-liberty/templates/NOTES.txt | 20 ++ .../ibm-open-liberty/templates/_helpers.tpl | 40 ++++ .../ibm-open-liberty/templates/configmap.yaml | 12 ++ .../templates/deployment.yaml | 57 +++++ .../ibm-open-liberty/templates/ingress.yaml | 39 ++++ .../ibm-open-liberty/templates/service.yaml | 21 ++ stable/ibm-open-liberty/values-metadata.yaml | 14 ++ stable/ibm-open-liberty/values.yaml | 28 +++ stable/ibm-tomee/.helmignore | 21 ++ stable/ibm-tomee/Chart.yaml | 26 +++ stable/ibm-tomee/LICENSE | 202 ++++++++++++++++++ stable/ibm-tomee/README.md | 69 ++++++ stable/ibm-tomee/RELEASENOTES.md | 19 ++ stable/ibm-tomee/templates/NOTES.txt | 19 ++ stable/ibm-tomee/templates/_helpers.tpl | 32 +++ stable/ibm-tomee/templates/deployment.yaml | 54 +++++ stable/ibm-tomee/templates/ingress.yaml | 39 ++++ stable/ibm-tomee/templates/service.yaml | 19 ++ stable/ibm-tomee/values-metadata.yaml | 14 ++ stable/ibm-tomee/values.yaml | 46 ++++ 67 files changed, 2946 insertions(+), 1 deletion(-) create mode 100644 repo/beta/ibm-adminer-0.1.0.tgz create mode 100644 repo/beta/ibm-crate-0.1.0.tgz create mode 100644 repo/beta/ibm-jetty-0.1.0.tgz create mode 100644 repo/beta/ibm-open-liberty-0.1.0.tgz create mode 100644 repo/beta/ibm-tomee-0.1.0.tgz create mode 100755 stable/ibm-adminer/.helmignore create mode 100755 stable/ibm-adminer/Chart.yaml create mode 100644 stable/ibm-adminer/LICENSE create mode 100755 stable/ibm-adminer/README.md create mode 100644 stable/ibm-adminer/RELEASENOTES.md create mode 100755 stable/ibm-adminer/templates/NOTES.txt create mode 100755 stable/ibm-adminer/templates/_helpers.tpl create mode 100755 stable/ibm-adminer/templates/deployment.yaml create mode 100755 stable/ibm-adminer/templates/ingress.yaml create mode 100755 stable/ibm-adminer/templates/service.yaml create mode 100755 stable/ibm-adminer/values-metadata.yaml create mode 100755 stable/ibm-adminer/values.yaml create mode 100755 stable/ibm-crate/.helmignore create mode 100755 stable/ibm-crate/Chart.yaml create mode 100644 stable/ibm-crate/LICENSE create mode 100755 stable/ibm-crate/README.md create mode 100644 stable/ibm-crate/RELEASENOTES.md create mode 100755 stable/ibm-crate/templates/NOTES.txt create mode 100755 stable/ibm-crate/templates/_helpers.tpl create mode 100755 stable/ibm-crate/templates/deployment.yaml create mode 100755 stable/ibm-crate/templates/ingress.yaml create mode 100755 stable/ibm-crate/templates/service.yaml create mode 100755 stable/ibm-crate/values-metadata.yaml create mode 100755 stable/ibm-crate/values.yaml create mode 100755 stable/ibm-jetty/.helmignore create mode 100755 stable/ibm-jetty/Chart.yaml create mode 100755 stable/ibm-jetty/LICENSE create mode 100755 stable/ibm-jetty/README.md create mode 100755 stable/ibm-jetty/RELEASENOTES.md create mode 100755 stable/ibm-jetty/templates/NOTES.txt create mode 100755 stable/ibm-jetty/templates/_helpers.tpl create mode 100755 stable/ibm-jetty/templates/deployment.yaml create mode 100755 stable/ibm-jetty/templates/ingress.yaml create mode 100755 stable/ibm-jetty/templates/service.yaml create mode 100644 stable/ibm-jetty/values-metadata.yaml create mode 100755 stable/ibm-jetty/values.yaml create mode 100755 stable/ibm-open-liberty/.helmignore create mode 100755 stable/ibm-open-liberty/Chart.yaml create mode 100644 stable/ibm-open-liberty/LICENSE create mode 100755 stable/ibm-open-liberty/README.md create mode 100644 stable/ibm-open-liberty/RELEASENOTES.md create mode 100755 stable/ibm-open-liberty/templates/NOTES.txt create mode 100755 stable/ibm-open-liberty/templates/_helpers.tpl create mode 100755 stable/ibm-open-liberty/templates/configmap.yaml create mode 100755 stable/ibm-open-liberty/templates/deployment.yaml create mode 100755 stable/ibm-open-liberty/templates/ingress.yaml create mode 100755 stable/ibm-open-liberty/templates/service.yaml create mode 100755 stable/ibm-open-liberty/values-metadata.yaml create mode 100755 stable/ibm-open-liberty/values.yaml create mode 100755 stable/ibm-tomee/.helmignore create mode 100755 stable/ibm-tomee/Chart.yaml create mode 100644 stable/ibm-tomee/LICENSE create mode 100755 stable/ibm-tomee/README.md create mode 100644 stable/ibm-tomee/RELEASENOTES.md create mode 100755 stable/ibm-tomee/templates/NOTES.txt create mode 100755 stable/ibm-tomee/templates/_helpers.tpl create mode 100755 stable/ibm-tomee/templates/deployment.yaml create mode 100755 stable/ibm-tomee/templates/ingress.yaml create mode 100755 stable/ibm-tomee/templates/service.yaml create mode 100755 stable/ibm-tomee/values-metadata.yaml create mode 100755 stable/ibm-tomee/values.yaml diff --git a/repo/beta/ibm-adminer-0.1.0.tgz b/repo/beta/ibm-adminer-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4f6f28f98cf95f4ffc88e41f4e84926cb472f803 GIT binary patch literal 7797 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 H0D1rb-5!Ij literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-crate-0.1.0.tgz b/repo/beta/ibm-crate-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4453719b2a6989c4061542f624a52a6d40fca6a7 GIT binary patch literal 7841 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 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-jetty-0.1.0.tgz b/repo/beta/ibm-jetty-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..61ecebdc49541b5abf959c0500d64481b967114c GIT binary patch literal 7878 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 k$Dc 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 tFM{E?_Qm^cd-B3oTKl_yRq=hi9Dc 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 z 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 Jk{tki005M?n^ph- literal 0 HcmV?d00001 diff --git a/repo/beta/index.yaml b/repo/beta/index.yaml index da56391..2ebeca9 100755 --- a/repo/beta/index.yaml +++ b/repo/beta/index.yaml @@ -62,6 +62,57 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/dai-gpu-1.1.2.tgz version: 1.1.2 + ibm-adminer: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-10T16:24:49.087618805+05:30 + description: Database management in a single PHP file + digest: aa297b4b3fc4bb60a5d42a42894834915058e1de666ad5c6aec392e1d7da23ad + engine: gotpl + home: https://www.adminer.org/ + keywords: + - Database management + - database + - PHP + - Limited + - amd64 + - ppc64le + - ICP + maintainers: + - email: lysannef@us.ibm.com + name: IBM ISV Team + name: ibm-adminer + sources: + - https://hub.docker.com/_/adminer/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-adminer-0.1.0.tgz + version: 0.1.0 + ibm-crate: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-10T16:24:49.08858387+05:30 + description: A distributed SQL DBMS built atop NoSQL storage & indexing delivers + the best of SQL & NoSQL in one database. + digest: ab1b3f2d2e60a344bc0c6c3c6c4029f9d7f5fb960b57f9c21662cb345cacb2e5 + engine: gotpl + home: https://crate.io/ + keywords: + - crateDB + - database + - Limited + - ppc64le + - ICP + maintainers: + - email: lysannef@us.ibm.com + name: IBM ISV Team + name: ibm-crate + sources: + - https://hub.docker.com/r/ibmcom/crate-ppc64le/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-crate-0.1.0.tgz + version: 0.1.0 ibm-elasticsearch-exporter: - apiVersion: v1 appVersion: 1.0.2 @@ -88,6 +139,34 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-elasticsearch-exporter-0.2.2.tgz version: 0.2.2 + ibm-jetty: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-10T16:24:49.089499509+05:30 + description: Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, + HTTP/1.0, websocket, servlets, and more + digest: 38b4a15206782a57680372c9a0df944c2c87f7589590ff20433a9c430c202d1f + engine: gotpl + home: https://www.eclipse.org/jetty + keywords: + - eclipse + - jetty + - IDE + - Limited + - amd64 + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-jetty + sources: + - https://hub.docker.com/r/ppc64le/jetty/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-jetty-0.1.0.tgz + version: 0.1.0 ibm-kube-state-metrics: - apiVersion: v1 appVersion: 1.3.1 @@ -141,6 +220,31 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-memcached-2.1.1.tgz version: 2.1.1 + ibm-open-liberty: + - apiVersion: "1" + appVersion: "1.0" + created: 2018-09-10T16:24:49.090563019+05:30 + description: Open Liberty is a highly composable, fast to start, dynamic application + server runtime environment. + digest: dccc1a91410f2601cd8725bc835a2f30259d4d51fec1b7f56d30729f4cb742d9 + home: https://openliberty.io/ + icon: https://github.com/OpenLiberty/open-liberty/blob/master/logos/logo_horizontal_light_navy.png + keywords: + - server + - runtime + - ppc64le + - ICP + - Limited + maintainers: + - email: lysannef@us.ibm.com + name: IBM ISV Team + name: ibm-open-liberty + sources: + - https://github.com/OpenLiberty/open-liberty + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-open-liberty-0.1.0.tgz + version: 0.1.0 ibm-openldap: - appVersion: 2.4.44 created: 2018-09-05T03:55:49.790973967-07:00 @@ -216,4 +320,33 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-prometheus-pushgateway-0.1.2.tgz version: 0.1.2 -generated: 2018-09-05T03:55:49.787898663-07:00 + ibm-tomee: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-10T16:24:49.091521792+05:30 + description: Apache TomEE, pronounced "Tommy", is an all-Apache Java EE Web Profile + certified stack where Apache Tomcat is top dog. Apache TomEE is assembled from + a vanilla Apache Tomcat zip file. We start with Apache Tomcat, add our jars + and zip up the rest. The result is Tomcat with added EE features - TomEE + digest: fc7e4eac2cc27930d07b7ec00cbb360668daea0f0b1ed9266e3b713b3e50417c + engine: gotpl + home: http://tomee.apache.org/ + keywords: + - tomee + - apache + - Limited + - ICP + - ppc64le + - amd64 + - Tools + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-tomee + sources: + - https://hub.docker.com/r/ppc64le/tomee/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-tomee-0.1.0.tgz + version: 0.1.0 +generated: 2018-09-10T16:24:49.086385935+05:30 diff --git a/stable/ibm-adminer/.helmignore b/stable/ibm-adminer/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-adminer/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-adminer/Chart.yaml b/stable/ibm-adminer/Chart.yaml new file mode 100755 index 0000000..626eab7 --- /dev/null +++ b/stable/ibm-adminer/Chart.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +appVersion: "1.0" +description: Database management in a single PHP file +engine: gotpl +home: https://www.adminer.org/ +keywords: +- Database management +- database +- PHP +- Limited +- amd64 +- ppc64le +- ICP + +maintainers: +- email: lysannef@us.ibm.com + name: IBM ISV Team + +name: ibm-adminer +sources: +- https://hub.docker.com/_/adminer/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-adminer/LICENSE b/stable/ibm-adminer/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-adminer/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-adminer/README.md b/stable/ibm-adminer/README.md new file mode 100755 index 0000000..c6f2f0f --- /dev/null +++ b/stable/ibm-adminer/README.md @@ -0,0 +1,69 @@ +# Adminer + +[Adminer](https://www.adminer.org/)A database management in a single PHP file + +## TL;DR; + +```console +$ helm install stable/ibm-adminer +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Adminer](https://hub.docker.com/_/adminer/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-adminer +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Adminer](https://hub.docker.com/_/adminer/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Adminer chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official adminer tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-adminer` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-adminer +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-adminer/RELEASENOTES.md b/stable/ibm-adminer/RELEASENOTES.md new file mode 100644 index 0000000..f6a2510 --- /dev/null +++ b/stable/ibm-adminer/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | --------- | --------------------------- | ------- | +| 0.1.0 | Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-adminer/templates/NOTES.txt b/stable/ibm-adminer/templates/NOTES.txt new file mode 100755 index 0000000..cdb7ab3 --- /dev/null +++ b/stable/ibm-adminer/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "adminer.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[1].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "adminer.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "adminer.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "adminer.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-adminer/templates/_helpers.tpl b/stable/ibm-adminer/templates/_helpers.tpl new file mode 100755 index 0000000..d223408 --- /dev/null +++ b/stable/ibm-adminer/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "adminer.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 "adminer.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "adminer.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-adminer/templates/deployment.yaml b/stable/ibm-adminer/templates/deployment.yaml new file mode 100755 index 0000000..d4b017e --- /dev/null +++ b/stable/ibm-adminer/templates/deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "adminer.fullname" . }} + labels: + app: {{ template "adminer.name" . }} + chart: {{ template "adminer.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "adminer.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "adminer.name" . }} + release: {{ .Release.Name }} + chart: "{{ .Chart.Name }}" + heritage: "{{ .Release.Service }}" + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["php", "-S", "[::]:8080", "-t", "/var/www/html"] + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-adminer/templates/ingress.yaml b/stable/ibm-adminer/templates/ingress.yaml new file mode 100755 index 0000000..5e3dc9a --- /dev/null +++ b/stable/ibm-adminer/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "adminer.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "adminer.name" . }} + chart: {{ template "adminer.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-adminer/templates/service.yaml b/stable/ibm-adminer/templates/service.yaml new file mode 100755 index 0000000..5782720 --- /dev/null +++ b/stable/ibm-adminer/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "adminer.fullname" . }} + labels: + app: {{ template "adminer.name" . }} + chart: {{ template "adminer.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + app: {{ template "adminer.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-adminer/values-metadata.yaml b/stable/ibm-adminer/values-metadata.yaml new file mode 100755 index 0000000..2480b2e --- /dev/null +++ b/stable/ibm-adminer/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector: + __metadata: + name: "Node" + label: "beta.kubernetes.io/arch" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-adminer/values.yaml b/stable/ibm-adminer/values.yaml new file mode 100755 index 0000000..23b90ff --- /dev/null +++ b/stable/ibm-adminer/values.yaml @@ -0,0 +1,45 @@ +# Default values for adminer. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: adminer + tag: 4.6.2-standalone + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 8080 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" +tolerations: [] + +affinity: {} diff --git a/stable/ibm-crate/.helmignore b/stable/ibm-crate/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-crate/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-crate/Chart.yaml b/stable/ibm-crate/Chart.yaml new file mode 100755 index 0000000..e60ea79 --- /dev/null +++ b/stable/ibm-crate/Chart.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +appVersion: "1.0" +description: A distributed SQL DBMS built atop NoSQL storage & indexing delivers the best of SQL & NoSQL in one database. +engine: gotpl +home: https://crate.io/ +keywords: +- crateDB +- database +- Limited +- ppc64le +- ICP + +maintainers: +- email: lysannef@us.ibm.com + name: IBM ISV Team + +name: ibm-crate +sources: +- https://hub.docker.com/r/ibmcom/crate-ppc64le/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-crate/LICENSE b/stable/ibm-crate/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-crate/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-crate/README.md b/stable/ibm-crate/README.md new file mode 100755 index 0000000..91ac468 --- /dev/null +++ b/stable/ibm-crate/README.md @@ -0,0 +1,69 @@ +# CrateDB + +[CrateDB](https://crate.io/)A distributed SQL DBMS built atop NoSQL storage & indexing delivers the best of SQL & NoSQL in one database. + +## TL;DR; + +```console +$ helm install stable/ibm-crate +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [CrateDB](https://github.com/crate/crate) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm intall --name my-release stable/ibm-crate +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [CrateDB](https://hub.docker.com/r/ibmcom/crate-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the CrateDB chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official crate tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-crate` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-crate +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-crate/RELEASENOTES.md b/stable/ibm-crate/RELEASENOTES.md new file mode 100644 index 0000000..444e10c --- /dev/null +++ b/stable/ibm-crate/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-crate/templates/NOTES.txt b/stable/ibm-crate/templates/NOTES.txt new file mode 100755 index 0000000..94e50b5 --- /dev/null +++ b/stable/ibm-crate/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "crate.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "crate.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "crate.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "crate.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-crate/templates/_helpers.tpl b/stable/ibm-crate/templates/_helpers.tpl new file mode 100755 index 0000000..7782ddd --- /dev/null +++ b/stable/ibm-crate/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "crate.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 "crate.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "crate.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-crate/templates/deployment.yaml b/stable/ibm-crate/templates/deployment.yaml new file mode 100755 index 0000000..1129455 --- /dev/null +++ b/stable/ibm-crate/templates/deployment.yaml @@ -0,0 +1,53 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "crate.fullname" . }} + labels: + app: {{ template "crate.name" . }} + chart: {{ template "crate.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "crate.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "crate.name" . }} + release: {{ .Release.Name }} + chart: {{ template "crate.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 4200 + protocol: TCP + livenessProbe: + httpGet: + path: /_plugin/crate-admin/#/ + port: http + readinessProbe: + httpGet: + path: /_plugin/crate-admin/#/ + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-crate/templates/ingress.yaml b/stable/ibm-crate/templates/ingress.yaml new file mode 100755 index 0000000..eb5fb05 --- /dev/null +++ b/stable/ibm-crate/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "crate.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "crate.name" . }} + chart: {{ template "crate.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-crate/templates/service.yaml b/stable/ibm-crate/templates/service.yaml new file mode 100755 index 0000000..0c84daf --- /dev/null +++ b/stable/ibm-crate/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "crate.fullname" . }} + labels: + app: {{ template "crate.name" . }} + chart: {{ template "crate.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.externalPort }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + name: {{ .Values.service.name }} + selector: + app: {{ template "crate.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-crate/values-metadata.yaml b/stable/ibm-crate/values-metadata.yaml new file mode 100755 index 0000000..695535a --- /dev/null +++ b/stable/ibm-crate/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-crate/values.yaml b/stable/ibm-crate/values.yaml new file mode 100755 index 0000000..c95a125 --- /dev/null +++ b/stable/ibm-crate/values.yaml @@ -0,0 +1,48 @@ +# Default values for crate. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/crate-ppc64le + tag: 1.0.5 + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 4200 + externalPort: 4200 + internalPort: 4200 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-jetty/.helmignore b/stable/ibm-jetty/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-jetty/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-jetty/Chart.yaml b/stable/ibm-jetty/Chart.yaml new file mode 100755 index 0000000..3766d80 --- /dev/null +++ b/stable/ibm-jetty/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +appVersion: "1.0" +description: Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more +engine: gotpl +home: https://www.eclipse.org/jetty +keywords: +- eclipse +- jetty +- IDE +- Limited +- amd64 +- ppc64le +- Tools +- ICP + +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team + +name: ibm-jetty +sources: +- https://hub.docker.com/r/ppc64le/jetty/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-jetty/LICENSE b/stable/ibm-jetty/LICENSE new file mode 100755 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-jetty/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-jetty/README.md b/stable/ibm-jetty/README.md new file mode 100755 index 0000000..a1b83f6 --- /dev/null +++ b/stable/ibm-jetty/README.md @@ -0,0 +1,69 @@ +# Jetty + +[Jetty](https://www.eclipse.org/jetty)Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more. + +## TL;DR; + +```console +$ helm install stable/ibm-jetty +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Jetty](https://hub.docker.com/_/jetty/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-jetty +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Jetty](https://hub.docker.com/_/jetty/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Jetty chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official jetty tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-jetty` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-jetty +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-jetty/RELEASENOTES.md b/stable/ibm-jetty/RELEASENOTES.md new file mode 100755 index 0000000..da3820d --- /dev/null +++ b/stable/ibm-jetty/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | --------- | --------------------------- | ------- | +| 0.1.0 | Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-jetty/templates/NOTES.txt b/stable/ibm-jetty/templates/NOTES.txt new file mode 100755 index 0000000..0d1114a --- /dev/null +++ b/stable/ibm-jetty/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "jetty.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "jetty.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "jetty.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "jetty.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-jetty/templates/_helpers.tpl b/stable/ibm-jetty/templates/_helpers.tpl new file mode 100755 index 0000000..17c13df --- /dev/null +++ b/stable/ibm-jetty/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "jetty.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 "jetty.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "jetty.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-jetty/templates/deployment.yaml b/stable/ibm-jetty/templates/deployment.yaml new file mode 100755 index 0000000..21a3633 --- /dev/null +++ b/stable/ibm-jetty/templates/deployment.yaml @@ -0,0 +1,64 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "jetty.fullname" . }} + labels: + app: {{ template "jetty.name" . }} + chart: {{ template "jetty.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "jetty.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "jetty.name" . }} + chart: "{{ .Chart.Name }}" + heritage: "{{ .Release.Service }}" + release: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 8080 + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + ports: + - name: http1 + containerPort: 8443 + # livenessProbe: + # httpGet: + # path: / + # port: http + # readinessProbe: + # httpGet: + # path: / + # port: http + + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-jetty/templates/ingress.yaml b/stable/ibm-jetty/templates/ingress.yaml new file mode 100755 index 0000000..6020604 --- /dev/null +++ b/stable/ibm-jetty/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "jetty.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "jetty.name" . }} + chart: {{ template "jetty.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-jetty/templates/service.yaml b/stable/ibm-jetty/templates/service.yaml new file mode 100755 index 0000000..7d33fa2 --- /dev/null +++ b/stable/ibm-jetty/templates/service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "jetty.fullname" . }} + labels: + app: {{ template "jetty.name" . }} + chart: {{ template "jetty.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.port.port1 }} + targetPort: http + name: http + - port: {{ .Values.port.port2 }} + targetPort: http1 + name: http1 + + selector: + app: {{ template "jetty.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-jetty/values-metadata.yaml b/stable/ibm-jetty/values-metadata.yaml new file mode 100644 index 0000000..898ecf9 --- /dev/null +++ b/stable/ibm-jetty/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "beta.kubernetes.io/arch" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-jetty/values.yaml b/stable/ibm-jetty/values.yaml new file mode 100755 index 0000000..76c9286 --- /dev/null +++ b/stable/ibm-jetty/values.yaml @@ -0,0 +1,51 @@ +# Default values for jetty. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ppc64le/jetty + tag: 9.2.24 + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 8080 + +port: + port1: 80 + port2: 443 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" +#nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-open-liberty/.helmignore b/stable/ibm-open-liberty/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-open-liberty/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-open-liberty/Chart.yaml b/stable/ibm-open-liberty/Chart.yaml new file mode 100755 index 0000000..6dedc04 --- /dev/null +++ b/stable/ibm-open-liberty/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: 1 +appVersion: "1.0" + +description: Open Liberty is a highly composable, fast to start, dynamic application + server runtime environment. +home: https://openliberty.io/ +icon: https://github.com/OpenLiberty/open-liberty/blob/master/logos/logo_horizontal_light_navy.png +name: ibm-open-liberty +keywords: +- server +- runtime +- ppc64le +- ICP +- Limited +maintainers: +- email: lysannef@us.ibm.com + name: IBM ISV Team + +sources: +- https://github.com/OpenLiberty/open-liberty +version: 0.1.0 +tillerVersion: '>=2.7.2' diff --git a/stable/ibm-open-liberty/LICENSE b/stable/ibm-open-liberty/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-open-liberty/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-open-liberty/README.md b/stable/ibm-open-liberty/README.md new file mode 100755 index 0000000..b8b9490 --- /dev/null +++ b/stable/ibm-open-liberty/README.md @@ -0,0 +1,69 @@ +# Open Liberty + +[Open Liberty](http://openliberty.io) is a highly composable, fast to start, dynamic application server runtime environment. + +## TL;DR; + +```console +$ helm install stable/ibm-open-liberty +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Open Liberty](https://github.com/OpenLiberty/open-liberty) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-open-liberty +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Open Liberty](https://hub.docker.com/r/openliberty/open-liberty/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Open Liberty chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official open-liberty tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-open-liberty` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-open-liberty +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-open-liberty/RELEASENOTES.md b/stable/ibm-open-liberty/RELEASENOTES.md new file mode 100644 index 0000000..8d7c5d8 --- /dev/null +++ b/stable/ibm-open-liberty/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7 + | | diff --git a/stable/ibm-open-liberty/templates/NOTES.txt b/stable/ibm-open-liberty/templates/NOTES.txt new file mode 100755 index 0000000..7844e50 --- /dev/null +++ b/stable/ibm-open-liberty/templates/NOTES.txt @@ -0,0 +1,20 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "openliberty.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[1].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT + +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "openliberty.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "openliberty.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "openliberty.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-open-liberty/templates/_helpers.tpl b/stable/ibm-open-liberty/templates/_helpers.tpl new file mode 100755 index 0000000..68534a6 --- /dev/null +++ b/stable/ibm-open-liberty/templates/_helpers.tpl @@ -0,0 +1,40 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "openliberty.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 "openliberty.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "open-liberty.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "open-liberty.serviceIP" -}} +{{- if eq .Values.serviceType "ClusterIP" -}} +127.0.0.1 +{{- else -}} +{{- index .Values (printf "%sLoadBalancerIP" .Chart.Name) | default "" -}} +{{- end -}} +{{- end -}} + +{{/* +Gets the host to be used for this application. +If not using ClusterIP, or if a host or LoadBalancerIP is not defined, the value will be empty. +*/}} + diff --git a/stable/ibm-open-liberty/templates/configmap.yaml b/stable/ibm-open-liberty/templates/configmap.yaml new file mode 100755 index 0000000..1517366 --- /dev/null +++ b/stable/ibm-open-liberty/templates/configmap.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "openliberty.fullname" . }} + labels: + app: "{{ template "openliberty.name" . }}" + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" + +data: + myvalue: "Open Liberty" diff --git a/stable/ibm-open-liberty/templates/deployment.yaml b/stable/ibm-open-liberty/templates/deployment.yaml new file mode 100755 index 0000000..c9c8cbe --- /dev/null +++ b/stable/ibm-open-liberty/templates/deployment.yaml @@ -0,0 +1,57 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ template "openliberty.fullname" . }} + labels: + app: {{ template "openliberty.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + replicas: 1 + selector: + matchLabels: + app: {{ template "openliberty.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "openliberty.name" . }} + release: {{ .Release.Name }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + heritage: "{{ .Release.Service }}" + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.name }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy | quote }} + ports: + - name: http + containerPort: 9080 + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 120 + timeoutSeconds: 5 + failureThreshold: 6 + readinessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 30 + timeoutSeconds: 3 + periodSeconds: 5 + resources: +{{ toYaml .Values.resources | indent 10 }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} diff --git a/stable/ibm-open-liberty/templates/ingress.yaml b/stable/ibm-open-liberty/templates/ingress.yaml new file mode 100755 index 0000000..935b42e --- /dev/null +++ b/stable/ibm-open-liberty/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "openliberty.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "openliberty.name" . }} + chart: {{ template "open-liberty.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-open-liberty/templates/service.yaml b/stable/ibm-open-liberty/templates/service.yaml new file mode 100755 index 0000000..5b8aaa9 --- /dev/null +++ b/stable/ibm-open-liberty/templates/service.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "openliberty.fullname" . }} + labels: + app: {{ template "openliberty.name" . }} + chart: {{ template "open-liberty.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: 9080 + name: http + - port: 9443 + name: https + targetPort: http + protocol: TCP + selector: + app: {{ template "openliberty.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-open-liberty/values-metadata.yaml b/stable/ibm-open-liberty/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-open-liberty/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-open-liberty/values.yaml b/stable/ibm-open-liberty/values.yaml new file mode 100755 index 0000000..e909711 --- /dev/null +++ b/stable/ibm-open-liberty/values.yaml @@ -0,0 +1,28 @@ +#container specification + +image: + name: open-liberty + tag: kernel + pullPolicy: IfNotPresent + +# service specification +service: + type: NodePort + +#Resource specification +resources: + requests: + memory: 200Mi + cpu: 100m + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - ghost.local + tls: [] + +node: "ppc64le" diff --git a/stable/ibm-tomee/.helmignore b/stable/ibm-tomee/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-tomee/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-tomee/Chart.yaml b/stable/ibm-tomee/Chart.yaml new file mode 100755 index 0000000..7198433 --- /dev/null +++ b/stable/ibm-tomee/Chart.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +appVersion: "1.0" +description: Apache TomEE, pronounced "Tommy", is an all-Apache Java EE Web Profile certified stack where Apache Tomcat is top dog. Apache TomEE is assembled from a vanilla Apache Tomcat zip file. We start with Apache Tomcat, add our jars and zip up the rest. The result is Tomcat with added EE features - TomEE + +engine: gotpl +home: http://tomee.apache.org/ + +keywords: +- tomee +- apache +- Limited +- ICP +- ppc64le +- amd64 +- Tools + + +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team + +name: ibm-tomee +sources: +- https://hub.docker.com/r/ppc64le/tomee/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-tomee/LICENSE b/stable/ibm-tomee/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-tomee/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-tomee/README.md b/stable/ibm-tomee/README.md new file mode 100755 index 0000000..0797a26 --- /dev/null +++ b/stable/ibm-tomee/README.md @@ -0,0 +1,69 @@ +# TOMEE + +[TOMEE](http://tomee.apache.org/) The Embedded or Remote EE Application Server. + +## TL;DR; + +```console +$ helm install stable/ibm-tomee +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [TOMEE](https://github.com/apache/tomee) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm intall --name my-release stable/ibm-tomee +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [TOMEE](https://hub.docker.com/r/ppc64le/tomee/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Open Liberty chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official apache tomee tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-tomee` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-tomee +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-tomee/RELEASENOTES.md b/stable/ibm-tomee/RELEASENOTES.md new file mode 100644 index 0000000..444e10c --- /dev/null +++ b/stable/ibm-tomee/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-tomee/templates/NOTES.txt b/stable/ibm-tomee/templates/NOTES.txt new file mode 100755 index 0000000..c727c73 --- /dev/null +++ b/stable/ibm-tomee/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "tomee.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "tomee.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "tomee.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "tomee.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8888 to use your application" + kubectl port-forward $POD_NAME 8888:80 +{{- end }} diff --git a/stable/ibm-tomee/templates/_helpers.tpl b/stable/ibm-tomee/templates/_helpers.tpl new file mode 100755 index 0000000..cd19458 --- /dev/null +++ b/stable/ibm-tomee/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "tomee.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 "tomee.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "tomee.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-tomee/templates/deployment.yaml b/stable/ibm-tomee/templates/deployment.yaml new file mode 100755 index 0000000..19e453e --- /dev/null +++ b/stable/ibm-tomee/templates/deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "tomee.fullname" . }} + labels: + app: {{ template "tomee.name" . }} + chart: {{ template "tomee.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "tomee.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "tomee.name" . }} + release: {{ .Release.Name }} + chart: {{ template "tomee.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["catalina.sh", "run"] + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-tomee/templates/ingress.yaml b/stable/ibm-tomee/templates/ingress.yaml new file mode 100755 index 0000000..9165b79 --- /dev/null +++ b/stable/ibm-tomee/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "tomee.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "tomee.name" . }} + chart: {{ template "tomee.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-tomee/templates/service.yaml b/stable/ibm-tomee/templates/service.yaml new file mode 100755 index 0000000..821a160 --- /dev/null +++ b/stable/ibm-tomee/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "tomee.fullname" . }} + labels: + app: {{ template "tomee.name" . }} + chart: {{ template "tomee.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + app: {{ template "tomee.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-tomee/values-metadata.yaml b/stable/ibm-tomee/values-metadata.yaml new file mode 100755 index 0000000..b208452 --- /dev/null +++ b/stable/ibm-tomee/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSele or: + __metadata: + name: "Node Selector" + label: "nodeSelector" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-tomee/values.yaml b/stable/ibm-tomee/values.yaml new file mode 100755 index 0000000..217d912 --- /dev/null +++ b/stable/ibm-tomee/values.yaml @@ -0,0 +1,46 @@ +# Default values for tomee. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: tomee + tag: 8-jre-1.7.5-webprofile + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 8080 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "amd64" + +tolerations: [] + +affinity: {} From a142167752fbe646f3c05bc9651cd814bb778398 Mon Sep 17 00:00:00 2001 From: Lysanne Fernandes Date: Tue, 11 Sep 2018 12:23:23 +0530 Subject: [PATCH 3/6] Added Geode, Glassfish, OrientDB, RStudio, Strongloop --- repo/beta/ibm-geode-0.1.0.tgz | Bin 0 -> 7929 bytes repo/beta/ibm-glassfish-0.1.0.tgz | Bin 0 -> 7988 bytes repo/beta/ibm-orientdb-0.1.0.tgz | Bin 0 -> 8444 bytes repo/beta/ibm-rstudio-0.1.0.tgz | Bin 0 -> 7886 bytes repo/beta/ibm-strongloop-0.1.0.tgz | Bin 0 -> 7811 bytes repo/beta/index.yaml | 131 +++++++++++- stable/ibm-geode/.helmignore | 21 ++ stable/ibm-geode/Chart.yaml | 22 ++ stable/ibm-geode/LICENSE | 202 ++++++++++++++++++ stable/ibm-geode/README.md | 69 ++++++ stable/ibm-geode/RELEASENOTES.md | 19 ++ stable/ibm-geode/templates/NOTES.txt | 19 ++ stable/ibm-geode/templates/_helpers.tpl | 32 +++ stable/ibm-geode/templates/deployment.yaml | 55 +++++ stable/ibm-geode/templates/ingress.yaml | 39 ++++ stable/ibm-geode/templates/service.yaml | 20 ++ stable/ibm-geode/values-metadata.yaml | 14 ++ stable/ibm-geode/values.yaml | 48 +++++ stable/ibm-glassfish/.helmignore | 21 ++ stable/ibm-glassfish/Chart.yaml | 24 +++ stable/ibm-glassfish/LICENSE | 202 ++++++++++++++++++ stable/ibm-glassfish/README.md | 69 ++++++ stable/ibm-glassfish/RELEASENOTES.md | 19 ++ stable/ibm-glassfish/templates/NOTES.txt | 31 +++ stable/ibm-glassfish/templates/_helpers.tpl | 32 +++ .../ibm-glassfish/templates/deployment.yaml | 54 +++++ stable/ibm-glassfish/templates/ingress.yaml | 39 ++++ stable/ibm-glassfish/templates/service.yaml | 21 ++ stable/ibm-glassfish/values-metadata.yaml | 14 ++ stable/ibm-glassfish/values.yaml | 48 +++++ stable/ibm-orientdb/.helmignore | 21 ++ stable/ibm-orientdb/Chart.yaml | 22 ++ stable/ibm-orientdb/LICENSE | 202 ++++++++++++++++++ stable/ibm-orientdb/README.md | 69 ++++++ stable/ibm-orientdb/RELEASENOTES.md | 19 ++ stable/ibm-orientdb/templates/NOTES.txt | 20 ++ stable/ibm-orientdb/templates/_helpers.tpl | 32 +++ stable/ibm-orientdb/templates/deployment.yaml | 89 ++++++++ stable/ibm-orientdb/templates/ingress.yaml | 39 ++++ stable/ibm-orientdb/templates/secrets.yaml | 16 ++ stable/ibm-orientdb/templates/service.yaml | 21 ++ stable/ibm-orientdb/values-metadata.yaml | 14 ++ stable/ibm-orientdb/values.yaml | 74 +++++++ stable/ibm-rstudio/.helmignore | 21 ++ stable/ibm-rstudio/Chart.yaml | 22 ++ stable/ibm-rstudio/LICENSE | 202 ++++++++++++++++++ stable/ibm-rstudio/README.md | 69 ++++++ stable/ibm-rstudio/RELEASENOTES.md | 19 ++ stable/ibm-rstudio/templates/NOTES.txt | 19 ++ stable/ibm-rstudio/templates/_helpers.tpl | 32 +++ stable/ibm-rstudio/templates/deployment.yaml | 54 +++++ stable/ibm-rstudio/templates/ingress.yaml | 39 ++++ stable/ibm-rstudio/templates/service.yaml | 19 ++ stable/ibm-rstudio/values-metadata.yaml | 13 ++ stable/ibm-rstudio/values.yaml | 48 +++++ stable/ibm-strongloop/.helmignore | 21 ++ stable/ibm-strongloop/Chart.yaml | 23 ++ stable/ibm-strongloop/LICENSE | 202 ++++++++++++++++++ stable/ibm-strongloop/README.md | 69 ++++++ stable/ibm-strongloop/RELEASENOTES.md | 19 ++ stable/ibm-strongloop/templates/NOTES.txt | 19 ++ stable/ibm-strongloop/templates/_helpers.tpl | 32 +++ .../ibm-strongloop/templates/deployment.yaml | 58 +++++ stable/ibm-strongloop/templates/ingress.yaml | 39 ++++ stable/ibm-strongloop/templates/service.yaml | 18 ++ stable/ibm-strongloop/values-metadata.yaml | 14 ++ stable/ibm-strongloop/values.yaml | 46 ++++ 67 files changed, 3019 insertions(+), 1 deletion(-) create mode 100644 repo/beta/ibm-geode-0.1.0.tgz create mode 100644 repo/beta/ibm-glassfish-0.1.0.tgz create mode 100644 repo/beta/ibm-orientdb-0.1.0.tgz create mode 100644 repo/beta/ibm-rstudio-0.1.0.tgz create mode 100644 repo/beta/ibm-strongloop-0.1.0.tgz create mode 100755 stable/ibm-geode/.helmignore create mode 100755 stable/ibm-geode/Chart.yaml create mode 100755 stable/ibm-geode/LICENSE create mode 100755 stable/ibm-geode/README.md create mode 100755 stable/ibm-geode/RELEASENOTES.md create mode 100755 stable/ibm-geode/templates/NOTES.txt create mode 100755 stable/ibm-geode/templates/_helpers.tpl create mode 100755 stable/ibm-geode/templates/deployment.yaml create mode 100755 stable/ibm-geode/templates/ingress.yaml create mode 100755 stable/ibm-geode/templates/service.yaml create mode 100755 stable/ibm-geode/values-metadata.yaml create mode 100755 stable/ibm-geode/values.yaml create mode 100755 stable/ibm-glassfish/.helmignore create mode 100755 stable/ibm-glassfish/Chart.yaml create mode 100644 stable/ibm-glassfish/LICENSE create mode 100755 stable/ibm-glassfish/README.md create mode 100644 stable/ibm-glassfish/RELEASENOTES.md create mode 100755 stable/ibm-glassfish/templates/NOTES.txt create mode 100755 stable/ibm-glassfish/templates/_helpers.tpl create mode 100755 stable/ibm-glassfish/templates/deployment.yaml create mode 100755 stable/ibm-glassfish/templates/ingress.yaml create mode 100755 stable/ibm-glassfish/templates/service.yaml create mode 100755 stable/ibm-glassfish/values-metadata.yaml create mode 100755 stable/ibm-glassfish/values.yaml create mode 100755 stable/ibm-orientdb/.helmignore create mode 100755 stable/ibm-orientdb/Chart.yaml create mode 100755 stable/ibm-orientdb/LICENSE create mode 100755 stable/ibm-orientdb/README.md create mode 100755 stable/ibm-orientdb/RELEASENOTES.md create mode 100755 stable/ibm-orientdb/templates/NOTES.txt create mode 100755 stable/ibm-orientdb/templates/_helpers.tpl create mode 100755 stable/ibm-orientdb/templates/deployment.yaml create mode 100755 stable/ibm-orientdb/templates/ingress.yaml create mode 100755 stable/ibm-orientdb/templates/secrets.yaml create mode 100755 stable/ibm-orientdb/templates/service.yaml create mode 100644 stable/ibm-orientdb/values-metadata.yaml create mode 100755 stable/ibm-orientdb/values.yaml create mode 100755 stable/ibm-rstudio/.helmignore create mode 100755 stable/ibm-rstudio/Chart.yaml create mode 100755 stable/ibm-rstudio/LICENSE create mode 100755 stable/ibm-rstudio/README.md create mode 100755 stable/ibm-rstudio/RELEASENOTES.md create mode 100755 stable/ibm-rstudio/templates/NOTES.txt create mode 100755 stable/ibm-rstudio/templates/_helpers.tpl create mode 100755 stable/ibm-rstudio/templates/deployment.yaml create mode 100755 stable/ibm-rstudio/templates/ingress.yaml create mode 100755 stable/ibm-rstudio/templates/service.yaml create mode 100755 stable/ibm-rstudio/values-metadata.yaml create mode 100755 stable/ibm-rstudio/values.yaml create mode 100755 stable/ibm-strongloop/.helmignore create mode 100755 stable/ibm-strongloop/Chart.yaml create mode 100644 stable/ibm-strongloop/LICENSE create mode 100755 stable/ibm-strongloop/README.md create mode 100644 stable/ibm-strongloop/RELEASENOTES.md create mode 100755 stable/ibm-strongloop/templates/NOTES.txt create mode 100755 stable/ibm-strongloop/templates/_helpers.tpl create mode 100755 stable/ibm-strongloop/templates/deployment.yaml create mode 100755 stable/ibm-strongloop/templates/ingress.yaml create mode 100755 stable/ibm-strongloop/templates/service.yaml create mode 100755 stable/ibm-strongloop/values-metadata.yaml create mode 100755 stable/ibm-strongloop/values.yaml diff --git a/repo/beta/ibm-geode-0.1.0.tgz b/repo/beta/ibm-geode-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9ce9337135a5d84b216f5ebd96467647bbaf1da1 GIT binary patch literal 7929 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 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-orientdb-0.1.0.tgz b/repo/beta/ibm-orientdb-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4809b8aed032f813e2b627d7932016470b8f0e22 GIT binary patch literal 8444 zcmVDc zVQyr3R8em|NM&qo0PKBhcic9z;C$w@GG~onX`(eB-*hh9Z88d$0sL3 zljv@YL4W~3Nj{KSnFT8-g)FJpDxejV)PyMwIcwlJc0bnBEjiG~3b)I3^VO&nay>@$1r!U9`Ec#zRn9> z?PRa`;zpa&j-pD z{vSNvf3z(BkDomJEdQV4x_8K@tdS1<+QU?vRyy+R9$e0aMQLa7^TG3Hqp3C(bB>oV z6_R6vLtaQ`I9xL$*hF#*PQ!#l&8+1m2<0>^bYsBrs+P=gn`fEfwG;(=svG6Tu$N_` zVlzI@01U6S6;7K42@48AL}wJm5x}w8820o1eD6^PP&ZPZX(@`u7>=hW+MOA0xpG-% zxw#ev0d|X;kKsg@{7f5{WvHX@KK|bu!~VnlhvC~ke*0=SyN8n_;*7y)?PyAlvyl z>qzS&zc8rrj^oO~wU$lAvwO8~!xgUIy%l=lF!$g9DyAAH3W%%j2aG+0IY!fC^191*v66(Q??reFQC{O|PEpW7amJEZVn zG+5VZFc`wkToiLCh4tcFE)=Uoffn{!pg}>Fj?fwvFn}$z|D~6YZO|qTq#7xQp!CXM zU~6802y+2!KZIhgwMADUf!2-8O%AX%tM@@GICyb^GhnJ@rUb1bobUf~G{hg_f5BnzTXBg3Dic0s(j?`b~0ca&! zMO4(y81{B|EC03P71@@({jZ*jFu~s%ZtvDUQ@Z3AT=K$c;}z(HJC^r#FEa&kj5k+< z>|U=I@olbdkGT_c6wJkN>y-@X@mW z_h|3o?q~n+Q(TuCX54uX4fRIne#$<2Lq;W2k-{alsW9~ z3!I<|rpIzX9mN!ehp%6cKujV3$wx!c~_`f+izaFcw zm?x))N57t(o?kAl;GLFkX;o0==Lprl-1{Y00g1N*2&3COt@ZX2a>r*&s3BnccOfVo zuk6d+Uvlf1Yi!QS5(&%cUik8MKnN6b9kT~t1T@B9w8Yx6t|`e2FZpdgca_|*63;X% zzhx4Qt$EjK003&*F&sOn*a94T#eu<;-#{f)<3d1&44i_5uHsV#4;X0-_1KSd9G`8uwnOh^)? z1(#IRZ@*kw%?{Hs;Q+{ZF_y*#BSWTw-{XyZRqb1-;My?>^XF zvj2~F_a1+?|DWP|{d(sU zLM}NK4YJT~6hhQQmc1O0x}Pb;$$hbbBEu++*z)w68zV{%Z!i>B1w4L0A4PT1OsC=& zW4IO=$|ZjG2tK9299TOBYLNx})-Wlif|uw75bAmMf_v!H-r*QH4GR-qu*Pz*y5jJc z)~ojuo(e8Y3(RmIVsHx0C@9;SEQlC~Cl}ZjwJVy%?L0f4g7JFK18I!}(aqlzuFV=W z7V*Ro50MYpZl-OgCnHG`&n5oYk~Fs2*x*hyM{5_qd_nk+zq$LeCU~}_@KAd8p~JOz z_k$6vjZkh1gFo8QAMIcXnjiN=7;V$%9s?#Tivkn!^0=zBx`9=EE6FBYzH5c4*k-JPjS4M=lZ^tV?J2r#2ZwJee&XPjnN}sOE*vEmZ>v8fmq8-y^zn-6-Uj7;r zW@(h}ORnD;U5$IUA>`5i!WZX!y8PRR$zJbz#TR2(NuMRHD2dY_Fir=<=p}gVqMhl$ z9+6-OhyLvKv5?}LD{k$X(G%Vu2jPFu-STWh&9b#nH#aw3aK7A@&{%^g-ui*Fvd3Qi z=^YdWuifZK6}t4biT*`PHHO*WL?5_N!U-l1xnzqAUT9U?F+ASwwQ-{2x^eB#57M6v zXQlYNX!7qm`$zAb{G+?G+un!s+x|!5w~e%2#_4|;YyGRIe|O&Mih>!cO8qmdWMa=_ zdG!sTHc<}tTGqiRh>DtNGstpX0wza=oY6+2;Asvpfm8KA{TP zl$-p{wo9n3ptZ(cYfCO|<1p|UbMv%uuLg>Z(|DENI5}Xj^uW?hgzI(t!=+lXkHa?bfv;4D{eYRb2kR@}ZA&!$$p*t-pQJnw?#cBEtJ5f_CZ{+r{S28GLNQ2RpPH$lH_#syXyn){u?OMg<3ssvyzJ5(x z%nxKeXD1D9G~W#9@AuF*%D*?#pGN+ltnvT$KFj~7xHiZ?t^R*=1rQU^UJ6x8k0 zN-|ZWkPZnCj8Hty%#6FUBT>(S5h$=}Ql{f#%~vmN{s zzuIfH(*Z*Fys2sLlg;ku_NLD6=M(lSyPvzN&hG#J>>m8YjL?mR~ zQF6B9+Zp}W-(!lbC;!impB|lD9DVFD-Yx(8kM|xtUXuU)NBf`m|9_HeB_F?X9n`Ft zb9g2SuIM?%jaS@xw4d(|;r}w#FtdRD-Q9;9JB7`;H#avqqhWGwW;@akWq0WDgUh4y z=NE8ratKdPPY#bSk55l7;Jedv`0?Us2NZYIS&gae03H?T>he0PN*( z$SIvJw6b{?uo;9I4ZzNslu&V|Xk(V+rt%M76boZ1sxI$xRj*PI(}E;O0g*vpM{y-#sZTl;Pp{WxTXmL9EdA!id@2fxc1PfHuID z6K(;ladU0N-)Ow(T&(Hg=FEYxFf&ZK_}E>bLxKRGF$qTmdIgC_;RM6pPgW3=h=nSF zNg2RsH|GIC!L1*<(8?JthqQ+>e369o5NCsT8&z^cPh-#{eh>&{QmJiEZCi-*7WTOTr6>NC@RW578j{-JotB`QHCT6foh5 zQ+l#ZPyN$z9P@4W^;jw1~JEhExKyK0owuIRB%VX!FMo3dJbqh3p1%lpswEIVT zz_LQq>hsJ+j=JaH_out->}{@&mo>R=gC9!lPu`FSL2Jq7-hl zc|{nL9zss*L_nxGjaC3W>B6)sRwmD}1o=<&(h#*NGGM_1E3sBDMD3=u!=Nszw@{!c z>EI9p%+X%8$fI^1>x~@>_|@@hmP3tpsu+p#Vt&@)HmB56%M%(*WS%Vg4n?_ z2jCd%X%J=~AbA=@#3#(+;wciv630O9H@fn=3WuWQLRs*SZFkCmm%?d-;%>NqeA*7v za=;L{WD{-TH*MlFr_vOFp_QXE6o!5?`psNR5(>~p%!Fcc&6=<3mJ@FsHGWi1a zkeg$1>4xqTVGOUBXyudF%n+v_U1%B=H(V|-Qg}s#n+QdGg7NTnTy&uvH&c3USWkzE zjckd!f)rAR>uI;@Pf?Wz8^3nNmt~+8*<`$yfN@`Vu%#^?2&}gz#KUFqMA{m@rw#Se zW+U>$L?|3;eXW?3QEl61QVAE7NAx?0y9jeaFNgvS6t}MT-HN!%WbWQ+EmB7XwK5Hl z{667xCa0jMo1K@tS$i0?bBf#hyuEMLvYrAZRE$=l7~(2Sm?S>BG1yO$^U@0v&~T6)vo8IGT`x zY-DKRmme)(JRc+YS}DU7rwEVY*D<^T-LYrE9bBzvfB7R;G?dR}4 zx>Y#r({}pNvx1Ap8`r?AYlE3Y%u=n)Suux%K!7S_vhZFU`2|1g#-G(vbJs8#+3!Xh zS>6crHI!B(T6rt3>FcPNGc&`$NiUdmi_z3@J_KP5zt#mR@)c_y;y)ZPMq7M{?qH34 zyrStkbzV0UDGIqjMy(}V47)ouH{R4*x)U6WG;T}X{8kr}v%E6m8gov%#V^o#Alio7&ox=SioN1Pn6qn6US33q;%GgcqMxV1aw&)5 zuc&HmoL`t$4+KX!c!i{9;>?f)evRU&^qfDM1|=7s%BZ^nYK3H?vY~ABNv9a z!KH|{j*epaSvPGgWSwxx)9s=-5fZO##_(rSav^Zv>I_!vTN`cdhzN$$D0GAVlm9Lh zFp%uVHp1alC7*dCz+8)b=MyYx#dj$8$#_4PSGvSB2Fu=hd*7=&AE5Q`kWYD zrWlL{Nr{0*Cu70nMX$knil!QRK0=R1xVdgEazAYLCVYb?8+M@(5u{_Siu0v| zd=lL?&f2(Y+t0MI4rYiiqUYlc!wXRhI&3I)ecR{|ua${1vJcCV#Mfj-+44;O-%+#ge1nG)$ZcVo}$LTbP?qL9D@NS*7+pH?KV-3_`Bd zQCQgI}I#pJ?SaDy???L*R!?JvceNJbrpK0LO3rL+L1XVGMM+ zlW|h%N>soaNm-#RtycmnhMtVJ&QpxpF&$q^*7!_9O8%hKNHh3}&=iJup=$zWJ%!iO zm6(k=kepczr_wBa=+a3mJriul5lt3x>}cIlsK-_Ioj81*D)SzbrE=X*K!KQcdInAA zth0ct@U2%( zJF%Hku(;R|ilo`OR+N4Yr+E#NY+i@JO0}wIgUV2+f3HJP7Z)ma+Qi`=4lso!aUR*_Vm-K^cnejKVuKBZQi5YHlnqxi18v z7$i#)2J+s8Pmns^g+w#MJ>xHegiu7rZ+VfZcv8GAK@6WUfQ1k9fvf;@l9*rHwEzc0XY7>wA_KhRcMvRAD)+vOk#vk(< zPV42&YI>%@FKJ_)u9#U6HbQ|v<$MyBq76F4OswW-qcp{J3)Wzb3GkG9lEa~}6gqK( ztzIyLbXl}Q(4sn7#DnS(Q^{^RH9)IK!Aq9~8+Hp8WZ!nEZXvFm74zi~HEk`N?Jw>& zXsY-P4ldyMVgTPBTpV9S;=VY({NeP+OL%c`etvLrd3}UulrzfN1lkd)t zPrg5Tespp1~hRI&3hdL`|W79(GYB1}0@2lJ&XWwQYo(VP)l8WcYXnBEOBkv*} z9){8&DcR}fT$@FbYKfIBr;STf28z$5m~mC`?O|K(9`;hXZRY2_{Js?rnJu{#6LRPX zxtY<{wsng*qyttsOV#o9^5L~-&wOYDlelD(jx3KE0a{vCu~|QdkGbXHyqDw0ma_6=)AAVS>S5Wss0_|H5%f{av%nioet z=nQot6ffrJy7$F(xmftla$EF5>11nSEy{HEitUthrE?xhpA6|h>e?|?a6gIKr$K}E zTM*yzN(tA>V_UtI5qHoN8M091x9p(WLC@EhTEgk#A-)o}SMK3C{Ge|z67r#BOE98m z0=SzW?PyUlsfM&ZcPNWc5;xpNMcS!R!k0Xqu8PuW^e$7ButCTPW6UI`UO%J2dwD0? zOk3KNe9Bend(5>g*QCywsYnw==enh0C(eyAU9~J^j+wRGp!kF&>Tor0JXr*1qni*N zuG`VHb>?ppZcN<978lRJM<<79SJ!QWqu&qC&W=tFkN@8omyogrbuAZR`$D>P58|5` zZrWNB09@X&!!T^4SUJR-+-fZ(H-105kLHG5Bp;5=A~F+c)e!Y1k#r7QhgyBv?iWa8Gy?yRZJ=nK!c;rgjV#f{Z}AAxL1MO(+APY7 zT`0$H+d?P>^&Wv7UT}Z5dUuq&FBrt24cmIYv9>!3E_s;_S@2L=o$zkU3ROrWCKfvm z=*%}>0_xxa+KPVVGi-iAG&!@Pt;Yw-#ky;op6QYt%oKBR9W`ZFOnkXmEEd1O%XrM= zQkC@=Y95%ROk$=!`wY_!q5gdV?Vii+uMtFyM^F)X^A*zP(Tx`>grTGwTaId7oFwYk z6UvscUdk>qGINpL-?!y7Y=Iu_=eyM9E*|o4t4cT@6~HpS6BW;M23@Ux59CoWux@W-@W|F zpS;camOBOqXU8_ageV)qCB23X_VdU2E(J2oaYHcA+tY=@n}*8lvOVwBAFOGi)}{B$ z8#*kw5=vA}mA?4JMqS*wD&4RBoyj#btl}7#ZI$tjRnNnVOZInnpNkv4Jt(|p-)fN~mF~r?oP`3@;;h|*8;AKbDma}?qOxcD)HWu-3+Lr;n z{DI3V8JEi{xAX1zG+NlsX7Vh|ht@iFrt<=`>{7Q((4Dy3dJ(;2nXjtFDBQRjzl)pv zq4v-Bn(*JV(E%6>DzR@$=-}MU+?qdGlZyMFMIH3KJls}J;s{}Rx$7UO+4Bg1xv7J}R$j3A)4O#nR zJC||0I*>PPVXr_;1EfnfyF%-BMW-ORtD!%m;VONr;FTX)>2mFq;SF4bcVON4Eo8-9 zI9|BMaC-e9jm)a@@xv>$8&`q(*TPzzvu9;06{Vb7u^I_{l`5et-vIeCVnm6M&RTTZ z_G&b;+`%ip_=cGI<*@zu%M~y)YhvZ}D%FNpIb_*^blfOPhRMY+yeZO$alZ5$%$S$8 zwvsR2z;;=8`)?fuE&2b?jt(x4{L8;SUKH?mJpcb>@ALUT zpX5S!)yu|-CKveLJ$Nx^?n?`b-=O2^&3sJd?B%=YCLjCLIb&z)_MN!(KJerH=X}I0{%f*r_BOws2}kS95TnFPE9KYxR<0Q_maw(mauTMPPzYt8$gNAcK~kM$zx_sRdmCl8k2|M&3G z=jZ=F$(0^sn{RrTWd;Dh{q`iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PKBha~rv_Xg<%c=tFN}%OOXU{MvA9Q&%f#6W(LXDoI}7EthKr z&VVFh3@`yOqIhiI-+rqbzzq11txbHqHz%485;+7KjYhv4gAtQzV61COp?44G%(#5X zD*3xFdJTue;j<@C=>KpyT>n3O^6Y8*neOjBdbI!OckpGgxZ!H7W9E0m;Xey!eRBUI z7puij+*qO22(I=rR@d#<-d;ZJWhJ+T5w)XRXXnHzAS^HiLODJ&%<&RRe#ND(E3O=H zbtQ~e^!dT~=y(UF+Q3=H)l4Wpf|+);%;vh{BbYl^+tKdsVzI~r8|HmD5ODQlzyzxpJrQ4+Iza4{E_#2tPd%BTf3PFH8b2=gvb@nvK+ybNy{?;rj&LJ^`jlZ`;Qp_z&&`^ zOt?`Trz`Ys=${voSvvw$gx6aeI%x;2KpoU`rr|xrn7R1~b~AvvwvKQB7(ju>dcdz) zRZE^rT`-CBm39Pg-ew3H24Hz%xH}=Gw$fqXr1gywu=MRF*qPx`75Z7;gV!7y+b}7Y zV0fXcimMWocE|y?=7pFpp$y#B_6DX(Y#=$i;^2_I7_wKPl`VvBJX*zEi-Hp~x;YNR zP40P-NvlDq!fF8Mi^ zyl~o#AOo0i$MRLKWTu#ppcmw^mt{^%ZX(aWd7EWyIu%N|CGo~@t<&zV+h3{uZ#DGp z$;*r5^W0s#FEYmG?EjNz&(`e!li{N~`~Ow0y&V3+y&hvV8D*4ecy;z1CQDSON~jtB zY&oFPV+wup_wNTFrjY;SJ;rF>f^CG4AE||5YQ{Gjk-5PpKo0f$_Xz2m^;S+|8~gq} zpi%kwakRVp{ypUI@#FjVo2}7C#!-EH|4~|w&E!wq^wfMCpu6G)4JId-vl<7-;yL)e7_VWZiO}YGjN=$oI zz+iEkb-CZI%lYxyPvgTaOGD6ZvoN<9Z)NfBzmIDs6M{s+z~vM5$NL*A*C9GWRMr-R z=5nJ99m>W!ZpNp#5TetUN57mLyf|JXN3F}-GOC0gtLyK#(xszG-}uhouLFXQAA2`) zd&M0qnPUVf;qTs0!U`9OwYUE)ALhe+Z}jc(+aWSqW4VuM5|xRrdYmFo9YduBGbMZz zX#m)L^zAU!QoptOzrp_hGUu}9#^$d60;zz{+5h4GlXd(5Z208P{(p_@{rlaAa3!h{ zSnepOM;ZRULb4QdK7xn4qzHB&X2;hx#cp#>nKM+L6u?l{I1B9t81V_UA*6%uSBeL7 zpKK-(jamd-zP#ebh?2txaHdfOJbgqTMRndxr{WrVgAN!95q|dg9U6|>fwg0x+FZil z8z#k6@Din!Fwe8s+(W1K4#&V*SeWpFp>SJWarnF)Y!*LM3~@>=R;#nl%n2Y$x>Kib=0kN=-Oesov=`zlvj|6_G+cdzy) z+_C-aolxZnj#@^@qO&||D`&TeRWk58E~KqlUEk1cr3-lVctg{m6x+7JzK%A6h}dAx zjc{zX*5cg9EZ7KbbtpcdJ8yl%V87B@g@%L`ejIK5?AQ!L z!gWZeNik`oPgiML#UbRwM)0O*=e>S!Q1tpebfX6x{_qDXTClQ&K?Q>ncIUd{yN+82 z^yd$M@UbR-8PS~&P|Ry)?V|iHR^SF0SaSnfNul_6yNxxwb|Td7+V7~t+;>)TUV~6R z75`oDZGtN$pGL`zNMsCh(_BfnA}dv~1d`EC7g~O0stbyxYd;|f1Ur*$tltz+M7yT{tiZHazGvQ1^BPg3~v*8oCEFKL_DCs^6Of=#>czRh~MFZMN! z;EXEUq}BBA8pkCpY844>Hn{Bt?mEy3N$F6e}|CYZxGy41MNzgN$4~P@xzw( z>0ZLbduC?F-RVu8(!GXVr)?2d7ZI<4Q0=T&(-OC)`zLAnTeIig_1}D@`ahp@S&5m_ zhJVp9KBNDKPd5DjM^E52s?clbl zNhgAxb17ja^~7gEg_`wIpD-t`IJrm3eWuFn9wsrSNfssZiXE%j?Z44 z!@4 zgj)h@+*}*+Uo>8HJ-765bLK!;m>H&A*w`CaHbH>Tn1o{jy@5odaDrj)4=V^t#6p$8 zqzquRoAZF6;MNaaXyuHSecD75zDPp4kF&wMjVigJ(u!6|jmT)}4F$pR1Lp8!*bG`X zrq-6*j;if~$2IB&C_S2rg$H8Cchw7S`e;db;SdR-{O3LzM86%#%_HCYpNIkmDyGYpX?i1pEe()1@wk3A#UDP^ zQ8oz6K*}Eh0Kev@5SH8pZYp6ZFX#CzZh8@Rlhw|tw9-TIs@6FT9RzL+Fa57mqWC); zqSB?9hJBYdF0ju^;?I-D(PK!-E-kC4Zh`FOYdKKplJ{HLBS10dL=E~;{-82A-wO654*r-H)pqJf>mx57*oJ{+*Ht#l+!a|#O zgfZzM1;CRoOsisLvTr-cf1;QAs7;Xp3l><3wR$0HH>DlM^-;Zr1a*mH zqgrvamoaSD^VkLu514}RoEvtmjlL40Bep!KYpzOh4HGW)VyC0R5jWz>ySYdZ+gs-V z9Ai5T!t4ViPlJf~gjrlXMWR^Z7|8ubS6)})P_$eq3yZn%o7tlXmcnU+;%@krpr!1m z8R0%~$tK#wZ`#CVPNk{cmQeerDf@mm;$p5P2?b~)WgMV`!D&1Qin!J4<1m?WZQIb%pHGI$qgSg$rvNjwYla z8yQ;o@FKihRSGhxiW%jL{bFqdQn5 zA8%;7PMz1yM2bQ#kx^^Omi_Kd&5bv;mhJ?{B8}TpH^0@z5~=X;5*(NupLNs5Le>d~Jl!se6Cv@+W(iV|PAzm93Wn>@LBZ=?GjK(o1$(TNI z)49^V|9ItE$D=t?N$6CXX=WO!6@ElbnW!*fPrPZLKtt0Nc5$c8&6R6qL7NeEBT zfm&`%E*ZETuw#fmN?2zd`+>Xrs1{3(ep5ejCWu8{CvIVGJ_WG_pLLbG>bZIC8DS7| zr6z~A<_4#Uu2`ua{)G;=`DmRGO|y3ONw8fxe+!iZJB>C%J6bMrl*g2}i81Iio{} zd=!TIYm>~$dXw|uL+Lij$7B+`qKC4IPLM6qSj&~%d}}sXS>k7d@lMK-36zL>pwMk3 zq3@}0MY+N{6i+dQgK||iRdicdI3_9Gz^GH$F21x!4V#e?rsds|9I9!ydz($g*2 z^gFScQn0wZArwiobFC;5JRCa7=5+{cRI663aO-s!y7I0x^3h6Krj1nAB7v0!c|yTX zs08>}wetdP4zHBt*3zQ!>spFJVE9WAlLASb-&n4Dkx4QuNn_oZy6QZA9C1C7<6XT; zntlE?p;>UV2+f3HJP7Z)ma+Qi`=4lso!aUR*_Vm-K^cnejKVuKBZQi5YHlnqxi18v z7$i#)2J+s8Pmns^g+w#MJ>xHfgiu7ruX&NEcv8GAK@6WUJb`rt7%WWU(&`pT`{vHY=i=T%IPF5MH_U8nb^$FMrn%c7OcS*6W}TJEQcduDRkln zTfJrm>9TBvphb1Ej7N$frjji>H9)IK!Aq9~>vszlWZ!nEK0sVKE9UDVYT8;jySlhL zpsC{5J2;2&c@KU#I3J%!;=UeV{PpFl3wV8Sc6M-bF+M(rmuG2N{^gHwaPl+!=lJBP z4_x>P@O5o)lI=_c>6J1`lXenBc~Tbj)Djk+R1^@IO%hj_y7fSpsM)kSrtx=#3X7TO z)ih)9;FC4+h!sv-YR|AUt;>awY3}eHSf}fn&3K=Df(8+vG9eq|tr3&cMs>~&8Nn?( zLFmX#Q>@U#56taOpZE|R^z}qsfYBz?S$QR>NIDJMH>?$b2yt^m0PiK>PdOYEXcLeM zQS;)+2c4l#gyQuaUH4UST`v}XvfLKE&|bEVi$IafN@jPyw#7-7g%!Tls^ zp9T%uZ%KT|DunN&kspF5OAD2W?xqay9pDB(+Dm!N8|r9!X>0^L0!vb*uIc% z-Gg`%^P;UK0l>vAJM_agij5<0$*tBxa^s&f@X=hqi{!((Nn90DhZArnh86F)v(S6< zw$}wIk`>X~Eh96LRt-^K5=rOq;7F_c?S6qoMkDb5*a3>xDNMC<-N+JM{1%T89VBKu zsm-FS*rjspx-EoKQ121Q;WhUs5qAe4`+`9X+OVzX8*976fRe-X$%2Q{>V$V&R;WT6 zF|pXON5}r~5>N;C&{nKgKEvi0M3XZs+IoDTT&%mc>6tFc!Avn1S5Z@T#l$zu<#PEJ z-o#_R)~c*;sd-?MGKra1*{7dw2!#jOpxtx1^BsbS@dzpcZ@xnMJi75hg)o#doUf(b`#OSZ#s9=6Zhi#Wg$7o%}{-2;Oug^>9YJyDKjT*nz^I z2ON?eIMX+O<+4hK<+94{d?!9h7Pg|9JPWg-g^r!+#HTE~&@Bga=Owltz{;7Lm(_9* zZd{H&#Y+CfVd$EFin(4XaT8)q{Asu3lKY)QD_A6C+=@`>*7fkC`q~m5DivN4VIdMA zVQqAYw4ws~dXlIkm3KEKbx0_d)7)q(aKs%G(*FO#K%N^8Q`zt&>1vnGdtJi1=mdwx zc)OLOHaQ%%Q%4cM`KDZXSGdc*KL++PeJ{|ZA6e;g>y+UG zoQF5PEd185VlEsnTw^%BK!`?WRr&PsC0dNj!1`NZZO++qGL?8zMy*(l1inlZ(53$! z*)k$T`HRj>bc*(JFtFUgJHGs$c==7g{rL70n3*-P;CY!U!pj`8>_F1l15R9Vx$K7* zJo)I$S8Rj*@{*Rk9g5O!-4qI@=zUMI__&}9+M4e4heXp3?(n!ppY-B{+4<+S^k53f zyUA`;+JAuW_Y*rr_Z%B~M}`zU zSvLs(S3hpKx?ia?y_FF@ob%ej{&4SG_yB+Y9zzNE<93tLDfr)dA^*W^^Zk#5_N^FS z>P3*BlmEw0hU@1)J-R#p@9SLY$)x#>uYSt_;Fn+4jvw|%645J_LJptKeHuYeb+=Yt zA4_dfBTTtbMQq}aVCq?CgqnqWqN*CQ@+0Wcix$KEn1>yKGfl{n>pJW`rf-85i}rPO sK}LzaH|}@s$+z2R9q#_t>vVVBU3b^r^`)=>7XSeN|La0at^j@j09z%lS^xk5 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-strongloop-0.1.0.tgz b/repo/beta/ibm-strongloop-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c09fd9f36557f89a0bf453375f9c777c2b029cd9 GIT binary patch literal 7811 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 Va@~0SzW@LL|Nk&tvC05^002YnqXPf{ literal 0 HcmV?d00001 diff --git a/repo/beta/index.yaml b/repo/beta/index.yaml index da56391..be32ed9 100755 --- a/repo/beta/index.yaml +++ b/repo/beta/index.yaml @@ -88,6 +88,59 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-elasticsearch-exporter-0.2.2.tgz version: 0.2.2 + ibm-geode: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-11T11:59:56.960361987+05:30 + description: Apache Geode provides a database-like consistency model, reliable + transaction processing and a shared-nothing architecture to maintain very low + latency performance with high concurrency processing. + digest: 383c7edab346dea6652551438e00d503baf0d9bfbb975dde55799552d631da3e + engine: gotpl + home: http://geode.apache.org/ + keywords: + - apache + - geode + - Limited + - amd64 + - Tools + - ICP + maintainers: + - email: lysannef@us.ibm.com + name: IBM ISV Team + name: ibm-geode + sources: + - https://github.com/apache/geode + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-geode-0.1.0.tgz + version: 0.1.0 + ibm-glassfish: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-11T11:59:56.962258337+05:30 + description: The Open Source Java EE Reference Implementation + digest: 21e96693fdd051bb8894bad209e983118cd6bbf74e4e0d3a9b840dc74c1f9573 + engine: gotpl + home: https://javaee.github.io/glassfish/ + keywords: + - glassfish + - deploy + - Java EE + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-glassfish + sources: + - https://javaee.github.io/glassfish/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-glassfish-0.1.0.tgz + version: 0.1.0 ibm-kube-state-metrics: - apiVersion: v1 appVersion: 1.3.1 @@ -166,6 +219,32 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-openldap-0.1.1.tgz version: 0.1.1 + ibm-orientdb: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-11T11:59:56.963851872+05:30 + description: OrientDB is the most versatile DBMS supporting Graph, Document, Reactive, + Full-Text, Geospatial and Key-Value models in one Multi-Model product. + digest: f9741aa8070146a783d5249a22f23d06aca8d14fa2363e9ed229b4b12ecd28b4 + engine: gotpl + home: http://orientdb.com/ + keywords: + - orientdb + - DBMS + - database + - Limited + - ppc64le + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-orientdb + sources: + - https://hub.docker.com/r/ppc64le/orientdb/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-orientdb-0.1.0.tgz + version: 0.1.0 ibm-prometheus-adapter: - appVersion: 0.2.1 created: 2018-09-05T03:55:49.792149808-07:00 @@ -216,4 +295,54 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-prometheus-pushgateway-0.1.2.tgz version: 0.1.2 -generated: 2018-09-05T03:55:49.787898663-07:00 + ibm-rstudio: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-11T11:59:56.965252959+05:30 + description: RStudio is an integrated development environment (IDE) for R + digest: 87f63716242d4cc37dc6724420a5d25d4043309d34867499da501a5bfc6b8f14 + engine: gotpl + home: https://www.rstudio.com/ + keywords: + - rstudio + - R + - IDE + - Limited + - ppc64le + - ICP + maintainers: + - email: lysannef@us.ibm.com + name: IBM ISV Team + name: ibm-rstudio + sources: + - https://hub.docker.com/r/ppc64le/rstudio/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-rstudio-0.1.0.tgz + version: 0.1.0 + ibm-strongloop: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-11T11:59:56.966715242+05:30 + description: Open-source solutions for the API developer community + digest: fa27c71176a80859dc234c3eee65bc0a62a7f5f14eadf3d566761562c204212f + engine: gotpl + home: https://strongloop.com/ + keywords: + - strongloop + - IBM + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-strongloop + sources: + - https://github.com/docker-library/memcached + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-strongloop-0.1.0.tgz + version: 0.1.0 +generated: 2018-09-11T11:59:56.957611837+05:30 diff --git a/stable/ibm-geode/.helmignore b/stable/ibm-geode/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-geode/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-geode/Chart.yaml b/stable/ibm-geode/Chart.yaml new file mode 100755 index 0000000..2c01f38 --- /dev/null +++ b/stable/ibm-geode/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +appVersion: "1.0" +description: Apache Geode provides a database-like consistency model, reliable transaction processing and a shared-nothing architecture to maintain very low latency performance with high concurrency processing. +engine: gotpl +home: http://geode.apache.org/ +keywords: +- apache +- geode +- Limited +- amd64 +- Tools +- ICP + +maintainers: +- email: lysannef@us.ibm.com + name: IBM ISV Team + +name: ibm-geode +sources: +- https://github.com/apache/geode +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-geode/LICENSE b/stable/ibm-geode/LICENSE new file mode 100755 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-geode/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-geode/README.md b/stable/ibm-geode/README.md new file mode 100755 index 0000000..e03c6c8 --- /dev/null +++ b/stable/ibm-geode/README.md @@ -0,0 +1,69 @@ +# Geode + +[Geode](http://geode.apache.org/)Apache Geode provides a database-like consistency model, reliable transaction processing and a shared-nothing architecture to maintain very low latency performance with high concurrency processing. + +## TL;DR; + +```console +$ helm install stable/ibm-geode +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Geode](https://hub.docker.com/r/ppc64le/geode ) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-geode +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Geode](https://hub.docker.com/r/ppc64le/geode ) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Geode chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official geode tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-geode` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-geode +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-geode/RELEASENOTES.md b/stable/ibm-geode/RELEASENOTES.md new file mode 100755 index 0000000..fbf63b6 --- /dev/null +++ b/stable/ibm-geode/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7 + | | diff --git a/stable/ibm-geode/templates/NOTES.txt b/stable/ibm-geode/templates/NOTES.txt new file mode 100755 index 0000000..085a00c --- /dev/null +++ b/stable/ibm-geode/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "geode.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT/pulse +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "geode.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "geode.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "geode.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-geode/templates/_helpers.tpl b/stable/ibm-geode/templates/_helpers.tpl new file mode 100755 index 0000000..e0d991b --- /dev/null +++ b/stable/ibm-geode/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "geode.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 "geode.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "geode.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-geode/templates/deployment.yaml b/stable/ibm-geode/templates/deployment.yaml new file mode 100755 index 0000000..5e96790 --- /dev/null +++ b/stable/ibm-geode/templates/deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "geode.fullname" . }} + labels: + app: {{ template "geode.name" . }} + chart: {{ template "geode.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "geode.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "geode.name" . }} + release: {{ .Release.Name }} + chart: {{ template "geode.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["sh","-c","gfsh start locator --name=loc1;sleep infinity;"] + ports: + - containerPort: 7070 + - name: http + containerPort: 7070 + protocol: TCP + livenessProbe: + httpGet: + path: /pulse + port: http + readinessProbe: + httpGet: + path: /pulse + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-geode/templates/ingress.yaml b/stable/ibm-geode/templates/ingress.yaml new file mode 100755 index 0000000..3c979bf --- /dev/null +++ b/stable/ibm-geode/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "geode.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "geode.name" . }} + chart: {{ template "geode.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-geode/templates/service.yaml b/stable/ibm-geode/templates/service.yaml new file mode 100755 index 0000000..42e267a --- /dev/null +++ b/stable/ibm-geode/templates/service.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "geode.fullname" . }} + labels: + app: {{ template "geode.name" . }} + chart: {{ template "geode.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.externalPort }} + path: /pulse + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + name: {{ .Values.service.name }} + selector: + app: {{ template "geode.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-geode/values-metadata.yaml b/stable/ibm-geode/values-metadata.yaml new file mode 100755 index 0000000..2d6757e --- /dev/null +++ b/stable/ibm-geode/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-geode/values.yaml b/stable/ibm-geode/values.yaml new file mode 100755 index 0000000..a162329 --- /dev/null +++ b/stable/ibm-geode/values.yaml @@ -0,0 +1,48 @@ +# Default values for geode. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ppc64le/geode + tag: latest + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 7070 + internalPort: 7070 + externalPort: 7070 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-glassfish/.helmignore b/stable/ibm-glassfish/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-glassfish/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-glassfish/Chart.yaml b/stable/ibm-glassfish/Chart.yaml new file mode 100755 index 0000000..a80cd7f --- /dev/null +++ b/stable/ibm-glassfish/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +appVersion: "1.0" +description: The Open Source Java EE Reference Implementation +engine: gotpl +home: https://javaee.github.io/glassfish/ + +keywords: +- glassfish +- deploy +- Java EE +- Limited +- ppc64le +- Tools +- ICP + +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team + +name: ibm-glassfish +sources: +- https://javaee.github.io/glassfish/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-glassfish/LICENSE b/stable/ibm-glassfish/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-glassfish/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-glassfish/README.md b/stable/ibm-glassfish/README.md new file mode 100755 index 0000000..30f3ca3 --- /dev/null +++ b/stable/ibm-glassfish/README.md @@ -0,0 +1,69 @@ +# Glassfish + +[Glassfish](https://javaee.github.io/glassfish/) GlassFish is an open-source application server project started by Sun Microsystems for the Java EE platform and now sponsored by Oracle Corporation. + +## TL;DR; + +```console +$ helm install stable/ibm-glassfish +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Glassfish](https://github.com/javaee/glassfish) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm intall --name my-release stable/ibm-glassfish +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Glassfish](https://hub.docker.com/r/ibmcom/glassfish-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Glassfish chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official glassfish tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-glassfish` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-glassfish +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-glassfish/RELEASENOTES.md b/stable/ibm-glassfish/RELEASENOTES.md new file mode 100644 index 0000000..444e10c --- /dev/null +++ b/stable/ibm-glassfish/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-glassfish/templates/NOTES.txt b/stable/ibm-glassfish/templates/NOTES.txt new file mode 100755 index 0000000..897fa22 --- /dev/null +++ b/stable/ibm-glassfish/templates/NOTES.txt @@ -0,0 +1,31 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + echo "Perform following steps to access Webpage from the browser" + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "glassfish.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT + + echo "Perform following steps to access admin console from the browser" + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[1].nodePort}" services {{ template "glassfish.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[1].status.addresses[1].address}") + echo https://$NODE_IP:$NODE_PORT + +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "glassfish.fullname" . }}' + echo "Perform following steps to access Webpage from the browser" + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "glassfish.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} + + echo "Perform following steps to access Admin Console from the browser" + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "glassfish.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[1].ip}') + echo https://$SERVICE_IP:{{ .Values.port.adminport }} +#{{- else if contains "ClusterIP" .Values.service.type }} +# export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "glassfish.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") +# echo "Visit http://127.0.0.1:8080 to use your application" +# kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-glassfish/templates/_helpers.tpl b/stable/ibm-glassfish/templates/_helpers.tpl new file mode 100755 index 0000000..888df61 --- /dev/null +++ b/stable/ibm-glassfish/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "glassfish.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 "glassfish.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "glassfish.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-glassfish/templates/deployment.yaml b/stable/ibm-glassfish/templates/deployment.yaml new file mode 100755 index 0000000..24ceeff --- /dev/null +++ b/stable/ibm-glassfish/templates/deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "glassfish.fullname" . }} + labels: + app: {{ template "glassfish.name" . }} + chart: {{ template "glassfish.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "glassfish.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "glassfish.name" . }} + release: {{ .Release.Name }} + chart: {{ template "glassfish.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http1 + containerPort: 4848 + - name: http + containerPort: 8080 + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-glassfish/templates/ingress.yaml b/stable/ibm-glassfish/templates/ingress.yaml new file mode 100755 index 0000000..09553a5 --- /dev/null +++ b/stable/ibm-glassfish/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "glassfish.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "glassfish.name" . }} + chart: {{ template "glassfish.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-glassfish/templates/service.yaml b/stable/ibm-glassfish/templates/service.yaml new file mode 100755 index 0000000..e4abd1c --- /dev/null +++ b/stable/ibm-glassfish/templates/service.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "glassfish.fullname" . }} + labels: + app: {{ template "glassfish.name" . }} + chart: {{ template "glassfish.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + name: http + - port: {{ .Values.port.adminport }} + targetPort: http1 + name: http1 + selector: + app: {{ template "glassfish.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-glassfish/values-metadata.yaml b/stable/ibm-glassfish/values-metadata.yaml new file mode 100755 index 0000000..695535a --- /dev/null +++ b/stable/ibm-glassfish/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-glassfish/values.yaml b/stable/ibm-glassfish/values.yaml new file mode 100755 index 0000000..ac1aae3 --- /dev/null +++ b/stable/ibm-glassfish/values.yaml @@ -0,0 +1,48 @@ +# Default values for glassfish. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/glassfish-ppc64le + tag: 4.1 + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 8080 + +port: + adminport: 4848 +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-orientdb/.helmignore b/stable/ibm-orientdb/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-orientdb/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-orientdb/Chart.yaml b/stable/ibm-orientdb/Chart.yaml new file mode 100755 index 0000000..775b95c --- /dev/null +++ b/stable/ibm-orientdb/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +appVersion: "1.0" +description: OrientDB is the most versatile DBMS supporting Graph, Document, Reactive, Full-Text, Geospatial and Key-Value models in one Multi-Model product. +engine: gotpl +home: http://orientdb.com/ +keywords: +- orientdb +- DBMS +- database +- Limited +- ppc64le +- ICP + +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team + +name: ibm-orientdb +sources: +- https://hub.docker.com/r/ppc64le/orientdb/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-orientdb/LICENSE b/stable/ibm-orientdb/LICENSE new file mode 100755 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-orientdb/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-orientdb/README.md b/stable/ibm-orientdb/README.md new file mode 100755 index 0000000..b8ae51e --- /dev/null +++ b/stable/ibm-orientdb/README.md @@ -0,0 +1,69 @@ +# OrientDB + +[OrientDB](http://orientdb.com/)OrientDB is the most versatile DBMS supporting Graph, Document, Reactive, Full-Text, Geospatial and Key-Value models in one Multi-Model product. + +## TL;DR; + +```console +$ helm install stable/ibm-orientdb +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [OrientDB](https://hub.docker.com/r/ppc64le/orientdb/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-orientdb +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [OrientDB](https://hub.docker.com/r/ppc64le/orientdb/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the OrientDB chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official orientdb tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-orientdb` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-orientdb +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-orientdb/RELEASENOTES.md b/stable/ibm-orientdb/RELEASENOTES.md new file mode 100755 index 0000000..5c5708b --- /dev/null +++ b/stable/ibm-orientdb/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | --------- | --------------------------- | ------- | +| 0.1.0 | Sept 2018 | >= 1.7 + | | diff --git a/stable/ibm-orientdb/templates/NOTES.txt b/stable/ibm-orientdb/templates/NOTES.txt new file mode 100755 index 0000000..635029a --- /dev/null +++ b/stable/ibm-orientdb/templates/NOTES.txt @@ -0,0 +1,20 @@ +To get your user password run: + + export ORIENTDBROOTPASSWORD=$(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "orientdb.fullname" . }} -o jsonpath="{.data.orientdb-password}" | base64 --decode; echo) + +Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[1].nodePort}" services {{ template "orientdb.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT/studio/index.html +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "orientdb.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "orientdb.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }}/studio/index.html + +{{- end }} diff --git a/stable/ibm-orientdb/templates/_helpers.tpl b/stable/ibm-orientdb/templates/_helpers.tpl new file mode 100755 index 0000000..90ca948 --- /dev/null +++ b/stable/ibm-orientdb/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "orientdb.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 "orientdb.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "orientdb.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-orientdb/templates/deployment.yaml b/stable/ibm-orientdb/templates/deployment.yaml new file mode 100755 index 0000000..49cf19f --- /dev/null +++ b/stable/ibm-orientdb/templates/deployment.yaml @@ -0,0 +1,89 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "orientdb.fullname" . }} + labels: + app: {{ template "orientdb.name" . }} + chart: {{ template "orientdb.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "orientdb.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "orientdb.name" . }} + release: {{ .Release.Name }} + chart: {{ template "orientdb.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: ORIENTDB_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: {{ template "orientdb.fullname" . }} + key: orientdb-password + ports: + - name: http + containerPort: {{ .Values.port.port1 }} + livenessProbe: + httpGet: + path: /orientdb/www/index.htm + port: http + httpHeaders: + - name: Accept-Encoding + value: gzip + initialDelaySeconds: 60 + timeoutSeconds: 30 + readinessProbe: + httpGet: + path: / + port: http + httpHeaders: + - name: Accept-Encoding + value: gzip + initialDelaySeconds: 5 + timeoutSeconds: 5 + ports: + - name: http1 + containerPort: {{ .Values.port.port2 }} + livenessProbe: + httpGet: + path: / + port: http1 + httpHeaders: + - name: Accept-Encoding + value: gzip + initialDelaySeconds: 60 + timeoutSeconds: 30 + readinessProbe: + httpGet: + path: / + port: http1 + httpHeaders: + - name: Accept-Encoding + value: gzip + initialDelaySeconds: 5 + timeoutSeconds: 5 + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-orientdb/templates/ingress.yaml b/stable/ibm-orientdb/templates/ingress.yaml new file mode 100755 index 0000000..0a10c20 --- /dev/null +++ b/stable/ibm-orientdb/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "orientdb.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "orientdb.name" . }} + chart: {{ template "orientdb.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-orientdb/templates/secrets.yaml b/stable/ibm-orientdb/templates/secrets.yaml new file mode 100755 index 0000000..9dee1b4 --- /dev/null +++ b/stable/ibm-orientdb/templates/secrets.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "orientdb.fullname" . }} + labels: + app: {{ template "orientdb.name" . }} + chart: {{ template "orientdb.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +type: Opaque +data: + {{ if .Values.orientdbPassword }} + orientdb-password: {{ .Values.orientdbPassword | b64enc | quote }} + {{ else }} + orientdb-password: {{ randAlphaNum 10 | b64enc | quote }} + {{ end }} diff --git a/stable/ibm-orientdb/templates/service.yaml b/stable/ibm-orientdb/templates/service.yaml new file mode 100755 index 0000000..3668fa0 --- /dev/null +++ b/stable/ibm-orientdb/templates/service.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "orientdb.fullname" . }} + labels: + app: {{ template "orientdb.name" . }} + chart: {{ template "orientdb.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: 2424 + targetPort: http + name: http + - port: 2480 + targetPort: http1 + name: http1 + selector: + app: {{ template "orientdb.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-orientdb/values-metadata.yaml b/stable/ibm-orientdb/values-metadata.yaml new file mode 100644 index 0000000..898ecf9 --- /dev/null +++ b/stable/ibm-orientdb/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "beta.kubernetes.io/arch" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-orientdb/values.yaml b/stable/ibm-orientdb/values.yaml new file mode 100755 index 0000000..5bec98f --- /dev/null +++ b/stable/ibm-orientdb/values.yaml @@ -0,0 +1,74 @@ +#Default values for orientdb. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/orientdb-ppc64le + tag: 2.2.15 + pullPolicy: IfNotPresent + +service: + type: NodePort + +port: + port1: 2424 + port2: 2480 +## Default: root password for random 10 character string +orientdbPassword: test123 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +## Persist data to a persitent volume +#persistence: +# enabled: false + + ## A manually managed Persistent Volume and Claim + ## Requires persistence.enabled: true + ## If defined, PVC must be created manually before volume will be bound + # existingClaim: + + ## database data Persistent Volume Storage Class + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + ## +# storageClass: "-" +# accessMode: ReadWriteOnce +# size: 2Gi +# subPath: "postgres-db" +# mountPath: /var/data/orientdb + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" +#nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-rstudio/.helmignore b/stable/ibm-rstudio/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-rstudio/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-rstudio/Chart.yaml b/stable/ibm-rstudio/Chart.yaml new file mode 100755 index 0000000..e04b4f5 --- /dev/null +++ b/stable/ibm-rstudio/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +appVersion: "1.0" +description: RStudio is an integrated development environment (IDE) for R +engine: gotpl +home: https://www.rstudio.com/ +keywords: +- rstudio +- R +- IDE +- Limited +- ppc64le +- ICP + +maintainers: +- email: lysannef@us.ibm.com + name: IBM ISV Team + +name: ibm-rstudio +sources: +- https://hub.docker.com/r/ppc64le/rstudio/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-rstudio/LICENSE b/stable/ibm-rstudio/LICENSE new file mode 100755 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-rstudio/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-rstudio/README.md b/stable/ibm-rstudio/README.md new file mode 100755 index 0000000..b815867 --- /dev/null +++ b/stable/ibm-rstudio/README.md @@ -0,0 +1,69 @@ +# RStudio + +[RStudio](https://www.rstudio.com/products/rstudio/)RStudio is an integrated development environment (IDE) for R + +## TL;DR; + +```console +$ helm install stable/ibm-rstudio +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [RStudio](https://hub.docker.com/r/ppc64le/rstudio/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-rstudio +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [RStudio](https://hub.docker.com/r/ppc64le/rstudio/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the RStudio chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official rstudio tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-rstudio` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-rstudio +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-rstudio/RELEASENOTES.md b/stable/ibm-rstudio/RELEASENOTES.md new file mode 100755 index 0000000..8d7c5d8 --- /dev/null +++ b/stable/ibm-rstudio/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7 + | | diff --git a/stable/ibm-rstudio/templates/NOTES.txt b/stable/ibm-rstudio/templates/NOTES.txt new file mode 100755 index 0000000..b942143 --- /dev/null +++ b/stable/ibm-rstudio/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "rstudio.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "rstudio.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "rstudio.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "rstudio.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-rstudio/templates/_helpers.tpl b/stable/ibm-rstudio/templates/_helpers.tpl new file mode 100755 index 0000000..99f6c10 --- /dev/null +++ b/stable/ibm-rstudio/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "rstudio.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 "rstudio.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "rstudio.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-rstudio/templates/deployment.yaml b/stable/ibm-rstudio/templates/deployment.yaml new file mode 100755 index 0000000..cbdfc9d --- /dev/null +++ b/stable/ibm-rstudio/templates/deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "rstudio.fullname" . }} + labels: + app: {{ template "rstudio.name" . }} + chart: {{ template "rstudio.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "rstudio.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "rstudio.name" . }} + release: {{ .Release.Name }} + chart: {{ template "rstudio.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["sh","-c","set -e && useradd -m -d /home/test test && echo test:test | chpasswd; rstudio-server online;/usr/sbin/rstudio-server start;sleep infinity;"] + ports: + - name: http + containerPort: 8787 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-rstudio/templates/ingress.yaml b/stable/ibm-rstudio/templates/ingress.yaml new file mode 100755 index 0000000..d440213 --- /dev/null +++ b/stable/ibm-rstudio/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "rstudio.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "rstudio.name" . }} + chart: {{ template "rstudio.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-rstudio/templates/service.yaml b/stable/ibm-rstudio/templates/service.yaml new file mode 100755 index 0000000..5de4c62 --- /dev/null +++ b/stable/ibm-rstudio/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "rstudio.fullname" . }} + labels: + app: {{ template "rstudio.name" . }} + chart: {{ template "rstudio.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.externalPort }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + name: {{ .Values.service.name }} + selector: + app: {{ template "rstudio.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-rstudio/values-metadata.yaml b/stable/ibm-rstudio/values-metadata.yaml new file mode 100755 index 0000000..c7a9e9d --- /dev/null +++ b/stable/ibm-rstudio/values-metadata.yaml @@ -0,0 +1,13 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" diff --git a/stable/ibm-rstudio/values.yaml b/stable/ibm-rstudio/values.yaml new file mode 100755 index 0000000..1b7664b --- /dev/null +++ b/stable/ibm-rstudio/values.yaml @@ -0,0 +1,48 @@ +# Default values for rstudio. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ppc64le/rstudio + tag: 0.99 + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 8787 + externalPort: 8787 + internalPort: 8787 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-strongloop/.helmignore b/stable/ibm-strongloop/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-strongloop/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-strongloop/Chart.yaml b/stable/ibm-strongloop/Chart.yaml new file mode 100755 index 0000000..83497ee --- /dev/null +++ b/stable/ibm-strongloop/Chart.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +appVersion: "1.0" +description: Open-source solutions for the API developer community +engine: gotpl +home: https://strongloop.com/ + +keywords: +- strongloop +- IBM +- Limited +- ppc64le +- Tools +- ICP + +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team + +name: ibm-strongloop +sources: +- https://github.com/docker-library/memcached +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-strongloop/LICENSE b/stable/ibm-strongloop/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-strongloop/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-strongloop/README.md b/stable/ibm-strongloop/README.md new file mode 100755 index 0000000..572809e --- /dev/null +++ b/stable/ibm-strongloop/README.md @@ -0,0 +1,69 @@ +# Strongloop + +[Strongloop](https://strongloop.com/)Open-source solutions for the API developer community + +## TL;DR; + +```console +$ helm install stable/ibm-strongloop +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Strongloop](https://github.com/strongloop) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm intall --name my-release stable/ibm-strongloop +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Strongloop](https://hub.docker.com/r/ibmcom/strongloop-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Strongloop chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official strongloop tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-strongloop` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-strongloop +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-strongloop/RELEASENOTES.md b/stable/ibm-strongloop/RELEASENOTES.md new file mode 100644 index 0000000..444e10c --- /dev/null +++ b/stable/ibm-strongloop/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-strongloop/templates/NOTES.txt b/stable/ibm-strongloop/templates/NOTES.txt new file mode 100755 index 0000000..b41a627 --- /dev/null +++ b/stable/ibm-strongloop/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "strongloop.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "strongloop.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "strongloop.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "strongloop.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-strongloop/templates/_helpers.tpl b/stable/ibm-strongloop/templates/_helpers.tpl new file mode 100755 index 0000000..21dd6a9 --- /dev/null +++ b/stable/ibm-strongloop/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "strongloop.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 "strongloop.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "strongloop.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-strongloop/templates/deployment.yaml b/stable/ibm-strongloop/templates/deployment.yaml new file mode 100755 index 0000000..900b0cc --- /dev/null +++ b/stable/ibm-strongloop/templates/deployment.yaml @@ -0,0 +1,58 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "strongloop.fullname" . }} + labels: + app: {{ template "strongloop.name" . }} + chart: {{ template "strongloop.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "strongloop.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "strongloop.name" . }} + release: {{ .Release.Name }} + chart: {{ template "strongloop.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 41629 + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 120 + timeoutSeconds: 5 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 120 + timeoutSeconds: 5 + failureThreshold: 3 + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-strongloop/templates/ingress.yaml b/stable/ibm-strongloop/templates/ingress.yaml new file mode 100755 index 0000000..f759685 --- /dev/null +++ b/stable/ibm-strongloop/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "strongloop.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "strongloop.name" . }} + chart: {{ template "strongloop.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-strongloop/templates/service.yaml b/stable/ibm-strongloop/templates/service.yaml new file mode 100755 index 0000000..f17fa40 --- /dev/null +++ b/stable/ibm-strongloop/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "strongloop.fullname" . }} + labels: + app: {{ template "strongloop.name" . }} + chart: {{ template "strongloop.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + name: http + selector: + app: {{ template "strongloop.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-strongloop/values-metadata.yaml b/stable/ibm-strongloop/values-metadata.yaml new file mode 100755 index 0000000..695535a --- /dev/null +++ b/stable/ibm-strongloop/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-strongloop/values.yaml b/stable/ibm-strongloop/values.yaml new file mode 100755 index 0000000..a7930c4 --- /dev/null +++ b/stable/ibm-strongloop/values.yaml @@ -0,0 +1,46 @@ +# Default values for strongloop. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/strongloop-ppc64le + tag: v6.0.3 + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 41629 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" + +tolerations: [] + +affinity: {} From fe3330c8171e04fea0f71af7cd1d2a702d518f5c Mon Sep 17 00:00:00 2001 From: Lysanne Fernandes Date: Wed, 12 Sep 2018 15:05:21 +0530 Subject: [PATCH 4/6] Added Alertmanager, Jupyter-Notebook, Node-Exporter, Node-Red, Tomcat --- repo/beta/ibm-alertmanager-0.1.0.tgz | Bin 0 -> 7890 bytes repo/beta/ibm-jupyter-notebook-0.1.0.tgz | Bin 0 -> 7822 bytes repo/beta/ibm-node-exporter-0.1.0.tgz | Bin 0 -> 7869 bytes repo/beta/ibm-node-red-0.1.0.tgz | Bin 0 -> 7760 bytes repo/beta/ibm-tomcat-0.1.0.tgz | Bin 0 -> 7829 bytes repo/beta/index.yaml | 137 +++++++++++- stable/ibm-alertmanager/.helmignore | 21 ++ stable/ibm-alertmanager/Chart.yaml | 23 ++ stable/ibm-alertmanager/LICENSE | 202 ++++++++++++++++++ stable/ibm-alertmanager/README.md | 69 ++++++ stable/ibm-alertmanager/RELEASENOTES.md | 19 ++ stable/ibm-alertmanager/templates/NOTES.txt | 19 ++ .../ibm-alertmanager/templates/_helpers.tpl | 32 +++ .../templates/deployment.yaml | 52 +++++ .../ibm-alertmanager/templates/ingress.yaml | 39 ++++ .../ibm-alertmanager/templates/service.yaml | 19 ++ stable/ibm-alertmanager/values-metadata.yaml | 14 ++ stable/ibm-alertmanager/values.yaml | 45 ++++ stable/ibm-jupyter-notebook/.helmignore | 21 ++ stable/ibm-jupyter-notebook/Chart.yaml | 22 ++ stable/ibm-jupyter-notebook/LICENSE | 202 ++++++++++++++++++ stable/ibm-jupyter-notebook/README.md | 69 ++++++ stable/ibm-jupyter-notebook/RELEASENOTES.md | 19 ++ .../ibm-jupyter-notebook/templates/NOTES.txt | 19 ++ .../templates/_helpers.tpl | 32 +++ .../templates/deployment.yaml | 54 +++++ .../templates/ingress.yaml | 39 ++++ .../templates/service.yaml | 19 ++ .../ibm-jupyter-notebook/values-metadata.yaml | 14 ++ stable/ibm-jupyter-notebook/values.yaml | 48 +++++ stable/ibm-node-exporter/.helmignore | 21 ++ stable/ibm-node-exporter/Chart.yaml | 22 ++ stable/ibm-node-exporter/LICENSE | 202 ++++++++++++++++++ stable/ibm-node-exporter/README.md | 69 ++++++ stable/ibm-node-exporter/RELEASENOTES.md | 19 ++ stable/ibm-node-exporter/templates/NOTES.txt | 19 ++ .../ibm-node-exporter/templates/_helpers.tpl | 32 +++ .../templates/deployment.yaml | 52 +++++ .../ibm-node-exporter/templates/ingress.yaml | 39 ++++ .../ibm-node-exporter/templates/service.yaml | 18 ++ stable/ibm-node-exporter/values-metadata.yaml | 14 ++ stable/ibm-node-exporter/values.yaml | 46 ++++ stable/ibm-node-red/.helmignore | 21 ++ stable/ibm-node-red/Chart.yaml | 24 +++ stable/ibm-node-red/LICENSE | 202 ++++++++++++++++++ stable/ibm-node-red/README.md | 69 ++++++ stable/ibm-node-red/RELEASENOTES.md | 19 ++ stable/ibm-node-red/templates/NOTES.txt | 19 ++ stable/ibm-node-red/templates/_helpers.tpl | 32 +++ stable/ibm-node-red/templates/deployment.yaml | 52 +++++ stable/ibm-node-red/templates/ingress.yaml | 39 ++++ stable/ibm-node-red/templates/service.yaml | 18 ++ stable/ibm-node-red/values-metadata.yaml | 14 ++ stable/ibm-node-red/values.yaml | 46 ++++ stable/ibm-tomcat/.helmignore | 21 ++ stable/ibm-tomcat/Chart.yaml | 26 +++ stable/ibm-tomcat/LICENSE | 202 ++++++++++++++++++ stable/ibm-tomcat/README.md | 69 ++++++ stable/ibm-tomcat/RELEASENOTES.md | 19 ++ stable/ibm-tomcat/templates/NOTES.txt | 19 ++ stable/ibm-tomcat/templates/_helpers.tpl | 32 +++ stable/ibm-tomcat/templates/deployment.yaml | 54 +++++ stable/ibm-tomcat/templates/ingress.yaml | 39 ++++ stable/ibm-tomcat/templates/service.yaml | 19 ++ stable/ibm-tomcat/values-metadata.yaml | 13 ++ stable/ibm-tomcat/values.yaml | 48 +++++ 66 files changed, 2917 insertions(+), 1 deletion(-) create mode 100644 repo/beta/ibm-alertmanager-0.1.0.tgz create mode 100644 repo/beta/ibm-jupyter-notebook-0.1.0.tgz create mode 100644 repo/beta/ibm-node-exporter-0.1.0.tgz create mode 100644 repo/beta/ibm-node-red-0.1.0.tgz create mode 100644 repo/beta/ibm-tomcat-0.1.0.tgz create mode 100755 stable/ibm-alertmanager/.helmignore create mode 100755 stable/ibm-alertmanager/Chart.yaml create mode 100644 stable/ibm-alertmanager/LICENSE create mode 100755 stable/ibm-alertmanager/README.md create mode 100644 stable/ibm-alertmanager/RELEASENOTES.md create mode 100755 stable/ibm-alertmanager/templates/NOTES.txt create mode 100755 stable/ibm-alertmanager/templates/_helpers.tpl create mode 100755 stable/ibm-alertmanager/templates/deployment.yaml create mode 100755 stable/ibm-alertmanager/templates/ingress.yaml create mode 100755 stable/ibm-alertmanager/templates/service.yaml create mode 100755 stable/ibm-alertmanager/values-metadata.yaml create mode 100755 stable/ibm-alertmanager/values.yaml create mode 100755 stable/ibm-jupyter-notebook/.helmignore create mode 100755 stable/ibm-jupyter-notebook/Chart.yaml create mode 100644 stable/ibm-jupyter-notebook/LICENSE create mode 100755 stable/ibm-jupyter-notebook/README.md create mode 100644 stable/ibm-jupyter-notebook/RELEASENOTES.md create mode 100755 stable/ibm-jupyter-notebook/templates/NOTES.txt create mode 100755 stable/ibm-jupyter-notebook/templates/_helpers.tpl create mode 100755 stable/ibm-jupyter-notebook/templates/deployment.yaml create mode 100755 stable/ibm-jupyter-notebook/templates/ingress.yaml create mode 100755 stable/ibm-jupyter-notebook/templates/service.yaml create mode 100755 stable/ibm-jupyter-notebook/values-metadata.yaml create mode 100755 stable/ibm-jupyter-notebook/values.yaml create mode 100755 stable/ibm-node-exporter/.helmignore create mode 100755 stable/ibm-node-exporter/Chart.yaml create mode 100644 stable/ibm-node-exporter/LICENSE create mode 100755 stable/ibm-node-exporter/README.md create mode 100644 stable/ibm-node-exporter/RELEASENOTES.md create mode 100755 stable/ibm-node-exporter/templates/NOTES.txt create mode 100755 stable/ibm-node-exporter/templates/_helpers.tpl create mode 100755 stable/ibm-node-exporter/templates/deployment.yaml create mode 100755 stable/ibm-node-exporter/templates/ingress.yaml create mode 100755 stable/ibm-node-exporter/templates/service.yaml create mode 100644 stable/ibm-node-exporter/values-metadata.yaml create mode 100755 stable/ibm-node-exporter/values.yaml create mode 100755 stable/ibm-node-red/.helmignore create mode 100755 stable/ibm-node-red/Chart.yaml create mode 100644 stable/ibm-node-red/LICENSE create mode 100755 stable/ibm-node-red/README.md create mode 100644 stable/ibm-node-red/RELEASENOTES.md create mode 100755 stable/ibm-node-red/templates/NOTES.txt create mode 100755 stable/ibm-node-red/templates/_helpers.tpl create mode 100755 stable/ibm-node-red/templates/deployment.yaml create mode 100755 stable/ibm-node-red/templates/ingress.yaml create mode 100755 stable/ibm-node-red/templates/service.yaml create mode 100644 stable/ibm-node-red/values-metadata.yaml create mode 100755 stable/ibm-node-red/values.yaml create mode 100755 stable/ibm-tomcat/.helmignore create mode 100755 stable/ibm-tomcat/Chart.yaml create mode 100755 stable/ibm-tomcat/LICENSE create mode 100755 stable/ibm-tomcat/README.md create mode 100755 stable/ibm-tomcat/RELEASENOTES.md create mode 100755 stable/ibm-tomcat/templates/NOTES.txt create mode 100755 stable/ibm-tomcat/templates/_helpers.tpl create mode 100755 stable/ibm-tomcat/templates/deployment.yaml create mode 100755 stable/ibm-tomcat/templates/ingress.yaml create mode 100755 stable/ibm-tomcat/templates/service.yaml create mode 100755 stable/ibm-tomcat/values-metadata.yaml create mode 100755 stable/ibm-tomcat/values.yaml diff --git a/repo/beta/ibm-alertmanager-0.1.0.tgz b/repo/beta/ibm-alertmanager-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..30c234ed7f7392406f0f01f75d27678a418a6e1e GIT binary patch literal 7890 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 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-jupyter-notebook-0.1.0.tgz b/repo/beta/ibm-jupyter-notebook-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..87fb96bc13e9470141945dd6dacd43d9a475f5ac GIT binary patch literal 7822 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 gxcg@n^Uv4k>+|*bTD$|CvWVWdM8t0A-w^Qvd(} literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-node-exporter-0.1.0.tgz b/repo/beta/ibm-node-exporter-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..dde3e5b02826a3cf99980e31be82fcbf9619a8a4 GIT binary patch literal 7869 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 b{^j~|eYw6|YuEn|00960BDb^+0D1rb>pZ$w literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-node-red-0.1.0.tgz b/repo/beta/ibm-node-red-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..24d4b139d01ccb937ae92c738a73d6ead81cf78f GIT binary patch literal 7760 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 W>+7}k`hNic0RR7(YCF6DdH?{$(Pwi2 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-tomcat-0.1.0.tgz b/repo/beta/ibm-tomcat-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..10bc5db158173e27f10efe5929ff91276102b9ac GIT binary patch literal 7829 zcmV;G9%|tqiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PKBha~rv_Xg<%c=tFPHl0%Lt`5C4*b+wW<;W@UflH~Q>a=BLE z3`ioz022TsipTc-?YFuC%zzKs+7riHIq`gu$RW^ZH2U2bjF?mdr>lawy`woZE?=@r z{_e|O!{KoF^zmc*KO7F%{|}!$ebRoW`}+^~4-S3@Ul@(;S7RMBzZ(w!Q8??9`xm)b zEq>z03av(Py`QnVZol^S^IBs~c1B4B$W6HKPWSJ2=wHF`>B0xS9#YM=;Z_mf2iad<1jn>e1ew zXVIL|__;Q-z3d%dF0?7_C>wykpAEpb%LY*LTIyvs084me19&bf;dqIytMbXCYyfp# zJb5Isn|=7l;Y~JxORc5N1~5K4%PJ-UVl)J=n2;loOUsnv)Bn@hTuiFG&{YPY7~(qq z;RTE@eu7KRs?6WGc&Cs;TsJKEcuH@T z5AJ8z@zyZk&xhGRzW#~)Uo+Wo`%h2+pOOEA{e#Er^8fJB({J+sHLiPb%%`l84*c@N zRGT10j$4;!_uz6aEQvAveE8z|V5&`pKb9~Rl4FBoUPxv*Tr(rsL~@IoV8Wqh*76dB zavGMpG2nPrOXj%Ev&`^Xih>>KM!6B}XPKzjjE^z^!)tAY(`Gq}A{qoE18{6Mf@k?K z1E?D*&$JZ9as=b)sdi_ETdrJ|q0EbdfVpMOM{uf3ex?lqsI_q;cs6{7Aoz{rMlpHj zZ$5kWECa+hy@@R|p=O3#ix9cOIhG@sGHFqpF{QL)s37eK-ha#h0PexNX2Ol)I9Z|h zLjSyw%-Rv4qPyAJ&`CRB1*(poGY#({#>~w}u$KYMwRMC8zyJy~*8_gTs#@|~>Vip} zue2k0^EN}sfZDGx+?|pxTIn!w()vaTSo(Gw?9A|}!u%}n!D|kUZJ3lxFuc%J#Z?JP zJ6wNT^FmCQPzLsDdjnHsDkNvu92_ziL*^>9vW3u%N2{1?QE<3 z7)G?2I&R>8N9y}|09uK5jf%P%!TxYq`L7kPNLKa_p1lxZf`4zgy<7WC>5^Y?$qT2= z2r_^PcPwA!N@j}r2zo&pds*hRl)=KT$b>}Ow|E+f3JAHY1 za*?|m_hrWToc({Y|8ULzKYFtN_?!Lz8rOaff8kz@v6?J03N^ese-4u+YEvcD41cy9 zQ0Fm)9{2nA0}xZlfATJ4v~IyP!pD!)!Z0=C8;!`?U=tue`2Bl?^xb+ZC$Wuv{~pk$ zeEc}t+k5{Wa`^c1{rk<gNzP2tCq9f32(F(poj*f!Iir=7*0H-gH zPkuRjd4Bo*cRQ#J3nyX59SjEO+S{5H91x{*F3}R@r|sR3A7P;3Z&oYB>-*mO98E}$ zQ0<%H+gt@CKK3AtZV^(HKjpzZ$%Md5fw*jdM1V{=xP zNLo(!!k3RdLZF!I7?*t)&=`H!lIs@AKi91Mfk`yh=2O%M08~FC7(1xg5*&NSfx(n7 zpc1Na(M6qeNI}B*EO?#lnhA+~n0sjc`dK$nFa-+f$PO-Gi#@%_JFhXo%$_HJeSiaS;^ z#|Tiu=)IqW6)w_i|KMpp%!m2@2;&0exW;lH+$8D~z4kauoIS=&3ua3AE|P)5iqW%S zs4JabaeZrX}GwKg) z`SO|@BT5b*z?nuB@Z=$V6xBsDor)Xi4LV>bJNVh7cw{*01=fy%3Udj6ZDo~=Fzb70lgp_E%8jE;hM2yG>Y(GWa&L~8pB(7Qfu_bD3b8CY; zQ5|hT{PG>mVD$an7dFAOC5DHxs;^sISML651ZyLdn?mpRcJO=KTZ87u{WYw1+vgP) zOx6~KCgg2#U1@y-v-nn$O}PB@8dJmGtusmq?mvgzF?;~SYl$|r_lF+ze(C+Hss7g5 z>D%?szP8$bUp%R}`ZDFf&)NT{j}O-D|C57@88-gUPqB?GVELgJd$_3b@ZdVyDux3>;Tv27l#>}Vs1hz;i42*+k?EiQb_ zf{oB(hY|$(^42#DCM>O3c!)NpO$mC1q2=>rs=scspT$1{38N*;ftOqv_}3172jcw? z7UWJe$3~IvG=}cVt`W$fa2?WFQeE2U z)0Li9aR?c*5xnUY%rPkx%k8|^hn{Iv?`_hOl0l>7Mw}uBnrY&qqsLiVxr!H+Y-*#O zF0>rM<bICqi%Q<;ZRNXI9BX z5@Rjt0|-@ey)B3QgOHOt zO9wnHzT6%DcKyHA{>QZH7upK&8T-Hg^k6goKX~%Z{(p_@GnxE0#zUKa8sa>m3fYvm z+x)gu$OfX~!hTz`i*4gD^ci#WwDC%c9~-A03%_w(;m7E=><7PP?0ao@TDr;nYk4Od z+9A>=*@57JrCSoVYluf{ zO|&AcY-7Nt-FM$+z3vnHnnv=^V7!8i$9c4d4&{Ec)QGKFZg1C+vr;Br@eBYata!&& zxo#7KFr41PoLicnrS@|B%R zsef)^ghKDfEj&1?>T^t&g7g;Ey{Rod3@(q;p(Lf1@BpQVi40}IV zK~N$Vsstuw0HfWU2LuJTe&|9gXSD3o4vO$a64HH~4c={3$qgmawMr@iMoVuf2#y~x zhabaEz`8NDw%m49Z5KSQQ7=I0(Nrw#h+W@RFSzNWCE>P(u+K{3&y&W{Qz*$69jm8qf$ZfA2Tf6lDo&#n08hFwt%{Y&rrjX_iC*fXHbn+3SYRdA>V>G?ly(@-NA(sG z)FqCMYQ@oBwy;;rV;ey1Fa_Z;C+t`oeJw&qYf{kuKmMweZLiLG1roW0<;k`p_tsV=9~IB>Z$39`1fI* ze1Uq%&9S(!p!-A^!z(6Q`Q$Y-#3@J@nnuM9mrINk-Vxy@LJ^-RR`K1q=#*iZ(nD5y z+D~j`OVkadkUCsXyH!6zRUT~o))ilufmURb@md1LJz>F?ws;`0l{FzAE`ul1)&MZqVr zrs0v_Cw$K26!i3V=jCqJ9(wJZVoBfI`&KRMDNugQXeEk1uEK;#;-iJZeu|urM#V>A z=#kQd=)5Bo(#hFQScv|%|4CES>aKJQtrDD|VnSkPDXg>o)MT};kX>5GE1RltVQs_F zgcM{WLkqwBX!*Ri()wB{(ff%SS>b|&+DNxj*rKsyzC|V;T>{d=hWz{>?4j81en)fzEc+J0V zryV8mvo23cK-7=b+MqCJ7ABkyNGLdI^2u^#oK6TW|9iuglQ?XlO|8ATMu#^MKd*=m za`+3nRXFTXJN@Wc!A0YZYv9$b!Av4%saEE!m_tG!Kov4sdM}Rrf}eE*3_ZM>yN1cg zehY16xe(}UD6Iyx@>X2a*FiC7W`=>2UNY&HgQ?-X55gFJtqWA-8`eC;e>h-_ws;@i z!5aB^L(_HYyly5^6mp4-T1&Rq+?Kletu7{Kd1J&a=A3kkU!aG{ z0-Z5by8jDSXNTVuymlyH)aKuVA(^ObXq!xKvh+Yw z>b80_KDjMOI;TdcS-XK-MBA4N{*K)RCbi(oRE)jgSB-!IC-nc zg&`KW6w%hvbL&6rrj3QH6ApR0T@)um;+4%9{!B_P1nxVX!D@YLqpckf!EhRdZqR@7 z--QAOk}Yf_98Oj8nKuH=wa9lq!J1b5l!7Ch;1RbW)b8LE-Qq0cwBmYHsqMLwTQmWiaz>;mq$y2ZX+*6Q}sO`p+_U!T(=f^HEi}K{1#2t??NFWNXJ?g z=WC}PB)V&qwQ<$1pJ`(q%n)Bh&&L~v7orw)GDGV6w$UM88xv(@AJ!v@Kam-YV@{GW zed4BbrNeP0)+cogvXIf0P{=1fdbG*#sN!0drbkETjKrQMj&N2-E|QTAcTA{$^qZ3q zo}vS_+?ZT4a64ef5Pg)e&N}u3clS{(mK^=2e&S3Ji@HwS!rXicVhcX&Ds|O!^V&1Q zAmmC-4sFd1PLs}jB8fAuGh7fn`1Ogd60O`trPZ!~2>fuVd#5ii$44hUaQwzUl!js# z#z2=l87GylLsa&rnpg>GJ zJ%c85)>*(!_}cV0sm!9Umt?u(lX#m{nyyI-IS|*}_{DN_Vafqca@nqp(x##VZdhG& zMrY9YC=B)2CYh7!Kn50&u zr(3Y;cVaW8U~zd%D3WI9T2Uf+ICPTD>k!zeR;^g!*6S{Gy^C0xJvh zn1Y>93GlIM=LOmvUMb0~rA6a6wG@TG@RuMa1(G(uv0V2elVnzs#=13i)p`0j;(8*- zyLyu}`}}J{v*2bCnhC>r5Z-kyWA)MZKh+L9wbdK4FB9#9G8Eexg?DI12sPW(+*n?6 zUkE}mNR}iFqn9GNy^-0!kZAxt&= z?~Mr6BQ)q%)1G#}q>XjDVrEI$2nGI>%Sl*@Hs}yDv6-KZ(iGP%Sc5Glz*FjJ4#&b$ z=)?`Sdd&>dW!VZri|S+J;(udQRr-Sk7 zkLTmlznr`{Ilb(|i<9%CzaE}m9{w|?V-#%~{V4NMEUyhGnJwH5$ zvsdS5FE38Kwe{6P$?0%ATWe(nRUN1@=QQCdG?XhP{_8Yuk}vhy zMr#{-OgxIT5tcN&)rDxoWUtgiot3h&X`yv9nDxB(EcfT0w%Ld0f=z^^;`taYFYs&R zUBtt~P#Pp9JKdaXvrJMgv6AJqacRmx@tG7et_r@}Z>!z?l~it<`S~or@5B@NN-o8O z96Ca7X0)|!-69U@fECVCb$q*gcJTrx@LRmO|}EiJ3qY&D0Ez2laEZgT*g z3fLvtgepXdj;${xpabJ`x`N3FG-~K#&X7dh05iU3j#j+2)wYptJz0b0I5)<0)v}N|X4Z0p;uDgn{ms1b zWEq@|ZbJTesFtR!GrvfxDPTs#AxoF1cH-L?&mem^`rJ2^cb|KAZVA!Q5dS}w!( zg>>s4#AA3DZ7m4^F7Mc(AGT3!oOnuZwHA^a|9F9q=K5VE9}dmos*pOIeKIkuc*mWE z-kZ0*E=ZBAh}LcynTfP&i29O9I)|NOt?sw`1riyJ!2e?xC|aj5)y{PzOLXyDJVJDk znC+xCi?U*u%CVca5K2M4M<9pS+#f{SoqOvG1~F*Eww`aS?T&#-4pS!!9!jed-fdZ- z3Tec|V#gkx_QFd*9o$1(v0C{In_m!3&a7zb@qu!&?%Jkjx+DiP#avuRP1zL_-z=BQ z>QR z|NP|e_{B+Hm0x;{&piM0=+XYh{{Kghhu`-9e~s&2cwa}Bz40I3?%evyjomNt`j6XQ z{*m3g2ba(PbbS7&EW5h8LYGxbo_z;%E-NZ%Qy$Er-rY-Ht8sO8MSafDhhz`O`mm>+u733=Yr6HXh@j4d9YqwgCtElYB@a33CCT^Y)yP^PvB;%l6bZe@K?~ zN0=hI4ITPd2_>qgO3%BuQLA=NNB8UM9^;xBR&k85cEV|TBX|+cYd;tcUx+>&oxSp> zx$hE=W98c1ZkACR&f_=H+F55|7jA?fnBW1h8!zG>tz_Hn_6ZUfsBXUPca=ky9ZEW9z=>-vm;LZcA0Kl0 zGHozaUe3~20?k)uP%uSr_=y$A1*Of_^rb%;n6_<)XDs@p3n$FZKd+bvQ%K%Ob(^04 zGdy^3De4CgM(q*rvA`7N{Y?Vq?N0K=8_+I4ZvPGAl@yM_cMo3AnY(X6@ddi8-c^XHoc(-=&h=Ocs%(VL)a^%c z<2~f$B?QgI|t$a z>c=ft_bYX#x9Y)%3tl@o816rV4}bn1qX+oIb_Jh&`WMw58}I)cv@b&VVlM*xocup} z^mP6Fr~QZD-v9YkuJjnp{I)lLWdQKYFKZ{x`h$q*jXEKPPiH=jpr^W9D{l{_wx|%M z+^8Zp@dq#UtTRH*!aY${4cYq<^yoEv;eJfRj=-5FB*}FhwjR^BL5oHEva%qe#NHeC nyY}SdZL|(|f9qxXc740PUEi)Re*OOd009605-TW80DJ%dIt!su literal 0 HcmV?d00001 diff --git a/repo/beta/index.yaml b/repo/beta/index.yaml index da56391..774ea17 100755 --- a/repo/beta/index.yaml +++ b/repo/beta/index.yaml @@ -62,6 +62,34 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/dai-gpu-1.1.2.tgz version: 1.1.2 + ibm-alertmanager: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-12T14:59:00.202406195+05:30 + description: The Alertmanager handles alerts sent by client applications such + as the Prometheus server. It takes care of deduplicating, grouping, and routing + them to the correct receiver integrations such as email, PagerDuty, or OpsGenie. + It also takes care of silencing and inhibition of alerts. + digest: 5d0b9aa9a3069fb5d4e24d1c2f09d069aaea8185e674808b6550f97a1feaa038 + engine: gotpl + home: https://prometheus.io/docs/alerting/alertmanager/ + keywords: + - alertmanager + - prometheus + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-alertmanager + sources: + - https://github.com/prometheus/alertmanager + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-alertmanager-0.1.0.tgz + version: 0.1.0 ibm-elasticsearch-exporter: - apiVersion: v1 appVersion: 1.0.2 @@ -88,6 +116,31 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-elasticsearch-exporter-0.2.2.tgz version: 0.2.2 + ibm-jupyter-notebook: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-12T14:59:00.203320122+05:30 + description: The Jupyter notebook is a web-based notebook environment for interactive + computing. + digest: 54b39786181cbc1ab9e63574aca2a973a16acc11e8ffb1cfbbde6514b5e596aa + engine: gotpl + home: https://jupyter-notebook.readthedocs.io/ + keywords: + - jupyter-notebook + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: lysannef@us.ibm.com + name: IBM ISV Team + name: ibm-jupyter-notebook + sources: + - https://github.com/jupyter/notebook + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-jupyter-notebook-0.1.0.tgz + version: 0.1.0 ibm-kube-state-metrics: - apiVersion: v1 appVersion: 1.3.1 @@ -141,6 +194,58 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-memcached-2.1.1.tgz version: 2.1.1 + ibm-node-exporter: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-12T14:59:00.204274126+05:30 + description: Prometheus exporter for hardware and OS metrics exposed by *NIX kernels, + written in Go with pluggable metric collectors. + digest: 6631129d48dc9bcfb1fca4ec12ec2caad7ad5d7faffec1badf1346d23611a902 + engine: gotpl + home: https://prometheus.io/ + keywords: + - node-exporter + - prometheus + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-node-exporter + sources: + - https://github.com/prometheus/node_exporter + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-node-exporter-0.1.0.tgz + version: 0.1.0 + ibm-node-red: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-12T14:59:00.205215696+05:30 + description: A visual tool for wiring the Internet of Things system. + digest: ff4c213b862cb8d620eed6be0bc1b7a2bb822a82e1e4db0f53950ae1a33668c9 + engine: gotpl + home: http://nodered.org/ + keywords: + - node-red + - IOT + - watson + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-node-red + sources: + - https://github.com/node-red/node-red + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-node-red-0.1.0.tgz + version: 0.1.0 ibm-openldap: - appVersion: 2.4.44 created: 2018-09-05T03:55:49.790973967-07:00 @@ -216,4 +321,34 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-prometheus-pushgateway-0.1.2.tgz version: 0.1.2 -generated: 2018-09-05T03:55:49.787898663-07:00 + ibm-tomcat: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-12T14:59:00.206155618+05:30 + description: Apache Tomcat, often referred to as Tomcat Server, is an open-source + Java Servlet Container + digest: 64327cb742126b8e33f6eb47ea94f774ecbe24450416fe5d8411407230e0d707 + engine: gotpl + home: http://tomcat.apache.org/ + keywords: + - apache + - tomcat + - deploy + - server + - Limited + - amd64 + - ppc64le + - s390x + - Tools + - ICP + maintainers: + - email: lysannef@us.ibm.com + name: IBM ISV Team + name: ibm-tomcat + sources: + - https://hub.docker.com/_/tomcat/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-tomcat-0.1.0.tgz + version: 0.1.0 +generated: 2018-09-12T14:59:00.201139293+05:30 diff --git a/stable/ibm-alertmanager/.helmignore b/stable/ibm-alertmanager/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-alertmanager/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-alertmanager/Chart.yaml b/stable/ibm-alertmanager/Chart.yaml new file mode 100755 index 0000000..5131f94 --- /dev/null +++ b/stable/ibm-alertmanager/Chart.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +appVersion: "1.0" +description: The Alertmanager handles alerts sent by client applications such as the Prometheus server. It takes care of deduplicating, grouping, and routing them to the correct receiver integrations such as email, PagerDuty, or OpsGenie. It also takes care of silencing and inhibition of alerts. + +engine: gotpl +home: https://prometheus.io/docs/alerting/alertmanager/ +keywords: +- alertmanager +- prometheus +- Limited +- ppc64le +- Tools +- ICP + +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team + +name: ibm-alertmanager +sources: +- https://github.com/prometheus/alertmanager +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-alertmanager/LICENSE b/stable/ibm-alertmanager/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-alertmanager/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-alertmanager/README.md b/stable/ibm-alertmanager/README.md new file mode 100755 index 0000000..373da75 --- /dev/null +++ b/stable/ibm-alertmanager/README.md @@ -0,0 +1,69 @@ +# Alert Manager + +[Alert Manager](https://prometheus.io/docs/alerting/alertmanager)The Alertmanager handles alerts sent by client applications such as the Prometheus server. + +## TL;DR; + +```console +$ helm install stable/ibm-alertmanager +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Alert Manager](https://github.com/prometheus/alertmanager) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm intall --name my-release stable/ibm-alertmanager +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Alert Manager]( https://hub.docker.com/r/ibmcom/alertmanager-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Alert Manager chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official alertmanager tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-alertmanager` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-alertmanager +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-alertmanager/RELEASENOTES.md b/stable/ibm-alertmanager/RELEASENOTES.md new file mode 100644 index 0000000..444e10c --- /dev/null +++ b/stable/ibm-alertmanager/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-alertmanager/templates/NOTES.txt b/stable/ibm-alertmanager/templates/NOTES.txt new file mode 100755 index 0000000..5bd2da8 --- /dev/null +++ b/stable/ibm-alertmanager/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "alertmanager.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "alertmanager.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "alertmanager.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "alertmanager.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:9093 to use your application" + kubectl port-forward $POD_NAME 9093:9093 +{{- end }} diff --git a/stable/ibm-alertmanager/templates/_helpers.tpl b/stable/ibm-alertmanager/templates/_helpers.tpl new file mode 100755 index 0000000..377d589 --- /dev/null +++ b/stable/ibm-alertmanager/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "alertmanager.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 "alertmanager.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "alertmanager.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-alertmanager/templates/deployment.yaml b/stable/ibm-alertmanager/templates/deployment.yaml new file mode 100755 index 0000000..8e05fa7 --- /dev/null +++ b/stable/ibm-alertmanager/templates/deployment.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "alertmanager.fullname" . }} + labels: + app: {{ template "alertmanager.name" . }} + chart: {{ template "alertmanager.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "alertmanager.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "alertmanager.name" . }} + release: {{ .Release.Name }} + chart: {{ template "alertmanager.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 9093 + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-alertmanager/templates/ingress.yaml b/stable/ibm-alertmanager/templates/ingress.yaml new file mode 100755 index 0000000..c773459 --- /dev/null +++ b/stable/ibm-alertmanager/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "alertmanager.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "alertmanager.name" . }} + chart: {{ template "alertmanager.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-alertmanager/templates/service.yaml b/stable/ibm-alertmanager/templates/service.yaml new file mode 100755 index 0000000..7db8df5 --- /dev/null +++ b/stable/ibm-alertmanager/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "alertmanager.fullname" . }} + labels: + app: {{ template "alertmanager.name" . }} + chart: {{ template "alertmanager.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + app: {{ template "alertmanager.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-alertmanager/values-metadata.yaml b/stable/ibm-alertmanager/values-metadata.yaml new file mode 100755 index 0000000..695535a --- /dev/null +++ b/stable/ibm-alertmanager/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-alertmanager/values.yaml b/stable/ibm-alertmanager/values.yaml new file mode 100755 index 0000000..75d72b3 --- /dev/null +++ b/stable/ibm-alertmanager/values.yaml @@ -0,0 +1,45 @@ +# Default values for alertmanager. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/alertmanager-ppc64le + tag: v0.13.0 + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 9093 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" +tolerations: [] + +affinity: {} diff --git a/stable/ibm-jupyter-notebook/.helmignore b/stable/ibm-jupyter-notebook/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-jupyter-notebook/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-jupyter-notebook/Chart.yaml b/stable/ibm-jupyter-notebook/Chart.yaml new file mode 100755 index 0000000..3ac9b6a --- /dev/null +++ b/stable/ibm-jupyter-notebook/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +appVersion: "1.0" +description: The Jupyter notebook is a web-based notebook environment for interactive computing. +engine: gotpl +home: https://jupyter-notebook.readthedocs.io/ + +keywords: +- jupyter-notebook +- Limited +- ppc64le +- Tools +- ICP + +maintainers: +- email: lysannef@us.ibm.com + name: IBM ISV Team + +name: ibm-jupyter-notebook +sources: +- https://github.com/jupyter/notebook +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-jupyter-notebook/LICENSE b/stable/ibm-jupyter-notebook/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-jupyter-notebook/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-jupyter-notebook/README.md b/stable/ibm-jupyter-notebook/README.md new file mode 100755 index 0000000..9860b25 --- /dev/null +++ b/stable/ibm-jupyter-notebook/README.md @@ -0,0 +1,69 @@ +# Jupyter Notebook + +[Jupyter Notebook](https://jupyter-notebook.readthedocs.io/)The Jupyter notebook is a web-based notebook environment for interactive computing. + +## TL;DR; + +```console +$ helm install stable/ibm-jupyter-notebook +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Jupyter Notebook](https://github.com/jupyter/notebook) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm intall --name my-release stable/ibm-jupyter-notebook +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Jupyter Notebook](https://hub.docker.com/r/ppc64le/jupyter-base-notebook/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Jupyter Notebook chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official jupyter-notebook tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-jupyter-notebook` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-jupyter-notebook +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-jupyter-notebook/RELEASENOTES.md b/stable/ibm-jupyter-notebook/RELEASENOTES.md new file mode 100644 index 0000000..444e10c --- /dev/null +++ b/stable/ibm-jupyter-notebook/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-jupyter-notebook/templates/NOTES.txt b/stable/ibm-jupyter-notebook/templates/NOTES.txt new file mode 100755 index 0000000..b86fd96 --- /dev/null +++ b/stable/ibm-jupyter-notebook/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "jupyternotebook.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "jupyternotebook.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "jupyternotebook.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "jupyternotebook.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8888 to use your application" + kubectl port-forward $POD_NAME 8889:8888 +{{- end }} diff --git a/stable/ibm-jupyter-notebook/templates/_helpers.tpl b/stable/ibm-jupyter-notebook/templates/_helpers.tpl new file mode 100755 index 0000000..0893737 --- /dev/null +++ b/stable/ibm-jupyter-notebook/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "jupyternotebook.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 "jupyternotebook.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "jupyternotebook.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-jupyter-notebook/templates/deployment.yaml b/stable/ibm-jupyter-notebook/templates/deployment.yaml new file mode 100755 index 0000000..f097912 --- /dev/null +++ b/stable/ibm-jupyter-notebook/templates/deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "jupyternotebook.fullname" . }} + labels: + app: {{ template "jupyternotebook.name" . }} + chart: {{ template "jupyternotebook.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "jupyternotebook.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "jupyternotebook.name" . }} + release: {{ .Release.Name }} + chart: {{ template "jupyternotebook.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 8888 + - name: http + containerPort: 8888 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-jupyter-notebook/templates/ingress.yaml b/stable/ibm-jupyter-notebook/templates/ingress.yaml new file mode 100755 index 0000000..43d7be6 --- /dev/null +++ b/stable/ibm-jupyter-notebook/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "jupyternotebook.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "jupyternotebook.name" . }} + chart: {{ template "jupyternotebook.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-jupyter-notebook/templates/service.yaml b/stable/ibm-jupyter-notebook/templates/service.yaml new file mode 100755 index 0000000..b445058 --- /dev/null +++ b/stable/ibm-jupyter-notebook/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "jupyternotebook.fullname" . }} + labels: + app: {{ template "jupyternotebook.name" . }} + chart: {{ template "jupyternotebook.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.externalPort }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + name: {{ .Values.service.name }} + selector: + app: {{ template "jupyternotebook.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-jupyter-notebook/values-metadata.yaml b/stable/ibm-jupyter-notebook/values-metadata.yaml new file mode 100755 index 0000000..f891e8f --- /dev/null +++ b/stable/ibm-jupyter-notebook/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "nodeSelector" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-jupyter-notebook/values.yaml b/stable/ibm-jupyter-notebook/values.yaml new file mode 100755 index 0000000..f0c7359 --- /dev/null +++ b/stable/ibm-jupyter-notebook/values.yaml @@ -0,0 +1,48 @@ +# Default values for jupyternotebook. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ppc64le/jupyter-base-notebook + tag: latest + pullPolicy: IfNotPresent + +service: + type: ClusterIP + port: 8888 + internalPort: 8888 + externalPort: 8888 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-node-exporter/.helmignore b/stable/ibm-node-exporter/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-node-exporter/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-node-exporter/Chart.yaml b/stable/ibm-node-exporter/Chart.yaml new file mode 100755 index 0000000..7ed1953 --- /dev/null +++ b/stable/ibm-node-exporter/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +appVersion: "1.0" +description: Prometheus exporter for hardware and OS metrics exposed by *NIX kernels, written in Go with pluggable metric collectors. +engine: gotpl +home: https://prometheus.io/ +keywords: +- node-exporter +- prometheus +- Limited +- ppc64le +- Tools +- ICP + +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team + +name: ibm-node-exporter +sources: +- https://github.com/prometheus/node_exporter +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-node-exporter/LICENSE b/stable/ibm-node-exporter/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-node-exporter/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-node-exporter/README.md b/stable/ibm-node-exporter/README.md new file mode 100755 index 0000000..c9b3b33 --- /dev/null +++ b/stable/ibm-node-exporter/README.md @@ -0,0 +1,69 @@ +# Node Exporter + +[Node Exporter](https://prometheus.io/)An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach. + +## TL;DR; + +```console +$ helm install stable/ibm-node-exporter +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Node Exporter](https://github.com/prometheus/node_exporter) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm intall --name my-release stable/ibm-node-exporter +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Node Exporter](https://hub.docker.com/r/ibmcom/node-exporter-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Node Exporter chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official node-exporter tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-node-exporter` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-node-exporter +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-node-exporter/RELEASENOTES.md b/stable/ibm-node-exporter/RELEASENOTES.md new file mode 100644 index 0000000..444e10c --- /dev/null +++ b/stable/ibm-node-exporter/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-node-exporter/templates/NOTES.txt b/stable/ibm-node-exporter/templates/NOTES.txt new file mode 100755 index 0000000..92c30ff --- /dev/null +++ b/stable/ibm-node-exporter/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "node-exporter.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "node-exporter.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "node-exporter.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "node-exporter.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:9100 to use your application" + kubectl port-forward $POD_NAME 9100:9100 +{{- end }} diff --git a/stable/ibm-node-exporter/templates/_helpers.tpl b/stable/ibm-node-exporter/templates/_helpers.tpl new file mode 100755 index 0000000..cbc4da4 --- /dev/null +++ b/stable/ibm-node-exporter/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "node-exporter.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-exporter.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "node-exporter.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-node-exporter/templates/deployment.yaml b/stable/ibm-node-exporter/templates/deployment.yaml new file mode 100755 index 0000000..53a21d9 --- /dev/null +++ b/stable/ibm-node-exporter/templates/deployment.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "node-exporter.fullname" . }} + labels: + app: {{ template "node-exporter.name" . }} + chart: {{ template "node-exporter.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "node-exporter.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "node-exporter.name" . }} + release: {{ .Release.Name }} + chart: {{ template "node-exporter.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 9100 + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-node-exporter/templates/ingress.yaml b/stable/ibm-node-exporter/templates/ingress.yaml new file mode 100755 index 0000000..5925afb --- /dev/null +++ b/stable/ibm-node-exporter/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "node-exporter.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "node-exporter.name" . }} + chart: {{ template "node-exporter.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-node-exporter/templates/service.yaml b/stable/ibm-node-exporter/templates/service.yaml new file mode 100755 index 0000000..b970495 --- /dev/null +++ b/stable/ibm-node-exporter/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "node-exporter.fullname" . }} + labels: + app: {{ template "node-exporter.name" . }} + chart: {{ template "node-exporter.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + name: http + selector: + app: {{ template "node-exporter.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-node-exporter/values-metadata.yaml b/stable/ibm-node-exporter/values-metadata.yaml new file mode 100644 index 0000000..f891e8f --- /dev/null +++ b/stable/ibm-node-exporter/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "nodeSelector" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-node-exporter/values.yaml b/stable/ibm-node-exporter/values.yaml new file mode 100755 index 0000000..c07b917 --- /dev/null +++ b/stable/ibm-node-exporter/values.yaml @@ -0,0 +1,46 @@ +# Default values for node-exporter. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/node-exporter-ppc64le + tag: v0.15.2 + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 9100 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-node-red/.helmignore b/stable/ibm-node-red/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-node-red/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-node-red/Chart.yaml b/stable/ibm-node-red/Chart.yaml new file mode 100755 index 0000000..c65b05f --- /dev/null +++ b/stable/ibm-node-red/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +appVersion: "1.0" +description: A visual tool for wiring the Internet of Things + system. +engine: gotpl +home: http://nodered.org/ +keywords: +- node-red +- IOT +- watson +- Limited +- ppc64le +- Tools +- ICP + +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team + +name: ibm-node-red +sources: +- https://github.com/node-red/node-red +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-node-red/LICENSE b/stable/ibm-node-red/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-node-red/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-node-red/README.md b/stable/ibm-node-red/README.md new file mode 100755 index 0000000..46e6cff --- /dev/null +++ b/stable/ibm-node-red/README.md @@ -0,0 +1,69 @@ +# Node Red + +[Node Red](http://nodered.org/)A visual tool for wiring the Internet of Things. + +## TL;DR; + +```console +$ helm install stable/ibm-node-red +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Node Red](https://github.com/node-red/node-red) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm intall --name my-release stable/ibm-node-red +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Node Red]( https://hub.docker.com/r/andrewlaidlaw/node-red-watson-ppc64le/ ) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Node Red chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official node-red tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-node-red` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-node-red +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-node-red/RELEASENOTES.md b/stable/ibm-node-red/RELEASENOTES.md new file mode 100644 index 0000000..444e10c --- /dev/null +++ b/stable/ibm-node-red/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 | >= 1.7+ | | diff --git a/stable/ibm-node-red/templates/NOTES.txt b/stable/ibm-node-red/templates/NOTES.txt new file mode 100755 index 0000000..ed85ddf --- /dev/null +++ b/stable/ibm-node-red/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "nodered.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "nodered.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "nodered.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "nodered.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:1880 to use your application" + kubectl port-forward $POD_NAME 1880:1880 +{{- end }} diff --git a/stable/ibm-node-red/templates/_helpers.tpl b/stable/ibm-node-red/templates/_helpers.tpl new file mode 100755 index 0000000..1f5b826 --- /dev/null +++ b/stable/ibm-node-red/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "nodered.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 "nodered.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "nodered.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-node-red/templates/deployment.yaml b/stable/ibm-node-red/templates/deployment.yaml new file mode 100755 index 0000000..2baddd7 --- /dev/null +++ b/stable/ibm-node-red/templates/deployment.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "nodered.fullname" . }} + labels: + app: {{ template "nodered.name" . }} + chart: {{ template "nodered.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "nodered.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "nodered.name" . }} + release: {{ .Release.Name }} + chart: {{ template "nodered.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 1880 + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-node-red/templates/ingress.yaml b/stable/ibm-node-red/templates/ingress.yaml new file mode 100755 index 0000000..ab4eca3 --- /dev/null +++ b/stable/ibm-node-red/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "nodered.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "nodered.name" . }} + chart: {{ template "nodered.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-node-red/templates/service.yaml b/stable/ibm-node-red/templates/service.yaml new file mode 100755 index 0000000..2dee5f1 --- /dev/null +++ b/stable/ibm-node-red/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "nodered.fullname" . }} + labels: + app: {{ template "nodered.name" . }} + chart: {{ template "nodered.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + name: http + selector: + app: {{ template "nodered.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-node-red/values-metadata.yaml b/stable/ibm-node-red/values-metadata.yaml new file mode 100644 index 0000000..695535a --- /dev/null +++ b/stable/ibm-node-red/values-metadata.yaml @@ -0,0 +1,14 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-node-red/values.yaml b/stable/ibm-node-red/values.yaml new file mode 100755 index 0000000..9221726 --- /dev/null +++ b/stable/ibm-node-red/values.yaml @@ -0,0 +1,46 @@ +# Default values for nodered. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: andrewlaidlaw/node-red-watson-ppc64le + tag: latest + pullPolicy: IfNotPresent + +service: + type: ClusterIP + port: 1880 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-tomcat/.helmignore b/stable/ibm-tomcat/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-tomcat/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-tomcat/Chart.yaml b/stable/ibm-tomcat/Chart.yaml new file mode 100755 index 0000000..2a1fed3 --- /dev/null +++ b/stable/ibm-tomcat/Chart.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +appVersion: "1.0" +description: Apache Tomcat, often referred to as Tomcat Server, is an open-source Java Servlet Container +engine: gotpl +home: http://tomcat.apache.org/ +keywords: +- apache +- tomcat +- deploy +- server +- Limited +- amd64 +- ppc64le +- s390x +- Tools +- ICP + +maintainers: +- email: lysannef@us.ibm.com + name: IBM ISV Team + +name: ibm-tomcat +sources: +- https://hub.docker.com/_/tomcat/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-tomcat/LICENSE b/stable/ibm-tomcat/LICENSE new file mode 100755 index 0000000..d645695 --- /dev/null +++ b/stable/ibm-tomcat/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/stable/ibm-tomcat/README.md b/stable/ibm-tomcat/README.md new file mode 100755 index 0000000..9d75e90 --- /dev/null +++ b/stable/ibm-tomcat/README.md @@ -0,0 +1,69 @@ +# Tomcat + +[Tomcat](http://tomcat.apache.org/)Apache Tomcat, often referred to as Tomcat Server, is an open-source Java Servlet Container + +## TL;DR; + +```console +$ helm install stable/ibm-tomcat +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [Tomcat](https://hub.docker.com/_/tomcat/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-tomcat +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [Tomcat](https://hub.docker.com/_/tomcat/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the Tomcat chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official tomcat tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-tomcat` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-tomcat +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-tomcat/RELEASENOTES.md b/stable/ibm-tomcat/RELEASENOTES.md new file mode 100755 index 0000000..c81119e --- /dev/null +++ b/stable/ibm-tomcat/RELEASENOTES.md @@ -0,0 +1,19 @@ +# Release Notes + +## What's new in Chart Version 1.0 + +- Initial Release + +## Fixes + +- No fixes + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Details | +| ----- | -------- | --------------------------- | ------- | +| 0.1.0 |Sept 2018 |>= 1.7 + | | diff --git a/stable/ibm-tomcat/templates/NOTES.txt b/stable/ibm-tomcat/templates/NOTES.txt new file mode 100755 index 0000000..39763ef --- /dev/null +++ b/stable/ibm-tomcat/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "tomcattest.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "tomcattest.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "tomcattest.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "tomcattest.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-tomcat/templates/_helpers.tpl b/stable/ibm-tomcat/templates/_helpers.tpl new file mode 100755 index 0000000..a434400 --- /dev/null +++ b/stable/ibm-tomcat/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "tomcattest.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 "tomcattest.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "tomcattest.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-tomcat/templates/deployment.yaml b/stable/ibm-tomcat/templates/deployment.yaml new file mode 100755 index 0000000..3f578c2 --- /dev/null +++ b/stable/ibm-tomcat/templates/deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "tomcattest.fullname" . }} + labels: + app: {{ template "tomcattest.name" . }} + chart: {{ template "tomcattest.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "tomcattest.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "tomcattest.name" . }} + release: {{ .Release.Name }} + chart: {{ template "tomcattest.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["catalina.sh", "run"] + ports: + - name: http + containerPort: 8080 + # protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} diff --git a/stable/ibm-tomcat/templates/ingress.yaml b/stable/ibm-tomcat/templates/ingress.yaml new file mode 100755 index 0000000..39bf44e --- /dev/null +++ b/stable/ibm-tomcat/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "tomcattest.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "tomcattest.name" . }} + chart: {{ template "tomcattest.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-tomcat/templates/service.yaml b/stable/ibm-tomcat/templates/service.yaml new file mode 100755 index 0000000..7667edf --- /dev/null +++ b/stable/ibm-tomcat/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "tomcattest.fullname" . }} + labels: + app: {{ template "tomcattest.name" . }} + chart: {{ template "tomcattest.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.externalPort }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + name: {{ .Values.service.name }} + selector: + app: {{ template "tomcattest.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-tomcat/values-metadata.yaml b/stable/ibm-tomcat/values-metadata.yaml new file mode 100755 index 0000000..cb7ba3e --- /dev/null +++ b/stable/ibm-tomcat/values-metadata.yaml @@ -0,0 +1,13 @@ +nodeSelector.beta.kubernetes.io/arch: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" diff --git a/stable/ibm-tomcat/values.yaml b/stable/ibm-tomcat/values.yaml new file mode 100755 index 0000000..e10dbd0 --- /dev/null +++ b/stable/ibm-tomcat/values.yaml @@ -0,0 +1,48 @@ +# Default values for tomcattest. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ppc64le/tomcat + tag: 8.0 + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 8080 + externalPort: 8888 + internalPort: 8080 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: + beta.kubernetes.io/arch: "ppc64le" + +tolerations: [] + +affinity: {} From 75109bccd136ce6b276f75db3e2d10118c99cbef Mon Sep 17 00:00:00 2001 From: snehlatamohite Date: Thu, 13 Sep 2018 05:28:24 -0700 Subject: [PATCH 5/6] Added helm charts for etcd-opertor mongodb-replicaset rabbitmq-ha redis-ha and postgresql --- repo/beta/ibm-etcd-operator-0.7.7.tgz | Bin 0 -> 11860 bytes repo/beta/ibm-mongodb-replicaset-3.5.6.tgz | Bin 0 -> 17635 bytes repo/beta/ibm-postgresql-0.11.0.tgz | Bin 0 -> 11957 bytes repo/beta/ibm-rabbitmq-ha-1.6.3.tgz | Bin 0 -> 17259 bytes repo/beta/ibm-redis-ha-2.2.1.tgz | Bin 0 -> 10173 bytes repo/beta/index.yaml | 139 ++++++- stable/ibm-etcd-operator/.helmignore | 21 + stable/ibm-etcd-operator/Chart.yaml | 19 + stable/ibm-etcd-operator/LICENSE | 202 ++++++++++ stable/ibm-etcd-operator/OWNERS | 8 + stable/ibm-etcd-operator/README.md | 164 ++++++++ stable/ibm-etcd-operator/RELEASENOTES.md | 17 + stable/ibm-etcd-operator/templates/NOTES.txt | 33 ++ .../ibm-etcd-operator/templates/_helpers.tpl | 75 ++++ .../templates/backup-etcd-crd.yaml | 16 + .../backup-operator-clusterrole-binding.yaml | 20 + .../templates/backup-operator-deployment.yaml | 69 ++++ .../backup-operator-service-account.yaml | 12 + .../templates/etcd-cluster-crd.yaml | 22 ++ .../templates/operator-cluster-role.yaml | 49 +++ .../operator-clusterrole-binding.yaml | 20 + .../templates/operator-deployment.yaml | 91 +++++ .../templates/operator-service-account.yaml | 12 + .../templates/restore-etcd-crd.yaml | 25 ++ .../restore-operator-clusterrole-binding.yaml | 20 + .../restore-operator-deployment.yaml | 73 ++++ .../restore-operator-service-account.yaml | 12 + .../templates/restore-operator-service.yaml | 20 + stable/ibm-etcd-operator/values-metadata.yaml | 14 + stable/ibm-etcd-operator/values.yaml | 153 ++++++++ stable/ibm-mongodb-replicaset/.helmignore | 22 ++ stable/ibm-mongodb-replicaset/Chart.yaml | 20 + stable/ibm-mongodb-replicaset/LICENSE | 202 ++++++++++ stable/ibm-mongodb-replicaset/OWNERS | 6 + stable/ibm-mongodb-replicaset/README.md | 363 ++++++++++++++++++ stable/ibm-mongodb-replicaset/RELEASENOTES.md | 17 + .../ci/default-values.yaml | 1 + .../ci/metrics-values.yaml | 10 + .../ibm-mongodb-replicaset/init/on-start.sh | 174 +++++++++ .../templates/NOTES.txt | 14 + .../templates/_helpers.tpl | 63 +++ .../templates/mongodb-admin-secret.yaml | 18 + .../templates/mongodb-ca-secret.yaml | 18 + .../templates/mongodb-init-configmap.yaml | 15 + .../templates/mongodb-keyfile-secret.yaml | 17 + .../templates/mongodb-metrics-secret.yaml | 18 + .../templates/mongodb-mongodb-configmap.yaml | 15 + .../mongodb-poddisruptionbudget.yaml | 20 + .../templates/mongodb-service.yaml | 32 ++ .../templates/mongodb-statefulset.yaml | 354 +++++++++++++++++ .../tests/mongodb-up-test-configmap.yaml | 12 + .../templates/tests/mongodb-up-test-pod.yaml | 49 +++ stable/ibm-mongodb-replicaset/test.sh | 48 +++ .../tests/mongodb-up-test.sh | 76 ++++ .../values-metadata.yaml | 12 + stable/ibm-mongodb-replicaset/values.yaml | 125 ++++++ stable/ibm-postgresql/Chart.yaml | 24 ++ stable/ibm-postgresql/LICENSE | 202 ++++++++++ stable/ibm-postgresql/README.md | 150 ++++++++ stable/ibm-postgresql/RELEASENOTES.md | 17 + stable/ibm-postgresql/templates/NOTES.txt | 27 ++ stable/ibm-postgresql/templates/_helpers.tpl | 43 +++ .../ibm-postgresql/templates/deployment.yaml | 157 ++++++++ .../templates/networkpolicy.yaml | 29 ++ stable/ibm-postgresql/templates/pvc.yaml | 28 ++ stable/ibm-postgresql/templates/secrets.yaml | 19 + stable/ibm-postgresql/templates/svc.yaml | 30 ++ stable/ibm-postgresql/values-metadata.yaml | 14 + stable/ibm-postgresql/values.yaml | 127 ++++++ stable/ibm-rabbitmq-ha/.helmignore | 21 + stable/ibm-rabbitmq-ha/Chart.yaml | 26 ++ stable/ibm-rabbitmq-ha/LICENSE | 202 ++++++++++ stable/ibm-rabbitmq-ha/README.md | 214 +++++++++++ stable/ibm-rabbitmq-ha/RELEASENOTES.md | 17 + stable/ibm-rabbitmq-ha/templates/NOTES.txt | 92 +++++ stable/ibm-rabbitmq-ha/templates/_helpers.tpl | 50 +++ stable/ibm-rabbitmq-ha/templates/alerts.yaml | 105 +++++ .../ibm-rabbitmq-ha/templates/configmap.yaml | 106 +++++ stable/ibm-rabbitmq-ha/templates/ingress.yaml | 36 ++ stable/ibm-rabbitmq-ha/templates/role.yaml | 18 + .../templates/rolebinding.yaml | 21 + stable/ibm-rabbitmq-ha/templates/secret.yaml | 46 +++ .../templates/service-discovery.yaml | 70 ++++ stable/ibm-rabbitmq-ha/templates/service.yaml | 90 +++++ .../templates/serviceaccount.yaml | 14 + .../templates/servicemonitor.yaml | 21 + .../templates/statefulset.yaml | 256 ++++++++++++ stable/ibm-rabbitmq-ha/values-metadata.yaml | 14 + stable/ibm-rabbitmq-ha/values.yaml | 322 ++++++++++++++++ stable/ibm-redis-ha/Chart.yaml | 22 ++ stable/ibm-redis-ha/LICENSE | 202 ++++++++++ stable/ibm-redis-ha/README.md | 122 ++++++ stable/ibm-redis-ha/RELEASENOTES.md | 16 + stable/ibm-redis-ha/templates/NOTES.txt | 26 ++ stable/ibm-redis-ha/templates/_helpers.tpl | 58 +++ .../templates/redis-auth-secret.yaml | 15 + .../templates/redis-master-service.yaml | 19 + stable/ibm-redis-ha/templates/redis-role.yaml | 17 + .../templates/redis-rolebinding.yaml | 15 + .../templates/redis-sentinel-deployment.yaml | 60 +++ .../templates/redis-sentinel-service.yaml | 16 + .../templates/redis-server-deployment.yaml | 69 ++++ .../templates/redis-serviceaccount.yaml | 11 + .../templates/redis-slave-service.yaml | 20 + .../tests/test-redis-master-service.yaml | 32 ++ .../tests/test-redis-sentinel-service.yaml | 32 ++ .../tests/test-redis-slave-service.yaml | 32 ++ stable/ibm-redis-ha/values-metadata.yaml | 14 + stable/ibm-redis-ha/values.yaml | 72 ++++ 109 files changed, 6504 insertions(+), 1 deletion(-) create mode 100644 repo/beta/ibm-etcd-operator-0.7.7.tgz create mode 100644 repo/beta/ibm-mongodb-replicaset-3.5.6.tgz create mode 100644 repo/beta/ibm-postgresql-0.11.0.tgz create mode 100644 repo/beta/ibm-rabbitmq-ha-1.6.3.tgz create mode 100644 repo/beta/ibm-redis-ha-2.2.1.tgz create mode 100755 stable/ibm-etcd-operator/.helmignore create mode 100755 stable/ibm-etcd-operator/Chart.yaml create mode 100755 stable/ibm-etcd-operator/LICENSE create mode 100755 stable/ibm-etcd-operator/OWNERS create mode 100755 stable/ibm-etcd-operator/README.md create mode 100755 stable/ibm-etcd-operator/RELEASENOTES.md create mode 100755 stable/ibm-etcd-operator/templates/NOTES.txt create mode 100755 stable/ibm-etcd-operator/templates/_helpers.tpl create mode 100755 stable/ibm-etcd-operator/templates/backup-etcd-crd.yaml create mode 100755 stable/ibm-etcd-operator/templates/backup-operator-clusterrole-binding.yaml create mode 100755 stable/ibm-etcd-operator/templates/backup-operator-deployment.yaml create mode 100755 stable/ibm-etcd-operator/templates/backup-operator-service-account.yaml create mode 100755 stable/ibm-etcd-operator/templates/etcd-cluster-crd.yaml create mode 100755 stable/ibm-etcd-operator/templates/operator-cluster-role.yaml create mode 100755 stable/ibm-etcd-operator/templates/operator-clusterrole-binding.yaml create mode 100755 stable/ibm-etcd-operator/templates/operator-deployment.yaml create mode 100755 stable/ibm-etcd-operator/templates/operator-service-account.yaml create mode 100755 stable/ibm-etcd-operator/templates/restore-etcd-crd.yaml create mode 100755 stable/ibm-etcd-operator/templates/restore-operator-clusterrole-binding.yaml create mode 100755 stable/ibm-etcd-operator/templates/restore-operator-deployment.yaml create mode 100755 stable/ibm-etcd-operator/templates/restore-operator-service-account.yaml create mode 100755 stable/ibm-etcd-operator/templates/restore-operator-service.yaml create mode 100755 stable/ibm-etcd-operator/values-metadata.yaml create mode 100755 stable/ibm-etcd-operator/values.yaml create mode 100755 stable/ibm-mongodb-replicaset/.helmignore create mode 100755 stable/ibm-mongodb-replicaset/Chart.yaml create mode 100755 stable/ibm-mongodb-replicaset/LICENSE create mode 100755 stable/ibm-mongodb-replicaset/OWNERS create mode 100755 stable/ibm-mongodb-replicaset/README.md create mode 100755 stable/ibm-mongodb-replicaset/RELEASENOTES.md create mode 100755 stable/ibm-mongodb-replicaset/ci/default-values.yaml create mode 100755 stable/ibm-mongodb-replicaset/ci/metrics-values.yaml create mode 100755 stable/ibm-mongodb-replicaset/init/on-start.sh create mode 100755 stable/ibm-mongodb-replicaset/templates/NOTES.txt create mode 100755 stable/ibm-mongodb-replicaset/templates/_helpers.tpl create mode 100755 stable/ibm-mongodb-replicaset/templates/mongodb-admin-secret.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/mongodb-ca-secret.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/mongodb-init-configmap.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/mongodb-keyfile-secret.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/mongodb-metrics-secret.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/mongodb-mongodb-configmap.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/mongodb-poddisruptionbudget.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/mongodb-service.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/mongodb-statefulset.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/tests/mongodb-up-test-configmap.yaml create mode 100755 stable/ibm-mongodb-replicaset/templates/tests/mongodb-up-test-pod.yaml create mode 100755 stable/ibm-mongodb-replicaset/test.sh create mode 100755 stable/ibm-mongodb-replicaset/tests/mongodb-up-test.sh create mode 100755 stable/ibm-mongodb-replicaset/values-metadata.yaml create mode 100755 stable/ibm-mongodb-replicaset/values.yaml create mode 100755 stable/ibm-postgresql/Chart.yaml create mode 100755 stable/ibm-postgresql/LICENSE create mode 100755 stable/ibm-postgresql/README.md create mode 100755 stable/ibm-postgresql/RELEASENOTES.md create mode 100755 stable/ibm-postgresql/templates/NOTES.txt create mode 100755 stable/ibm-postgresql/templates/_helpers.tpl create mode 100755 stable/ibm-postgresql/templates/deployment.yaml create mode 100755 stable/ibm-postgresql/templates/networkpolicy.yaml create mode 100755 stable/ibm-postgresql/templates/pvc.yaml create mode 100755 stable/ibm-postgresql/templates/secrets.yaml create mode 100755 stable/ibm-postgresql/templates/svc.yaml create mode 100755 stable/ibm-postgresql/values-metadata.yaml create mode 100755 stable/ibm-postgresql/values.yaml create mode 100755 stable/ibm-rabbitmq-ha/.helmignore create mode 100755 stable/ibm-rabbitmq-ha/Chart.yaml create mode 100755 stable/ibm-rabbitmq-ha/LICENSE create mode 100755 stable/ibm-rabbitmq-ha/README.md create mode 100755 stable/ibm-rabbitmq-ha/RELEASENOTES.md create mode 100755 stable/ibm-rabbitmq-ha/templates/NOTES.txt create mode 100755 stable/ibm-rabbitmq-ha/templates/_helpers.tpl create mode 100755 stable/ibm-rabbitmq-ha/templates/alerts.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/configmap.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/ingress.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/role.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/rolebinding.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/secret.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/service-discovery.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/service.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/serviceaccount.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/servicemonitor.yaml create mode 100755 stable/ibm-rabbitmq-ha/templates/statefulset.yaml create mode 100755 stable/ibm-rabbitmq-ha/values-metadata.yaml create mode 100755 stable/ibm-rabbitmq-ha/values.yaml create mode 100755 stable/ibm-redis-ha/Chart.yaml create mode 100755 stable/ibm-redis-ha/LICENSE create mode 100755 stable/ibm-redis-ha/README.md create mode 100755 stable/ibm-redis-ha/RELEASENOTES.md create mode 100755 stable/ibm-redis-ha/templates/NOTES.txt create mode 100755 stable/ibm-redis-ha/templates/_helpers.tpl create mode 100755 stable/ibm-redis-ha/templates/redis-auth-secret.yaml create mode 100755 stable/ibm-redis-ha/templates/redis-master-service.yaml create mode 100755 stable/ibm-redis-ha/templates/redis-role.yaml create mode 100755 stable/ibm-redis-ha/templates/redis-rolebinding.yaml create mode 100755 stable/ibm-redis-ha/templates/redis-sentinel-deployment.yaml create mode 100755 stable/ibm-redis-ha/templates/redis-sentinel-service.yaml create mode 100755 stable/ibm-redis-ha/templates/redis-server-deployment.yaml create mode 100755 stable/ibm-redis-ha/templates/redis-serviceaccount.yaml create mode 100755 stable/ibm-redis-ha/templates/redis-slave-service.yaml create mode 100755 stable/ibm-redis-ha/templates/tests/test-redis-master-service.yaml create mode 100755 stable/ibm-redis-ha/templates/tests/test-redis-sentinel-service.yaml create mode 100755 stable/ibm-redis-ha/templates/tests/test-redis-slave-service.yaml create mode 100755 stable/ibm-redis-ha/values-metadata.yaml create mode 100755 stable/ibm-redis-ha/values.yaml diff --git a/repo/beta/ibm-etcd-operator-0.7.7.tgz b/repo/beta/ibm-etcd-operator-0.7.7.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2c876a2864d5074af5bdd7cd61b141f9f3c4826a GIT binary patch literal 11860 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 O0RR6N@K5dl5CH(?R7gw! literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-mongodb-replicaset-3.5.6.tgz b/repo/beta/ibm-mongodb-replicaset-3.5.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9918599b976434db4a0d5dca449f392eb471556e GIT binary patch literal 17635 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 W=jB=O{C@!e0RR6XojEN4SOEa8zYY8V literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-postgresql-0.11.0.tgz b/repo/beta/ibm-postgresql-0.11.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d876e7077a6d0e2b995bef160f01e80b5ecea49e GIT binary patch literal 11957 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 H0KxzO1JK35 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-rabbitmq-ha-1.6.3.tgz b/repo/beta/ibm-rabbitmq-ha-1.6.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..f0e126098a4d1f7e13be6ddbe5580c87e30c9f96 GIT binary patch literal 17259 zcmV)+K#0E|iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0POwycH20zD2(sF^%QmFo*lc7Bwyk<-J0#$+p*mp|0cH8mebj@ za?G5(kGXnvEE1POp-?vz3TzO!1sM#O zia)l;Wb<%Lgz8L49R1r@d$zW=wqCw?f&Xr8ZB_r>-rn7Ff1CH)yIb4O{|&w#1aqED zDkA=EYwNM?R0sDj@{pAMPK9JV>B8-HgQRKx^LgiGXSWej83>jteD#`*#?b`GEnyKE zL=-NNbWVSRAj+hoq6KP9fu}S9$ukj9h^drhL}4KK4HY2yP~8zh8vtrd6tFmrXiO6& zvF1T|OOk+waB8dlmeGtQBj^dPc)%lAKRErZx6x^gc}%-7Rw|X<&CR>JyN)B{PQc>^ z3pBj$^MI*@#7uwLBvMi(H>D!MjofsVHd#E%f3)#qduM0s)6VnVPMVAwH*|8xMJT(C zHn?Jqc0Rg~8O>;;4H`K6PruQI)88&H8*S)co}cR1Z&=I}4I6Dp(_n8m(lstQk7T0_ zCx^X8Ojx1_OQ^tpXiQkt1sU@(Q}n+w*D5JXIh!iq%^6*x8d+V1Ri zo;Uv4RQ~kLdaC^YmP8qqUsnLk=l?s~&tGm;`Tx#~ohSbPJ)X6-f`^kdjaWc5tA{|) zkS2qaV zF_2b5vSgG4T42M#c8H)=Fmg&`E+#N$qcPkO4KWcn)j65!Eyh|?C^3y`G5*dq)rFlG zd#A4qih8F9TjmSiovdwpLEWKtaJv1Zf!jMFg8Z7nSKtP3J zLnL}Tt>J94lhX14_x6wq)olRKMC*%T-Z;P-^ivwJAw${$`iV)UH9biKVJ2r_X-#8R zL!#S~x-DC@k0ra%Y+`$Ba44u=ngkMh=i14nZd8q_q+oblS=4qaNc>dGRQw1VEg1kVn(zK

|+0AVxH{yk8rw%TA9}Jg#sB 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�mlvAAfAq^yg_+@|9Dh|F+RXS&HjOwn|4&vg)Ip{1s+c+n`{ldfH@$D2zng>#)mN^E&lbd{H{Z=Jy#J8j{(|&Sew7mg zy#IjjzU0gr(|681)#W(3x0dpAI*Zs9N}E# zrUU$!;Vec1l-Y_&D>{Flb}6pq?aOz}c)ZAi(>yc+{@sS9G#cJ_%u=f)3@K3<&uF`J z7s3uEdc~W4VLyt?`JJ@rMAN=w4!!%*V(4zw3C-cxnoD1JYVu7r*4DgCO7dUvs<+x_ z`usN@!a6&@Jnnz3Q{W5lf85%u-v9Xg>HfFx^Q?ir3>(fk9wA;^gLh-1<+@g9SYnTd zyHp+xEb$Bbq|4TxKtAI(Te4})Rea5);$qTh+}jrK;Yb@#_x=$&SJ)jZhI@D=sJZm% z&@`&++10A;Av}8p=3o2IjHl*n@e148?(B7*qw6MBu)WiQovrPk;2!?658IuWxL=uQ zfKRjt@-A?>{}<*4)%9=KW80}d$R{7$$D;MWyIsxyu(!4IwEn-#lkkw@MaWlIm7CLz z#@jsOA+;%*&~Ma*W>UQJ5*pdEnjs9SNCHr%Kzm|H3Qy>3Mpdo~P$w&;J(y0RR82 KVkl?;PyqngM&p41 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-redis-ha-2.2.1.tgz b/repo/beta/ibm-redis-ha-2.2.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..14ae336349553f757fb137a7a3fe33389303b20b GIT binary patch literal 10173 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 rJ!|`UQ=b(1){~{${^=i>gCEL6c_=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-etcd-operator-0.7.7.tgz + version: 0.7.7 ibm-kube-state-metrics: - apiVersion: v1 appVersion: 1.3.1 @@ -141,6 +165,32 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-memcached-2.1.1.tgz version: 2.1.1 + ibm-mongodb-replicaset: + - appVersion: "3.6" + created: 2018-09-13T05:22:47.780496175-07:00 + description: NoSQL document-oriented database that stores JSON-like documents + with dynamic schemas, simplifying the integration of data in content-driven + applications. + digest: 0b5d960b1be010e747fab8017a1eb7d38a10c41b7718af68810bdde11ca37228 + home: https://github.com/mongodb/mongo + icon: https://webassets.mongodb.com/_com_assets/cms/mongodb-logo-rgb-j6w271g1xn.jpg + keywords: + - Limited + - ppc64le + - Tools + - ICP + - mongodb + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-mongodb-replicaset + sources: + - https://github.com/mongodb/mongo + - https://github.com/percona/mongodb_exporter + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-mongodb-replicaset-3.5.6.tgz + version: 3.5.6 ibm-openldap: - appVersion: 2.4.44 created: 2018-09-05T03:55:49.790973967-07:00 @@ -166,6 +216,35 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-openldap-0.1.1.tgz version: 0.1.1 + ibm-postgresql: + - appVersion: 9.6.2 + created: 2018-09-13T05:22:47.781690209-07:00 + description: Object-relational database management system (ORDBMS) with an emphasis + on extensibility and on standards-compliance. + digest: a73c1d6c0f3acc4fa8e0b727cec07be6b2c2470bce8cc9937f5c8d7da43566fb + engine: gotpl + home: https://www.postgresql.org/ + icon: https://www.postgresql.org/media/img/about/press/elephant.png + keywords: + - postgresql + - postgres + - database + - sql + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-postgresql + sources: + - https://github.com/kubernetes/charts + - https://github.com/docker-library/postgres + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-postgresql-0.11.0.tgz + version: 0.11.0 ibm-prometheus-adapter: - appVersion: 0.2.1 created: 2018-09-05T03:55:49.792149808-07:00 @@ -216,4 +295,62 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-prometheus-pushgateway-0.1.2.tgz version: 0.1.2 -generated: 2018-09-05T03:55:49.787898663-07:00 + ibm-rabbitmq-ha: + - apiVersion: v1 + appVersion: 3.7.4 + created: 2018-09-13T05:22:47.783542744-07:00 + description: Highly available RabbitMQ cluster, the open source message broker + software that implements the Advanced Message Queuing Protocol (AMQP). + digest: bbade8baf8c520dbca410074d7f7fbc09ba662be3311f3fad0f6096a25a92516 + home: https://www.rabbitmq.com + icon: https://bitnami.com/assets/stacks/rabbitmq/img/rabbitmq-stack-220x234.png + keywords: + - rabbitmq + - message queue + - AMQP + - AMQPS + - MQTT + - STOMP + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-rabbitmq-ha + sources: + - https://github.com/rabbitmq/rabbitmq + - https://github.com/docker-library/rabbitmq + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-rabbitmq-ha-1.6.3.tgz + version: 1.6.3 + ibm-redis-ha: + - appVersion: 4.0.8-r0 + created: 2018-09-13T05:22:47.784634566-07:00 + description: Highly available Redis cluster with multiple sentinels and standbys. + digest: 5e7cae874ab922ba6d2f637f4aa0957a914e40f4f1bc03d0d8f64e3ccf626f8a + engine: gotpl + home: http://redis.io/ + icon: https://upload.wikimedia.org/wikipedia/en/thumb/6/6b/Redis_Logo.svg/1200px-Redis_Logo.svg.png + keywords: + - redis + - keyvalue + - database + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-redis-ha + sources: + - https://github.com/smileisak/docker-images/tree/master/redis + - https://github.com/diegocn/docker-images/tree/master/redis + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-redis-ha-2.2.1.tgz + version: 2.2.1 +generated: 2018-09-13T05:22:47.777381144-07:00 diff --git a/stable/ibm-etcd-operator/.helmignore b/stable/ibm-etcd-operator/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-etcd-operator/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-etcd-operator/Chart.yaml b/stable/ibm-etcd-operator/Chart.yaml new file mode 100755 index 0000000..854a7cb --- /dev/null +++ b/stable/ibm-etcd-operator/Chart.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +appVersion: 0.7.0 +description: CoreOS etcd-operator Helm chart for Kubernetes +home: https://github.com/coreos/etcd-operator +icon: https://raw.githubusercontent.com/coreos/etcd/master/logos/etcd-horizontal-color.png +keywords: +- Limited +- ppc64le +- Tools +- ICP +- etc-operator +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +name: ibm-etcd-operator +sources: +- https://github.com/coreos/etcd-operator +tillerVersion: '>=2.7.2' +version: 0.7.7 diff --git a/stable/ibm-etcd-operator/LICENSE b/stable/ibm-etcd-operator/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-etcd-operator/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-etcd-operator/OWNERS b/stable/ibm-etcd-operator/OWNERS new file mode 100755 index 0000000..e7cf870 --- /dev/null +++ b/stable/ibm-etcd-operator/OWNERS @@ -0,0 +1,8 @@ +approvers: +- lachie83 +- chancez +- alejandroEsc +reviewers: +- lachie83 +- chancez +- alejandroEsc diff --git a/stable/ibm-etcd-operator/README.md b/stable/ibm-etcd-operator/README.md new file mode 100755 index 0000000..7c825ce --- /dev/null +++ b/stable/ibm-etcd-operator/README.md @@ -0,0 +1,164 @@ +# CoreOS etcd-operator + +[etcd-operator](https://coreos.com/blog/introducing-the-etcd-operator.html) Simplify etcd cluster +configuration and management. + +__DISCLAIMER:__ While this chart has been well-tested, the etcd-operator is still currently in beta. +Current project status is available [here](https://github.com/coreos/etcd-operator). + +## Introduction + +This chart bootstraps an etcd-operator and allows the deployment of etcd-cluster(s). + +## Official Documentation + +Official project documentation found [here](https://github.com/coreos/etcd-operator) + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Chart Details +Deploys etcd cluster on kubernetes cluster +## Prerequisites + +- Kubernetes 1.4+ with Beta APIs enabled +- __Suggested:__ PV provisioner support in the underlying infrastructure to support backups + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```bash +$ helm install stable/etcd-operator --name my-release +``` + +__Note__: If you set `cluster.enabled` on install, it will have no effect. +Before you create an etcd cluster, the TPR must be installed by the operator, so this option is ignored during helm installs, but can be used in upgrades. + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```bash +$ helm delete my-release +``` + +The command removes all the Kubernetes components EXCEPT the persistent volume. + +## Updating +Updating the TPR resource will not result in the cluster being update until `kubectl apply` for +TPRs is fixed see [kubernetes/issues/29542](https://github.com/kubernetes/kubernetes/issues/29542) +Work around options are documented [here](https://github.com/coreos/etcd-operator#resize-an-etcd-cluster) + +## Configuration + +The following table lists the configurable parameters of the etcd-operator chart and their default values. + +| Parameter | Description | Default | +| ------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------- | +| `rbac.create` | install required RBAC service account, roles and rolebindings | `true` | +| `rbac.apiVersion` | RBAC api version `v1alpha1|v1beta1` | `v1beta1` | +| `rbac.etcdOperatorServiceAccountName` | Name of the service account resource when RBAC is enabled | `etcd-operator-sa` | +| `rbac.backupOperatorServiceAccountName` | Name of the service account resource when RBAC is enabled | `etcd-backup-operator-sa` | +| `rbac.restoreOperatorServiceAccountName` | Name of the service account resource when RBAC is enabled | `etcd-restore-operator-sa` | +| `deployments.etcdOperator` | Deploy the etcd cluster operator | `true` | +| `deployments.backupOperator` | Deploy the etcd backup operator | `true` | +| `deployments.restoreOperator` | Deploy the etcd restore operator | `true` | +| `customResources.createEtcdClusterCRD` | Create a custom resource: EtcdCluster | `false` | +| `customResources.createBackupCRD` | Create an a custom resource: EtcdBackup | `false` | +| `customResources.createRestoreCRD` | Create an a custom resource: EtcdRestore | `false` | +| `etcdOperator.name` | Etcd Operator name | `etcd-operator` | +| `etcdOperator.replicaCount` | Number of operator replicas to create (only 1 is supported) | `1` | +| `etcdOperator.image.repository` | etcd-operator container image | `quay.io/coreos/etcd-operator` | +| `etcdOperator.image.tag` | etcd-operator container image tag | `v0.7.0` | +| `etcdOperator.image.pullpolicy` | etcd-operator container image pull policy | `Always` | +| `etcdOperator.resources.cpu` | CPU limit per etcd-operator pod | `100m` | +| `etcdOperator.resources.memory` | Memory limit per etcd-operator pod | `128Mi` | +| `etcdOperator.nodeSelector` | Node labels for etcd operator pod assignment | `{}` | +| `etcdOperator.commandArgs` | Additional command arguments | `{}` | +| `backupOperator.name` | Backup operator name | `etcd-backup-operator` | +| `backupOperator.replicaCount` | Number of operator replicas to create (only 1 is supported) | `1` | +| `backupOperator.image.repository` | Operator container image | `quay.io/coreos/etcd-operator` | +| `backupOperator.image.tag` | Operator container image tag | `v0.7.0` | +| `backupOperator.image.pullpolicy` | Operator container image pull policy | `Always` | +| `backupOperator.resources.cpu` | CPU limit per etcd-operator pod | `100m` | +| `backupOperator.resources.memory` | Memory limit per etcd-operator pod | `128Mi` | +| `backupOperator.spec.storageType` | Storage to use for backup file, currently only S3 supported | `S3` | +| `backupOperator.spec.s3.s3Bucket` | Bucket in S3 to store backup file | | +| `backupOperator.spec.s3.awsSecret` | Name of kubernetes secret containing aws credentials | | +| `backupOperator.nodeSelector` | Node labels for etcd operator pod assignment | `{}` | +| `backupOperator.commandArgs` | Additional command arguments | `{}` | +| `restoreOperator.name` | Restore operator name | `etcd-backup-operator` | +| `restoreOperator.replicaCount` | Number of operator replicas to create (only 1 is supported) | `1` | +| `restoreOperator.image.repository` | Operator container image | `quay.io/coreos/etcd-operator` | +| `restoreOperator.image.tag` | Operator container image tag | `v0.7.0` | +| `restoreOperator.image.pullpolicy` | Operator container image pull policy | `Always` | +| `restoreOperator.resources.cpu` | CPU limit per etcd-operator pod | `100m` | +| `restoreOperator.resources.memory` | Memory limit per etcd-operator pod | `128Mi` | +| `restoreOperator.spec.s3.path` | Path in S3 bucket containing the backup file | | +| `restoreOperator.spec.s3.awsSecret` | Name of kubernetes secret containing aws credentials | | +| `restoreOperator.nodeSelector` | Node labels for etcd operator pod assignment | `{}` | +| `restoreOperator.commandArgs` | Additional command arguments | `{}` | +| `etcdCluster.name` | etcd cluster name | `etcd-cluster` | +| `etcdCluster.size` | etcd cluster size | `3` | +| `etcdCluster.version` | etcd cluster version | `3.2.10` | +| `etcdCluster.image.repository` | etcd container image | `quay.io/coreos/etcd-operator` | +| `etcdCluster.image.tag` | etcd container image tag | `v3.2.10` | +| `etcdCluster.image.pullPolicy` | etcd container image pull policy | `Always` | +| `etcdCluster.enableTLS` | Enable use of TLS | `false` | +| `etcdCluster.tls.static.member.peerSecret` | Kubernetes secret containing TLS peer certs | `etcd-peer-tls` | +| `etcdCluster.tls.static.member.serverSecret` | Kubernetes secret containing TLS server certs | `etcd-server-tls` | +| `etcdCluster.tls.static.operatorSecret` | Kubernetes secret containing TLS client certs | `etcd-client-tls` | +| `etcdCluster.pod.antiAffinity` | Whether etcd cluster pods should have an antiAffinity | `false` | +| `etcdCluster.pod.resources.limits.cpu` | CPU limit per etcd cluster pod | `100m` | +| `etcdCluster.pod.resources.limits.memory` | Memory limit per etcd cluster pod | `128Mi` | +| `etcdCluster.pod.resources.requests.cpu` | CPU request per etcd cluster pod | `100m` | +| `etcdCluster.pod.resources.requests.memory` | Memory request per etcd cluster pod | `128Mi` | +| `etcdCluster.pod.nodeSelector` | node labels for etcd cluster pod assignment | `{}` | + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example: + +```bash +$ helm install --name my-release --set image.tag=v0.2.1 stable/etcd-operator +``` + +Alternatively, a YAML file that specifies the values for the parameters can be provided while +installing the chart. For example: + +```bash +$ helm install --name my-release --values values.yaml stable/etcd-operator +``` + +## RBAC +By default the chart will install the recommended RBAC roles and rolebindings. + +To determine if your cluster supports this running the following: + +```console +$ kubectl api-versions | grep rbac +``` + +You also need to have the following parameter on the api server. See the following document for how to enable [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/) + +``` +--authorization-mode=RBAC +``` + +If the output contains "beta" or both "alpha" and "beta" you can may install rbac by default, if not, you may turn RBAC off as described below. + +### RBAC role/rolebinding creation + +RBAC resources are enabled by default. To disable RBAC do the following: + +```console +$ helm install --name my-release stable/etcd-operator --set rbac.create=false +``` + +### Changing RBAC manifest apiVersion + +By default the RBAC resources are generated with the "v1beta1" apiVersion. To use "v1alpha1" do the following: + +```console +$ helm install --name my-release stable/etcd-operator --set rbac.install=true,rbac.apiVersion=v1alpha1 +``` +## Limitations diff --git a/stable/ibm-etcd-operator/RELEASENOTES.md b/stable/ibm-etcd-operator/RELEASENOTES.md new file mode 100755 index 0000000..2df78e9 --- /dev/null +++ b/stable/ibm-etcd-operator/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.7.7 | September 12, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-etcd-operator/templates/NOTES.txt b/stable/ibm-etcd-operator/templates/NOTES.txt new file mode 100755 index 0000000..c33ee01 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/NOTES.txt @@ -0,0 +1,33 @@ +{{- $clusterEnabled := (and (not .Release.IsInstall) .Values.customResources.createEtcdClusterCRD) -}} +{{- if and .Release.IsInstall .Values.customResources.createEtcdClusterCRD -}} +Not enabling cluster, the ThirdPartResource must be installed before you can create a Cluster. Continuing rest of normal deployment. + +{{ end -}} + +{{- if $clusterEnabled -}} +1. Watch etcd cluster start + kubectl get pods -l etcd_cluster={{ .Values.etcdCluster.name }} --namespace {{ .Release.Namespace }} -w + +2. Confirm etcd cluster is healthy + $ kubectl run --rm -i --tty --env="ETCDCTL_API=3" --env="ETCDCTL_ENDPOINTS=http://{{ .Values.etcdCluster.name }}-client:2379" --namespace {{ .Release.Namespace }} etcd-test --image quay.io/coreos/etcd --restart=Never -- /bin/sh -c 'watch -n1 "etcdctl member list"' + +3. Interact with the cluster! + $ kubectl run --rm -i --tty --env ETCDCTL_API=3 --namespace {{ .Release.Namespace }} etcd-test --image quay.io/coreos/etcd --restart=Never -- /bin/sh + / # etcdctl --endpoints http://{{ .Values.etcdCluster.name }}-client:2379 put foo bar + / # etcdctl --endpoints http://{{ .Values.etcdCluster.name }}-client:2379 get foo + OK + (ctrl-D to exit) + +4. Optional + Check the etcd-operator logs + export POD=$(kubectl get pods -l app={{ template "etcd-operator.fullname" . }} --namespace {{ .Release.Namespace }} --output name) + kubectl logs $POD --namespace={{ .Release.Namespace }} + +{{- else -}} +1. etcd-operator deployed. + If you would like to deploy an etcd-cluster set cluster.enabled to true in values.yaml + Check the etcd-operator logs + export POD=$(kubectl get pods -l app={{ template "etcd-operator.fullname" . }} --namespace {{ .Release.Namespace }} --output name) + kubectl logs $POD --namespace={{ .Release.Namespace }} + +{{- end -}} diff --git a/stable/ibm-etcd-operator/templates/_helpers.tpl b/stable/ibm-etcd-operator/templates/_helpers.tpl new file mode 100755 index 0000000..03f9a26 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/_helpers.tpl @@ -0,0 +1,75 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "etcd-operator.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). +*/}} +{{- define "etcd-operator.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s-%s" .Release.Name $name .Values.etcdOperator.name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "etcd-backup-operator.name" -}} +{{- default .Chart.Name .Values.backupOperator.name | 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). +*/}} +{{- define "etcd-backup-operator.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s-%s" .Release.Name $name .Values.backupOperator.name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "etcd-restore-operator.name" -}} +{{- default .Chart.Name .Values.restoreOperator.name | 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). +*/}} +{{- define "etcd-restore-operator.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s-%s" .Release.Name $name .Values.restoreOperator.name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create the name of the etcd-operator service account to use +*/}} +{{- define "etcd-operator.serviceAccountName" -}} +{{- if .Values.serviceAccount.etcdOperatorServiceAccount.create -}} + {{ default (include "etcd-operator.fullname" .) .Values.serviceAccount.etcdOperatorServiceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.etcdOperatorServiceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Create the name of the backup-operator service account to use +*/}} +{{- define "etcd-backup-operator.serviceAccountName" -}} +{{- if .Values.serviceAccount.backupOperatorServiceAccount.create -}} + {{ default (include "etcd-backup-operator.fullname" .) .Values.serviceAccount.backupOperatorServiceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.backupOperatorServiceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Create the name of the restore-operator service account to use +*/}} +{{- define "etcd-restore-operator.serviceAccountName" -}} +{{- if .Values.serviceAccount.restoreOperatorServiceAccount.create -}} + {{ default (include "etcd-restore-operator.fullname" .) .Values.serviceAccount.restoreOperatorServiceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.restoreOperatorServiceAccount.name }} +{{- end -}} +{{- end -}} \ No newline at end of file diff --git a/stable/ibm-etcd-operator/templates/backup-etcd-crd.yaml b/stable/ibm-etcd-operator/templates/backup-etcd-crd.yaml new file mode 100755 index 0000000..c828328 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/backup-etcd-crd.yaml @@ -0,0 +1,16 @@ +{{- if .Values.customResources.createBackupCRD }} +--- +apiVersion: "etcd.database.coreos.com/v1beta2" +kind: "EtcdBackup" +metadata: + name: {{ template "etcd-backup-operator.fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-backup-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + +spec: + clusterName: {{ .Values.etcdCluster.name }} +{{ toYaml .Values.backupOperator.spec | indent 2 }} +{{- end}} \ No newline at end of file diff --git a/stable/ibm-etcd-operator/templates/backup-operator-clusterrole-binding.yaml b/stable/ibm-etcd-operator/templates/backup-operator-clusterrole-binding.yaml new file mode 100755 index 0000000..526b245 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/backup-operator-clusterrole-binding.yaml @@ -0,0 +1,20 @@ +{{- if and .Values.rbac.create .Values.deployments.backupOperator }} +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/{{ .Values.rbac.apiVersion }} +metadata: + name: {{ template "etcd-backup-operator.fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +subjects: +- kind: ServiceAccount + name: {{ template "etcd-backup-operator.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "etcd-operator.fullname" . }} +{{- end }} diff --git a/stable/ibm-etcd-operator/templates/backup-operator-deployment.yaml b/stable/ibm-etcd-operator/templates/backup-operator-deployment.yaml new file mode 100755 index 0000000..93b8051 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/backup-operator-deployment.yaml @@ -0,0 +1,69 @@ +{{- if .Values.deployments.backupOperator }} +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: {{ template "etcd-backup-operator.fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-backup-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + replicas: {{ .Values.backupOperator.replicaCount }} + template: + metadata: + name: {{ template "etcd-backup-operator.fullname" . }} + labels: + app: {{ template "etcd-backup-operator.fullname" . }} + release: {{ .Release.Name }} + chart: {{ .Chart.Name }} + heritage: {{ .Release.Service }} + spec: + serviceAccountName: {{ template "etcd-backup-operator.serviceAccountName" . }} + containers: + - name: {{ .Values.backupOperator.name }} + image: "{{ .Values.backupOperator.image.repository }}:{{ .Values.backupOperator.image.tag }}" + imagePullPolicy: {{ .Values.backupOperator.image.pullPolicy }} + command: + - /usr/local/bin/etcd +{{- range $key, $value := .Values.backupOperator.commandArgs }} + - "--{{ $key }}={{ $value }}" +{{- end }} + env: + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + resources: + limits: + cpu: {{ .Values.backupOperator.resources.cpu }} + memory: {{ .Values.backupOperator.resources.memory }} + requests: + cpu: {{ .Values.backupOperator.resources.cpu }} + memory: {{ .Values.backupOperator.resources.memory }} + {{- if .Values.backupOperator.nodeSelector }} + nodeSelector: +{{ toYaml .Values.backupOperator.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.backupOperator.tolerations }} + tolerations: +{{ toYaml .Values.backupOperator.tolerations | indent 8 }} + {{- end }} +{{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-etcd-operator/templates/backup-operator-service-account.yaml b/stable/ibm-etcd-operator/templates/backup-operator-service-account.yaml new file mode 100755 index 0000000..06aec3d --- /dev/null +++ b/stable/ibm-etcd-operator/templates/backup-operator-service-account.yaml @@ -0,0 +1,12 @@ +{{- if and .Values.serviceAccount.backupOperatorServiceAccount.create .Values.deployments.backupOperator }} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "etcd-backup-operator.serviceAccountName" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-backup-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- end }} \ No newline at end of file diff --git a/stable/ibm-etcd-operator/templates/etcd-cluster-crd.yaml b/stable/ibm-etcd-operator/templates/etcd-cluster-crd.yaml new file mode 100755 index 0000000..8342469 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/etcd-cluster-crd.yaml @@ -0,0 +1,22 @@ +{{- if .Values.customResources.createEtcdClusterCRD }} +--- +apiVersion: "etcd.database.coreos.com/v1beta2" +kind: "EtcdCluster" +metadata: + name: {{ .Values.etcdCluster.name }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + size: {{ .Values.etcdCluster.size }} + version: "{{ .Values.etcdCluster.version }}" + pod: +{{ toYaml .Values.etcdCluster.pod | indent 4 }} + {{- if .Values.etcdCluster.enableTLS }} + TLS: +{{ toYaml .Values.etcdCluster.tls | indent 4 }} + {{- end }} +{{- end }} + diff --git a/stable/ibm-etcd-operator/templates/operator-cluster-role.yaml b/stable/ibm-etcd-operator/templates/operator-cluster-role.yaml new file mode 100755 index 0000000..6208597 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/operator-cluster-role.yaml @@ -0,0 +1,49 @@ +{{- if .Values.rbac.create }} +--- +apiVersion: rbac.authorization.k8s.io/{{ .Values.rbac.apiVersion }} +kind: ClusterRole +metadata: + name: {{ template "etcd-operator.fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +rules: +- apiGroups: + - etcd.database.coreos.com + resources: + - etcdclusters + - etcdbackups + - etcdrestores + verbs: + - "*" +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - "*" +- apiGroups: + - "" + resources: + - pods + - services + - endpoints + - persistentvolumeclaims + - events + verbs: + - "*" +- apiGroups: + - apps + resources: + - deployments + verbs: + - "*" +- apiGroups: + - "" + resources: + - secrets + verbs: + - get +{{- end }} diff --git a/stable/ibm-etcd-operator/templates/operator-clusterrole-binding.yaml b/stable/ibm-etcd-operator/templates/operator-clusterrole-binding.yaml new file mode 100755 index 0000000..09594cc --- /dev/null +++ b/stable/ibm-etcd-operator/templates/operator-clusterrole-binding.yaml @@ -0,0 +1,20 @@ +{{- if and .Values.rbac.create .Values.deployments.etcdOperator }} +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/{{ required "A valid .Values.rbac.apiVersion entry required!" .Values.rbac.apiVersion }} +metadata: + name: {{ template "etcd-operator.fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +subjects: +- kind: ServiceAccount + name: {{ template "etcd-operator.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "etcd-operator.fullname" . }} +{{- end }} diff --git a/stable/ibm-etcd-operator/templates/operator-deployment.yaml b/stable/ibm-etcd-operator/templates/operator-deployment.yaml new file mode 100755 index 0000000..c5db2d2 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/operator-deployment.yaml @@ -0,0 +1,91 @@ +{{- if .Values.deployments.etcdOperator }} +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: {{ template "etcd-operator.fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + replicas: {{ .Values.etcdOperator.replicaCount }} + template: + metadata: + name: {{ template "etcd-operator.fullname" . }} + labels: + app: {{ template "etcd-operator.fullname" . }} + release: {{ .Release.Name }} + chart: {{ .Chart.Name }} + heritage: {{ .Release.Service }} + spec: + serviceAccountName: {{ template "etcd-operator.serviceAccountName" . }} + containers: + - name: {{ template "etcd-operator.fullname" . }} + image: "{{ .Values.etcdOperator.image.repository }}:{{ .Values.etcdOperator.image.tag }}" + imagePullPolicy: {{ .Values.etcdOperator.image.pullPolicy }} + command: + - /usr/local/bin/etcd +{{- range $key, $value := .Values.etcdOperator.commandArgs }} + - "--{{ $key }}={{ $value }}" +{{- end }} + env: + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + resources: + limits: + cpu: {{ .Values.etcdOperator.resources.cpu }} + memory: {{ .Values.etcdOperator.resources.memory }} + requests: + cpu: {{ .Values.etcdOperator.resources.cpu }} + memory: {{ .Values.etcdOperator.resources.memory }} + {{- if .Values.etcdOperator.livenessProbe.enabled }} + livenessProbe: + httpGet: + path: /readyz + port: 8080 + initialDelaySeconds: {{ .Values.etcdOperator.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.etcdOperator.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.etcdOperator.livenessProbe.timeoutSeconds }} + successThreshold: {{ .Values.etcdOperator.livenessProbe.successThreshold }} + failureThreshold: {{ .Values.etcdOperator.livenessProbe.failureThreshold }} + {{- end}} + {{- if .Values.etcdOperator.readinessProbe.enabled }} + readinessProbe: + httpGet: + path: /readyz + port: 8080 + initialDelaySeconds: {{ .Values.etcdOperator.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.etcdOperator.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.etcdOperator.readinessProbe.timeoutSeconds }} + successThreshold: {{ .Values.etcdOperator.readinessProbe.successThreshold }} + failureThreshold: {{ .Values.etcdOperator.readinessProbe.failureThreshold }} + {{- end }} + {{- if .Values.etcdOperator.nodeSelector }} + nodeSelector: +{{ toYaml .Values.etcdOperator.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.etcdOperator.tolerations }} + tolerations: +{{ toYaml .Values.etcdOperator.tolerations | indent 8 }} + {{- end }} +{{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-etcd-operator/templates/operator-service-account.yaml b/stable/ibm-etcd-operator/templates/operator-service-account.yaml new file mode 100755 index 0000000..2faba8a --- /dev/null +++ b/stable/ibm-etcd-operator/templates/operator-service-account.yaml @@ -0,0 +1,12 @@ +{{- if and .Values.serviceAccount.etcdOperatorServiceAccount.create .Values.deployments.etcdOperator }} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "etcd-operator.serviceAccountName" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- end }} \ No newline at end of file diff --git a/stable/ibm-etcd-operator/templates/restore-etcd-crd.yaml b/stable/ibm-etcd-operator/templates/restore-etcd-crd.yaml new file mode 100755 index 0000000..fcc5593 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/restore-etcd-crd.yaml @@ -0,0 +1,25 @@ +{{- if .Values.customResources.createRestoreCRD }} +--- +apiVersion: "etcd.database.coreos.com/v1beta2" +kind: "EtcdRestore" +metadata: + # An EtcdCluster with the same name will be created + name: {{ .Values.etcdCluster.name }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-restore-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + clusterSpec: + size: {{ .Values.etcdCluster.size }} + baseImage: "{{ .Values.etcdCluster.image.repository }}" + version: {{ .Values.etcdCluster.image.tag }} + pod: +{{ toYaml .Values.etcdCluster.pod | indent 6 }} + {{- if .Values.etcdCluster.enableTLS }} + TLS: +{{ toYaml .Values.etcdCluster.tls | indent 6 }} + {{- end }} +{{ toYaml .Values.restoreOperator.spec | indent 2 }} +{{- end}} \ No newline at end of file diff --git a/stable/ibm-etcd-operator/templates/restore-operator-clusterrole-binding.yaml b/stable/ibm-etcd-operator/templates/restore-operator-clusterrole-binding.yaml new file mode 100755 index 0000000..9a6696e --- /dev/null +++ b/stable/ibm-etcd-operator/templates/restore-operator-clusterrole-binding.yaml @@ -0,0 +1,20 @@ +{{- if and .Values.rbac.create .Values.deployments.restoreOperator }} +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/{{ .Values.rbac.apiVersion }} +metadata: + name: {{ template "etcd-restore-operator.fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-restore-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +subjects: +- kind: ServiceAccount + name: {{ template "etcd-restore-operator.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "etcd-operator.fullname" . }} +{{- end }} diff --git a/stable/ibm-etcd-operator/templates/restore-operator-deployment.yaml b/stable/ibm-etcd-operator/templates/restore-operator-deployment.yaml new file mode 100755 index 0000000..e0c65b3 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/restore-operator-deployment.yaml @@ -0,0 +1,73 @@ +{{- if .Values.deployments.restoreOperator }} +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: {{ template "etcd-restore-operator.fullname" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-restore-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + replicas: {{ .Values.restoreOperator.replicaCount }} + template: + metadata: + name: {{ template "etcd-restore-operator.fullname" . }} + labels: + app: {{ template "etcd-restore-operator.name" . }} + release: {{ .Release.Name }} + chart: {{ .Chart.Name }} + heritage: {{ .Release.Service }} + spec: + serviceAccountName: {{ template "etcd-restore-operator.serviceAccountName" . }} + containers: + - name: {{ .Values.restoreOperator.name }} + image: "{{ .Values.restoreOperator.image.repository }}:{{ .Values.restoreOperator.image.tag }}" + imagePullPolicy: {{ .Values.restoreOperator.image.pullPolicy }} + ports: + - containerPort: {{ .Values.restoreOperator.port }} + command: + - /usr/local/bin/etcd +{{- range $key, $value := .Values.restoreOperator.commandArgs }} + - "--{{ $key }}={{ $value }}" +{{- end }} + env: + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: SERVICE_ADDR + value: "{{ .Values.restoreOperator.name }}:{{ .Values.restoreOperator.port }}" + resources: + limits: + cpu: {{ .Values.restoreOperator.resources.cpu }} + memory: {{ .Values.restoreOperator.resources.memory }} + requests: + cpu: {{ .Values.restoreOperator.resources.cpu }} + memory: {{ .Values.restoreOperator.resources.memory }} + {{- if .Values.restoreOperator.nodeSelector }} + nodeSelector: +{{ toYaml .Values.restoreOperator.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.restoreOperator.tolerations }} + tolerations: +{{ toYaml .Values.restoreOperator.tolerations | indent 8 }} + {{- end }} +{{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-etcd-operator/templates/restore-operator-service-account.yaml b/stable/ibm-etcd-operator/templates/restore-operator-service-account.yaml new file mode 100755 index 0000000..595cee9 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/restore-operator-service-account.yaml @@ -0,0 +1,12 @@ +{{- if and .Values.serviceAccount.restoreOperatorServiceAccount.create .Values.deployments.restoreOperator }} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "etcd-restore-operator.serviceAccountName" . }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-restore-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- end }} \ No newline at end of file diff --git a/stable/ibm-etcd-operator/templates/restore-operator-service.yaml b/stable/ibm-etcd-operator/templates/restore-operator-service.yaml new file mode 100755 index 0000000..052be36 --- /dev/null +++ b/stable/ibm-etcd-operator/templates/restore-operator-service.yaml @@ -0,0 +1,20 @@ +{{- if .Values.deployments.restoreOperator }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ .Values.restoreOperator.name }} + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + app: {{ template "etcd-restore-operator.name" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + ports: + - protocol: TCP + name: http-etcd-restore-port + port: {{ .Values.restoreOperator.port }} + selector: + app: {{ template "etcd-restore-operator.name" . }} + release: {{ .Release.Name }} +{{- end }} diff --git a/stable/ibm-etcd-operator/values-metadata.yaml b/stable/ibm-etcd-operator/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-etcd-operator/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-etcd-operator/values.yaml b/stable/ibm-etcd-operator/values.yaml new file mode 100755 index 0000000..76ab108 --- /dev/null +++ b/stable/ibm-etcd-operator/values.yaml @@ -0,0 +1,153 @@ +# Default values for etcd-operator. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +## Install Default RBAC roles and bindings +rbac: + create: true + apiVersion: v1beta1 + +## Service account names and whether to create them +serviceAccount: + etcdOperatorServiceAccount: + create: true + name: + backupOperatorServiceAccount: + create: true + name: + restoreOperatorServiceAccount: + create: true + name: + +# Select what to deploy +deployments: + etcdOperator: true + # one time deployment, delete once completed, + # Ref: https://github.com/coreos/etcd-operator/blob/master/doc/user/walkthrough/backup-operator.md + backupOperator: true + # one time deployment, delete once completed + # Ref: https://github.com/coreos/etcd-operator/blob/master/doc/user/walkthrough/restore-operator.md + restoreOperator: true + +# creates custom resources, not all required, +# you could use `helm template --values --name release_name ... ` +# and create the resources yourself to deploy on your cluster later +customResources: + createEtcdClusterCRD: false + createBackupCRD: false + createRestoreCRD: false + +node: "ppc64le" +# etcdOperator +etcdOperator: + name: etcd-operator + replicaCount: 1 + image: + repository: ibmcom/etcd-ppc64le + tag: v3.2.14 + pullPolicy: Always + resources: + cpu: 100m + memory: 128Mi + ## Node labels for etcd-operator pod assignment + ## Ref: https://kubernetes.io/docs/user-guide/node-selection/ + nodeSelector: {} + ## additional command arguments go here; will be translated to `--key=value` form + ## e.g., analytics: true + commandArgs: {} + ## Configurable health checks against the /readyz endpoint that etcd-operator exposes + readinessProbe: + enabled: false + initialDelaySeconds: 0 + periodSeconds: 10 + timeoutSeconds: 1 + successThreshold: 1 + failureThreshold: 3 + livenessProbe: + enabled: false + initialDelaySeconds: 0 + periodSeconds: 10 + timeoutSeconds: 1 + successThreshold: 1 + failureThreshold: 3 +# backup spec +backupOperator: + name: etcd-backup-operator + replicaCount: 1 + image: + repository: ibmcom/etcd-ppc64le + tag: v3.2.14 + pullPolicy: Always + resources: + cpu: 100m + memory: 128Mi + spec: + storageType: S3 + s3: + s3Bucket: + awsSecret: + ## Node labels for etcd pod assignment + ## Ref: https://kubernetes.io/docs/user-guide/node-selection/ + nodeSelector: {} + ## additional command arguments go here; will be translated to `--key=value` form + ## e.g., analytics: true + commandArgs: {} + +# restore spec +restoreOperator: + name: etcd-restore-operator + replicaCount: 1 + image: + repository: ibmcom/etcd-ppc64le + tag: v3.2.14 + pullPolicy: Always + port: 19999 + resources: + cpu: 100m + memory: 128Mi + spec: + s3: + # The format of "path" must be: "/" + # e.g: "etcd-snapshot-bucket/v1/default/example-etcd-cluster/3.2.10_0000000000000001_etcd.backup" + path: + awsSecret: + ## Node labels for etcd pod assignment + ## Ref: https://kubernetes.io/docs/user-guide/node-selection/ + nodeSelector: {} + ## additional command arguments go here; will be translated to `--key=value` form + ## e.g., analytics: true + commandArgs: {} + +## etcd-cluster specific values +etcdCluster: + name: etcd-cluster + size: 3 + version: 3.2.10 + image: + repository: ibmcom/etcd-ppc64le + tag: v3.2.14 +# pullPolicy: Always + enableTLS: false + # TLS configs + tls: + static: + member: + peerSecret: etcd-peer-tls + serverSecret: etcd-server-tls + operatorSecret: etcd-client-tls + ## etcd cluster pod specific values + ## Ref: https://github.com/coreos/etcd-operator/blob/master/doc/user/spec_examples.md#three-members-cluster-with-resource-requirement + pod: + ## Antiaffinity for etcd pod assignment + ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + antiAffinity: false + resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi + ## Node labels for etcd pod assignment + ## Ref: https://kubernetes.io/docs/user-guide/node-selection/ + nodeSelector: {} diff --git a/stable/ibm-mongodb-replicaset/.helmignore b/stable/ibm-mongodb-replicaset/.helmignore new file mode 100755 index 0000000..28b828e --- /dev/null +++ b/stable/ibm-mongodb-replicaset/.helmignore @@ -0,0 +1,22 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj +install diff --git a/stable/ibm-mongodb-replicaset/Chart.yaml b/stable/ibm-mongodb-replicaset/Chart.yaml new file mode 100755 index 0000000..a96b975 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/Chart.yaml @@ -0,0 +1,20 @@ +appVersion: "3.6" +description: NoSQL document-oriented database that stores JSON-like documents with + dynamic schemas, simplifying the integration of data in content-driven applications. +home: https://github.com/mongodb/mongo +icon: https://webassets.mongodb.com/_com_assets/cms/mongodb-logo-rgb-j6w271g1xn.jpg +keywords: +- Limited +- ppc64le +- Tools +- ICP +- mongodb +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +name: ibm-mongodb-replicaset +sources: +- https://github.com/mongodb/mongo +- https://github.com/percona/mongodb_exporter +tillerVersion: '>=2.7.2' +version: 3.5.6 diff --git a/stable/ibm-mongodb-replicaset/LICENSE b/stable/ibm-mongodb-replicaset/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-mongodb-replicaset/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-mongodb-replicaset/OWNERS b/stable/ibm-mongodb-replicaset/OWNERS new file mode 100755 index 0000000..ec41b99 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/OWNERS @@ -0,0 +1,6 @@ +approvers: + - foxish + - unguiculus +reviewers: + - foxish + - unguiculus diff --git a/stable/ibm-mongodb-replicaset/README.md b/stable/ibm-mongodb-replicaset/README.md new file mode 100755 index 0000000..31d0340 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/README.md @@ -0,0 +1,363 @@ +## Introduction +# MongoDB Helm Chart + +## Prerequisites + +* Kubernetes 1.8+ with Beta APIs enabled. +* PV support on the underlying infrastructure. + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## StatefulSet Details + +* https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/ + +## StatefulSet Caveats + +* https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/#limitations + +## Chart Details + +This chart implements a dynamically scalable [MongoDB replica set](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/) +using Kubernetes StatefulSets and Init Containers. + +## Installing the Chart + +To install the chart with the release name `my-release`: + +``` console +helm repo add stable https://kubernetes-charts.storage.googleapis.com/ +helm install --name my-release stable/mongodb-replicaset +``` + +## Configuration + +The following table lists the configurable parameters of the mongodb chart and their default values. + +| Parameter | Description | Default | +| ----------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------- | +| `replicas` | Number of replicas in the replica set | `3` | +| `replicaSetName` | The name of the replica set | `rs0` | +| `podDisruptionBudget` | Pod disruption budget | `{}` | +| `port` | MongoDB port | `27017` | +| `installImage.repository` | Image name for the install container | `k8s.gcr.io/mongodb-install` | +| `installImage.tag` | Image tag for the install container | `0.5` | +| `installImage.pullPolicy` | Image pull policy for the init container that establishes the replica set | `IfNotPresent` | +| `image.repository` | MongoDB image name | `mongo` | +| `image.tag` | MongoDB image tag | `3.6` | +| `image.pullPolicy` | MongoDB image pull policy | `IfNotPresent` | +| `podAnnotations` | Annotations to be added to MongoDB pods | `{}` | +| `securityContext` | Security context for the pod | `{runAsUser: 999, fsGroup: 999, runAsNonRoot: true}`| +| `resources` | Pod resource requests and limits | `{}` | +| `persistentVolume.enabled` | If `true`, persistent volume claims are created | `true` | +| `persistentVolume.storageClass` | Persistent volume storage class | `` | +| `persistentVolume.accessMode` | Persistent volume access modes | `[ReadWriteOnce]` | +| `persistentVolume.size` | Persistent volume size | `10Gi` | +| `persistentVolume.annotations` | Persistent volume annotations | `{}` | +| `tls.enabled` | Enable MongoDB TLS support including authentication | `false` | +| `tls.cacert` | The CA certificate used for the members | Our self signed CA certificate | +| `tls.cakey` | The CA key used for the members | Our key for the self signed CA certificate | +| `metrics.enabled` | Enable Prometheus compatible metrics for pods and replicasets | `false` | +| `metrics.image.repository` | Image name for metrics exporter | `ssalaues/mongodb-exporter` | +| `metrics.image.tag` | Image tag for metrics exporter | `0.6.1` | +| `metrics.image.pullPolicy` | Image pull policy for metrics exporter | `IfNotPresent` | +| `metrics.port` | Port for metrics exporter | `9216` | +| `metrics.path` | URL Path to expose metics | `/metrics` | +| `metrics.socketTimeout` | Time to wait for a non-responding socket | `3s` | +| `metrics.syncTimeout` | Time an operation with this session will wait before returning an error | `1m` | +| `metrics.prometheusServiceDiscovery` | Adds annotations for Prometheus ServiceDiscovery | `true` | +| `auth.enabled` | If `true`, keyfile access control is enabled | `false` | +| `auth.key` | Key for internal authentication | `` | +| `auth.existingKeySecret` | If set, an existing secret with this name for the key is used | `` | +| `auth.adminUser` | MongoDB admin user | `` | +| `auth.adminPassword` | MongoDB admin password | `` | +| `auth.metricsUser` | MongoDB clusterMonitor user | `` | +| `auth.metricsPassword` | MongoDB clusterMonitor password | `` | +| `auth.existingAdminSecret` | If set, and existing secret with this name is used for the admin user | `` | +| `serviceAnnotations` | Annotations to be added to the service | `{}` | +| `configmap` | Content of the MongoDB config file | `` | +| `nodeSelector` | Node labels for pod assignment | `{}` | +| `affinity` | Node/pod affinities | `{}` | +| `tolerations` | List of node taints to tolerate | `[]` | +| `livenessProbe` | Liveness probe configuration | See below | +| `readinessProbe` | Readiness probe configuration | See below | +| `extraVars` | Set environment variables for the main container | `{}` | +| `extraLabels` | Additional labels to add to resources | `{}` | + +*MongoDB config file* + +All options that depended on the chart configuration are supplied as command-line arguments to `mongod`. By default, the chart creates an empty config file. Entries may be added via the `configmap` configuration value. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +``` console +helm install --name my-release -f values.yaml stable/mongodb-replicaset +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +Once you have all 3 nodes in running, you can run the "test.sh" script in this directory, which will insert a key into the primary and check the secondaries for output. This script requires that the `$RELEASE_NAME` environment variable be set, in order to access the pods. + +## Authentication + +By default, this chart creates a MongoDB replica set without authentication. Authentication can be +enabled using the parameter `auth.enabled`. Once enabled, keyfile access control is set up and an +admin user with root privileges is created. User credentials and keyfile may be specified directly. +Alternatively, existing secrets may be provided. The secret for the admin user must contain the +keys `user` and `password`, that for the key file must contain `key.txt`. The user is created with +full `root` permissions but is restricted to the `admin` database for security purposes. It can be +used to create additional users with more specific permissions. + +## TLS support + +To enable full TLS encryption set `tls.enabled` to `true`. It is recommended to create your own CA by executing: + +```console +openssl genrsa -out ca.key 2048 +openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=mydomain.com" +``` + +After that paste the base64 encoded (`cat ca.key | base64 -w0`) cert and key into the fields `tls.cacert` and +`tls.cakey`. Adapt the configmap for the replicaset as follows: + +```yml +configmap: + storage: + dbPath: /data/db + net: + port: 27017 + ssl: + mode: requireSSL + CAFile: /ca/tls.crt + PEMKeyFile: /work-dir/mongo.pem + replication: + replSetName: rs0 + security: + authorization: enabled + clusterAuthMode: x509 + keyFile: /keydir/key.txt +``` + +To access the cluster you need one of the certificates generated during cluster setup in `/work-dir/mongo.pem` of the +certain container or you generate your own one via: + +```console +$ cat >openssl.cnf < mongo.pem +$ rm mongo.key mongo.crt +``` + +Please ensure that you exchange the `$HOSTNAME` with your actual hostname and the `$HOSTNAME1`, `$HOSTNAME2`, etc. with +alternative hostnames you want to allow access to the MongoDB replicaset. You should now be able to authenticate to the +mongodb with your `mongo.pem` certificate: + +```console +mongo --ssl --sslCAFile=ca.crt --sslPEMKeyFile=mongo.pem --eval "db.adminCommand('ping')" +``` + +## Promethus metrics + +Enabling the metrics as follows will allow for each replicaset pod to export Prometheus compatible metrics +on server status, individual replicaset information, replication oplogs, and storage engine. + +```yaml +metrics: + enabled: true + image: + repository: ssalaues/mongodb-exporter + tag: 0.6.1 + pullPolicy: IfNotPresent + port: 9216 + path: "/metrics" + socketTimeout: 3s + syncTimeout: 1m + prometheusServiceDiscovery: true + resources: {} +``` + +More information on [MongoDB Exporter](https://github.com/percona/mongodb_exporter) metrics available. + +## Readiness probe + +The default values for the readiness probe are: + +```yaml +readinessProbe: + initialDelaySeconds: 5 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 10 + successThreshold: 1 +``` + +## Liveness probe + +The default values for the liveness probe are: + +```yaml +livenessProbe: + initialDelaySeconds: 30 + timeoutSeconds: 5 + failureThreshold: 3 + periodSeconds: 10 + successThreshold: 1 +``` + +## Deep dive + +Because the pod names are dependent on the name chosen for it, the following examples use the +environment variable `RELEASENAME`. For example, if the helm release name is `messy-hydra`, one would need to set the following before proceeding. The example scripts below assume 3 pods only. + +```console +export RELEASE_NAME=messy-hydra +``` + +### Cluster Health + +```console +for i in 0 1 2; do kubectl exec $RELEASE_NAME-mongodb-replicaset-$i -- sh -c 'mongo --eval="printjson(db.serverStatus())"'; done +``` + +### Failover + +One can check the roles being played by each node by using the following: + +```console +$ for i in 0 1 2; do kubectl exec $RELEASE_NAME-mongodb-replicaset-$i -- sh -c 'mongo --eval="printjson(rs.isMaster())"'; done + +MongoDB shell version: 3.6.3 +connecting to: mongodb://127.0.0.1:27017 +MongoDB server version: 3.6.3 +{ + "hosts" : [ + "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", + "messy-hydra-mongodb-1.messy-hydra-mongodb.default.svc.cluster.local:27017", + "messy-hydra-mongodb-2.messy-hydra-mongodb.default.svc.cluster.local:27017" + ], + "setName" : "rs0", + "setVersion" : 3, + "ismaster" : true, + "secondary" : false, + "primary" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", + "me" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", + "electionId" : ObjectId("7fffffff0000000000000001"), + "maxBsonObjectSize" : 16777216, + "maxMessageSizeBytes" : 48000000, + "maxWriteBatchSize" : 1000, + "localTime" : ISODate("2016-09-13T01:10:12.680Z"), + "maxWireVersion" : 4, + "minWireVersion" : 0, + "ok" : 1 +} +``` + +This lets us see which member is primary. + +Let us now test persistence and failover. First, we insert a key (in the below example, we assume pod 0 is the master): + +```console +$ kubectl exec $RELEASE_NAME-mongodb-replicaset-0 -- mongo --eval="printjson(db.test.insert({key1: 'value1'}))" + +MongoDB shell version: 3.6.3 +connecting to: mongodb://127.0.0.1:27017 +{ "nInserted" : 1 } +``` + +Watch existing members: + +```console +$ kubectl run --attach bbox --image=mongo:3.6 --restart=Never --env="RELEASE_NAME=$RELEASE_NAME" -- sh -c 'while true; do for i in 0 1 2; do echo $RELEASE_NAME-mongodb-replicaset-$i $(mongo --host=$RELEASE_NAME-mongodb-replicaset-$i.$RELEASE_NAME-mongodb-replicaset --eval="printjson(rs.isMaster())" | grep primary); sleep 1; done; done'; + +Waiting for pod default/bbox2 to be running, status is Pending, pod ready: false +If you don't see a command prompt, try pressing enter. +messy-hydra-mongodb-2 "primary" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", +messy-hydra-mongodb-0 "primary" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", +messy-hydra-mongodb-1 "primary" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", +messy-hydra-mongodb-2 "primary" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", +messy-hydra-mongodb-0 "primary" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", + +``` + +Kill the primary and watch as a new master getting elected. + +```console +$ kubectl delete pod $RELEASE_NAME-mongodb-replicaset-0 + +pod "messy-hydra-mongodb-0" deleted +``` + +Delete all pods and let the statefulset controller bring it up. + +```console +$ kubectl delete po -l "app=mongodb-replicaset,release=$RELEASE_NAME" +$ kubectl get po --watch-only +NAME READY STATUS RESTARTS AGE +messy-hydra-mongodb-0 0/1 Pending 0 0s +messy-hydra-mongodb-0 0/1 Pending 0 0s +messy-hydra-mongodb-0 0/1 Pending 0 7s +messy-hydra-mongodb-0 0/1 Init:0/2 0 7s +messy-hydra-mongodb-0 0/1 Init:1/2 0 27s +messy-hydra-mongodb-0 0/1 Init:1/2 0 28s +messy-hydra-mongodb-0 0/1 PodInitializing 0 31s +messy-hydra-mongodb-0 0/1 Running 0 32s +messy-hydra-mongodb-0 1/1 Running 0 37s +messy-hydra-mongodb-1 0/1 Pending 0 0s +messy-hydra-mongodb-1 0/1 Pending 0 0s +messy-hydra-mongodb-1 0/1 Init:0/2 0 0s +messy-hydra-mongodb-1 0/1 Init:1/2 0 20s +messy-hydra-mongodb-1 0/1 Init:1/2 0 21s +messy-hydra-mongodb-1 0/1 PodInitializing 0 24s +messy-hydra-mongodb-1 0/1 Running 0 25s +messy-hydra-mongodb-1 1/1 Running 0 30s +messy-hydra-mongodb-2 0/1 Pending 0 0s +messy-hydra-mongodb-2 0/1 Pending 0 0s +messy-hydra-mongodb-2 0/1 Init:0/2 0 0s +messy-hydra-mongodb-2 0/1 Init:1/2 0 21s +messy-hydra-mongodb-2 0/1 Init:1/2 0 22s +messy-hydra-mongodb-2 0/1 PodInitializing 0 25s +messy-hydra-mongodb-2 0/1 Running 0 26s +messy-hydra-mongodb-2 1/1 Running 0 30s + + +... +messy-hydra-mongodb-0 "primary" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", +messy-hydra-mongodb-1 "primary" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", +messy-hydra-mongodb-2 "primary" : "messy-hydra-mongodb-0.messy-hydra-mongodb.default.svc.cluster.local:27017", +``` + +Check the previously inserted key: + +```console +$ kubectl exec $RELEASE_NAME-mongodb-replicaset-1 -- mongo --eval="rs.slaveOk(); db.test.find({key1:{\$exists:true}}).forEach(printjson)" + +MongoDB shell version: 3.6.3 +connecting to: mongodb://127.0.0.1:27017 +{ "_id" : ObjectId("57b180b1a7311d08f2bfb617"), "key1" : "value1" } +``` + +### Scaling + +Scaling should be managed by `helm upgrade`, which is the recommended way. + +## Limitations diff --git a/stable/ibm-mongodb-replicaset/RELEASENOTES.md b/stable/ibm-mongodb-replicaset/RELEASENOTES.md new file mode 100755 index 0000000..472cd6d --- /dev/null +++ b/stable/ibm-mongodb-replicaset/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 3.5.6 | September 12, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-mongodb-replicaset/ci/default-values.yaml b/stable/ibm-mongodb-replicaset/ci/default-values.yaml new file mode 100755 index 0000000..a8bad27 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/ci/default-values.yaml @@ -0,0 +1 @@ +# No config change. Just use defaults. diff --git a/stable/ibm-mongodb-replicaset/ci/metrics-values.yaml b/stable/ibm-mongodb-replicaset/ci/metrics-values.yaml new file mode 100755 index 0000000..df64aca --- /dev/null +++ b/stable/ibm-mongodb-replicaset/ci/metrics-values.yaml @@ -0,0 +1,10 @@ +auth: + enabled: true + adminUser: username + adminPassword: password + metricsUser: metrics + metricsPassword: password + key: keycontent + +metrics: + enabled: true diff --git a/stable/ibm-mongodb-replicaset/init/on-start.sh b/stable/ibm-mongodb-replicaset/init/on-start.sh new file mode 100755 index 0000000..2ac58f0 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/init/on-start.sh @@ -0,0 +1,174 @@ +#!/usr/bin/env bash + +# Copyright 2018 The Kubernetes Authors. All rights reserved. +# +# 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. + +replica_set="$REPLICA_SET" +script_name=${0##*/} + +if [[ "$AUTH" == "true" ]]; then + admin_user="$ADMIN_USER" + admin_password="$ADMIN_PASSWORD" + admin_creds=(-u "$admin_user" -p "$admin_password") + if [[ "$METRICS" == "true" ]]; then + metrics_user="$METRICS_USER" + metrics_password="$METRICS_PASSWORD" + fi + auth_args=("--auth" "--keyFile=/data/configdb/key.txt") +fi + +log() { + local msg="$1" + local timestamp + timestamp=$(date --iso-8601=ns) + echo "[$timestamp] [$script_name] $msg" >> /work-dir/log.txt +} + +shutdown_mongo() { + if [[ $# -eq 1 ]]; then + args="timeoutSecs: $1" + else + args='force: true' + fi + log "Shutting down MongoDB ($args)..." + mongo admin "${admin_creds[@]}" "${ssl_args[@]}" --eval "db.shutdownServer({$args})" +} + +my_hostname=$(hostname) +log "Bootstrapping MongoDB replica set member: $my_hostname" + +log "Reading standard input..." +while read -ra line; do + if [[ "${line}" == *"${my_hostname}"* ]]; then + service_name="$line" + continue + fi + peers=("${peers[@]}" "$line") +done + +# Generate the ca cert +ca_crt=/data/configdb/tls.crt +if [ -f "$ca_crt" ]; then + log "Generating certificate" + ca_key=/data/configdb/tls.key + pem=/work-dir/mongo.pem + ssl_args=(--ssl --sslCAFile "$ca_crt" --sslPEMKeyFile "$pem") + +# Move into /work-dir +pushd /work-dir + +cat >openssl.cnf < $pem + rm mongo.key mongo.crt +fi + + +log "Peers: ${peers[*]}" + +log "Starting a MongoDB instance..." +mongod --config /data/configdb/mongod.conf --dbpath=/data/db --replSet="$replica_set" --port=27017 "${auth_args[@]}" --bind_ip=0.0.0.0 >> /work-dir/log.txt 2>&1 & + +log "Waiting for MongoDB to be ready..." +until mongo "${ssl_args[@]}" --eval "db.adminCommand('ping')"; do + log "Retrying..." + sleep 2 +done + +log "Initialized." + +# try to find a master and add yourself to its replica set. +for peer in "${peers[@]}"; do + if mongo admin --host "$peer" "${admin_creds[@]}" "${ssl_args[@]}" --eval "rs.isMaster()" | grep '"ismaster" : true'; then + log "Found master: $peer" + log "Adding myself ($service_name) to replica set..." + mongo admin --host "$peer" "${admin_creds[@]}" "${ssl_args[@]}" --eval "rs.add('$service_name')" + + sleep 3 + + log 'Waiting for replica to reach SECONDARY state...' + until printf '.' && [[ $(mongo admin "${admin_creds[@]}" "${ssl_args[@]}" --quiet --eval "rs.status().myState") == '2' ]]; do + sleep 1 + done + + log '✓ Replica reached SECONDARY state.' + + # create the metric user if it does not exist + if [[ "$AUTH" == "true" ]]; then + if [[ "$METRICS" == "true" ]]; then + metric_user_count=$(mongo admin --host "$peer" "${admin_creds[@]}" "${ssl_args[@]}" --eval "db.system.users.find({user: '$metrics_user'}).count()" --quiet) + if [ "$metric_user_count" == "0" ]; then + log "Creating clusterMonitor user..." + mongo admin --host "$peer" "${admin_creds[@]}" "${ssl_args[@]}" --eval "db.createUser({user: '$metrics_user', pwd: '$metrics_password', roles: [{role: 'clusterMonitor', db: 'admin'}, {role: 'read', db: 'local'}]})" + fi + fi + fi + + shutdown_mongo "60" + log "Good bye." + exit 0 + fi +done + +# else initiate a replica set with yourself. +if mongo "${ssl_args[@]}" --eval "rs.status()" | grep "no replset config has been received"; then + log "Initiating a new replica set with myself ($service_name)..." + mongo "${ssl_args[@]}" --eval "rs.initiate({'_id': '$replica_set', 'members': [{'_id': 0, 'host': '$service_name'}]})" + + sleep 3 + + log 'Waiting for replica to reach PRIMARY state...' + until printf '.' && [[ $(mongo "${ssl_args[@]}" --quiet --eval "rs.status().myState") == '1' ]]; do + sleep 1 + done + + log '✓ Replica reached PRIMARY state.' + + if [[ "$AUTH" == "true" ]]; then + log "Creating admin user..." + mongo admin "${ssl_args[@]}" --eval "db.createUser({user: '$admin_user', pwd: '$admin_password', roles: [{role: 'root', db: 'admin'}]})" + if [[ "$METRICS" == "true" ]]; then + log "Creating clusterMonitor user..." + mongo admin "${admin_creds[@]}" "${ssl_args[@]}" --eval "db.createUser({user: '$metrics_user', pwd: '$metrics_password', roles: [{role: 'clusterMonitor', db: 'admin'}, {role: 'read', db: 'local'}]})" + fi + fi + + log "Done." +fi + +shutdown_mongo +log "Good bye." diff --git a/stable/ibm-mongodb-replicaset/templates/NOTES.txt b/stable/ibm-mongodb-replicaset/templates/NOTES.txt new file mode 100755 index 0000000..2d94259 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/NOTES.txt @@ -0,0 +1,14 @@ +1. After the statefulset is created completely, one can check which instance is primary by running: + + $ for ((i = 0; i < {{ .Values.replicas }}; ++i)); do kubectl exec --namespace {{ .Release.Namespace }} {{ template "mongodb-replicaset.fullname" . }}-$i -- sh -c 'mongo --eval="printjson(rs.isMaster())"'; done + +2. One can insert a key into the primary instance of the mongodb replica set by running the following: + MASTER_POD_NAME must be replaced with the name of the master found from the previous step. + + $ kubectl exec --namespace {{ .Release.Namespace }} MASTER_POD_NAME -- mongo --eval="printjson(db.test.insert({key1: 'value1'}))" + +3. One can fetch the keys stored in the primary or any of the slave nodes in the following manner. + POD_NAME must be replaced by the name of the pod being queried. + + $ kubectl exec --namespace {{ .Release.Namespace }} POD_NAME -- mongo --eval="rs.slaveOk(); db.test.find().forEach(printjson)" + diff --git a/stable/ibm-mongodb-replicaset/templates/_helpers.tpl b/stable/ibm-mongodb-replicaset/templates/_helpers.tpl new file mode 100755 index 0000000..f28e5fd --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/_helpers.tpl @@ -0,0 +1,63 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "mongodb-replicaset.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 "mongodb-replicaset.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "mongodb-replicaset.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create the name for the admin secret. +*/}} +{{- define "mongodb-replicaset.adminSecret" -}} + {{- if .Values.auth.existingAdminSecret -}} + {{- .Values.auth.existingAdminSecret -}} + {{- else -}} + {{- template "mongodb-replicaset.fullname" . -}}-admin + {{- end -}} +{{- end -}} + +{{- define "mongodb-replicaset.metricsSecret" -}} + {{- if .Values.auth.existingMetricsSecret -}} + {{- .Values.auth.existingMetricsSecret -}} + {{- else -}} + {{- template "mongodb-replicaset.fullname" . -}}-metrics + {{- end -}} +{{- end -}} + + +{{/* +Create the name for the key secret. +*/}} +{{- define "mongodb-replicaset.keySecret" -}} + {{- if .Values.auth.existingKeySecret -}} + {{- .Values.auth.existingKeySecret -}} + {{- else -}} + {{- template "mongodb-replicaset.fullname" . -}}-keyfile + {{- end -}} +{{- end -}} diff --git a/stable/ibm-mongodb-replicaset/templates/mongodb-admin-secret.yaml b/stable/ibm-mongodb-replicaset/templates/mongodb-admin-secret.yaml new file mode 100755 index 0000000..311f2e0 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/mongodb-admin-secret.yaml @@ -0,0 +1,18 @@ +{{- if and (.Values.auth.enabled) (not .Values.auth.existingAdminSecret) -}} +apiVersion: v1 +kind: Secret +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "mongodb-replicaset.adminSecret" . }} +type: Opaque +data: + user: {{ .Values.auth.adminUser | b64enc }} + password: {{ .Values.auth.adminPassword | b64enc }} +{{- end -}} diff --git a/stable/ibm-mongodb-replicaset/templates/mongodb-ca-secret.yaml b/stable/ibm-mongodb-replicaset/templates/mongodb-ca-secret.yaml new file mode 100755 index 0000000..0376252 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/mongodb-ca-secret.yaml @@ -0,0 +1,18 @@ +{{- if .Values.tls.enabled -}} +apiVersion: v1 +kind: Secret +type: kubernetes.io/tls +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "mongodb-replicaset.fullname" . }}-ca +data: + tls.key: {{ .Values.tls.cakey }} + tls.crt: {{ .Values.tls.cacert }} +{{- end -}} diff --git a/stable/ibm-mongodb-replicaset/templates/mongodb-init-configmap.yaml b/stable/ibm-mongodb-replicaset/templates/mongodb-init-configmap.yaml new file mode 100755 index 0000000..53185c4 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/mongodb-init-configmap.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "mongodb-replicaset.fullname" . }}-init +data: + on-start.sh: | +{{ .Files.Get "init/on-start.sh" | indent 4 }} diff --git a/stable/ibm-mongodb-replicaset/templates/mongodb-keyfile-secret.yaml b/stable/ibm-mongodb-replicaset/templates/mongodb-keyfile-secret.yaml new file mode 100755 index 0000000..5e0513e --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/mongodb-keyfile-secret.yaml @@ -0,0 +1,17 @@ +{{- if and (.Values.auth.enabled) (not .Values.auth.existingKeySecret) -}} +apiVersion: v1 +kind: Secret +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "mongodb-replicaset.keySecret" . }} +type: Opaque +data: + key.txt: {{ .Values.auth.key | b64enc }} +{{- end -}} diff --git a/stable/ibm-mongodb-replicaset/templates/mongodb-metrics-secret.yaml b/stable/ibm-mongodb-replicaset/templates/mongodb-metrics-secret.yaml new file mode 100755 index 0000000..197aa78 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/mongodb-metrics-secret.yaml @@ -0,0 +1,18 @@ +{{- if and (.Values.auth.enabled) (not .Values.auth.existingAdminSecret) (.Values.metrics.enabled) -}} +apiVersion: v1 +kind: Secret +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "mongodb-replicaset.metricsSecret" . }} +type: Opaque +data: + user: {{ .Values.auth.metricsUser | b64enc }} + password: {{ .Values.auth.metricsPassword | b64enc }} +{{- end -}} diff --git a/stable/ibm-mongodb-replicaset/templates/mongodb-mongodb-configmap.yaml b/stable/ibm-mongodb-replicaset/templates/mongodb-mongodb-configmap.yaml new file mode 100755 index 0000000..eec20b9 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/mongodb-mongodb-configmap.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "mongodb-replicaset.fullname" . }}-mongodb +data: + mongod.conf: | +{{ toYaml .Values.configmap | indent 4 }} diff --git a/stable/ibm-mongodb-replicaset/templates/mongodb-poddisruptionbudget.yaml b/stable/ibm-mongodb-replicaset/templates/mongodb-poddisruptionbudget.yaml new file mode 100755 index 0000000..6768aa3 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/mongodb-poddisruptionbudget.yaml @@ -0,0 +1,20 @@ +{{- if .Values.podDisruptionBudget -}} +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "mongodb-replicaset.fullname" . }} +spec: + selector: + matchLabels: + app: {{ template "mongodb-replicaset.name" . }} + release: {{ .Release.Name }} +{{ toYaml .Values.podDisruptionBudget | indent 2 }} +{{- end -}} diff --git a/stable/ibm-mongodb-replicaset/templates/mongodb-service.yaml b/stable/ibm-mongodb-replicaset/templates/mongodb-service.yaml new file mode 100755 index 0000000..b1b8107 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/mongodb-service.yaml @@ -0,0 +1,32 @@ +# A headless service to create DNS records +apiVersion: v1 +kind: Service +metadata: + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" + {{- if .Values.serviceAnnotations }} +{{ toYaml .Values.serviceAnnotations | indent 4 }} + {{- end }} + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "mongodb-replicaset.fullname" . }} +spec: + type: ClusterIP + clusterIP: None + ports: + - name: mongodb + port: {{ .Values.port }} +{{- if .Values.metrics.enabled }} + - name: metrics + port: {{ .Values.metrics.port }} + targetPort: metrics +{{- end }} + selector: + app: {{ template "mongodb-replicaset.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-mongodb-replicaset/templates/mongodb-statefulset.yaml b/stable/ibm-mongodb-replicaset/templates/mongodb-statefulset.yaml new file mode 100755 index 0000000..a6f71aa --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/mongodb-statefulset.yaml @@ -0,0 +1,354 @@ +apiVersion: apps/v1beta2 +kind: StatefulSet +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "mongodb-replicaset.fullname" . }} +spec: + selector: + matchLabels: + app: {{ template "mongodb-replicaset.name" . }} + release: {{ .Release.Name }} + serviceName: {{ template "mongodb-replicaset.fullname" . }} + replicas: {{ .Values.replicas }} + template: + metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + release: {{ .Release.Name }} + chart: {{ template "mongodb-replicaset.chart" . }} + heritage: {{ .Release.Service }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 8 }} +{{- end }} + annotations: + {{- if .Values.metrics.prometheusServiceDiscovery }} + prometheus.io/scrape: "true" + prometheus.io/port: {{ .Values.metrics.port | quote }} + prometheus.io/path: {{ .Values.metrics.path | quote }} + {{- end }} + {{- if .Values.podAnnotations }} +{{ toYaml .Values.podAnnotations | indent 8 }} + {{- end }} + spec: + securityContext: +{{ toYaml .Values.securityContext | indent 8 }} + initContainers: + - name: copy-config + image: busybox + command: + - "sh" + args: + - "-c" + - | + set -e + set -x + + cp /configdb-readonly/mongod.conf /data/configdb/mongod.conf + + {{- if .Values.tls.enabled }} + cp /ca-readonly/tls.key /data/configdb/tls.key + cp /ca-readonly/tls.crt /data/configdb/tls.crt + {{- end }} + + {{- if .Values.auth.enabled }} + cp /keydir-readonly/key.txt /data/configdb/key.txt + chmod 600 /data/configdb/key.txt + {{- end }} + volumeMounts: + - name: workdir + mountPath: /work-dir + - name: config + mountPath: /configdb-readonly + - name: configdir + mountPath: /data/configdb + {{- if .Values.tls.enabled }} + - name: ca + mountPath: /ca-readonly + {{- end }} + {{- if .Values.auth.enabled }} + - name: keydir + mountPath: /keydir-readonly + {{- end }} + - name: install + image: "{{ .Values.installImage.repository }}:{{ .Values.installImage.tag }}" + args: + - --work-dir=/work-dir + imagePullPolicy: "{{ .Values.installImage.pullPolicy }}" + volumeMounts: + - name: workdir + mountPath: /work-dir + - name: bootstrap + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + command: + - /work-dir/peer-finder + args: + - -on-start=/init/on-start.sh + - "-service={{ template "mongodb-replicaset.fullname" . }}" + imagePullPolicy: "{{ .Values.image.pullPolicy }}" + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: REPLICA_SET + value: {{ .Values.replicaSetName }} + {{- if .Values.auth.enabled }} + - name: AUTH + value: "true" + - name: ADMIN_USER + valueFrom: + secretKeyRef: + name: "{{ template "mongodb-replicaset.adminSecret" . }}" + key: user + - name: ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: "{{ template "mongodb-replicaset.adminSecret" . }}" + key: password + {{- if .Values.metrics.enabled }} + - name: METRICS + value: "true" + - name: METRICS_USER + valueFrom: + secretKeyRef: + name: "{{ template "mongodb-replicaset.metricsSecret" . }}" + key: user + - name: METRICS_PASSWORD + valueFrom: + secretKeyRef: + name: "{{ template "mongodb-replicaset.metricsSecret" . }}" + key: password + {{- end }} + {{- end }} + volumeMounts: + - name: workdir + mountPath: /work-dir + - name: init + mountPath: /init + - name: configdir + mountPath: /data/configdb + - name: datadir + mountPath: /data/db + containers: + - name: {{ template "mongodb-replicaset.name" . }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: "{{ .Values.image.pullPolicy }}" + {{- if .Values.extraVars }} + env: +{{ toYaml .Values.extraVars | indent 12 }} + {{- end }} + ports: + - name: mongodb + containerPort: 27017 + resources: +{{ toYaml .Values.resources | indent 12 }} + command: + - mongod + args: + - --config=/data/configdb/mongod.conf + - --dbpath=/data/db + - --replSet={{ .Values.replicaSetName }} + - --port=27017 + - --bind_ip=0.0.0.0 + {{- if .Values.auth.enabled }} + - --auth + - --keyFile=/data/configdb/key.txt + {{- end }} + {{- if .Values.tls.enabled }} + - --sslMode=requireSSL + - --sslCAFile=/data/configdb/tls.crt + - --sslPEMKeyFile=/work-dir/mongo.pem + {{- end }} + livenessProbe: + exec: + command: + - mongo + {{- if .Values.tls.enabled }} + - --ssl + - --sslCAFile=/data/configdb/tls.crt + - --sslPEMKeyFile=/work-dir/mongo.pem + {{- end }} + - --eval + - "db.adminCommand('ping')" + initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} + timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.livenessProbe.failureThreshold }} + periodSeconds: {{ .Values.livenessProbe.periodSeconds }} + successThreshold: {{ .Values.livenessProbe.successThreshold }} + readinessProbe: + exec: + command: + - mongo + {{- if .Values.tls.enabled }} + - --ssl + - --sslCAFile=/data/configdb/tls.crt + - --sslPEMKeyFile=/work-dir/mongo.pem + {{- end }} + - --eval + - "db.adminCommand('ping')" + initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} + timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.readinessProbe.failureThreshold }} + periodSeconds: {{ .Values.readinessProbe.periodSeconds }} + successThreshold: {{ .Values.readinessProbe.successThreshold }} + volumeMounts: + - name: datadir + mountPath: /data/db + - name: configdir + mountPath: /data/configdb + - name: workdir + mountPath: /work-dir +{{ if .Values.metrics.enabled }} + - name: metrics + image: "{{ .Values.metrics.image.repository }}:{{ .Values.metrics.image.tag }}" + imagePullPolicy: {{ .Values.metrics.image.pullPolicy | quote }} + command: + - sh + - -ec + - >- + {{- if .Values.auth.enabled }} + export MONGODB_URL=mongodb://$METRICS_USER:$METRICS_PASSWORD@localhost:{{ .Values.port }}; + {{- else }} + export MONGODB_URL=mongodb://localhost:{{ .Values.port }}; + {{- end }} + /bin/mongodb_exporter + {{- if .Values.tls.enabled }} + -mongodb.tls + -mongodb.tls-ca=/ca/tls.crt + -mongodb.tls-cert=/work-dir/mongo.pem + {{- end }} + -mongodb.socket-timeout={{ .Values.metrics.socketTimeout }} + -mongodb.sync-timeout={{ .Values.metrics.syncTimeout }} + -web.metrics-path={{ .Values.metrics.path }} + -web.listen-address=:{{ .Values.metrics.port }} + volumeMounts: + {{- if and (.Values.tls.enabled) }} + - name: ca + mountPath: /ca + readOnly: true + {{- end }} + - name: workdir + mountPath: /work-dir + readOnly: true + env: + {{- if .Values.auth.enabled }} + - name: METRICS_USER + valueFrom: + secretKeyRef: + name: "{{ template "mongodb-replicaset.metricsSecret" . }}" + key: user + - name: METRICS_PASSWORD + valueFrom: + secretKeyRef: + name: "{{ template "mongodb-replicaset.metricsSecret" . }}" + key: password + {{- end }} + ports: + - name: metrics + containerPort: {{ .Values.metrics.port }} + resources: +{{ toYaml .Values.metrics.resources | indent 12 }} + livenessProbe: + exec: + command: + - sh + - -ec + - >- + {{- if .Values.auth.enabled }} + export MONGODB_URL=mongodb://$METRICS_USER:$METRICS_PASSWORD@localhost:{{ .Values.port }}; + {{- else }} + export MONGODB_URL=mongodb://localhost:{{ .Values.port }}; + {{- end }} + /bin/mongodb_exporter + {{- if .Values.tls.enabled }} + -mongodb.tls + -mongodb.tls-ca=/ca/tls.crt + -mongodb.tls-cert=/work-dir/mongo.pem + {{- end }} + -test + initialDelaySeconds: 30 + periodSeconds: 10 +{{ end }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + volumes: + - name: config + configMap: + name: {{ template "mongodb-replicaset.fullname" . }}-mongodb + - name: init + configMap: + defaultMode: 0755 + name: {{ template "mongodb-replicaset.fullname" . }}-init + {{- if .Values.tls.enabled }} + - name: ca + secret: + defaultMode: 0400 + secretName: {{ template "mongodb-replicaset.fullname" . }}-ca + {{- end }} + {{- if .Values.auth.enabled }} + - name: keydir + secret: + defaultMode: 0400 + secretName: {{ template "mongodb-replicaset.keySecret" . }} + {{- end }} + - name: workdir + emptyDir: {} + - name: configdir + emptyDir: {} +{{- if .Values.persistentVolume.enabled }} + volumeClaimTemplates: + - metadata: + name: datadir + annotations: + {{- range $key, $value := .Values.persistentVolume.annotations }} + {{ $key }}: {{ $value }} + {{- end }} + spec: + accessModes: + {{- range .Values.persistentVolume.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistentVolume.size | quote }} + {{- if .Values.persistentVolume.storageClass }} + {{- if (eq "-" .Values.persistentVolume.storageClass) }} + storageClassName: "" + {{- else }} + storageClassName: "{{ .Values.persistentVolume.storageClass }}" + {{- end }} + {{- end }} +{{- else }} + - name: datadir + emptyDir: {} +{{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-mongodb-replicaset/templates/tests/mongodb-up-test-configmap.yaml b/stable/ibm-mongodb-replicaset/templates/tests/mongodb-up-test-configmap.yaml new file mode 100755 index 0000000..4585420 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/tests/mongodb-up-test-configmap.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "mongodb-replicaset.fullname" . }}-tests +data: + mongodb-up-test.sh: | +{{ .Files.Get "tests/mongodb-up-test.sh" | indent 4 }} diff --git a/stable/ibm-mongodb-replicaset/templates/tests/mongodb-up-test-pod.yaml b/stable/ibm-mongodb-replicaset/templates/tests/mongodb-up-test-pod.yaml new file mode 100755 index 0000000..7e64d92 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/templates/tests/mongodb-up-test-pod.yaml @@ -0,0 +1,49 @@ +apiVersion: v1 +kind: Pod +metadata: + labels: + app: {{ template "mongodb-replicaset.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} + name: {{ template "mongodb-replicaset.fullname" . }}-test + annotations: + "helm.sh/hook": test-success +spec: + initContainers: + - name: test-framework + image: dduportal/bats:0.4.0 + command: + - bash + - -c + - | + set -ex + # copy bats to tools dir + cp -R /usr/local/libexec/ /tools/bats/ + volumeMounts: + - name: tools + mountPath: /tools + containers: + - name: mongo + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + command: + - /tools/bats/bats + - -t + - /tests/mongodb-up-test.sh + env: + - name: FULL_NAME + value: {{ template "mongodb-replicaset.fullname" . }} + - name: REPLICAS + value: "{{ .Values.replicas }}" + volumeMounts: + - name: tools + mountPath: /tools + - name: tests + mountPath: /tests + volumes: + - name: tools + emptyDir: {} + - name: tests + configMap: + name: {{ template "mongodb-replicaset.fullname" . }}-tests + restartPolicy: Never diff --git a/stable/ibm-mongodb-replicaset/test.sh b/stable/ibm-mongodb-replicaset/test.sh new file mode 100755 index 0000000..0b7fd76 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/test.sh @@ -0,0 +1,48 @@ +#! /bin/bash + +# Copyright 2016 The Kubernetes Authors. All rights reserved. +# +# 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. + +NS="${RELEASE_NAMESPACE:-default}" +POD_NAME="${RELEASE_NAME:-mongo}-mongodb-replicaset" + +MONGOCACRT=/ca/tls.crt +MONGOPEM=/work-dir/mongo.pem +if [ -f $MONGOPEM ]; then + MONGOARGS="--ssl --sslCAFile $MONGOCACRT --sslPEMKeyFile $MONGOPEM" +fi + +for i in $(seq 0 2); do + pod="${POD_NAME}-$i" + kubectl exec --namespace $NS $pod -- sh -c 'mongo '"$MONGOARGS"' --eval="printjson(rs.isMaster())"' | grep '"ismaster" : true' + + if [ $? -eq 0 ]; then + echo "Found master: $pod" + MASTER=$pod + break + fi +done + +kubectl exec --namespace $NS $MASTER -- mongo "$MONGOARGS" --eval='printjson(db.test.insert({"status": "success"}))' + +# TODO: find maximum duration to wait for slaves to be up-to-date with master. +sleep 2 + +for i in $(seq 0 2); do + pod="${POD_NAME}-$i" + if [[ $pod != $MASTER ]]; then + echo "Reading from slave: $pod" + kubectl exec --namespace $NS $pod -- mongo "$MONGOARGS" --eval='rs.slaveOk(); db.test.find().forEach(printjson)' + fi +done diff --git a/stable/ibm-mongodb-replicaset/tests/mongodb-up-test.sh b/stable/ibm-mongodb-replicaset/tests/mongodb-up-test.sh new file mode 100755 index 0000000..720816a --- /dev/null +++ b/stable/ibm-mongodb-replicaset/tests/mongodb-up-test.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +MONGOCACRT=/ca/tls.crt +MONGOPEM=/work-dir/mongo.pem + +if [ -f "$MONGOPEM" ]; then + MONGOARGS="--ssl --sslCAFile $MONGOCACRT --sslPEMKeyFile $MONGOPEM" +fi + +pod_name() { + local full_name="${FULL_NAME?Environment variable FULL_NAME not set}" + local index="$1" + echo "$full_name-$index.$full_name" +} + +replicas() { + echo "${REPLICAS?Environment variable REPLICAS not set}" +} + +master_pod() { + for ((i = 0; i < $(replicas); ++i)); do + response=$(mongo "$MONGOARGS" "--host=$(pod_name "$i")" "--eval=rs.isMaster().ismaster") + if [[ "$response" =~ "true" ]]; then + pod_name "$i" + break + fi + done +} + +setup() { + local ready=0 + until [[ "$ready" -eq $(replicas) ]]; do + echo "Waiting for application to become ready" >&2 + sleep 1 + + for ((i = 0; i < $(replicas); ++i)); do + response=$(mongo "$MONGOARGS" "--host=$(pod_name "$i")" "--eval=rs.status()" || true) + if [[ "$response" =~ .*ok.* ]]; then + ready=$((ready + 1)) + fi + done + done +} + +@test "Testing mongodb client is accessible" { + mongo -h + [ "$?" -eq 0 ] +} + +@test "Connect mongodb client to mongodb pods" { + for ((i = 0; i < $(replicas); ++i)); do + response=$(mongo "$MONGOARGS" "--host=$(pod_name "$i")" "--eval=rs.status()") + if [[ ! "$response" =~ .*ok.* ]]; then + exit 1 + fi + done +} + +@test "Write key to master" { + response=$(mongo "$MONGOARGS" --host=$(master_pod) "--eval=db.test.insert({\"abc\": \"def\"}).nInserted") + if [[ ! "$response" =~ "1" ]]; then + exit 1 + fi +} + +@test "Read key from slaves" { + # wait for slaves to catch up + sleep 10 + + for ((i = 0; i < $(replicas); ++i)); do + response=$(mongo "$MONGOARGS" --host=$(pod_name "$i") "--eval=rs.slaveOk(); db.test.find({\"abc\":\"def\"})") + if [[ ! "$response" =~ .*def.* ]]; then + exit 1 + fi + done +} diff --git a/stable/ibm-mongodb-replicaset/values-metadata.yaml b/stable/ibm-mongodb-replicaset/values-metadata.yaml new file mode 100755 index 0000000..e2e800f --- /dev/null +++ b/stable/ibm-mongodb-replicaset/values-metadata.yaml @@ -0,0 +1,12 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + diff --git a/stable/ibm-mongodb-replicaset/values.yaml b/stable/ibm-mongodb-replicaset/values.yaml new file mode 100755 index 0000000..f5a6f34 --- /dev/null +++ b/stable/ibm-mongodb-replicaset/values.yaml @@ -0,0 +1,125 @@ +replicas: 3 +port: 27017 + +replicaSetName: rs0 + +podDisruptionBudget: {} + # maxUnavailable: 1 + # minAvailable: 2 + +auth: + enabled: false + # adminUser: username + # adminPassword: password + # metricsUser: metrics + # metricsPassword: password + # key: keycontent + # existingKeySecret: + # existingAdminSecret: + # exisitingMetricsSecret: + +# Specs for the Docker image for the init container that establishes the replica set +installImage: + repository: ckandag/mongodb-install-ppc64le + tag: 0.5 + pullPolicy: IfNotPresent + +# Specs for the MongoDB image +image: + repository: ppc64le/mongodb + tag: 2.6.10 + pullPolicy: IfNotPresent + +# Additional environment variables to be set in the container +extraVars: {} +# - name: TCMALLOC_AGGRESSIVE_DECOMMIT +# value: "true" + +# Prometheus Metrics Exporter +metrics: + enabled: false + image: + repository: ssalaues/mongodb-exporter + tag: 0.6.1 + pullPolicy: IfNotPresent + port: 9216 + path: "/metrics" + socketTimeout: 3s + syncTimeout: 1m + prometheusServiceDiscovery: true + resources: {} + +# Annotations to be added to MongoDB pods +podAnnotations: {} + +securityContext: + runAsUser: 999 + fsGroup: 999 + runAsNonRoot: true + +resources: {} +# limits: +# cpu: 500m +# memory: 512Mi +# requests: +# cpu: 100m +# memory: 256Mi + +## Node selector +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector +nodeSelector: {} +node: "ppc64le" + +affinity: {} + +tolerations: [] + +extraLabels: {} + +persistentVolume: + enabled: false + ## mongodb-replicaset data Persistent Volume Storage Class + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + ## + # storageClass: "-" + accessModes: + - ReadWriteOnce + size: 10Gi + annotations: {} + +# Annotations to be added to the service +serviceAnnotations: {} + +tls: + # Enable or disable MongoDB TLS support + enabled: false + # Please generate your own TLS CA by generating it via: + # $ openssl genrsa -out ca.key 2048 + # $ openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=mydomain.com" + # After that you can base64 encode it and paste it here: + # $ cat ca.key | base64 -w0 + # cacert: + # cakey: + +# Entries for the MongoDB config file +configmap: + +# Readiness probe +readinessProbe: + initialDelaySeconds: 5 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 10 + successThreshold: 1 + +# Liveness probe +livenessProbe: + initialDelaySeconds: 30 + timeoutSeconds: 5 + failureThreshold: 3 + periodSeconds: 10 + successThreshold: 1 diff --git a/stable/ibm-postgresql/Chart.yaml b/stable/ibm-postgresql/Chart.yaml new file mode 100755 index 0000000..e6d6957 --- /dev/null +++ b/stable/ibm-postgresql/Chart.yaml @@ -0,0 +1,24 @@ +appVersion: 9.6.2 +description: Object-relational database management system (ORDBMS) with an emphasis + on extensibility and on standards-compliance. +engine: gotpl +home: https://www.postgresql.org/ +icon: https://www.postgresql.org/media/img/about/press/elephant.png +keywords: +- postgresql +- postgres +- database +- sql +- Limited +- ppc64le +- Tools +- ICP +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +name: ibm-postgresql +sources: +- https://github.com/kubernetes/charts +- https://github.com/docker-library/postgres +tillerVersion: '>=2.7.2' +version: 0.11.0 diff --git a/stable/ibm-postgresql/LICENSE b/stable/ibm-postgresql/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-postgresql/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-postgresql/README.md b/stable/ibm-postgresql/README.md new file mode 100755 index 0000000..c24ba5a --- /dev/null +++ b/stable/ibm-postgresql/README.md @@ -0,0 +1,150 @@ +# PostgreSQL + +[PostgreSQL](https://postgresql.org) is a powerful, open source object-relational database system. It has more than 15 years of active development and a proven architecture that has earned it a strong reputation for reliability, data integrity, and correctness. + +## TL;DR; + +```bash +$ helm install stable/postgresql +``` + +## Introduction + +This chart bootstraps a [PostgreSQL](https://github.com/docker-library/postgres) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + +## Chart Details +This chart bootstraps [PostgreSQL](https://postgresql.org) deployment on a [Kubernetes](http://kubernetes.io) cluster. + +## Prerequisites + +- Kubernetes 1.4+ with Beta APIs enabled +- PV provisioner support in the underlying infrastructure (Only when persisting data) + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```bash +$ helm install --name my-release stable/postgresql +``` + +The command deploys PostgreSQL on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation. + +> **Tip**: List all releases using `helm list` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```bash +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Configuration + +The following table lists the configurable parameters of the PostgreSQL chart and their default values. + +| Parameter | Description | Default | +| ----------------------- | --------------------------------------------- | ---------------------------------------------------------- | +| `image` | `postgres` image repository | `postgres` | +| `imageTag` | `postgres` image tag | `9.6.2` | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `imagePullSecrets` | Image pull secrets | `nil` | +| `postgresUser` | Username of new user to create. | `postgres` | +| `postgresPassword` | Password for the new user. | random 10 characters | +| `usePasswordFile` | Inject the password via file instead of env var | `false` | +| `postgresDatabase` | Name for new database to create. | `postgres` | +| `postgresInitdbArgs` | Initdb Arguments | `nil` | +| `schedulerName` | Name of an alternate scheduler | `nil` | +| `postgresConfig` | Runtime Config Parameters | `nil` | +| `persistence.enabled` | Use a PVC to persist data | `true` | +| `persistence.existingClaim`| Provide an existing PersistentVolumeClaim | `nil` | +| `persistence.storageClass` | Storage class of backing PVC | `nil` (uses alpha storage class annotation) | +| `persistence.accessMode` | Use volume as ReadOnly or ReadWrite | `ReadWriteOnce` | +| `persistence.annotations` | Persistent Volume annotations | `{}` | +| `persistence.size` | Size of data volume | `8Gi` | +| `persistence.subPath` | Subdirectory of the volume to mount at | `postgresql-db` | +| `persistence.mountPath` | Mount path of data volume | `/var/lib/postgresql/data/pgdata` | +| `resources` | CPU/Memory resource requests/limits | Memory: `256Mi`, CPU: `100m` | +| `metrics.enabled` | Start a side-car prometheus exporter | `false` | +| `metrics.image` | Exporter image | `wrouesnel/postgres_exporter` | +| `metrics.imageTag` | Exporter image | `v0.1.1` | +| `metrics.imagePullPolicy` | Exporter image pull policy | `IfNotPresent` | +| `metrics.resources` | Exporter resource requests/limit | Memory: `256Mi`, CPU: `100m` | +| `metrics.customMetrics` | Additional custom metrics | `nil` | +| `service.externalIPs` | External IPs to listen on | `[]` | +| `service.port` | TCP port | `5432` | +| `service.type` | k8s service type exposing ports, e.g. `NodePort`| `ClusterIP` | +| `service.nodePort` | NodePort value if service.type is `NodePort` | `nil` | +| `networkPolicy.enabled` | Enable NetworkPolicy | `false` | +| `networkPolicy.allowExternal` | Don't require client label for connections | `true` | +| `nodeSelector` | Node labels for pod assignment | {} | +| `affinity` | Affinity settings for pod assignment | {} | +| `tolerations` | Toleration labels for pod assignment | [] | + +The above parameters map to the env variables defined in [postgres](http://github.com/docker-library/postgres). For more information please refer to the [postgres](http://github.com/docker-library/postgres) image documentation. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, + +```bash +$ helm install --name my-release \ + --set postgresUser=my-user,postgresPassword=secretpassword,postgresDatabase=my-database \ + stable/postgresql +``` + +The above command creates a PostgreSQL user named `my-user` with password `secretpassword`. Additionally it creates a database named `my-database`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/postgresql +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Persistence + +The [postgres](https://github.com/docker-library/postgres) image stores the PostgreSQL data and configurations at the `/var/lib/postgresql/data/pgdata` path of the container. + +The chart mounts a [Persistent Volume](http://kubernetes.io/docs/user-guide/persistent-volumes/) at this location. The volume is created using dynamic volume provisioning. If the PersistentVolumeClaim should not be managed by the chart, define `persistence.existingClaim`. + +### Existing PersistentVolumeClaims + +1. Create the PersistentVolume +1. Create the PersistentVolumeClaim +1. Install the chart +```bash +$ helm install --set persistence.existingClaim=PVC_NAME postgresql +``` + +The volume defaults to mount at a subdirectory of the volume instead of the volume root to avoid the volume's hidden directories from interfering with `initdb`. If you are upgrading this chart from before version `0.4.0`, set `persistence.subPath` to `""`. + +## Metrics +The chart optionally can start a metrics exporter for [prometheus](https://prometheus.io). The metrics endpoint (port 9187) is not exposed and it is expected that the metrics are collected from inside the k8s cluster using something similar as the described in the [example Prometheus scrape configuration](https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml). + +The exporter allows to create custom metrics from additional SQL queries. See the Chart's `values.yaml` for an example and consult the [exporters documentation](https://github.com/wrouesnel/postgres_exporter#adding-new-metrics-via-a-config-file) for more details. + +## NetworkPolicy + +To enable network policy for PostgreSQL, +install [a networking plugin that implements the Kubernetes +NetworkPolicy spec](https://kubernetes.io/docs/tasks/administer-cluster/declare-network-policy#before-you-begin), +and set `networkPolicy.enabled` to `true`. + +For Kubernetes v1.5 & v1.6, you must also turn on NetworkPolicy by setting +the DefaultDeny namespace annotation. Note: this will enforce policy for _all_ pods in the namespace: + + kubectl annotate namespace default "net.beta.kubernetes.io/network-policy={\"ingress\":{\"isolation\":\"DefaultDeny\"}}" + +With NetworkPolicy enabled, traffic will be limited to just port 5432. + +For more precise policy, set `networkPolicy.allowExternal=false`. This will +only allow pods with the generated client label to connect to PostgreSQL. +This label will be displayed in the output of a successful install. + +## Limitations diff --git a/stable/ibm-postgresql/RELEASENOTES.md b/stable/ibm-postgresql/RELEASENOTES.md new file mode 100755 index 0000000..831cec8 --- /dev/null +++ b/stable/ibm-postgresql/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.11.0 | September 12, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-postgresql/templates/NOTES.txt b/stable/ibm-postgresql/templates/NOTES.txt new file mode 100755 index 0000000..4ad7284 --- /dev/null +++ b/stable/ibm-postgresql/templates/NOTES.txt @@ -0,0 +1,27 @@ +PostgreSQL can be accessed via port 5432 on the following DNS name from within your cluster: +{{ template "postgresql.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local + +To get your user password run: + + PGPASSWORD=$(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "postgresql.fullname" . }} -o jsonpath="{.data.postgres-password}" | base64 --decode; echo) + +{{ if and (.Values.networkPolicy.enabled) (not .Values.networkPolicy.allowExternal) }} +Note: Since NetworkPolicy is enabled, only pods with label +{{ template "postgresql.fullname" . }}-client=true" +will be able to connect to this PostgreSQL cluster. +{{- end }} + +To connect to your database directly from outside the K8s cluster: + {{- if contains "NodePort" .Values.service.type }} + PGHOST=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath='{.items[0].status.addresses[0].address}') + PGPORT=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "postgresql.fullname" . }} -o jsonpath='{.spec.ports[0].nodePort}') + + {{- else if contains "ClusterIP" .Values.service.type }} + PGHOST=127.0.0.1 + PGPORT={{ default "5432" .Values.service.port }} + + # Execute the following commands to route the connection: + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "postgresql.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + kubectl port-forward --namespace {{ .Release.Namespace }} $POD_NAME {{ default "5432" .Values.service.port }}:{{ default "5432" .Values.service.port }} + + {{- end }} diff --git a/stable/ibm-postgresql/templates/_helpers.tpl b/stable/ibm-postgresql/templates/_helpers.tpl new file mode 100755 index 0000000..5f605c6 --- /dev/null +++ b/stable/ibm-postgresql/templates/_helpers.tpl @@ -0,0 +1,43 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "postgresql.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 "postgresql.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 -}} + +{{/* +Return the appropriate apiVersion for networkpolicy. +*/}} +{{- define "postgresql.networkPolicy.apiVersion" -}} +{{- if semverCompare ">=1.4-0, <1.7-0" .Capabilities.KubeVersion.GitVersion -}} +"extensions/v1beta1" +{{- else if semverCompare "^1.7-0" .Capabilities.KubeVersion.GitVersion -}} +"networking.k8s.io/v1" +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "postgresql.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-postgresql/templates/deployment.yaml b/stable/ibm-postgresql/templates/deployment.yaml new file mode 100755 index 0000000..9c309fd --- /dev/null +++ b/stable/ibm-postgresql/templates/deployment.yaml @@ -0,0 +1,157 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ template "postgresql.fullname" . }} + labels: + app: {{ template "postgresql.name" . }} + chart: {{ template "postgresql.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + template: + selector: + matchLabels: + app: {{ template "postgresql.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "postgresql.name" . }} + release: {{ .Release.Name }} + chart: {{ template "postgresql.chart" . }} + heritage: {{ .Release.Service }} + spec: + {{- if .Values.affinity }} + affinity: +{{ toYaml .Values.affinity | indent 8 }} + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: +{{ toYaml .Values.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: +{{ toYaml .Values.tolerations | indent 8 }} + {{- end }} + {{- if .Values.schedulerName }} + schedulerName: "{{ .Values.schedulerName }}" + {{- end }} + containers: + - name: {{ template "postgresql.fullname" . }} + image: "{{ .Values.image }}:{{ .Values.imageTag }}" + imagePullPolicy: {{ default "" .Values.imagePullPolicy | quote }} + args: + {{- range $key, $value := default dict .Values.postgresConfig }} + - -c + - '{{ $key | snakecase }}={{ $value }}' + {{- end }} + env: + - name: POSTGRESQL_USER + value: {{ default "postgres" .Values.postgresUser | quote }} + # Required for pg_isready in the health probes. + - name: PGUSER + value: {{ default "postgres" .Values.postgresUser | quote }} + - name: POSTGRESQL_DATABASE + value: {{ default "" .Values.postgresDatabase | quote }} + - name: POSTGRES_INITDB_ARGS + value: {{ default "" .Values.postgresInitdbArgs | quote }} + - name: PGDATA + value: /var/lib/postgresql/data/pgdata + {{- if .Values.usePasswordFile }} + - name: POSTGRES_PASSWORD_FILE + value: /conf/postgres-password + {{- else }} + - name: POSTGRESQL_PASSWORD + valueFrom: + secretKeyRef: + name: {{ template "postgresql.fullname" . }} + key: postgres-password + {{- end }} + - name: POD_IP + valueFrom: { fieldRef: { fieldPath: status.podIP } } + ports: + - name: postgresql + containerPort: 5432 + livenessProbe: + tcpSocket: + port: 5432 + initialDelaySeconds: 120 + timeoutSeconds: 5 + failureThreshold: 6 + readinessProbe: + tcpSocket: + port: 5432 + initialDelaySeconds: 5 + timeoutSeconds: 3 + periodSeconds: 5 + resources: +{{ toYaml .Values.resources | indent 10 }} + volumeMounts: + - name: data + mountPath: {{ .Values.persistence.mountPath }} + subPath: {{ .Values.persistence.subPath }} + {{- if .Values.usePasswordFile }} + - name: password-file + mountPath: /conf + readOnly: true + {{- end }} +{{- if .Values.metrics.enabled }} + - name: metrics + image: "{{ .Values.metrics.image }}:{{ .Values.metrics.imageTag }}" + imagePullPolicy: {{ default "" .Values.metrics.imagePullPolicy | quote }} + env: + - name: DATA_SOURCE_NAME + value: postgresql://postgres@127.0.0.1:5432?sslmode=disable + ports: + - name: metrics + containerPort: 9187 + {{- if .Values.metrics.customMetrics }} + args: ["-extend.query-path", "/conf/custom-metrics.yaml"] + volumeMounts: + - name: custom-metrics + mountPath: /conf + readOnly: true + {{- end }} + resources: +{{ toYaml .Values.metrics.resources | indent 10 }} +{{- end }} + volumes: + - name: data + {{- if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.persistence.existingClaim | default (include "postgresql.fullname" .) }} + {{- else }} + emptyDir: {} + {{- end }} + {{- if and .Values.metrics.enabled .Values.metrics.customMetrics }} + - name: custom-metrics + secret: + secretName: {{ template "postgresql.fullname" . }} + items: + - key: custom-metrics.yaml + path: custom-metrics.yaml + {{- end }} + {{- if .Values.usePasswordFile }} + - name: password-file + secret: + secretName: {{ template "postgresql.fullname" . }} + items: + - key: postgres-password + path: postgres-password + {{- end }} + {{- if .Values.imagePullSecrets }} + imagePullSecrets: + - name: {{ .Values.imagePullSecrets }} + {{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-postgresql/templates/networkpolicy.yaml b/stable/ibm-postgresql/templates/networkpolicy.yaml new file mode 100755 index 0000000..1b04b88 --- /dev/null +++ b/stable/ibm-postgresql/templates/networkpolicy.yaml @@ -0,0 +1,29 @@ +{{- if .Values.networkPolicy.enabled }} +kind: NetworkPolicy +apiVersion: {{ template "postgresql.networkPolicy.apiVersion" . }} +metadata: + name: "{{ template "postgresql.fullname" . }}" + labels: + app: {{ template "postgresql.name" . }} + chart: {{ template "postgresql.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + podSelector: + matchLabels: + app: {{ template "postgresql.name" . }} + release: {{ .Release.Name }} + ingress: + # Allow inbound connections + - ports: + - port: 5432 + {{- if not .Values.networkPolicy.allowExternal }} + from: + - podSelector: + matchLabels: + {{ template "postgresql.fullname" . }}-client: "true" + {{- end }} + # Allow prometheus scrapes + - ports: + - port: 9187 +{{- end }} diff --git a/stable/ibm-postgresql/templates/pvc.yaml b/stable/ibm-postgresql/templates/pvc.yaml new file mode 100755 index 0000000..78b6832 --- /dev/null +++ b/stable/ibm-postgresql/templates/pvc.yaml @@ -0,0 +1,28 @@ +{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) -}} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ template "postgresql.fullname" . }} + labels: + app: {{ template "postgresql.name" . }} + chart: {{ template "postgresql.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.persistence.annotations }} + annotations: +{{ toYaml .Values.persistence.annotations | indent 4 }} +{{- end }} +spec: + accessModes: + - {{ .Values.persistence.accessMode | quote }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} +{{- if .Values.persistence.storageClass }} +{{- if (eq "-" .Values.persistence.storageClass) }} + storageClassName: "" +{{- else }} + storageClassName: "{{ .Values.persistence.storageClass }}" +{{- end }} +{{- end }} +{{- end -}} diff --git a/stable/ibm-postgresql/templates/secrets.yaml b/stable/ibm-postgresql/templates/secrets.yaml new file mode 100755 index 0000000..cc32067 --- /dev/null +++ b/stable/ibm-postgresql/templates/secrets.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "postgresql.fullname" . }} + labels: + app: {{ template "postgresql.name" . }} + chart: {{ template "postgresql.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +type: Opaque +data: + {{ if .Values.postgresPassword }} + postgres-password: {{ .Values.postgresPassword | b64enc | quote }} + {{ else }} + postgres-password: {{ randAlphaNum 10 | b64enc | quote }} + {{ end }} + {{- if .Values.metrics.customMetrics }} + custom-metrics.yaml: {{ toYaml .Values.metrics.customMetrics | b64enc | quote }} + {{- end }} diff --git a/stable/ibm-postgresql/templates/svc.yaml b/stable/ibm-postgresql/templates/svc.yaml new file mode 100755 index 0000000..9b1bd72 --- /dev/null +++ b/stable/ibm-postgresql/templates/svc.yaml @@ -0,0 +1,30 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "postgresql.fullname" . }} + labels: + app: {{ template "postgresql.name" . }} + chart: {{ template "postgresql.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.metrics.enabled }} + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "9187" +{{- end }} +spec: + type: {{ .Values.service.type }} + ports: + - name: postgresql + port: {{ .Values.service.port }} + targetPort: postgresql + {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} + nodePort: {{ .Values.service.nodePort }} + {{- end }} +{{- if .Values.service.externalIPs }} + externalIPs: +{{ toYaml .Values.service.externalIPs | indent 4 }} +{{- end }} + selector: + app: {{ template "postgresql.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-postgresql/values-metadata.yaml b/stable/ibm-postgresql/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-postgresql/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-postgresql/values.yaml b/stable/ibm-postgresql/values.yaml new file mode 100755 index 0000000..09f77b1 --- /dev/null +++ b/stable/ibm-postgresql/values.yaml @@ -0,0 +1,127 @@ +## postgres image repository +image: "ibmcom/postgresql" +## postgres image version +## ref: https://hub.docker.com/r/library/postgres/tags/ +## +imageTag: "9.6.6" + +## Specify a imagePullPolicy +## 'Always' if imageTag is 'latest', else set to 'IfNotPresent' +## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images +## +# imagePullPolicy: + +## Specify imagePullSecrets +## ref: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod +## +# imagePullSecrets: myregistrykey + +## Create a database user +## Default: postgres +postgresUser: test +## Default: random 10 character string +postgresPassword: test123 + +## Inject postgresPassword via a volume mount instead of environment variable +usePasswordFile: false + +## Create a database +## Default: the postgres user +# postgresDatabase: + +## Specify initdb arguments, e.g. --data-checksums +## ref: https://github.com/docker-library/docs/blob/master/postgres/content.md#postgres_initdb_args +## ref: https://www.postgresql.org/docs/current/static/app-initdb.html +# postgresInitdbArgs: + +## Use an alternate scheduler, e.g. "stork". +## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ +## +# schedulerName: + +## Specify runtime config parameters as a dict, using camelCase, e.g. +## {"sharedBuffers": "500MB"} +## ref: https://www.postgresql.org/docs/current/static/runtime-config.html +# postgresConfig: + +## Persist data to a persitent volume +persistence: + enabled: false + + ## A manually managed Persistent Volume and Claim + ## Requires persistence.enabled: true + ## If defined, PVC must be created manually before volume will be bound + # existingClaim: + + ## database data Persistent Volume Storage Class + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + ## + storageClass: "-" + accessMode: ReadWriteOnce + size: 2Gi + subPath: "postgresql-db" + mountPath: /var/lib/postgresql/data/pgdata + + # annotations: {} + +metrics: + enabled: false + image: wrouesnel/postgres_exporter + imageTag: v0.1.1 + imagePullPolicy: IfNotPresent + resources: + requests: + memory: 256Mi + cpu: 100m + ## Define additional custom metrics + ## ref: https://github.com/wrouesnel/postgres_exporter#adding-new-metrics-via-a-config-file + # customMetrics: + # pg_database: + # query: "SELECT d.datname AS name, CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT') THEN pg_catalog.pg_database_size(d.datname) ELSE 0 END AS size FROM pg_catalog.pg_database d where datname not in ('template0', 'template1', 'postgres')" + # metrics: + # - name: + # usage: "LABEL" + # description: "Name of the database" + # - size_bytes: + # usage: "GAUGE" + # description: "Size of the database in bytes" + +## Configure resource requests and limits +## ref: http://kubernetes.io/docs/user-guide/compute-resources/ +## +resources: + requests: + memory: 256Mi + cpu: 100m + +service: + type: ClusterIP + port: 5432 + externalIPs: [] + ## Manually set NodePort value + ## Requires service.type: NodePort + # nodePort: + +networkPolicy: + ## Enable creation of NetworkPolicy resources. + ## + enabled: false + + ## The Policy model to apply. When set to false, only pods with the correct + ## client label will have network access to the port PostgreSQL is listening + ## on. When true, PostgreSQL will accept connections from any source + ## (with the correct destination port). + ## + allowExternal: true + +## Node labels and tolerations for pod assignment +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#taints-and-tolerations-beta-feature +nodeSelector: {} +node: "ppc64le" +tolerations: [] +affinity: {} diff --git a/stable/ibm-rabbitmq-ha/.helmignore b/stable/ibm-rabbitmq-ha/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-rabbitmq-ha/Chart.yaml b/stable/ibm-rabbitmq-ha/Chart.yaml new file mode 100755 index 0000000..013be8e --- /dev/null +++ b/stable/ibm-rabbitmq-ha/Chart.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +appVersion: 3.7.4 +description: Highly available RabbitMQ cluster, the open source message broker software + that implements the Advanced Message Queuing Protocol (AMQP). +home: https://www.rabbitmq.com +icon: https://bitnami.com/assets/stacks/rabbitmq/img/rabbitmq-stack-220x234.png +keywords: +- rabbitmq +- message queue +- AMQP +- AMQPS +- MQTT +- STOMP +- Limited +- ppc64le +- Tools +- ICP +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +name: ibm-rabbitmq-ha +sources: +- https://github.com/rabbitmq/rabbitmq +- https://github.com/docker-library/rabbitmq +tillerVersion: '>=2.7.2' +version: 1.6.3 diff --git a/stable/ibm-rabbitmq-ha/LICENSE b/stable/ibm-rabbitmq-ha/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-rabbitmq-ha/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-rabbitmq-ha/README.md b/stable/ibm-rabbitmq-ha/README.md new file mode 100755 index 0000000..4e0037b --- /dev/null +++ b/stable/ibm-rabbitmq-ha/README.md @@ -0,0 +1,214 @@ +## Chart Details +# RabbitMQ High Available + +[RabbitMQ](https://www.rabbitmq.com) is an open source message broker software +that implements the Advanced Message Queuing Protocol (AMQP). + +## TL;DR; + +```bash +$ helm install stable/rabbitmq-ha +``` + +## Introduction + +This chart bootstraps a [RabbitMQ](https://hub.docker.com/r/_/rabbitmq) +deployment on a [Kubernetes](http://kubernetes.io) cluster using the +[Helm](https://helm.sh) package manager. + +## Prerequisites + +- Kubernetes 1.5+ with Beta APIs enabled +- PV provisioner support in the underlying infrastructure + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Prerequisites +-Kubernetes 1.7+ with Beta APIs enabled +-Tiller 2.6.0 or later + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```bash +$ helm install --name my-release stable/rabbitmq-ha +``` + +The command deploys RabbitMQ on the Kubernetes cluster in the default +configuration. The [configuration](#configuration) section lists the parameters +that can be configured during installation. + +> **Tip**: List all releases using `helm list` + +## Upgrading the Chart + +To upgrade the chart, you need to make sure that you are using the same value +of the `rabbitmqErlangCookie` amongst the releases. If you didn't define it at +the first place, you can upgrade using the following command: + +``` +$ export ERLANGCOOKIE=$(kubectl get secrets -n -rabbitmq-ha -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 --decode) +$ helm upgrade \ + --set rabbitmqErlangCookie=$ERLANGCOOKIE \ + stable/rabbitmq-ha +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```bash +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and +deletes the release. + +## Configuration + +The following table lists the configurable parameters of the RabbitMQ chart +and their default values. + +| Parameter | Description | Default | +|------------------------------------|-----------------------------------------------------------------|----------------------------------------------------------| +| `customConfigMap` | Use a custom ConfigMap | `false` | +| `existingSecret`     | Use an existing secret for password & erlang cookie               | `""`                               | +| `image.pullPolicy` | Image pull policy | `Always` if `image` tag is `latest`, else `IfNotPresent` | +| `image.repository` | RabbitMQ container image repository | `rabbitmq` | +| `image.tag` | RabbitMQ container image tag | `3.7-alpine` | +| `nodeSelector` | Node labels for pod assignment | `{}` | +| `persistentVolume.accessMode` | Persistent volume access modes | `[ReadWriteOnce]` | +| `persistentVolume.annotations` | Persistent volume annotations | `{}` | +| `persistentVolume.enabled` | If `true`, persistent volume claims are created | `false` | +| `persistentVolume.name` | Persistent volume name | `data` | +| `persistentVolume.size` | Persistent volume size | `8Gi` | +| `persistentVolume.storageClass` | Persistent volume storage class | `-` | +| `podAntiAffinity` | Pod antiaffinity, `hard` or `soft` | `hard` | +| `prometheus.exporter.enabled` | Configures Prometheus Exporter to expose and scrape stats | `true` | +| `prometheus.exporter.env` | Environment variables to set for Exporter container | `{}` | +| `prometheus.exporter.image.repository` | Prometheus Exporter repository | `kbudde/rabbitmq-exporter` | +| `prometheus.exporter.image.tag` | Image Tag | `latest` | +| `prometheus.exporter.image.pullPolicy` | Image Pull Policy | `IfNotPresent` | +| `prometheus.exporter.port` | Port Prometheus scrapes for metrics | `9090` | +| `prometheus.exporter.resources` | Resource Limits for Prometheus Exporter | `{}` | +| `prometheus.operator.enabled` | Are you using Prometheus Operator? [Blog Post](https://coreos.com/blog/the-prometheus-operator.html) | `true` | +| `prometheus.operator.alerts.enabled` | Create default Alerts for RabbitMQ | `true` | +| `prometheus.operator.alerts.selector` | Selector to find ConfigMaps and create Prometheus Alerts | `alert-rules` | +| `prometheus.operator.alerts.labels` | Labels to add to Alerts | `{}` | +| `prometheus.operator.serviceMonitor.interval` | How often Prometheus Scrapes metrics | `10s` | +| `prometheus.operator.serviceMonitor.namespace` | Namespace which Prometheus is installed | `monitoring` | +| `prometheus.operator.serviceMonitor.selector` | Label Selector for Prometheus to find ServiceMonitors | `{ prometheus: kube-prometheus }` | +| `rabbitmqCert.enabled` | Mount a Secret container certificates | `false` | +| `rabbitmqCert.cacertfile` | base64 encoded CA certificate (overwrites existing Secret) | `` | +| `rabbitmqCert.certfile` | base64 encoded server certificate (overwrites existing Secret) | `` | +| `rabbitmqCert.existingSecret`     | Name of an existing `Secret` to mount for amqps               | `""`                               | +| `rabbitmqCert.keyfile` | base64 encoded server private key (overwrites existing Secret) | `` | +| `rabbitmqEpmdPort` | EPMD port used for cross cluster replication | `4369` | +| `rabbitmqErlangCookie` | Erlang cookie | _random 32 character long alphanumeric string_ | +| `rabbitmqHipeCompile` | Precompile parts of RabbitMQ using HiPE | `false` | +| `rabbitmqMQTTPlugin.config` | MQTT configuration | `` | +| `rabbitmqMQTTPlugin.enabled` | Enable MQTT plugin | `false` | +| `rabbitmqManagerPort` | RabbitMQ Manager port | `15672` | +| `rabbitmqMemoryHighWatermark` | Memory high watermark | `256MB` | +| `rabbitmqNodePort` | Node port | `5672` | +| `rabbitmqPassword` | RabbitMQ application password | _random 10 character long alphanumeric string_ | +| `rabbitmqSTOMPPlugin.config` | STOMP configuration | `` | +| `rabbitmqSTOMPPlugin.enabled` | Enable STOMP plugin | `false` | +| `rabbitmqUsername` | RabbitMQ application username | `guest` | +| `rabbitmqVhost` | RabbitMQ application vhost | `/` | +| `rabbitmqWebMQTTPlugin.config`     | MQTT over websocket configuration                               | ``                                                       | +| `rabbitmqWebMQTTPlugin.enabled` | Enable MQTT over websocket plugin | `false` | +| `rabbitmqWebSTOMPPlugin.config` | STOMP over websocket configuration | `` | +| `rabbitmqWebSTOMPPlugin.enabled` | Enable STOMP over websocket plugin | `false` | +| `rbac.create` | If true, create & use RBAC resources | `true` | +| `replicaCount` | Number of replica | `3` | +| `resources` | CPU/Memory resource requests/limits | `{}` +| `serviceAccount.create` | Create service account | `true` | +| `serviceAccount.name` | Service account name to use | _name of the release_ | +| `service.annotations` | Annotations to add to the service | `{}` | +| `service.clusterIP` | IP address to assign to the service | `None` | +| `service.externalIPs` | Service external IP addresses | `[]` | +| `service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""` | +| `service.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported) | `[]` | +| `service.type` | Type of service to create | `ClusterIP` | +| `tolerations` | Toleration labels for pod assignment | `[]` | +| `terminationGracePeriodSeconds` | Duration pod needs to terminate gracefully | `10` | +| `updateStrategy` | Statefulset update strategy | `OnDelete` | +| `extraLabels` | Labels to add to the Resources | `{}` | + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, + +```bash +$ helm install --name my-release \ + --set rabbitmqUsername=admin,rabbitmqPassword=secretpassword,rabbitmqErlangCookie=secretcookie \ + stable/rabbitmq-ha +``` + +The above command sets the RabbitMQ admin username and password to `admin` and +`secretpassword` respectively. Additionally the secure erlang cookie is set to +`secretcookie`. + +Alternatively, a YAML file that specifies the values for the parameters can be +provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/rabbitmq-ha +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +### Custom ConfigMap + +When creating a new chart with this chart as a dependency, `customConfigMap` +can be used to override the default configmap.yaml provided. It also allows for +providing additional configuration files that will be mounted into +`/etc/rabbitmq`. In the parent chart's values.yaml, set the value to true and +provide the file `templates/configmap.yaml` for your use case. + +Example of using RabbitMQ definition to setup users, permissions or policies: + +``` +apiVersion: v1 +kind: ConfigMap +metadata: + name: my-release-rabbitmq-ha +data: + enabled_plugins: | + [ + rabbitmq_consistent_hash_exchange, + rabbitmq_federation, + rabbitmq_federation_management, + rabbitmq_management, + rabbitmq_peer_discovery_k8s, + rabbitmq_shovel, + rabbitmq_shovel_management + ]. + rabbitmq.conf: | + # .... + management.load_definitions = /etc/rabbitmq/definitions.json + definitions.json: | + { + "permissions": [], + "users": [], + "policies: [] + } +``` + +Then, install the chart with the above configuration: + +``` +$ helm install --name my-release --set customConfigMap=true stable/rabbitmq-ha +``` + +### Custom Secret + +Similar to custom ConfigMap, `existingSecret` can be used to override the default secret.yaml provided, and +`rabbitmqCert.existingSecret` can be used to override the default certificates. + +### Prometheus Monitoring & Alerts + +Prometheus and its features can be enabled by setting `prometheus.enabled` to `true`. See values.yaml for more details and configuration options + +## Limitations diff --git a/stable/ibm-rabbitmq-ha/RELEASENOTES.md b/stable/ibm-rabbitmq-ha/RELEASENOTES.md new file mode 100755 index 0000000..2ae2735 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version + + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 1.6.3 | Sept 12, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-rabbitmq-ha/templates/NOTES.txt b/stable/ibm-rabbitmq-ha/templates/NOTES.txt new file mode 100755 index 0000000..92fbcac --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/NOTES.txt @@ -0,0 +1,92 @@ +** Please be patient while the chart is being deployed ** + + Credentials: + + Username : {{ .Values.rabbitmqUsername }} + {{ if .Values.existingSecret }} + Password : $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "rabbitmq-ha.secretName" . }} -o jsonpath="{.data.rabbitmq-password}" | base64 --decode) + ErLang Cookie : $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "rabbitmq-ha.secretName" . }} -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 --decode) + {{ else }} + Password : $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "rabbitmq-ha.fullname" . }} -o jsonpath="{.data.rabbitmq-password}" | base64 --decode) + ErLang Cookie : $(kubectl get secret --namespace {{ .Release.Namespace }} {{ template "rabbitmq-ha.fullname" . }} -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 --decode) + {{ end }} + + RabbitMQ can be accessed within the cluster on port {{ .Values.rabbitmqNodePort }} at {{ template "rabbitmq-ha.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local + + To access for outside the cluster execute the following commands: + +{{- if contains "NodePort" .Values.service.type }} + + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[?(@.type=='ExternalIP')].address}") + export NODE_PORT_AMQP=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath='{.spec.ports[?(@.name=="amqp")].nodePort}' services {{ template "rabbitmq-ha.fullname" . }}) + {{- if .Values.rabbitmqAmqpsSupport.enabled }} + export NODE_PORT_AMQPS=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath='{.spec.ports[?(@.name=="amqps")].nodePort}' services {{ template "rabbitmq-ha.fullname" . }}) + {{- end }} + export NODE_PORT_STATS=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath='{.spec.ports[?(@.name=="http")].nodePort}' services {{ template "rabbitmq-ha.fullname" . }}) + + To Access the RabbitMQ AMQP port: + + amqp://$NODE_IP:$NODE_PORT_AMQP/ + +{{- if .Values.rabbitmqAmqpsSupport.enabled }} + To Access the RabbitMQ AMQPS port: + + amqps://$NODE_IP:$NODE_PORT_AMQPS/ +{{- end }} + + To Access the RabbitMQ Management interface: + + http://$NODE_IP:$NODE_PORT_STATS/ + +{{- else if contains "LoadBalancer" .Values.service.type }} + + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + Watch the status with: 'kubectl get svc --namespace {{ .Release.Namespace }} -w {{ template "rabbitmq-ha.name" . }}' + + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "rabbitmq-ha.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + {{- if .Values.rabbitmqAmqpsSupport.enabled }} + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "rabbitmq-ha.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[1].ip}') + {{- end }} + + To Access the RabbitMQ AMQP port: + + amqp://$SERVICE_IP:{{ .Values.rabbitmqNodePort }}/ + +{{- if .Values.rabbitmqAmqpsSupport.enabled }} + To Access the RabbitMQ AMQPS port: + + amqps://$SERVICE_IP:{{ .Values.rabbitmqAmqpsSupport.amqpsNodePort }}/ +{{- end }} + + To Access the RabbitMQ Management interface: + + http://$SERVICE_IP:{{ .Values.rabbitmqManagerPort }}/ + +{{- else if contains "ClusterIP" .Values.service.type }} + + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "rabbitmq-ha.name" . }}" -o jsonpath="{.items[0].metadata.name}") + kubectl port-forward $POD_NAME --namespace {{ .Release.Namespace }} {{ .Values.rabbitmqNodePort }}:{{ .Values.rabbitmqNodePort }} {{ .Values.rabbitmqManagerPort }}:{{ .Values.rabbitmqManagerPort }} + {{- if .Values.rabbitmqAmqpsSupport.enabled }} + kubectl port-forward $POD_NAME --namespace {{ .Release.Namespace }} {{ .Values.rabbitmqAmqpsSupport.amqpsNodePort }}:{{ .Values.rabbitmqAmqpsSupport.amqpsNodePort }} + {{- end }} + + To Access the RabbitMQ AMQP port: + + amqp://127.0.0.1:{{ .Values.rabbitmqNodePort }}/ + +{{- if .Values.rabbitmqAmqpsSupport.enabled }} + To Access the RabbitMQ AMQPS port: + + amqps://127.0.0.1:{{ .Values.rabbitmqAmqpsSupport.amqpsNodePort }}/ +{{- end }} + + To Access the RabbitMQ Management interface: + + URL : http://127.0.0.1:{{ .Values.rabbitmqManagerPort }} +{{- end }} + + +To enable mirroring for all the host: + + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "rabbitmq-ha.name" . }}" -o jsonpath="{.items[0].metadata.name}") + kubectl exec $POD_NAME --namespace {{ .Release.Namespace }} -- rabbitmqctl set_policy ha-all "." '{"ha-mode":"all", "ha-sync-mode":"automatic"}' --apply-to all --priority 0 diff --git a/stable/ibm-rabbitmq-ha/templates/_helpers.tpl b/stable/ibm-rabbitmq-ha/templates/_helpers.tpl new file mode 100755 index 0000000..7fbce2c --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/_helpers.tpl @@ -0,0 +1,50 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "rabbitmq-ha.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 "rabbitmq-ha.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 -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "rabbitmq-ha.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (include "rabbitmq-ha.fullname" .) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Generate chart secret name +*/}} +{{- define "rabbitmq-ha.secretName" -}} +{{ default (include "rabbitmq-ha.fullname" .) .Values.existingSecret }} +{{- end -}} + +{{/* +Generate chart ssl secret name +*/}} +{{- define "rabbitmq-ha.certSecretName" -}} +{{ default (print (include "rabbitmq-ha.fullname" .) "-cert") .Values.rabbitmqCert.existingSecret }} +{{- end -}} diff --git a/stable/ibm-rabbitmq-ha/templates/alerts.yaml b/stable/ibm-rabbitmq-ha/templates/alerts.yaml new file mode 100755 index 0000000..756dacf --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/alerts.yaml @@ -0,0 +1,105 @@ +{{ if and .Values.prometheus.operator.alerts.enabled .Values.prometheus.exporter.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-rabbitmq-alerts + namespace: monitoring + labels: + app: "rabbitmq" + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- if .Values.prometheus.operator.serviceMonitor.selector }} +{{ toYaml .Values.prometheus.operator.serviceMonitor.selector | indent 4 }} +{{- end }} +{{- if .Values.prometheus.operator.alerts.selector }} +{{ toYaml .Values.prometheus.operator.alerts.selector | indent 4 }} +{{- end }} +data: + rabbitmq.rules: |- + groups: + - name: rabbitmq-alerts + rules: + - alert: RabbitMqClusterNodeDown + expr: rabbitmq_up{service="{{ template "rabbitmq-ha.fullname" . }}"} == 0 + for: 5m + labels: + installed_by: {{ .Release.Name }} + severity: critical +{{- if .Values.prometheus.operator.alerts.labels }} +{{ toYaml .Values.prometheus.operator.alerts.labels | indent 10 }} +{{- end }} + annotations: + description: RabbitMQ {{`{{ $labels.namespace }}`}}/{{`{{ $labels.pod}}`}} is down + summary: RabbitMQ Node Is Down + - alert: RabbitMqClusterNotAllNodesRunning + expr: sum(rabbitmq_up{service="{{ template "rabbitmq-ha.fullname" . }}"}) by (service) < {{ .Values.replicaCount }} + for: 5m + labels: + installed_by: {{ .Release.Name }} + severity: critical + team: devops + annotations: + description: Some RabbitMQ Cluster Nodes Are Down in Service {{`{{ $labels.namespace }}`}}/{{`{{ $labels.service}}`}} + summary: Some RabbitMQ Cluster Nodes Are Down in Service {{`{{ $labels.namespace }}`}}/{{`{{ $labels.service}}`}} + - alert: RabbitMqDiskSpaceAlarm + expr: rabbitmq_node_disk_free_alarm{service="{{ template "rabbitmq-ha.fullname" . }}"} == 1 + for: 1m + labels: + installed_by: {{ .Release.Name }} + severity: critical +{{- if .Values.prometheus.operator.alerts.labels }} +{{ toYaml .Values.prometheus.operator.alerts.labels | indent 10 }} +{{- end }} + annotations: + description: RabbitMQ {{`{{ $labels.namespace }}`}}/{{`{{ $labels.pod}}`}} Disk Space Alarm is going off. Which means the node hit highwater mark and has cut off network connectivity, see RabbitMQ WebUI + summary: RabbitMQ is Out of Disk Space + - alert: RabbitMqMemoryAlarm + expr: rabbitmq_node_mem_alarm{service="{{ template "rabbitmq-ha.fullname" . }}"} == 1 + for: 1m + labels: + installed_by: {{ .Release.Name }} + severity: critical +{{- if .Values.prometheus.operator.alerts.labels }} +{{ toYaml .Values.prometheus.operator.alerts.labels | indent 10 }} +{{- end }} + annotations: + description: RabbitMQ {{`{{ $labels.namespace }}`}}/{{`{{ $labels.pod}}`}} High Memory Alarm is going off. Which means the node hit highwater mark and has cut off network connectivity, see RabbitMQ WebUI + summary: RabbitMQ is Out of Memory + - alert: RabbitMqMemoryUsageHigh + expr: (rabbitmq_node_mem_used{service="{{ template "rabbitmq-ha.fullname" . }}"} / rabbitmq_node_mem_limit{service="{{ template "rabbitmq-ha.fullname" . }}"}) > .9 + for: 1m + labels: + installed_by: {{ .Release.Name }} + severity: critical +{{- if .Values.prometheus.operator.alerts.labels }} +{{ toYaml .Values.prometheus.operator.alerts.labels | indent 10 }} +{{- end }} + annotations: + description: RabbitMQ {{`{{ $labels.namespace }}`}}/{{`{{ $labels.pod}}`}} Memory Usage > 90% + summary: RabbitMQ Node > 90% Memory Usage + - alert: RabbitMqFileDescriptorsLow + expr: (rabbitmq_fd_used{service="{{ template "rabbitmq-ha.fullname" . }}"} / rabbitmq_fd_total{service="{{ template "rabbitmq-ha.fullname" . }}"}) > .9 + for: 5m + labels: + installed_by: {{ .Release.Name }} + severity: critical +{{- if .Values.prometheus.operator.alerts.labels }} +{{ toYaml .Values.prometheus.operator.alerts.labels | indent 10 }} +{{- end }} + annotations: + description: RabbitMQ {{`{{ $labels.namespace }}`}}/{{`{{ $labels.pod}}`}} File Descriptor Usage > 90% + summary: RabbitMQ Low File Descriptor Available + - alert: RabbitMqDiskSpaceLow + expr: predict_linear(rabbitmq_node_disk_free{service="{{ template "rabbitmq-ha.fullname" . }}"}[15m], 1 * 60 * 60) < rabbitmq_node_disk_free_limit{service="{{ template "rabbitmq-ha.fullname" . }}"} + for: 5m + labels: + installed_by: {{ .Release.Name }} + severity: critical +{{- if .Values.prometheus.operator.alerts.labels }} +{{ toYaml .Values.prometheus.operator.alerts.labels | indent 10 }} +{{- end }} + annotations: + description: RabbitMQ {{`{{ $labels.namespace }}`}}/{{`{{ $labels.pod}}`}} will hit disk limit in the next hr based on last 15 mins trend. + summary: RabbitMQ is Low on Disk Space and will Run Out in the next hour +{{ end }} diff --git a/stable/ibm-rabbitmq-ha/templates/configmap.yaml b/stable/ibm-rabbitmq-ha/templates/configmap.yaml new file mode 100755 index 0000000..bb7aad7 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/configmap.yaml @@ -0,0 +1,106 @@ +{{- if not .Values.existingConfigMap }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "rabbitmq-ha.fullname" . }} + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} +data: + enabled_plugins: | + [ + {{- if .Values.rabbitmqLDAPPlugin.enabled }} + rabbitmq_auth_backend_ldap, + {{- end }} + + {{- if .Values.rabbitmqMQTTPlugin.enabled }} + rabbitmq_mqtt, + {{- end }} + + {{- if .Values.rabbitmqWebMQTTPlugin.enabled }} + rabbitmq_web_mqtt, + {{- end }} + + {{- if .Values.rabbitmqSTOMPPlugin.enabled }} + rabbitmq_stomp, + {{- end }} + + {{- if .Values.rabbitmqWebSTOMPPlugin.enabled }} + rabbitmq_web_stomp, + {{- end }} + + {{- if .Values.rabbitmqAuth.enabled }} + rabbitmq_auth_mechanism_ssl, + {{- end }} + + rabbitmq_consistent_hash_exchange, + rabbitmq_federation, + rabbitmq_federation_management, + rabbitmq_management, + rabbitmq_peer_discovery_k8s, + rabbitmq_shovel, + rabbitmq_shovel_management + ]. + + rabbitmq.conf: | + ## RabbitMQ configuration + ## Ref: https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example + + ## Authentification + {{- if .Values.rabbitmqAuth.enabled }} +{{ .Values.rabbitmqAuth.config | indent 4 }} + {{- end }} + + ## Clustering + cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s + cluster_formation.k8s.host = kubernetes.default.svc.cluster.local + cluster_formation.k8s.address_type = hostname + cluster_formation.node_cleanup.interval = 10 + # Set to false if automatic cleanup of absent nodes is desired. + # This can be dangerous, see http://www.rabbitmq.com/cluster-formation.html#node-health-checks-and-cleanup. + cluster_formation.node_cleanup.only_log_warning = true + cluster_partition_handling = autoheal + + ## The default "guest" user is only permitted to access the server + ## via a loopback interface (e.g. localhost) + loopback_users.guest = false + + ## Memory-based Flow Control threshold + vm_memory_high_watermark.absolute = {{ .Values.rabbitmqMemoryHighWatermark }} + + ## LDAP Plugin + {{- if .Values.rabbitmqLDAPPlugin.enabled }} +{{ .Values.rabbitmqLDAPPlugin.config | indent 4 }} + {{- end }} + + ## MQTT Plugin + {{- if .Values.rabbitmqMQTTPlugin.enabled }} +{{ .Values.rabbitmqMQTTPlugin.config | indent 4 }} + {{- end }} + + ## Web MQTT Plugin + {{- if .Values.rabbitmqWebMQTTPlugin.enabled }} +{{ .Values.rabbitmqWebMQTTPlugin.config | indent 4 }} + {{- end }} + + ## STOMP Plugin + {{- if .Values.rabbitmqSTOMPPlugin.enabled }} +{{ .Values.rabbitmqSTOMPPlugin.config | indent 4 }} + {{- end }} + + ## Web STOMP Plugin + {{- if .Values.rabbitmqWebSTOMPPlugin.enabled }} +{{ .Values.rabbitmqWebSTOMPPlugin.config | indent 4 }} + {{- end }} + + ## AMQPS support + {{- if .Values.rabbitmqAmqpsSupport.enabled }} +{{ .Values.rabbitmqAmqpsSupport.config | indent 4 }} + {{- end }} + +{{- end }} diff --git a/stable/ibm-rabbitmq-ha/templates/ingress.yaml b/stable/ibm-rabbitmq-ha/templates/ingress.yaml new file mode 100755 index 0000000..f9d6831 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/ingress.yaml @@ -0,0 +1,36 @@ +{{- if .Values.ingress.enabled }} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ template "rabbitmq-ha.fullname" . }} + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + annotations: + {{- range $key, $value := .Values.ingress.annotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} +spec: + rules: + {{- if .Values.ingress.hostName }} + - host: {{ .Values.ingress.hostName }} + http: + {{- else }} + - http: + {{- end }} + paths: + - path: {{ .Values.ingress.path }} + backend: + serviceName: {{ template "rabbitmq-ha.fullname" . }} + servicePort: {{ .Values.rabbitmqManagerPort }} +{{- if .Values.ingress.tls }} + tls: + - secretName: {{ .Values.ingress.tlsSecret }} + {{- if .Values.ingress.hostName }} + hosts: + - {{ .Values.ingress.hostName }} + {{- end }} +{{- end }} +{{- end }} diff --git a/stable/ibm-rabbitmq-ha/templates/role.yaml b/stable/ibm-rabbitmq-ha/templates/role.yaml new file mode 100755 index 0000000..0428306 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/role.yaml @@ -0,0 +1,18 @@ +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: Role +metadata: + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: {{ .Release.Name | quote }} + heritage: {{ .Release.Service | quote }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "rabbitmq-ha.fullname" . }} +rules: + - apiGroups: [""] + resources: ["endpoints"] + verbs: ["get"] +{{- end }} diff --git a/stable/ibm-rabbitmq-ha/templates/rolebinding.yaml b/stable/ibm-rabbitmq-ha/templates/rolebinding.yaml new file mode 100755 index 0000000..0969e3c --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/rolebinding.yaml @@ -0,0 +1,21 @@ +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: RoleBinding +metadata: + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: {{ .Release.Name | quote }} + heritage: {{ .Release.Service | quote }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "rabbitmq-ha.fullname" . }} +subjects: + - kind: ServiceAccount + name: {{ template "rabbitmq-ha.serviceAccountName" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ template "rabbitmq-ha.fullname" . }} +{{- end }} diff --git a/stable/ibm-rabbitmq-ha/templates/secret.yaml b/stable/ibm-rabbitmq-ha/templates/secret.yaml new file mode 100755 index 0000000..0d78cce --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/secret.yaml @@ -0,0 +1,46 @@ +{{ if not .Values.existingSecret }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "rabbitmq-ha.fullname" . }} + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} +type: Opaque +data: + {{ if .Values.rabbitmqPassword }} + rabbitmq-password: {{ .Values.rabbitmqPassword | b64enc | quote }} + {{ else }} + rabbitmq-password: {{ randAscii 24 | nospace | b64enc | quote }} + {{ end }} + {{ if .Values.rabbitmqErlangCookie }} + rabbitmq-erlang-cookie: {{ .Values.rabbitmqErlangCookie | b64enc | quote }} + {{ else }} + rabbitmq-erlang-cookie: {{ randAlphaNum 32 | b64enc | quote }} + {{ end }} +{{ end }} +{{- if and .Values.rabbitmqCert.enabled (not .Values.rabbitmqCert.existingSecret) }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "rabbitmq-ha.fullname" . }}-cert + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} +type: Opaque +data: + cacert.pem: {{ .Values.rabbitmqCert.cacertfile | quote }} + cert.pem: {{ .Values.rabbitmqCert.certfile | quote }} + key.pem: {{ .Values.rabbitmqCert.keyfile | quote }} +{{- end }} diff --git a/stable/ibm-rabbitmq-ha/templates/service-discovery.yaml b/stable/ibm-rabbitmq-ha/templates/service-discovery.yaml new file mode 100755 index 0000000..7aed2e2 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/service-discovery.yaml @@ -0,0 +1,70 @@ +apiVersion: v1 +kind: Service +metadata: +{{- if .Values.service.annotations }} + annotations: +{{ toYaml .Values.service.annotations | indent 4 }} +{{- end }} + name: {{ template "rabbitmq-ha.fullname" . }}-discovery + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + clusterIP: None + ports: + - name: http + protocol: TCP + port: {{ .Values.rabbitmqManagerPort }} + targetPort: http + - name: amqp + protocol: TCP + port: {{ .Values.rabbitmqNodePort }} + targetPort: amqp + - name: epmd + protocol: TCP + port: {{ .Values.rabbitmqEpmdPort }} + targetPort: epmd + {{- if .Values.rabbitmqSTOMPPlugin.enabled }} + - name: stomp-tcp + protocol: TCP + port: 61613 + targetPort: stomp-tcp + - name: stomp-ssl + protocol: TCP + port: 61614 + targetPort: stomp-ssl + {{- end }} + {{- if .Values.rabbitmqWebSTOMPPlugin.enabled }} + - name: stomp-ws + protocol: TCP + port: 15674 + targetPort: stomp-ws + {{- end }} + {{- if .Values.rabbitmqMQTTPlugin.enabled }} + - name: mqtt-tcp + protocol: TCP + port: 1883 + targetPort: mqtt-tcp + - name: mqtt-ssl + protocol: TCP + port: 8883 + targetPort: mqtt-ssl + {{- end }} + {{- if .Values.rabbitmqWebMQTTPlugin.enabled }} + - name: mqtt-ws + protocol: TCP + port: 15675 + targetPort: mqtt-ws + {{- end }} + {{- if .Values.rabbitmqAmqpsSupport.enabled }} + - name: amqps + protocol: TCP + port: {{ .Values.rabbitmqAmqpsSupport.amqpsNodePort }} + targetPort: amqps + {{- end }} + selector: + app: {{ template "rabbitmq-ha.name" . }} + release: {{ .Release.Name }} + type: ClusterIP diff --git a/stable/ibm-rabbitmq-ha/templates/service.yaml b/stable/ibm-rabbitmq-ha/templates/service.yaml new file mode 100755 index 0000000..f243531 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/service.yaml @@ -0,0 +1,90 @@ +apiVersion: v1 +kind: Service +metadata: +{{- if .Values.service.annotations }} + annotations: +{{ toYaml .Values.service.annotations | indent 4 }} +{{- end }} + name: {{ template "rabbitmq-ha.fullname" . }} + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} +spec: + clusterIP: "{{ .Values.service.clusterIP }}" +{{- if .Values.service.externalIPs }} + externalIPs: +{{ toYaml .Values.service.externalIPs | indent 4 }} +{{- end }} +{{- if .Values.service.loadBalancerIP }} + loadBalancerIP: "{{ .Values.service.loadBalancerIP }}" +{{- end }} +{{- if .Values.service.loadBalancerSourceRanges }} + loadBalancerSourceRanges: +{{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }} +{{- end }} + ports: + - name: http + protocol: TCP + port: {{ .Values.rabbitmqManagerPort }} + targetPort: http + - name: amqp + protocol: TCP + port: {{ .Values.rabbitmqNodePort }} + targetPort: amqp + - name: epmd + protocol: TCP + port: {{ .Values.rabbitmqEpmdPort }} + targetPort: epmd + {{- if .Values.rabbitmqSTOMPPlugin.enabled }} + - name: stomp-tcp + protocol: TCP + port: 61613 + targetPort: stomp-tcp + - name: stomp-ssl + protocol: TCP + port: 61614 + targetPort: stomp-ssl + {{- end }} + {{- if .Values.rabbitmqWebSTOMPPlugin.enabled }} + - name: stomp-ws + protocol: TCP + port: 15674 + targetPort: stomp-ws + {{- end }} + {{- if .Values.rabbitmqMQTTPlugin.enabled }} + - name: mqtt-tcp + protocol: TCP + port: 1883 + targetPort: mqtt-tcp + - name: mqtt-ssl + protocol: TCP + port: 8883 + targetPort: mqtt-ssl + {{- end }} + {{- if .Values.rabbitmqWebMQTTPlugin.enabled }} + - name: mqtt-ws + protocol: TCP + port: 15675 + targetPort: mqtt-ws + {{- end }} + {{- if .Values.rabbitmqAmqpsSupport.enabled }} + - name: amqps + protocol: TCP + port: {{ .Values.rabbitmqAmqpsSupport.amqpsNodePort }} + targetPort: amqps + {{- end }} + {{ if .Values.prometheus.exporter.enabled }} + - name: exporter + protocol: TCP + port: {{ .Values.prometheus.exporter.port }} + targetPort: exporter + {{ end }} + selector: + app: {{ template "rabbitmq-ha.name" . }} + release: {{ .Release.Name }} + type: {{ .Values.service.type }} diff --git a/stable/ibm-rabbitmq-ha/templates/serviceaccount.yaml b/stable/ibm-rabbitmq-ha/templates/serviceaccount.yaml new file mode 100755 index 0000000..f0bbefe --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/serviceaccount.yaml @@ -0,0 +1,14 @@ +{{- if .Values.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: {{ .Release.Name | quote }} + heritage: {{ .Release.Service | quote }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} + name: {{ template "rabbitmq-ha.serviceAccountName" . }} +{{- end }} diff --git a/stable/ibm-rabbitmq-ha/templates/servicemonitor.yaml b/stable/ibm-rabbitmq-ha/templates/servicemonitor.yaml new file mode 100755 index 0000000..967e578 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/servicemonitor.yaml @@ -0,0 +1,21 @@ +{{ if and .Values.prometheus.exporter.enabled .Values.prometheus.operator.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "rabbitmq-ha.fullname" . }} + namespace: {{ .Values.prometheus.operator.serviceMonitor.namespace }} + labels: +{{- if .Values.prometheus.operator.serviceMonitor.selector }} +{{ toYaml .Values.prometheus.operator.serviceMonitor.selector | indent 4 }} +{{- end }} +spec: + selector: + matchLabels: + app: {{ template "rabbitmq-ha.name" . }} + release: {{ .Release.Name }} + endpoints: + - port: exporter + interval: {{ .Values.prometheus.operator.serviceMonitor.interval }} + namespaceSelector: + any: true +{{ end }} diff --git a/stable/ibm-rabbitmq-ha/templates/statefulset.yaml b/stable/ibm-rabbitmq-ha/templates/statefulset.yaml new file mode 100755 index 0000000..03c5b13 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/templates/statefulset.yaml @@ -0,0 +1,256 @@ +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: {{ template "rabbitmq-ha.fullname" . }} + labels: + app: {{ template "rabbitmq-ha.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 4 }} +{{- end }} +spec: + serviceName: {{ template "rabbitmq-ha.fullname" . }}-discovery + replicas: {{ .Values.replicaCount }} + updateStrategy: + type: {{ .Values.updateStrategy }} + template: + metadata: + labels: + app: {{ template "rabbitmq-ha.name" . }} + release: {{ .Release.Name }} + chart: {{ .Chart.Name }} + heritage: {{ .Release.Service }} +{{- if .Values.extraLabels }} +{{ toYaml .Values.extraLabels | indent 8 }} +{{- end }} + annotations: + {{- if not .Values.existingConfigMap }} + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + {{- end }} +{{- if and .Values.prometheus.exporter.enabled (not .Values.prometheus.operator.enabled) }} + prometheus.io/scrape: "true" + prometheus.io/port: {{ .Values.prometheus.exporter.port | quote }} +{{- end }} + spec: + terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }} + serviceAccountName: {{ template "rabbitmq-ha.serviceAccountName" . }} + initContainers: + - name: copy-rabbitmq-config + image: busybox + command: ['sh', '-c', 'cp /configmap/* /etc/rabbitmq; rm -f /var/lib/rabbitmq/.erlang.cookie'] + volumeMounts: + - name: configmap + mountPath: /configmap + - name: config + mountPath: /etc/rabbitmq + - name: {{ .Values.persistentVolume.name }} + mountPath: /var/lib/rabbitmq + containers: + - name: {{ .Chart.Name }} + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: epmd + protocol: TCP + containerPort: 4369 + - name: amqp + protocol: TCP + containerPort: 5672 + - name: http + protocol: TCP + containerPort: 15672 + {{- if .Values.rabbitmqSTOMPPlugin.enabled }} + - name: stomp-tcp + protocol: TCP + containerPort: 61613 + - name: stomp-ssl + protocol: TCP + containerPort: 61614 + {{- end }} + {{- if .Values.rabbitmqWebSTOMPPlugin.enabled }} + - name: stomp-ws + protocol: TCP + containerPort: 15674 + {{- end }} + {{- if .Values.rabbitmqMQTTPlugin.enabled }} + - name: mqtt-tcp + protocol: TCP + containerPort: 1883 + - name: mqtt-ssl + protocol: TCP + containerPort: 8883 + {{- end }} + {{- if .Values.rabbitmqWebMQTTPlugin.enabled }} + - name: mqtt-ws + protocol: TCP + containerPort: 15675 + {{- end }} + {{- if .Values.rabbitmqAmqpsSupport.enabled }} + - name: amqps + protocol: TCP + containerPort: 5671 + {{- end }} + livenessProbe: + exec: + command: + - rabbitmqctl + - status + initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} + timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }} + failureThreshold: {{ .Values.livenessProbe.failureThreshold }} + readinessProbe: + exec: + command: + - rabbitmqctl + - status + initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} + timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }} + periodSeconds: {{ .Values.readinessProbe.periodSeconds }} + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: RABBITMQ_USE_LONGNAME + value: "true" + - name: RABBITMQ_NODENAME + value: rabbit@$(MY_POD_NAME).{{ template "rabbitmq-ha.fullname" . }}-discovery.{{ .Release.Namespace }}.svc.cluster.local + - name: K8S_HOSTNAME_SUFFIX + value: .{{ template "rabbitmq-ha.fullname" . }}-discovery.{{ .Release.Namespace }}.svc.cluster.local + - name: K8S_SERVICE_NAME + value: {{ template "rabbitmq-ha.fullname" . }}-discovery + - name: RABBITMQ_ERLANG_COOKIE + valueFrom: + secretKeyRef: + name: {{ template "rabbitmq-ha.secretName" . }} + key: rabbitmq-erlang-cookie + {{- if .Values.rabbitmqHipeCompile }} + - name: RABBITMQ_HIPE_COMPILE + value: {{ .Values.rabbitmqHipeCompile | quote }} + {{- end }} + - name: RABBITMQ_DEFAULT_USER + value: {{ .Values.rabbitmqUsername | quote }} + - name: RABBITMQ_DEFAULT_PASS + valueFrom: + secretKeyRef: + name: {{ template "rabbitmq-ha.secretName" . }} + key: rabbitmq-password + - name: RABBITMQ_DEFAULT_VHOST + value: {{ .Values.rabbitmqVhost | quote }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + - name: {{ .Values.persistentVolume.name }} + mountPath: /var/lib/rabbitmq + - name: config + mountPath: /etc/rabbitmq + {{- if .Values.rabbitmqCert.enabled }} + - name: cert + mountPath: /etc/cert + {{- end }} + {{ if .Values.prometheus.exporter.enabled }} + - name: {{ .Chart.Name }}-exporter + image: {{ .Values.prometheus.exporter.image.repository }}:{{ .Values.prometheus.exporter.image.tag }} + imagePullPolicy: {{ .Values.prometheus.exporter.image.pullPolicy }} + ports: + - name: exporter + protocol: TCP + containerPort: {{ .Values.prometheus.exporter.port }} + env: + - name: RABBIT_USER + value: {{ .Values.rabbitmqUsername | quote }} + - name: RABBIT_PASSWORD + valueFrom: + secretKeyRef: + name: {{ template "rabbitmq-ha.secretName" . }} + key: rabbitmq-password + {{- range $key, $value := .Values.prometheus.exporter.env }} + - name: {{ $key }} + value: {{ $value | quote }} + {{- end }} + resources: +{{ toYaml .Values.prometheus.exporter.resources | indent 12 }} + {{ end }} + {{- if .Values.nodeSelector }} + nodeSelector: +{{ toYaml .Values.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: +{{ toYaml .Values.tolerations | indent 8 }} + {{- end }} + {{- if eq .Values.podAntiAffinity "hard" }} + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - topologyKey: "kubernetes.io/hostname" + labelSelector: + matchLabels: + app: {{ template "rabbitmq-ha.name" . }} + release: {{ .Release.Name }} + {{- else if eq .Values.podAntiAffinity "soft" }} + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchLabels: + app: {{ template "rabbitmq-ha.name" . }} + release: {{ .Release.Name }} + {{- end }} + volumes: + - name: config + emptyDir: {} + - name: configmap + configMap: + name: {{ template "rabbitmq-ha.fullname" . }} + {{- if .Values.rabbitmqCert.enabled }} + - name: cert + secret: + defaultMode: 420 + secretName: {{ template "rabbitmq-ha.certSecretName" . }} + {{- end }} +{{- if .Values.persistentVolume.enabled }} + volumeClaimTemplates: + - metadata: + name: {{ .Values.persistentVolume.name }} + annotations: + {{- range $key, $value := .Values.persistentVolume.annotations }} + {{ $key }}: {{ $value }} + {{- end }} + spec: + accessModes: + {{- range .Values.persistentVolume.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistentVolume.size | quote }} + {{- if .Values.persistentVolume.storageClass }} + {{- if (eq "-" .Values.persistentVolume.storageClass) }} + storageClassName: "" + {{- else }} + storageClassName: "{{ .Values.persistentVolume.storageClass }}" + {{- end }} + {{- end }} +{{- else }} + - name: data + emptyDir: {} +{{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-rabbitmq-ha/values-metadata.yaml b/stable/ibm-rabbitmq-ha/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-rabbitmq-ha/values.yaml b/stable/ibm-rabbitmq-ha/values.yaml new file mode 100755 index 0000000..d251728 --- /dev/null +++ b/stable/ibm-rabbitmq-ha/values.yaml @@ -0,0 +1,322 @@ +## RabbitMQ application credentials +## Ref: http://rabbitmq.com/access-control.html +## +rabbitmqUsername: guest +# rabbitmqPassword: + +## RabbitMQ default VirtualHost +## Ref: https://www.rabbitmq.com/vhosts.html +## +rabbitmqVhost: "/" + +## Erlang cookie to determine whether different nodes are allowed to communicate with each other +## Ref: https://www.rabbitmq.com/clustering.html +## +# rabbitmqErlangCookie: + +## RabbitMQ Memory high watermark +## Ref: http://www.rabbitmq.com/memory.html +## +rabbitmqMemoryHighWatermark: 256MB + +## EPMD port for peer discovery service used by RabbitMQ nodes and CLI tools +## Ref: https://www.rabbitmq.com/clustering.html +## +rabbitmqEpmdPort: 4369 + +## Node port +rabbitmqNodePort: 5672 + +## Manager port +rabbitmqManagerPort: 15672 + +## Set to true to precompile parts of RabbitMQ with HiPE, a just-in-time +## compiler for Erlang. This will increase server throughput at the cost of +## increased startup time. You might see 20-50% better performance at the cost +## of a few minutes delay at startup. +rabbitmqHipeCompile: false + +## SSL certificates +## Red: http://www.rabbitmq.com/ssl.html +rabbitmqCert: + enabled: false + + # Specifies an existing secret to be used for SSL Certs + existingSecret: "" + + ## Create a new secret using these values + cacertfile: | + certfile: | + keyfile: | + +## Authentication mechanism +## Ref: http://www.rabbitmq.com/authentication.html +rabbitmqAuth: + enabled: false + + config: | + # auth_mechanisms.1 = PLAIN + # auth_mechanisms.2 = AMQPLAIN + # auth_mechanisms.3 = EXTERNAL + +## LDAP Plugin +## Ref: http://www.rabbitmq.com/ldap.html +rabbitmqLDAPPlugin: + enabled: false + + ## LDAP configuration: + config: | + # auth_backends.1 = ldap + # auth_ldap.servers.1 = my-ldap-server + # auth_ldap.user_dn_pattern = cn=${username},ou=People,dc=example,dc=com + # auth_ldap.use_ssl = false + # auth_ldap.port = 389 + # auth_ldap.log = false + +## MQTT Plugin +## Ref: http://www.rabbitmq.com/mqtt.html +rabbitmqMQTTPlugin: + enabled: false + + ## MQTT configuration: + config: | + # mqtt.default_user = guest + # mqtt.default_pass = guest + # mqtt.allow_anonymous = true + +## Web MQTT Plugin +## Ref: http://www.rabbitmq.com/web-mqtt.html +rabbitmqWebMQTTPlugin: + enabled: false + + ## Web MQTT configuration: + config: | + # web_mqtt.ssl.port = 12345 + # web_mqtt.ssl.backlog = 1024 + # web_mqtt.ssl.certfile = /etc/cert/cacert.pem + # web_mqtt.ssl.keyfile = /etc/cert/cert.pem + # web_mqtt.ssl.cacertfile = /etc/cert/key.pem + # web_mqtt.ssl.password = changeme + +## STOMP Plugin +## Ref: http://www.rabbitmq.com/stomp.html +rabbitmqSTOMPPlugin: + enabled: false + + ## STOMP configuration: + config: | + # stomp.default_user = guest + # stomp.default_pass = guest + +## Web STOMP Plugin +## Ref: http://www.rabbitmq.com/web-stomp.html +rabbitmqWebSTOMPPlugin: + enabled: false + + ## Web STOMP configuration: + config: | + # web_stomp.ws_frame = binary + # web_stomp.cowboy_opts.max_keepalive = 10 + +## AMQPS support +## Ref: http://www.rabbitmq.com/ssl.html +rabbitmqAmqpsSupport: + enabled: false + + # NodePort + amqpsNodePort: 5671 + + # SSL configuration + config: | + # listeners.ssl.default = 5671 + # ssl_options.cacertfile = /etc/cert/cacert.pem + # ssl_options.certfile = /etc/cert/cert.pem + # ssl_options.keyfile = /etc/cert/key.pem + # ssl_options.verify = verify_peer + # ssl_options.fail_if_no_peer_cert = false + +## Number of replicas +replicaCount: 3 + +image: + repository: rabbitmq + tag: 3.7.5-alpine + pullPolicy: IfNotPresent + +## Duration in seconds the pod needs to terminate gracefully +terminationGracePeriodSeconds: 10 + +service: + annotations: {} + clusterIP: None + + ## List of IP addresses at which the service is available + ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips + ## + externalIPs: [] + + loadBalancerIP: "" + loadBalancerSourceRanges: [] + type: ClusterIP + +## Statefulsets rolling update update strategy +## Ref: https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#rolling-update +## +updateStrategy: OnDelete + +## We usually recommend not to specify default resources and to leave this as +## a conscious choice for the user. This also increases chances charts run on +## environments with little resources, such as Minikube. If you do want to +## specify resources, uncomment the following lines, adjust them as necessary, +## and remove the curly braces after 'resources:'. +## If you decide to set the memory limit, make sure to also change the +## rabbitmqMemoryHighWatermark following the formula: +## rabbitmqMemoryHighWatermark = 0.4 * resources.limits.memory +## +resources: {} +# limits: +# cpu: 100m +# memory: 1Gi +# requests: +# cpu: 100m +# memory: 1Gi + + +## Data Persistency +persistentVolume: + enabled: false + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + ## + # storageClass: "-" + name: data + accessModes: + - ReadWriteOnce + size: 8Gi + annotations: {} + +## Node labels for pod assignment +## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector +## +nodeSelector: {} + +node: "ppc64le" +## Node tolerations for pod assignment +## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#taints-and-tolerations-beta-feature +## +tolerations: [] + +## Pod affinity +## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +podAntiAffinity: soft + +## Create default configMap +## +existingConfigMap: false + +## Add additional labels to all resources +## +extraLabels: {} + +## Role Based Access +## Ref: https://kubernetes.io/docs/admin/authorization/rbac/ +## +rbac: + create: true + +## Service Account +## Ref: https://kubernetes.io/docs/admin/service-accounts-admin/ +## +serviceAccount: + create: true + + ## The name of the ServiceAccount to use. + ## If not set and create is true, a name is generated using the fullname template + # name: + +ingress: + ## Set to true to enable ingress record generation + enabled: false + + path: / + + ## The list of hostnames to be covered with this ingress record. + ## Most likely this will be just one host, but in the event more hosts are needed, this is an array + ## hostName: foo.bar.com + + ## Set this to true in order to enable TLS on the ingress record + tls: false + + ## If TLS is set to true, you must declare what secret will store the key/certificate for TLS + tlsSecret: myTlsSecret + + ## Ingress annotations done as key:value pairs + annotations: + # kubernetes.io/ingress.class: nginx + +livenessProbe: + initialDelaySeconds: 120 + timeoutSeconds: 5 + failureThreshold: 6 + +readinessProbe: + initialDelaySeconds: 10 + timeoutSeconds: 3 + periodSeconds: 5 + +# Specifies an existing secret to be used for RMQ password and Erlang Cookie +existingSecret: "" + +prometheus: + ## Configures Prometheus Exporter to expose and scrape stats. + exporter: + enabled: false + env: {} + image: + repository: kbudde/rabbitmq-exporter + tag: v0.28.0 + pullPolicy: IfNotPresent + + ## Port Prometheus scrapes for metrics + port: 9090 + + ## Allow overriding of container resources + resources: {} + # limits: + # cpu: 200m + # memory: 1Gi + # requests: + # cpu: 100m + # memory: 100Mi + + ## Prometheus is using Operator. Setting to true will create Operator specific resources like ServiceMonitors and Alerts + operator: + ## Are you using Prometheus Operator? [Blog Post](https://coreos.com/blog/the-prometheus-operator.html) + enabled: true + + ## Configures Alerts, which will be setup via Prometheus Operator / ConfigMaps. + alerts: + ## Prometheus exporter must be enabled as well + enabled: true + + ## Selector must be configured to match Prometheus Install, defaulting to whats done by Prometheus Operator + ## See [CoreOS Prometheus Chart](https://github.com/coreos/prometheus-operator/tree/master/helm) + selector: + role: alert-rules + labels: {} + + serviceMonitor: + ## Interval at which Prometheus scrapes RabbitMQ Exporter + interval: 10s + + # Namespace Prometheus is installed in + namespace: monitoring + + ## Defaults to whats used if you follow CoreOS [Prometheus Install Instructions](https://github.com/coreos/prometheus-operator/tree/master/helm#tldr) + ## [Prometheus Selector Label](https://github.com/coreos/prometheus-operator/blob/master/helm/prometheus/templates/prometheus.yaml#L65) + ## [Kube Prometheus Selector Label](https://github.com/coreos/prometheus-operator/blob/master/helm/kube-prometheus/values.yaml#L298) + selector: + prometheus: kube-prometheus diff --git a/stable/ibm-redis-ha/Chart.yaml b/stable/ibm-redis-ha/Chart.yaml new file mode 100755 index 0000000..a9c0b5f --- /dev/null +++ b/stable/ibm-redis-ha/Chart.yaml @@ -0,0 +1,22 @@ +appVersion: 4.0.8-r0 +description: Highly available Redis cluster with multiple sentinels and standbys. +engine: gotpl +home: http://redis.io/ +icon: https://upload.wikimedia.org/wikipedia/en/thumb/6/6b/Redis_Logo.svg/1200px-Redis_Logo.svg.png +keywords: +- redis +- keyvalue +- database +- Limited +- ppc64le +- Tools +- ICP +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +name: ibm-redis-ha +sources: +- https://github.com/smileisak/docker-images/tree/master/redis +- https://github.com/diegocn/docker-images/tree/master/redis +tillerVersion: '>=2.7.2' +version: 2.2.1 diff --git a/stable/ibm-redis-ha/LICENSE b/stable/ibm-redis-ha/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-redis-ha/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-redis-ha/README.md b/stable/ibm-redis-ha/README.md new file mode 100755 index 0000000..3dc0956 --- /dev/null +++ b/stable/ibm-redis-ha/README.md @@ -0,0 +1,122 @@ +## Chart Details +# Redis + +[Redis](http://redis.io/) is an advanced key-value cache and store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets, sorted sets, bitmaps and hyperloglogs. + +## TL;DR; + +```bash +$ helm install stable/redis-ha +``` + +By default this chart install one master pod containing redis master container and sentinel container, 2 sentinels and 1 redis slave. + +## Introduction + +This chart bootstraps a [Redis](https://github.com/bitnami/bitnami-docker-redis) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Prerequisites + +- Kubernetes 1.5+ with Beta APIs enabled +- PV provisioner support in the underlying infrastructure + +## Installing the Chart + +To install the chart + +```bash +$ helm install stable/redis-ha +``` + +The command deploys Redis on the Kubernetes cluster in the default configuration. By default this chart install one master pod containing redis master container and sentinel container, 2 sentinels and 1 redis slave. The [configuration](#configuration) section lists the parameters that can be configured during installation. + +> **Tip**: List all releases using `helm list` + +## Uninstalling the Chart + +To uninstall/delete the deployment: + +```bash +$ helm delete +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Appliance mode + +This chart can be used to launch Redis in a black box appliance mode that you can think of like a managed service. To run as an appliance, change the service type for the master and slave LBs to enable local access from within the K8S cluster. + +To launch in VPC-only appliance mode, set appliance.serviceType to "LoadBalancer". If using appliance mode in Google Cloud, set appliance.annotations to: +`cloud.google.com/load-balancer-type:Internal` + +```bash +$ helm install \ + --set="servers.annotations.cloud\.google\.com/load-balancer-type=Internal,servers.serviceType=LoadBalancer" \ + stable/redis-ha +``` + +## Configuration + +The following table lists the configurable parameters of the Redis chart and their default values. + +| Parameter | Description | Default | +| -------------------------------- | ----------------------------------------------------- | --------------------------------------------------------- | +| `redis_image` | Redis image | `quay.io/smile/redis:4.0.6r2` | +| `resources.server` | CPU/Memory for master/slave nodes resource requests/limits | Memory: `200Mi`, CPU: `100m` | +| `resources.sentinel` | CPU/Memory for sentinel node resource requests/limits | Memory: `200Mi`, CPU: `100m` | +| `replicas.servers` | Number of redis master/slave pods | 3 | +| `replicas.sentinels` | Number of sentinel pods | 3 | +| `nodeSelector` | Node labels for pod assignment | {} | +| `tolerations` | Toleration labels for pod assignment | [] | +| `sentinelAffinity` | Affinity for pod assignment of sentinels | hard antiaffinity between sentinels | +| `serverAffinity` | Affinity for pod assignment of servers | hard antiaffinity between servers | +| `servers.serviceType` | Set to "LoadBalancer" to enable access from the VPC | ClusterIP | +| `servers.annotations` | See Appliance mode | `` | +| `rbac.create` | whether RBAC resources should be created | true | +| `serviceAccount.create` | whether a new service account name that the agent will use should be created. | true | +| `serviceAccount.name` | service account to be used. If not set and serviceAccount.create is `true` a name is generated using the fullname template. | `` | + + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, + +```bash +$ helm install \ + --set redis_image=quay.io/smile/redis:4.0.6r2 \ + stable/redis-ha +``` + +The above command sets the Redis server within `default` namespace. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install -f values.yaml stable/redis-ha +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Internals +The customized Redis server image determines whether the pod that executes it will be a Redis Sentinel, +Master, or Slave and launches the appropriate service. This Helm chart signals Sentinel status with +environment variables. If not set, the newly launched pod will query K8S for an active master. If none +exists, it uses a deterministic means of sensing whether it should launch as master then writes "master" +or "slave" to the label called redis-role as appropriate. It's this label that determines which LB a pod +can be seen through. + +The redis-role=master pod is the key for the cluster to get started. Sentinels will wait for it to appear +in the LB before they finish launching. All other pods wait for the Sentinels to ID the master. Running +Pods also set the labels podIP and runID. runID is the first few characters of the unique run_id value +generated by each Redis server. + +During normal operation, there should be only one redis-role=master pod. If it fails, the Sentinels +will nominate a new master and change all the redis-role values appropriately. + +To see the pod roles, run the following: + +```bash +$ kubectl get pods -L redis-role +``` +## Limitations diff --git a/stable/ibm-redis-ha/RELEASENOTES.md b/stable/ibm-redis-ha/RELEASENOTES.md new file mode 100755 index 0000000..c0d198b --- /dev/null +++ b/stable/ibm-redis-ha/RELEASENOTES.md @@ -0,0 +1,16 @@ +# Release Notes + +## What's new in Chart Version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 1.0.0 | March 21, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-redis-ha/templates/NOTES.txt b/stable/ibm-redis-ha/templates/NOTES.txt new file mode 100755 index 0000000..fff018d --- /dev/null +++ b/stable/ibm-redis-ha/templates/NOTES.txt @@ -0,0 +1,26 @@ +Redis cluster can be accessed via port 6379 on the following DNS name from within your cluster: +{{ template "redis-ha.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local + +To connect to your Redis server: + +{{- if .Values.auth }} +1. Get the randomly generated redis password: + + echo $(kubectl get secret {{ template "redis-ha.fullname" . }} -o "jsonpath={.data['auth']}" | base64 -D) + +2. Connect to the Redis master pod that you can use as a client: + + kubectl exec -it $(kubectl get pod -o jsonpath='{range .items[*]}{.metadata.name} {.status.containerStatuses[0].state}{"\n"}{end}' -l redis-role=master | grep running | awk '{print $1}') bash + +3. Connect using the Redis CLI (inside container): + + redis-cli -a +{{- else }} +1. Run a Redis pod that you can use as a client: + + kubectl exec -it $(kubectl get pod -o jsonpath='{range .items[*]}{.metadata.name} {.status.containerStatuses[0].state}{"\n"}{end}' -l redis-role=master | grep running | awk '{print $1}') bash + +2. Connect using the Redis CLI: + + redis-cli -h {{ template "redis-ha.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local +{{- end }} diff --git a/stable/ibm-redis-ha/templates/_helpers.tpl b/stable/ibm-redis-ha/templates/_helpers.tpl new file mode 100755 index 0000000..34148ee --- /dev/null +++ b/stable/ibm-redis-ha/templates/_helpers.tpl @@ -0,0 +1,58 @@ +{{/* vim: set filetype=mustache: */}} + +{{/* +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). +*/}} +{{- define "redis-ha.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). +*/}} +{{- define "redis-ha.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + + +{{- /* +Credit: @technosophos +https://github.com/technosophos/common-chart/ +labels.standard prints the standard Helm labels. +The standard labels are frequently used in metadata. +*/ -}} +{{- define "labels.standard" -}} +app: {{ template "redis-ha.name" . }} +heritage: {{ .Release.Service | quote }} +release: {{ .Release.Name | quote }} +chart: {{ template "chartref" . }} +{{- end -}} + +{{- /* +Credit: @technosophos +https://github.com/technosophos/common-chart/ +chartref prints a chart name and version. +It does minimal escaping for use in Kubernetes labels. +Example output: + zookeeper-1.2.3 + wordpress-3.2.1_20170219 +*/ -}} +{{- define "chartref" -}} + {{- replace "+" "_" .Chart.Version | printf "%s-%s" .Chart.Name -}} +{{- end -}} + + +{{/* +Create the name of the service account to use +*/}} +{{- define "redis-ha.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (include "redis-ha.fullname" .) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + diff --git a/stable/ibm-redis-ha/templates/redis-auth-secret.yaml b/stable/ibm-redis-ha/templates/redis-auth-secret.yaml new file mode 100755 index 0000000..dab23a6 --- /dev/null +++ b/stable/ibm-redis-ha/templates/redis-auth-secret.yaml @@ -0,0 +1,15 @@ +{{- if .Values.auth -}} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "redis-ha.fullname" . }} + labels: +{{ include "labels.standard" . | indent 4 }} +type: Opaque +data: + {{- if .Values.redisPassword }} + auth: {{ .Values.redisPassword | b64enc | quote }} + {{- else }} + auth: {{ randAlphaNum 10 | b64enc | quote }} + {{- end }} +{{- end -}} diff --git a/stable/ibm-redis-ha/templates/redis-master-service.yaml b/stable/ibm-redis-ha/templates/redis-master-service.yaml new file mode 100755 index 0000000..464fd16 --- /dev/null +++ b/stable/ibm-redis-ha/templates/redis-master-service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "redis-ha.fullname" . }}-master-svc + labels: +{{ include "labels.standard" . | indent 4 }} + annotations: +{{ toYaml .Values.servers.annotations | indent 4 }} +spec: + ports: + - port: 6379 + protocol: TCP + targetPort: 6379 + selector: + app: {{ template "redis-ha.name" . }} + release: "{{ .Release.Name }}" + redis-node: "true" + redis-role: "master" + type: "{{ .Values.servers.serviceType }}" diff --git a/stable/ibm-redis-ha/templates/redis-role.yaml b/stable/ibm-redis-ha/templates/redis-role.yaml new file mode 100755 index 0000000..bac0452 --- /dev/null +++ b/stable/ibm-redis-ha/templates/redis-role.yaml @@ -0,0 +1,17 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: Role +metadata: + name: {{ template "redis-ha.fullname" . }} + labels: +{{ include "labels.standard" . | indent 4 }} +rules: +- apiGroups: + - "" + resources: + - pods + verbs: + - get + - list + - patch +{{- end -}} diff --git a/stable/ibm-redis-ha/templates/redis-rolebinding.yaml b/stable/ibm-redis-ha/templates/redis-rolebinding.yaml new file mode 100755 index 0000000..4764c68 --- /dev/null +++ b/stable/ibm-redis-ha/templates/redis-rolebinding.yaml @@ -0,0 +1,15 @@ +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: RoleBinding +metadata: + name: {{ template "redis-ha.fullname" . }} + labels: +{{ include "labels.standard" . | indent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ template "redis-ha.fullname" . }} +subjects: +- kind: ServiceAccount + name: {{ template "redis-ha.serviceAccountName" . }} +{{- end -}} diff --git a/stable/ibm-redis-ha/templates/redis-sentinel-deployment.yaml b/stable/ibm-redis-ha/templates/redis-sentinel-deployment.yaml new file mode 100755 index 0000000..d12d78f --- /dev/null +++ b/stable/ibm-redis-ha/templates/redis-sentinel-deployment.yaml @@ -0,0 +1,60 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ template "redis-ha.fullname" . }}-sentinel + labels: +{{ include "labels.standard" . | indent 4 }} +spec: + replicas: {{ .Values.replicas.sentinels }} + template: + metadata: + labels: + app: {{ template "redis-ha.name" . }} + release: {{ .Release.Name }} + component: sentinel + name: {{ template "redis-ha.fullname" . }}-sentinel + heritage: {{ .Release.Service }} + chart: {{ .Chart.Name }} + spec: + serviceAccountName: {{ template "redis-ha.serviceAccountName" . }} + {{- if .Values.nodeSelector }} + nodeSelector: +{{ toYaml .Values.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: +{{ toYaml .Values.tolerations | indent 8 }} + {{- end }} + affinity: +{{ tpl .Values.sentinelAffinity . | indent 8 }} + containers: + - name: sentinel + image: {{ .Values.redis_image }} + resources: +{{ toYaml .Values.resources.sentinel | indent 10 }} + env: + - name: SENTINEL + value: "true" + - name: REDIS_CHART_PREFIX + value: {{ template "redis-ha.fullname" . }}- +{{- if .Values.auth }} + - name: REDIS_PASS + valueFrom: + secretKeyRef: + name: {{ template "redis-ha.fullname" . }} + key: auth +{{- end }} + ports: + - containerPort: 26379 +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-redis-ha/templates/redis-sentinel-service.yaml b/stable/ibm-redis-ha/templates/redis-sentinel-service.yaml new file mode 100755 index 0000000..20120b9 --- /dev/null +++ b/stable/ibm-redis-ha/templates/redis-sentinel-service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "redis-ha.fullname" . }}-sentinel + labels: + name: {{ template "redis-ha.name" . }}-sentinel-svc + role: service +{{ include "labels.standard" . | indent 4 }} +spec: + ports: + - port: 26379 + targetPort: 26379 + selector: + app: {{ template "redis-ha.name" . }} + release: "{{ .Release.Name }}" + redis-role: "sentinel" diff --git a/stable/ibm-redis-ha/templates/redis-server-deployment.yaml b/stable/ibm-redis-ha/templates/redis-server-deployment.yaml new file mode 100755 index 0000000..d9b206d --- /dev/null +++ b/stable/ibm-redis-ha/templates/redis-server-deployment.yaml @@ -0,0 +1,69 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + # Pay attention to the redis-role label at runtime. The self-determination logic in the image sets this value accordingly. + name: {{ template "redis-ha.fullname" . }}-server + labels: + name: {{ template "redis-ha.fullname" . }}-server + redis-node: "true" +{{ include "labels.standard" . | indent 4 }} +spec: + replicas: {{ .Values.replicas.servers }} + template: + metadata: + labels: + app: {{ template "redis-ha.name" . }} + release: {{ .Release.Name }} + component: server + name: {{ template "redis-ha.fullname" . }}-server + chart: {{ .Chart.Name }} + heritage: {{ .Release.Service }} + redis-node: "true" + spec: + serviceAccountName: {{ template "redis-ha.serviceAccountName" . }} + {{- if .Values.nodeSelector }} + nodeSelector: +{{ toYaml .Values.nodeSelector | indent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: +{{ toYaml .Values.tolerations | indent 8 }} + {{- end }} + affinity: +{{ tpl .Values.serverAffinity . | indent 8 }} + containers: + - name: redis + image: {{ .Values.redis_image }} + resources: +{{ toYaml .Values.resources.server | indent 10 }} + env: + - name: REDIS_SENTINEL_SERVICE_HOST + value: "redis-sentinel" + - name: REDIS_CHART_PREFIX + value: {{ template "redis-ha.fullname" . }}- +{{- if .Values.auth }} + - name: REDIS_PASS + valueFrom: + secretKeyRef: + name: {{ template "redis-ha.fullname" . }} + key: auth +{{- end }} + ports: + - containerPort: 6379 + volumeMounts: + - mountPath: /redis-master-data + name: data + volumes: + - name: data +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-redis-ha/templates/redis-serviceaccount.yaml b/stable/ibm-redis-ha/templates/redis-serviceaccount.yaml new file mode 100755 index 0000000..612783f --- /dev/null +++ b/stable/ibm-redis-ha/templates/redis-serviceaccount.yaml @@ -0,0 +1,11 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "redis-ha.serviceAccountName" . }} + labels: + app: "redis-ha" + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- end -}} diff --git a/stable/ibm-redis-ha/templates/redis-slave-service.yaml b/stable/ibm-redis-ha/templates/redis-slave-service.yaml new file mode 100755 index 0000000..beaabd9 --- /dev/null +++ b/stable/ibm-redis-ha/templates/redis-slave-service.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "redis-ha.fullname" . }}-slave-svc + labels: + role: service +{{ include "labels.standard" . | indent 4 }} + annotations: +{{ toYaml .Values.servers.annotations | indent 4 }} +spec: + ports: + - port: 6379 + protocol: TCP + targetPort: 6379 + selector: + app: {{ template "redis-ha.name" . }} + release: "{{ .Release.Name }}" + redis-node: "true" + redis-role: "slave" + type: "{{ .Values.servers.serviceType }}" diff --git a/stable/ibm-redis-ha/templates/tests/test-redis-master-service.yaml b/stable/ibm-redis-ha/templates/tests/test-redis-master-service.yaml new file mode 100755 index 0000000..39cd7b0 --- /dev/null +++ b/stable/ibm-redis-ha/templates/tests/test-redis-master-service.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +kind: Pod +metadata: + name: {{ template "redis-ha.fullname" . }}-master-service-test + labels: +{{ include "labels.standard" . | indent 4 }} + annotations: + "helm.sh/hook": test-success +spec: + containers: + - name: "{{ .Release.Name }}-master-service-test" + image: {{ .Values.redis_image }} + env: + - name: REDIS_CHART_PREFIX + value: {{ template "redis-ha.fullname" . }}- +{{- if .Values.auth }} + - name: REDIS_PASS + valueFrom: + secretKeyRef: + name: {{ template "redis-ha.fullname" . }} + key: auth + command: + - sh + - -c + - redis-cli -a $REDIS_PASS -h ${REDIS_CHART_PREFIX}master-svc info server +{{- else }} + command: + - sh + - -c + - redis-cli -h ${REDIS_CHART_PREFIX}master-svc info server +{{- end }} + restartPolicy: Never diff --git a/stable/ibm-redis-ha/templates/tests/test-redis-sentinel-service.yaml b/stable/ibm-redis-ha/templates/tests/test-redis-sentinel-service.yaml new file mode 100755 index 0000000..ab0933e --- /dev/null +++ b/stable/ibm-redis-ha/templates/tests/test-redis-sentinel-service.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +kind: Pod +metadata: + name: {{ template "redis-ha.fullname" . }}-sentinel-service-test + labels: +{{ include "labels.standard" . | indent 4 }} + annotations: + "helm.sh/hook": test-success +spec: + containers: + - name: "{{ .Release.Name }}-sentinel-service-test" + image: {{ .Values.redis_image }} + env: + - name: REDIS_CHART_PREFIX + value: {{ template "redis-ha.fullname" . }}- +{{- if .Values.auth }} + - name: REDIS_PASS + valueFrom: + secretKeyRef: + name: {{ template "redis-ha.fullname" . }} + key: auth + command: + - sh + - -c + - redis-cli -a $REDIS_PASS -h ${REDIS_CHART_PREFIX}sentinel -p 26379 info server +{{- else }} + command: + - sh + - -c + - redis-cli -h ${REDIS_CHART_PREFIX}sentinel -p 26379 info server +{{- end }} + restartPolicy: Never diff --git a/stable/ibm-redis-ha/templates/tests/test-redis-slave-service.yaml b/stable/ibm-redis-ha/templates/tests/test-redis-slave-service.yaml new file mode 100755 index 0000000..ed20eab --- /dev/null +++ b/stable/ibm-redis-ha/templates/tests/test-redis-slave-service.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +kind: Pod +metadata: + name: {{ template "redis-ha.fullname" . }}-slave-service-test + labels: +{{ include "labels.standard" . | indent 4 }} + annotations: + "helm.sh/hook": test-success +spec: + containers: + - name: "{{ .Release.Name }}-slave-service-test" + image: {{ .Values.redis_image }} + env: + - name: REDIS_CHART_PREFIX + value: {{ template "redis-ha.fullname" . }}- +{{- if .Values.auth }} + - name: REDIS_PASS + valueFrom: + secretKeyRef: + name: {{ template "redis-ha.fullname" . }} + key: auth + command: + - sh + - -c + - redis-cli -a $REDIS_PASS -h ${REDIS_CHART_PREFIX}slave-svc info server +{{- else }} + command: + - sh + - -c + - redis-cli -h ${REDIS_CHART_PREFIX}slave-svc info server +{{- end }} + restartPolicy: Never diff --git a/stable/ibm-redis-ha/values-metadata.yaml b/stable/ibm-redis-ha/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-redis-ha/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-redis-ha/values.yaml b/stable/ibm-redis-ha/values.yaml new file mode 100755 index 0000000..0736f55 --- /dev/null +++ b/stable/ibm-redis-ha/values.yaml @@ -0,0 +1,72 @@ +## Configure resource requests and limits +## ref: http://kubernetes.io/docs/user-guide/compute-resources/ +## +resources: + server: + requests: + memory: 200Mi + cpu: 100m + limits: + memory: 700Mi + sentinel: + requests: + memory: 200Mi + cpu: 100m + limits: + memory: 200Mi + +## Node labels, tolerations, and affinities for pod assignment +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#taints-and-tolerations-beta-feature +## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +nodeSelector: {} +node: "ppc64le" +tolerations: [] +sentinelAffinity: | + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchLabels: + app: {{ template "redis-ha.name" . }} + release: {{ .Release.Name | quote }} + component: sentinel + topologyKey: kubernetes.io/hostname +serverAffinity: | + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchLabels: + app: {{ template "redis-ha.name" . }} + release: {{ .Release.Name | quote }} + component: server + topologyKey: kubernetes.io/hostname + +## Redis image version +redis_image: redis:4.0.10 +## replicas number for each component +replicas: + servers: 3 + sentinels: 3 +servers: + serviceType: ClusterIP # [ClusterIP|LoadBalancer] + annotations: {} + +rbac: + # Specifies whether RBAC resources should be created + create: true + +serviceAccount: + # Specifies whether a ServiceAccount should be created + create: true + # The name of the ServiceAccount to use. + # If not set and create is true, a name is generated using the fullname template + name: + +## Configures redis with AUTH (requirepass & masterauth conf params) +auth: false + +## Redis password +## Defaults to a random 10-character alphanumeric string if not set and auth is true +## ref: https://github.com/kubernetes/charts/blob/master/stable/redis-ha/templates/redis-auth-secret.yaml +## +## redisPassword: From 393ebaae99e3fdfb1fcd1ffa5e99777ffec4ad33 Mon Sep 17 00:00:00 2001 From: snehlatamohite Date: Thu, 13 Sep 2018 05:50:11 -0700 Subject: [PATCH 6/6] Added helm charts for tidb cadvisor collectd gerrit and kaazinggateway --- repo/beta/ibm-cadvisor-0.1.0.tgz | Bin 0 -> 7920 bytes repo/beta/ibm-collectd-0.1.0.tgz | Bin 0 -> 7797 bytes repo/beta/ibm-gerrit-0.1.0.tgz | Bin 0 -> 7824 bytes repo/beta/ibm-kaazinggateway-0.1.0.tgz | Bin 0 -> 7776 bytes repo/beta/ibm-tidb-0.1.0.tgz | Bin 0 -> 7884 bytes repo/beta/index.yaml | 125 ++++++++++- stable/ibm-cadvisor/.helmignore | 21 ++ stable/ibm-cadvisor/Chart.yaml | 18 ++ stable/ibm-cadvisor/LICENSE | 202 ++++++++++++++++++ stable/ibm-cadvisor/README.md | 69 ++++++ stable/ibm-cadvisor/RELEASENOTES.md | 17 ++ stable/ibm-cadvisor/templates/NOTES.txt | 19 ++ stable/ibm-cadvisor/templates/_helpers.tpl | 32 +++ stable/ibm-cadvisor/templates/deployment.yaml | 67 ++++++ stable/ibm-cadvisor/templates/ingress.yaml | 39 ++++ stable/ibm-cadvisor/templates/service.yaml | 19 ++ stable/ibm-cadvisor/values-metadata.yaml | 14 ++ stable/ibm-cadvisor/values.yaml | 47 ++++ stable/ibm-collectd/.helmignore | 21 ++ stable/ibm-collectd/Chart.yaml | 18 ++ stable/ibm-collectd/LICENSE | 202 ++++++++++++++++++ stable/ibm-collectd/README.md | 69 ++++++ stable/ibm-collectd/RELEASENOTES.md | 17 ++ stable/ibm-collectd/templates/NOTES.txt | 19 ++ stable/ibm-collectd/templates/_helpers.tpl | 32 +++ stable/ibm-collectd/templates/deployment.yaml | 64 ++++++ stable/ibm-collectd/templates/ingress.yaml | 39 ++++ stable/ibm-collectd/templates/service.yaml | 18 ++ stable/ibm-collectd/values-metadata.yaml | 14 ++ stable/ibm-collectd/values.yaml | 45 ++++ stable/ibm-gerrit/.helmignore | 21 ++ stable/ibm-gerrit/Chart.yaml | 20 ++ stable/ibm-gerrit/LICENSE | 202 ++++++++++++++++++ stable/ibm-gerrit/README.md | 69 ++++++ stable/ibm-gerrit/RELEASENOTES.md | 17 ++ stable/ibm-gerrit/templates/NOTES.txt | 19 ++ stable/ibm-gerrit/templates/_helpers.tpl | 32 +++ stable/ibm-gerrit/templates/deployment.yaml | 66 ++++++ stable/ibm-gerrit/templates/ingress.yaml | 39 ++++ stable/ibm-gerrit/templates/service.yaml | 19 ++ stable/ibm-gerrit/values-metadata.yaml | 14 ++ stable/ibm-gerrit/values.yaml | 45 ++++ stable/ibm-kaazinggateway/.helmignore | 21 ++ stable/ibm-kaazinggateway/Chart.yaml | 19 ++ stable/ibm-kaazinggateway/LICENSE | 202 ++++++++++++++++++ stable/ibm-kaazinggateway/README.md | 69 ++++++ stable/ibm-kaazinggateway/RELEASENOTES.md | 17 ++ stable/ibm-kaazinggateway/templates/NOTES.txt | 6 + .../ibm-kaazinggateway/templates/_helpers.tpl | 32 +++ .../templates/deployment.yaml | 64 ++++++ .../ibm-kaazinggateway/templates/ingress.yaml | 39 ++++ .../ibm-kaazinggateway/templates/service.yaml | 19 ++ .../ibm-kaazinggateway/values-metadata.yaml | 14 ++ stable/ibm-kaazinggateway/values.yaml | 45 ++++ stable/ibm-tidb/.helmignore | 21 ++ stable/ibm-tidb/Chart.yaml | 21 ++ stable/ibm-tidb/LICENSE | 202 ++++++++++++++++++ stable/ibm-tidb/README.md | 68 ++++++ stable/ibm-tidb/RELEASENOTES.md | 17 ++ stable/ibm-tidb/templates/NOTES.txt | 22 ++ stable/ibm-tidb/templates/_helpers.tpl | 32 +++ stable/ibm-tidb/templates/deployment.yaml | 57 +++++ stable/ibm-tidb/templates/ingress.yaml | 39 ++++ stable/ibm-tidb/templates/service.yaml | 18 ++ stable/ibm-tidb/values-metadata.yaml | 14 ++ stable/ibm-tidb/values.yaml | 44 ++++ 66 files changed, 2911 insertions(+), 1 deletion(-) create mode 100644 repo/beta/ibm-cadvisor-0.1.0.tgz create mode 100644 repo/beta/ibm-collectd-0.1.0.tgz create mode 100644 repo/beta/ibm-gerrit-0.1.0.tgz create mode 100644 repo/beta/ibm-kaazinggateway-0.1.0.tgz create mode 100644 repo/beta/ibm-tidb-0.1.0.tgz create mode 100755 stable/ibm-cadvisor/.helmignore create mode 100755 stable/ibm-cadvisor/Chart.yaml create mode 100755 stable/ibm-cadvisor/LICENSE create mode 100644 stable/ibm-cadvisor/README.md create mode 100755 stable/ibm-cadvisor/RELEASENOTES.md create mode 100755 stable/ibm-cadvisor/templates/NOTES.txt create mode 100755 stable/ibm-cadvisor/templates/_helpers.tpl create mode 100755 stable/ibm-cadvisor/templates/deployment.yaml create mode 100755 stable/ibm-cadvisor/templates/ingress.yaml create mode 100755 stable/ibm-cadvisor/templates/service.yaml create mode 100755 stable/ibm-cadvisor/values-metadata.yaml create mode 100755 stable/ibm-cadvisor/values.yaml create mode 100755 stable/ibm-collectd/.helmignore create mode 100755 stable/ibm-collectd/Chart.yaml create mode 100755 stable/ibm-collectd/LICENSE create mode 100644 stable/ibm-collectd/README.md create mode 100755 stable/ibm-collectd/RELEASENOTES.md create mode 100755 stable/ibm-collectd/templates/NOTES.txt create mode 100755 stable/ibm-collectd/templates/_helpers.tpl create mode 100755 stable/ibm-collectd/templates/deployment.yaml create mode 100755 stable/ibm-collectd/templates/ingress.yaml create mode 100755 stable/ibm-collectd/templates/service.yaml create mode 100755 stable/ibm-collectd/values-metadata.yaml create mode 100755 stable/ibm-collectd/values.yaml create mode 100755 stable/ibm-gerrit/.helmignore create mode 100755 stable/ibm-gerrit/Chart.yaml create mode 100755 stable/ibm-gerrit/LICENSE create mode 100644 stable/ibm-gerrit/README.md create mode 100755 stable/ibm-gerrit/RELEASENOTES.md create mode 100755 stable/ibm-gerrit/templates/NOTES.txt create mode 100755 stable/ibm-gerrit/templates/_helpers.tpl create mode 100755 stable/ibm-gerrit/templates/deployment.yaml create mode 100755 stable/ibm-gerrit/templates/ingress.yaml create mode 100755 stable/ibm-gerrit/templates/service.yaml create mode 100755 stable/ibm-gerrit/values-metadata.yaml create mode 100755 stable/ibm-gerrit/values.yaml create mode 100755 stable/ibm-kaazinggateway/.helmignore create mode 100755 stable/ibm-kaazinggateway/Chart.yaml create mode 100755 stable/ibm-kaazinggateway/LICENSE create mode 100644 stable/ibm-kaazinggateway/README.md create mode 100755 stable/ibm-kaazinggateway/RELEASENOTES.md create mode 100755 stable/ibm-kaazinggateway/templates/NOTES.txt create mode 100755 stable/ibm-kaazinggateway/templates/_helpers.tpl create mode 100755 stable/ibm-kaazinggateway/templates/deployment.yaml create mode 100755 stable/ibm-kaazinggateway/templates/ingress.yaml create mode 100755 stable/ibm-kaazinggateway/templates/service.yaml create mode 100755 stable/ibm-kaazinggateway/values-metadata.yaml create mode 100755 stable/ibm-kaazinggateway/values.yaml create mode 100755 stable/ibm-tidb/.helmignore create mode 100755 stable/ibm-tidb/Chart.yaml create mode 100755 stable/ibm-tidb/LICENSE create mode 100644 stable/ibm-tidb/README.md create mode 100755 stable/ibm-tidb/RELEASENOTES.md create mode 100755 stable/ibm-tidb/templates/NOTES.txt create mode 100755 stable/ibm-tidb/templates/_helpers.tpl create mode 100755 stable/ibm-tidb/templates/deployment.yaml create mode 100755 stable/ibm-tidb/templates/ingress.yaml create mode 100755 stable/ibm-tidb/templates/service.yaml create mode 100755 stable/ibm-tidb/values-metadata.yaml create mode 100755 stable/ibm-tidb/values.yaml diff --git a/repo/beta/ibm-cadvisor-0.1.0.tgz b/repo/beta/ibm-cadvisor-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1122d8d827e797b92f7d29090331d03f71a9fe6c GIT binary patch literal 7920 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 ad);2Q*X{K+um2MO0RR7#(m-+megFWBn7=Ck literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-collectd-0.1.0.tgz b/repo/beta/ibm-collectd-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..99538f4e17b4fe455521e38eaac62964e0c35709 GIT binary patch literal 7797 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 H0DJ%dB>`c^ literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-gerrit-0.1.0.tgz b/repo/beta/ibm-gerrit-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..bb96a0addb7fc471e0f4e75103f3c5f7958a6ad6 GIT binary patch literal 7824 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 literal 0 HcmV?d00001 diff --git a/repo/beta/ibm-tidb-0.1.0.tgz b/repo/beta/ibm-tidb-0.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..96a4b4824966c5186c85de29546c528e8432c879 GIT binary patch literal 7884 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 literal 0 HcmV?d00001 diff --git a/repo/beta/index.yaml b/repo/beta/index.yaml index da56391..5259dc7 100755 --- a/repo/beta/index.yaml +++ b/repo/beta/index.yaml @@ -62,6 +62,53 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/dai-gpu-1.1.2.tgz version: 1.1.2 + ibm-cadvisor: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-13T05:46:35.664172903-07:00 + description: Analyzes resource usage and performance characteristics of running + containers. + digest: 8714f3f67cd499e06b106535cbeeae89c60f7e9b85ed8dfee888c98c3c4c48e2 + engine: gotpl + keywords: + - cadvisor + - Limited + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-cadvisor + sources: + - https://hub.docker.com/r/ibmcom/cadvisor-ppc64le/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-cadvisor-0.1.0.tgz + version: 0.1.0 + ibm-collectd: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-13T05:46:35.665108105-07:00 + description: Collectd-exporter + digest: fcc689157ff8665ba3c2944f52e164569aeaf5496453a79eab862a0f0836f739 + engine: gotpl + keywords: + - Limited + - ppc64le + - Tools + - ICP + - collectd + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-collectd + sources: + - https://hub.docker.com/r/ibmcom/collectd-exporter-ppc64le/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-collectd-0.1.0.tgz + version: 0.1.0 ibm-elasticsearch-exporter: - apiVersion: v1 appVersion: 1.0.2 @@ -88,6 +135,56 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-elasticsearch-exporter-0.2.2.tgz version: 0.2.2 + ibm-gerrit: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-13T05:46:35.666016787-07:00 + description: Basic gerrit server. + digest: 6e0b41dbbd6c971ce8ef1d82f1daa7a894dba4e76fd3af7a7a2f1f8a6467743c + engine: gotpl + keywords: + - gerrit + - Limited + - amd64 + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-gerrit + sources: + - https://hub.docker.com/r/geissonator/ubuntu-gerrit-ppc64le/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-gerrit-0.1.0.tgz + version: 0.1.0 + ibm-kaazinggateway: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-13T05:46:35.668179448-07:00 + description: The Gateway is a network gateway created to provide a single access + point for real-time web based protocol elevation that supports load balancing, + clustering, and security management. + digest: 6fa1598e45f65d0bf8c75bee95063fc302840f77026089ef82d94690bbc5a1df + engine: gotpl + keywords: + - Gateway + - Limited + - amd64 + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-kaazinggateway + sources: + - https://hub.docker.com/r/ibmcom/kaazing-gateway-ppc64le/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-kaazinggateway-0.1.0.tgz + version: 0.1.0 ibm-kube-state-metrics: - apiVersion: v1 appVersion: 1.3.1 @@ -216,4 +313,30 @@ entries: urls: - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-prometheus-pushgateway-0.1.2.tgz version: 0.1.2 -generated: 2018-09-05T03:55:49.787898663-07:00 + ibm-tidb: + - apiVersion: v1 + appVersion: "1.0" + created: 2018-09-13T05:46:35.669163106-07:00 + description: TiDB is a distributed NewSQL database compatible with MySQL protocol + digest: fe52105e26e7cf53823cd69ca67bcf6a809b027bf86a97f72efded0d008893ef + engine: gotpl + keywords: + - TiDB + - database + - MySQLProtocol + - Limited + - amd64 + - ppc64le + - Tools + - ICP + maintainers: + - email: smohite@us.ibm.com + name: IBM ISV Team + name: ibm-tidb + sources: + - https://hub.docker.com/r/ibmcom/tidb-ppc64le/ + tillerVersion: '>=2.7.2' + urls: + - https://raw.githubusercontent.com/ppc64le/charts/master/repo/beta/ibm-tidb-0.1.0.tgz + version: 0.1.0 +generated: 2018-09-13T05:46:35.662881001-07:00 diff --git a/stable/ibm-cadvisor/.helmignore b/stable/ibm-cadvisor/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-cadvisor/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-cadvisor/Chart.yaml b/stable/ibm-cadvisor/Chart.yaml new file mode 100755 index 0000000..66e8a00 --- /dev/null +++ b/stable/ibm-cadvisor/Chart.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +appVersion: "1.0" +description: Analyzes resource usage and performance characteristics of running containers. +engine: gotpl +keywords: +- cadvisor +- Limited +- ppc64le +- Tools +- ICP +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +name: ibm-cadvisor +version: 0.1.0 +sources: +- https://hub.docker.com/r/ibmcom/cadvisor-ppc64le/ +tillerVersion: '>=2.7.2' diff --git a/stable/ibm-cadvisor/LICENSE b/stable/ibm-cadvisor/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-cadvisor/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-cadvisor/README.md b/stable/ibm-cadvisor/README.md new file mode 100644 index 0000000..d3af302 --- /dev/null +++ b/stable/ibm-cadvisor/README.md @@ -0,0 +1,69 @@ +# cadvisor + +cadvisor Analyzes resource usage and performance characteristics of running containers.. + +## TL;DR; + +```console +$ helm install stable/ibm-cadvisor +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [cadvisor](https://hub.docker.com/r/ibmcom/cadvisor-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-cadvisor +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [cadvisor](https://hub.docker.com/r/ibmcom/cadvisor-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the cadvisor chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official cadvisor tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-cadvisor` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-cadvisor +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-cadvisor/RELEASENOTES.md b/stable/ibm-cadvisor/RELEASENOTES.md new file mode 100755 index 0000000..abf4226 --- /dev/null +++ b/stable/ibm-cadvisor/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.1.0 | September 12, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-cadvisor/templates/NOTES.txt b/stable/ibm-cadvisor/templates/NOTES.txt new file mode 100755 index 0000000..7a8da75 --- /dev/null +++ b/stable/ibm-cadvisor/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "cadvisor.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "cadvisor.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "cadvisor.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "cadvisor.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-cadvisor/templates/_helpers.tpl b/stable/ibm-cadvisor/templates/_helpers.tpl new file mode 100755 index 0000000..94fede5 --- /dev/null +++ b/stable/ibm-cadvisor/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "cadvisor.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 "cadvisor.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "cadvisor.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-cadvisor/templates/deployment.yaml b/stable/ibm-cadvisor/templates/deployment.yaml new file mode 100755 index 0000000..db614a4 --- /dev/null +++ b/stable/ibm-cadvisor/templates/deployment.yaml @@ -0,0 +1,67 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "cadvisor.fullname" . }} + labels: + app: {{ template "cadvisor.name" . }} + chart: {{ template "cadvisor.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "cadvisor.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "cadvisor.name" . }} + release: {{ .Release.Name }} + chart: {{ template "cadvisor.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["sh","-c","/cadvisor/src/github.com/google/cadvisor/cadvisor -logtostderr"] + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + + diff --git a/stable/ibm-cadvisor/templates/ingress.yaml b/stable/ibm-cadvisor/templates/ingress.yaml new file mode 100755 index 0000000..fecdfd0 --- /dev/null +++ b/stable/ibm-cadvisor/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "cadvisor.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "cadvisor.name" . }} + chart: {{ template "cadvisor.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-cadvisor/templates/service.yaml b/stable/ibm-cadvisor/templates/service.yaml new file mode 100755 index 0000000..e4e53cf --- /dev/null +++ b/stable/ibm-cadvisor/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "cadvisor.fullname" . }} + labels: + app: {{ template "cadvisor.name" . }} + chart: {{ template "cadvisor.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.externalPort }} + targetPort: {{ .Values.service.internalPort }} + protocol: TCP + name: {{ .Values.service.name }} + selector: + app: {{ template "cadvisor.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-cadvisor/values-metadata.yaml b/stable/ibm-cadvisor/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-cadvisor/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-cadvisor/values.yaml b/stable/ibm-cadvisor/values.yaml new file mode 100755 index 0000000..bc32fd1 --- /dev/null +++ b/stable/ibm-cadvisor/values.yaml @@ -0,0 +1,47 @@ +# Default values for cadvisor. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/cadvisor-ppc64le + tag: v0.27.1 + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 8080 + externalPort: 1027 + internalPort: 8080 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + + +node: "ppc64le" +tolerations: [] + +affinity: {} diff --git a/stable/ibm-collectd/.helmignore b/stable/ibm-collectd/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-collectd/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-collectd/Chart.yaml b/stable/ibm-collectd/Chart.yaml new file mode 100755 index 0000000..ff492d7 --- /dev/null +++ b/stable/ibm-collectd/Chart.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +appVersion: "1.0" +description: Collectd-exporter +engine: gotpl +name: ibm-collectd +keywords: + - Limited + - ppc64le + - Tools + - ICP + - collectd +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +sources: +- https://hub.docker.com/r/ibmcom/collectd-exporter-ppc64le/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-collectd/LICENSE b/stable/ibm-collectd/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-collectd/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-collectd/README.md b/stable/ibm-collectd/README.md new file mode 100644 index 0000000..74b63b9 --- /dev/null +++ b/stable/ibm-collectd/README.md @@ -0,0 +1,69 @@ +# collectd-exporter + +collectd-exporter + +# #TL;DR; + +```console +$ helm install stable/ibm-collectd +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [ibm-collectd](https://hub.docker.com/r/ibmcom/collectd-exporter-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-collectd +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [ibm-collectd](https://hub.docker.com/r/ibmcom/collectd-exporter-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the collectd chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official collectd tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-collectd` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-collectd +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-collectd/RELEASENOTES.md b/stable/ibm-collectd/RELEASENOTES.md new file mode 100755 index 0000000..abf4226 --- /dev/null +++ b/stable/ibm-collectd/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.1.0 | September 12, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-collectd/templates/NOTES.txt b/stable/ibm-collectd/templates/NOTES.txt new file mode 100755 index 0000000..4e07d6b --- /dev/null +++ b/stable/ibm-collectd/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "collectd.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "collectd.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "collectd.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "collectd.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:9103 to use your application" + kubectl port-forward $POD_NAME 9103:9103 +{{- end }} diff --git a/stable/ibm-collectd/templates/_helpers.tpl b/stable/ibm-collectd/templates/_helpers.tpl new file mode 100755 index 0000000..2f56ee5 --- /dev/null +++ b/stable/ibm-collectd/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "collectd.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 "collectd.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "collectd.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-collectd/templates/deployment.yaml b/stable/ibm-collectd/templates/deployment.yaml new file mode 100755 index 0000000..b6a532e --- /dev/null +++ b/stable/ibm-collectd/templates/deployment.yaml @@ -0,0 +1,64 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "collectd.fullname" . }} + labels: + app: {{ template "collectd.name" . }} + chart: {{ template "collectd.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "collectd.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "collectd.name" . }} + release: {{ .Release.Name }} + chart: {{ template "collectd.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 9103 + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-collectd/templates/ingress.yaml b/stable/ibm-collectd/templates/ingress.yaml new file mode 100755 index 0000000..bdbe30f --- /dev/null +++ b/stable/ibm-collectd/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "collectd.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "collectd.name" . }} + chart: {{ template "collectd.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-collectd/templates/service.yaml b/stable/ibm-collectd/templates/service.yaml new file mode 100755 index 0000000..08b8238 --- /dev/null +++ b/stable/ibm-collectd/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "collectd.fullname" . }} + labels: + app: {{ template "collectd.name" . }} + chart: {{ template "collectd.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + name: http + selector: + app: {{ template "collectd.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-collectd/values-metadata.yaml b/stable/ibm-collectd/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-collectd/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-collectd/values.yaml b/stable/ibm-collectd/values.yaml new file mode 100755 index 0000000..3f9d3d7 --- /dev/null +++ b/stable/ibm-collectd/values.yaml @@ -0,0 +1,45 @@ +# Default values for collectd. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/collectd-exporter-ppc64le + tag: latest + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 9103 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: {} +node: "ppc64le" +tolerations: [] + +affinity: {} diff --git a/stable/ibm-gerrit/.helmignore b/stable/ibm-gerrit/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-gerrit/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-gerrit/Chart.yaml b/stable/ibm-gerrit/Chart.yaml new file mode 100755 index 0000000..4e5f164 --- /dev/null +++ b/stable/ibm-gerrit/Chart.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +appVersion: "1.0" +description: Basic gerrit server. +name: ibm-gerrit +version: 0.1.0 +engine: gotpl +keywords: +- gerrit +- Limited +- amd64 +- ppc64le +- Tools +- ICP +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +sources: +- https://hub.docker.com/r/geissonator/ubuntu-gerrit-ppc64le/ +tillerVersion: '>=2.7.2' + diff --git a/stable/ibm-gerrit/LICENSE b/stable/ibm-gerrit/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-gerrit/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-gerrit/README.md b/stable/ibm-gerrit/README.md new file mode 100644 index 0000000..a6d3bef --- /dev/null +++ b/stable/ibm-gerrit/README.md @@ -0,0 +1,69 @@ +# Gerrit + +Basic gerrit server. + +## TL;DR; + +```console +$ helm install stable/ibm-gerrit +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [gerrit](https://hub.docker.com/r/geissonator/ubuntu-gerrit-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-gerrit +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [gerrit](https://hub.docker.com/r/geissonator/ubuntu-gerrit-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the gerrit chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official gerrit tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-gerrit` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-gerrit +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-gerrit/RELEASENOTES.md b/stable/ibm-gerrit/RELEASENOTES.md new file mode 100755 index 0000000..abf4226 --- /dev/null +++ b/stable/ibm-gerrit/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.1.0 | September 12, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-gerrit/templates/NOTES.txt b/stable/ibm-gerrit/templates/NOTES.txt new file mode 100755 index 0000000..a2d6df1 --- /dev/null +++ b/stable/ibm-gerrit/templates/NOTES.txt @@ -0,0 +1,19 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "gerrit.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "gerrit.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "gerrit.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "gerrit.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:80 +{{- end }} diff --git a/stable/ibm-gerrit/templates/_helpers.tpl b/stable/ibm-gerrit/templates/_helpers.tpl new file mode 100755 index 0000000..d7137bb --- /dev/null +++ b/stable/ibm-gerrit/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "gerrit.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 "gerrit.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "gerrit.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-gerrit/templates/deployment.yaml b/stable/ibm-gerrit/templates/deployment.yaml new file mode 100755 index 0000000..2e69e63 --- /dev/null +++ b/stable/ibm-gerrit/templates/deployment.yaml @@ -0,0 +1,66 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "gerrit.fullname" . }} + labels: + app: {{ template "gerrit.name" . }} + chart: {{ template "gerrit.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "gerrit.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "gerrit.name" . }} + release: {{ .Release.Name }} + chart: {{ template "gerrit.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + readinessProbe: + httpGet: + path: / + port: http + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + + diff --git a/stable/ibm-gerrit/templates/ingress.yaml b/stable/ibm-gerrit/templates/ingress.yaml new file mode 100755 index 0000000..ae311d1 --- /dev/null +++ b/stable/ibm-gerrit/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "gerrit.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "gerrit.name" . }} + chart: {{ template "gerrit.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-gerrit/templates/service.yaml b/stable/ibm-gerrit/templates/service.yaml new file mode 100755 index 0000000..8ac3442 --- /dev/null +++ b/stable/ibm-gerrit/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "gerrit.fullname" . }} + labels: + app: {{ template "gerrit.name" . }} + chart: {{ template "gerrit.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + app: {{ template "gerrit.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-gerrit/values-metadata.yaml b/stable/ibm-gerrit/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-gerrit/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-gerrit/values.yaml b/stable/ibm-gerrit/values.yaml new file mode 100755 index 0000000..d58ab51 --- /dev/null +++ b/stable/ibm-gerrit/values.yaml @@ -0,0 +1,45 @@ +# Default values for gerrit. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: geissonator/ubuntu-gerrit-ppc64le + tag: latest + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 8080 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi +node: "ppc64le" +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/stable/ibm-kaazinggateway/.helmignore b/stable/ibm-kaazinggateway/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-kaazinggateway/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-kaazinggateway/Chart.yaml b/stable/ibm-kaazinggateway/Chart.yaml new file mode 100755 index 0000000..938d8bd --- /dev/null +++ b/stable/ibm-kaazinggateway/Chart.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +appVersion: "1.0" +description: The Gateway is a network gateway created to provide a single access point for real-time web based protocol elevation that supports load balancing, clustering, and security management. +engine: gotpl +name: ibm-kaazinggateway +keywords: +- Gateway +- Limited +- amd64 +- ppc64le +- Tools +- ICP +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +sources: +- https://hub.docker.com/r/ibmcom/kaazing-gateway-ppc64le/ +tillerVersion: '>=2.7.2' +version: 0.1.0 diff --git a/stable/ibm-kaazinggateway/LICENSE b/stable/ibm-kaazinggateway/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-kaazinggateway/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-kaazinggateway/README.md b/stable/ibm-kaazinggateway/README.md new file mode 100644 index 0000000..7c654fd --- /dev/null +++ b/stable/ibm-kaazinggateway/README.md @@ -0,0 +1,69 @@ +# ibm-kaazinggateway + +ibm-kaazinggateway Analyzes resource usage and performance characteristics of running containers.. + +## TL;DR; + +```console +$ helm install stable/ibm-kaazinggateway +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [ibm-kaazinggateway](https://hub.docker.com/r/ibmcom/kaazing-gateway-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-ibm-kaazinggateway +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [ibm-kaazinggateway](https://hub.docker.com/r/ibmcom/kaazing-gateway-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the kaazinggateway chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official kaazinggateway tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-kaazinggateway` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-kaazinggateway +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-kaazinggateway/RELEASENOTES.md b/stable/ibm-kaazinggateway/RELEASENOTES.md new file mode 100755 index 0000000..abf4226 --- /dev/null +++ b/stable/ibm-kaazinggateway/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.1.0 | September 12, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-kaazinggateway/templates/NOTES.txt b/stable/ibm-kaazinggateway/templates/NOTES.txt new file mode 100755 index 0000000..79f69a2 --- /dev/null +++ b/stable/ibm-kaazinggateway/templates/NOTES.txt @@ -0,0 +1,6 @@ +1. Get the application URL by running these commands: +{{- if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "kaazinggateway.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://localhost:8000 to use your application" + kubectl port-forward $POD_NAME 8000:8000 +{{- end }} diff --git a/stable/ibm-kaazinggateway/templates/_helpers.tpl b/stable/ibm-kaazinggateway/templates/_helpers.tpl new file mode 100755 index 0000000..f0a0486 --- /dev/null +++ b/stable/ibm-kaazinggateway/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "kaazinggateway.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 "kaazinggateway.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "kaazinggateway.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-kaazinggateway/templates/deployment.yaml b/stable/ibm-kaazinggateway/templates/deployment.yaml new file mode 100755 index 0000000..98bb4a1 --- /dev/null +++ b/stable/ibm-kaazinggateway/templates/deployment.yaml @@ -0,0 +1,64 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "kaazinggateway.fullname" . }} + labels: + app: {{ template "kaazinggateway.name" . }} + chart: {{ template "kaazinggateway.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "kaazinggateway.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "kaazinggateway.name" . }} + release: {{ .Release.Name }} + chart: {{ template "kaazinggateway.chart" . }} + heritage: {{ .Release.Service }} + spec: + hostname: kaazinggateway + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: GATEWAY_OPTS + value: {{ "-Dgateway.hostname=kaazinggateway -Xmx512m -Djava.security.egd=file:/dev/urandom" }} + ports: + - name: http + containerPort: 8000 + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-kaazinggateway/templates/ingress.yaml b/stable/ibm-kaazinggateway/templates/ingress.yaml new file mode 100755 index 0000000..f4fa210 --- /dev/null +++ b/stable/ibm-kaazinggateway/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "kaazinggateway.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "kaazinggateway.name" . }} + chart: {{ template "kaazinggateway.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-kaazinggateway/templates/service.yaml b/stable/ibm-kaazinggateway/templates/service.yaml new file mode 100755 index 0000000..bf13b6d --- /dev/null +++ b/stable/ibm-kaazinggateway/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kaazinggateway.fullname" . }} + labels: + app: {{ template "kaazinggateway.name" . }} + chart: {{ template "kaazinggateway.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + app: {{ template "kaazinggateway.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-kaazinggateway/values-metadata.yaml b/stable/ibm-kaazinggateway/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-kaazinggateway/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-kaazinggateway/values.yaml b/stable/ibm-kaazinggateway/values.yaml new file mode 100755 index 0000000..6b38032 --- /dev/null +++ b/stable/ibm-kaazinggateway/values.yaml @@ -0,0 +1,45 @@ +# Default values for kaazinggateway. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/kaazing-gateway-ppc64le + tag: 5.6.0 + pullPolicy: IfNotPresent + +service: + type: ClusterIP + port: 8000 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: {} +node: "ppc64le" +tolerations: [] + +affinity: {} diff --git a/stable/ibm-tidb/.helmignore b/stable/ibm-tidb/.helmignore new file mode 100755 index 0000000..f0c1319 --- /dev/null +++ b/stable/ibm-tidb/.helmignore @@ -0,0 +1,21 @@ +# 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 +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ibm-tidb/Chart.yaml b/stable/ibm-tidb/Chart.yaml new file mode 100755 index 0000000..5279ba8 --- /dev/null +++ b/stable/ibm-tidb/Chart.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +appVersion: "1.0" +description: TiDB is a distributed NewSQL database compatible with MySQL protocol +engine: gotpl +name: ibm-tidb +keywords: +- TiDB +- database +- MySQLProtocol +- Limited +- amd64 +- ppc64le +- Tools +- ICP +maintainers: +- email: smohite@us.ibm.com + name: IBM ISV Team +version: 0.1.0 +sources: +- https://hub.docker.com/r/ibmcom/tidb-ppc64le/ +tillerVersion: '>=2.7.2' diff --git a/stable/ibm-tidb/LICENSE b/stable/ibm-tidb/LICENSE new file mode 100755 index 0000000..7a4a3ea --- /dev/null +++ b/stable/ibm-tidb/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. \ No newline at end of file diff --git a/stable/ibm-tidb/README.md b/stable/ibm-tidb/README.md new file mode 100644 index 0000000..06014ce --- /dev/null +++ b/stable/ibm-tidb/README.md @@ -0,0 +1,68 @@ +# TiDB + +TiDB is a distributed NewSQL database compatible with [MySQL protocol] (https://pingcap.com) +## TL;DR; + +```console +$ helm install stable/ibm-tidb +``` + +## Prerequisites + +- Kubernetes 1.7+ with Beta APIs enabled +- Tiller 2.6.0 or later + +## Resources Required +The chart deploys pods consuming minimum resources as specified in the resources configuration parameter (default: Memory: 200Mi, CPU: 100m) + +## Introduction + +This chart bootstraps a [TiDB](https://hub.docker.com/r/ibmcom/tidb-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + + +## Installing the Chart + +To install the chart with the release name `my-release`: + +```console +$ helm install --name my-release stable/ibm-tidb +``` + +## Uninstalling the Chart + +To uninstall/delete the `my-release` deployment: + +```console +$ helm delete my-release +``` + +The command removes all the Kubernetes components associated with the chart and deletes the release. + +## Chart Details +This chart bootstraps a [TiDB](https://hub.docker.com/r/ibmcom/tidb-ppc64le/) deployment on a [Kubernetes](http://kubernetes.io) cluster + + +## Configuration + +The following table lists the configurable parameters of the TiDB chart and their default values. + +| Parameter | Description | Default | +|---------------------------|---------------------------------|---------------------------------------------------------| +| `image` | The image to pull and run | A recent official TiDB tag | +| `imagePullPolicy` | Image pull policy | `Always` if `imageTag` is `latest`, else `IfNotPresent` | +| `node` | Specify what architecture Node | `amd64` or `ppc64le` | + + +The above parameters map to `ibm-tidb` params. + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example, + +```bash +$ helm install --name my-release -f values.yaml stable/ibm-tidb +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +## Limitations diff --git a/stable/ibm-tidb/RELEASENOTES.md b/stable/ibm-tidb/RELEASENOTES.md new file mode 100755 index 0000000..abf4226 --- /dev/null +++ b/stable/ibm-tidb/RELEASENOTES.md @@ -0,0 +1,17 @@ +# Release Notes + +## What's new in Chart Version +- Initial version + +## Fixes + + +## Prerequisites + +- No changes + +## Version History + +| Chart | Date | Kubernetes Version Required | Breaking Changes | Details | +| ----- | ---- | --------------------------- | ---------------- | ------- | +| 0.1.0 | September 12, 2018 | >= 1.7 | None | Initial version | diff --git a/stable/ibm-tidb/templates/NOTES.txt b/stable/ibm-tidb/templates/NOTES.txt new file mode 100755 index 0000000..d15e920 --- /dev/null +++ b/stable/ibm-tidb/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range .Values.ingress.hosts }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "tidb.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + mysql -h $NODE_IP -P $NODE_PORT -u root -D test --prompt="tidb> " +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get svc -w {{ template "tidb.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "tidb.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') + #echo http://$SERVICE_IP:{{ .Values.service.port }} + mysql -h $SERVICE_IP -P 4000 -u root -D test --prompt="tidb> " +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "tidb.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + kubectl port-forward $POD_NAME 4000:4000 + To connect to your database run the following command: + mysql -h 127.0.0.1 -P 4000 -u root -D test --prompt="tidb> " +{{- end }} + diff --git a/stable/ibm-tidb/templates/_helpers.tpl b/stable/ibm-tidb/templates/_helpers.tpl new file mode 100755 index 0000000..1b047c9 --- /dev/null +++ b/stable/ibm-tidb/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "tidb.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 "tidb.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 -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "tidb.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ibm-tidb/templates/deployment.yaml b/stable/ibm-tidb/templates/deployment.yaml new file mode 100755 index 0000000..8d0242e --- /dev/null +++ b/stable/ibm-tidb/templates/deployment.yaml @@ -0,0 +1,57 @@ +apiVersion: apps/v1beta2 +kind: Deployment +metadata: + name: {{ template "tidb.fullname" . }} + labels: + app: {{ template "tidb.name" . }} + chart: {{ template "tidb.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "tidb.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "tidb.name" . }} + release: {{ .Release.Name }} + chart: {{ template "tidb.chart" . }} + heritage: {{ .Release.Service }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: ["tidb-server"] + ports: + - name: http + containerPort: 4000 + resources: +{{ toYaml .Values.resources | indent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} +{{- if .Values.node }} + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: beta.kubernetes.io/arch + operator: In + values: + - {{ .Values.node }} +{{- end }} + diff --git a/stable/ibm-tidb/templates/ingress.yaml b/stable/ibm-tidb/templates/ingress.yaml new file mode 100755 index 0000000..d117c3f --- /dev/null +++ b/stable/ibm-tidb/templates/ingress.yaml @@ -0,0 +1,39 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "tidb.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "tidb.name" . }} + chart: {{ template "tidb.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + backend: + serviceName: {{ $fullName }} + servicePort: http + {{- end }} +{{- end }} diff --git a/stable/ibm-tidb/templates/service.yaml b/stable/ibm-tidb/templates/service.yaml new file mode 100755 index 0000000..273e9ae --- /dev/null +++ b/stable/ibm-tidb/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "tidb.fullname" . }} + labels: + app: {{ template "tidb.name" . }} + chart: {{ template "tidb.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + name: http + selector: + app: {{ template "tidb.name" . }} + release: {{ .Release.Name }} diff --git a/stable/ibm-tidb/values-metadata.yaml b/stable/ibm-tidb/values-metadata.yaml new file mode 100755 index 0000000..58e7da4 --- /dev/null +++ b/stable/ibm-tidb/values-metadata.yaml @@ -0,0 +1,14 @@ +node: + __metadata: + name: "Node" + label: "node" + description: "Node Prefernce" + type: "string" + immutable: "false" + required: true + options: + - label: "ppc64le" + value: "ppc64le" + - label: "amd64" + value: "amd64" + diff --git a/stable/ibm-tidb/values.yaml b/stable/ibm-tidb/values.yaml new file mode 100755 index 0000000..76b62be --- /dev/null +++ b/stable/ibm-tidb/values.yaml @@ -0,0 +1,44 @@ +# Default values for tidb. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: ibmcom/tidb-ppc64le + tag: latest + pullPolicy: IfNotPresent + +service: + type: NodePort + port: 4000 + +ingress: + enabled: false + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: / + hosts: + - chart-example.local + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +node: "ppc64le" +tolerations: [] + +affinity: {}