Skip to content

Commit

Permalink
generic store, commit secrets
Browse files Browse the repository at this point in the history
  • Loading branch information
danielepolencic committed Jun 3, 2018
1 parent 305359b commit 48b6773
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 38 deletions.
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,4 @@ hs_err_pid*
/target/
/workspace/
/ode_modules/
/.apt_generated/

monitoring/custom-metrics-api/cm-adapter-serving-certs.yaml
/.apt_generated/
34 changes: 23 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@ You should have minikube installed.
You should start minikube with at least 4GB of RAM:

```bash
minikube start --memory 4096
minikube start \
--memory 4096 \
--extra-config=controller-manager.horizontal-pod-autoscaler-upscale-delay=1m \
--extra-config=controller-manager.horizontal-pod-autoscaler-downscale-delay=2m \
--extra-config=controller-manager.horizontal-pod-autoscaler-sync-period=10s
```

> If you're using a pre-existing minikube instance, you can resize the VM by destroying it an recreating it. Just adding the `--memory 4096` won't have any effect.
Expand All @@ -16,10 +20,6 @@ You should install `jq` — a lightweight and flexible command-line JSON process

You can find more [info about `jq` on the official website](https://github.com/stedolan/jq).

You should install `cfssl` - a command line tool and an HTTP API server for signing, verifying, and bundling TLS certificates.

You can find more [info about `jq` on the official website](https://github.com/cloudflare/cfssl).

## Installing Custom Metrics Api

Make sure you are in the `monitoring` folder:
Expand Down Expand Up @@ -60,12 +60,6 @@ Deploy Prometheus v2 in the monitoring namespace:
kubectl create -f ./prometheus
```

Generate the TLS certificates needed by the Prometheus adapter:

```bash
make certs
```

Deploy the Prometheus custom metrics API adapter:

```bash
Expand Down Expand Up @@ -140,3 +134,21 @@ You can inspect the event and triggers in the HPA with:
```bash
kubectl get hpa spring-boot-hpa
```

## Appendix

Using the secrets checked in the repository to deploy the Prometheus adapter is not recommended.

You should generate your own secrets.

But before you do so, make sure you install `cfssl` - a command line tool and an HTTP API server for signing, verifying, and bundling TLS certificates

You can find more [info about `cfssl` on the official website](https://github.com/cloudflare/cfssl).

Once `cfssl` is installed you generate a new Kubernetes secret with:

```bash
make certs
```

You should redeploy the Prometheus adapter.
66 changes: 58 additions & 8 deletions kube/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,27 @@
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: spring-boot-hpa
name: worker
spec:
replicas: 1
template:
metadata:
labels:
app: spring-boot-hpa
version: v1
app: worker
annotations:
prometheus.io/scrape: 'true'
spec:
containers:
- name: web
- name: worker
image: spring-boot-hpa
imagePullPolicy: IfNotPresent
env:
- name: REDIS_URL
value: "redis://redis:6379"
- name: STORE_ENABLED
value: "false"
- name: WORKER_ENABLED
value: "true"
ports:
- containerPort: 8080
livenessProbe:
Expand All @@ -35,14 +38,14 @@ spec:
apiVersion: v1
kind: Service
metadata:
name: spring-boot-hpa
name: worker
spec:
ports:
- nodePort: 32000
- nodePort: 31000
port: 80
targetPort: 8080
selector:
app: spring-boot-hpa
app: worker
type: NodePort
---
apiVersion: extensions/v1beta1
Expand Down Expand Up @@ -72,4 +75,51 @@ spec:
- port: 6379
targetPort: 6379
selector:
app: redis
app: redis
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: store
spec:
replicas: 1
template:
metadata:
labels:
app: store
spec:
containers:
- name: store
image: spring-boot-hpa
imagePullPolicy: IfNotPresent
env:
- name: REDIS_URL
value: "redis://redis:6379"
- name: STORE_ENABLED
value: "true"
- name: WORKER_ENABLED
value: "false"
ports:
- containerPort: 8080
livenessProbe:
initialDelaySeconds: 2
periodSeconds: 5
httpGet:
path: /health
port: 8080
resources:
limits:
memory: 512Mi
---
apiVersion: v1
kind: Service
metadata:
name: store
spec:
ports:
- nodePort: 32000
port: 80
targetPort: 8080
selector:
app: store
type: NodePort
4 changes: 2 additions & 2 deletions kube/hpa.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: spring-boot-hpa
minReplicas: 2
name: worker
minReplicas: 1
maxReplicas: 10
metrics:
- type: Pods
Expand Down
8 changes: 8 additions & 0 deletions monitoring/custom-metrics-api/cm-adapter-serving-certs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apiVersion: v1
kind: Secret
metadata:
name: cm-adapter-serving-certs
namespace: monitoring
data:
serving.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURlVENDQW1HZ0F3SUJBZ0lVVHEyVnd2azd5bmg1YlhDd3JjaDdGZEpHdjdNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0RURUxNQWtHQTFVRUF4TUNZMkV3SGhjTk1UZ3dOVEl3TVRFd05UQXdXaGNOTWpNd05URTVNVEV3TlRBdwpXakFqTVNFd0h3WURWUVFERXhoamRYTjBiMjB0YldWMGNtbGpjeTFoY0dselpYSjJaWEl3Z2dFaU1BMEdDU3FHClNJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMvQlFIRzVLNGl5QkxoVHk5YUcwa2ZSMFRGOEJaeDhRcS8KTmhMYTNJaVlPZnBBUWVwanBvVER5dXJyd2hQbmVJL2x6RVVEcnl2NytGTzJZeFlCbzdHQVU1YkJobHBiSGo0TgpCeUxpVW9WRnhSNGx1SGJCVmtwNU5ldzJxZndmZ3JTa3lxNS8wRmdRcUVGaTRpKzhIUWlWNzQ4aENYdVVUK0swClFRVnN2QzZRTzBWS0xScGlSYlh5ZTNCdlppNFZKeS9tZ0VTdG9UUGhjSGF5eHI4MTZuZGE4OVNtbFd0UFlnbmYKSGl4MnNROGhrOHAzY0FMeFZaVHp1bUxYR0xBV2w2YXl0bVhLUWZyTzM1aHQ3a20zY2RraFdOUWFSNFpnVDB1SQpkTml0dFNDN1ArZSt1NzlVaHZ2QjZHNjdtK2Jyc2ZOSWw1ZkpXWmg3RTNBNnVJYmhvb1BQQWdNQkFBR2pnYm93CmdiY3dEZ1lEVlIwUEFRSC9CQVFEQWdXZ01Bd0dBMVVkRXdFQi93UUNNQUF3SFFZRFZSME9CQllFRkVyN0xzZG0KN0FiM3RwRDkwQ1diUjVsZmt3aktNQjhHQTFVZEl3UVlNQmFBRkNDckRDNW1wd25LVHNzaU1yS3FCczZDam9lNQpNRmNHQTFVZEVRUlFNRTZDSTJOMWMzUnZiUzF0WlhSeWFXTnpMV0Z3YVhObGNuWmxjaTV0YjI1cGRHOXlhVzVuCmdpZGpkWE4wYjIwdGJXVjBjbWxqY3kxaGNHbHpaWEoyWlhJdWJXOXVhWFJ2Y21sdVp5NXpkbU13RFFZSktvWkkKaHZjTkFRRUxCUUFEZ2dFQkFEQ2w1dlJpQ1A2OHp6ZW03NXJCd09rQ3NzOXBmU2N6Z1JZMzVKd2l0OEdUbnFpcQplMndqbk5TUFQwMUU3V0krQjdaK2lKNTFvUm1LcWFhejl3SFpuOHdXVVNPdGRGaWliZCtxemVCS1BYdTBmM1hoCldYT21hZjUzcmdRTFV4TWRDUVQ3TnNxbGh6a1hCMGZGOGVEcUdXTTFET2lxODVuSGRpZ0NnekZBSEVlQSt0TGEKSU1vN2M5RjN1bG40eWhVakdSWm5zUmtrV0VjYThRMUpDcm1zRXhjOHltNEVrcmdUL29XSTNneXFIallnTERPbApDVG5PL2pCUWVEcmNqSEpaT1hnYmZ3Q1FDOGpqUDE2Ly9XNy91dHNrWUVBY0E5eXI5TjFrSkFvMVJnTnZDQkpCCjhDNmtCS3pvTVNBSFpuSDJJNVMzcnZSNnJEMnZpQWVseXQ1OWlFQT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
serving.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBdndVQnh1U3VJc2dTNFU4dldodEpIMGRFeGZBV2NmRUt2ellTMnR5SW1EbjZRRUhxClk2YUV3OHJxNjhJVDUzaVA1Y3hGQTY4cisvaFR0bU1XQWFPeGdGT1d3WVphV3g0K0RRY2k0bEtGUmNVZUpiaDIKd1ZaS2VUWHNOcW44SDRLMHBNcXVmOUJZRUtoQll1SXZ2QjBJbGUrUElRbDdsRS9pdEVFRmJMd3VrRHRGU2kwYQpZa1cxOG50d2IyWXVGU2N2NW9CRXJhRXo0WEIyc3NhL05lcDNXdlBVcHBWclQySUozeDRzZHJFUElaUEtkM0FDCjhWV1U4N3BpMXhpd0ZwZW1zclpseWtINnp0K1liZTVKdDNIWklWalVHa2VHWUU5TGlIVFlyYlVndXovbnZydS8KVkliN3dlaHV1NXZtNjdIelNKZVh5Vm1ZZXhOd09yaUc0YUtEendJREFRQUJBb0lCQVFDWHJob2pIU05KYXlYUwowMVgrYnZ3NVloWXlOdHNienhPQmtpYVdzOWVqU1NaMkwrRTNEOXNNdmV5ZEdKZEZqbTUxUXlicUxnYjNKZEVUCldzcjJzazBZWVVlc2xFcmJYOEJXQi95alNuT1pXMVQ5RHVUOTBNK0NRRmM1Y1BGSzlEY05SQVFjYWd3RDdoYzkKdGUzQnFpeFBJdEs4b1JNSVNnYnlxMDdyY09Kb2s4YW9uMWpDZTl4Z0ZTSFd0WFBvdVg0cWRENytlY2F3TFhLTQpqU2lndXNMTmFCM2tVOHJsQWdtMityV2xOKzBnYmMyMU1qeGxoVXhTZHd6OU1oTzBrOGRvby8yZktWTEJvN3FuCkNBSlFuS1pwd28wVkJONldpbHRhcC8vQ1N1WmYvZ1Y3RUlSN3ZLbEcwMlJBUm5EcU5tVW44L1dXdHFTZ29POFAKZk1BNnQ0OEJBb0dCQVBjNENCR1duSVQ1RTJ4c3JyaWl1SUVNbTdNR1NlOWZvVVRLb295ckQycW92czV3VG51cgpyK0xtZWtZV2V0K1J5U3NMVmlKZnNDT21MNWVPZDgwKzR3OUxqOGU1THM3WXRDUUEzcjB4dHJHQi9jN1FwQ3FFCkxNbGt4SmJCQjlxT2VEUVpZMFhGUldkN01RakcrTTh6UFB1WmEyRkkwNGJtd09kQU9KT2g5OStSQW9HQkFNWE4KOUJJZEQvTjd2WkFEdERnR0drWDk0K1NQVkxrNDhiSCt6NWwyNHVjd3k3SWhHSjZ2QVhVZnZKZDRnVmRPelpWZgpSWmVSWE1rUWNwZ0dBWk5HVlVGdWFpaDEzZFpQM2FGUTFLRDd6SmZ5bGRKZGdLRnI3bEN2aVk5dytSdE54dGt2ClFNa25DazBSSytsTmFFQ0hIQ1hhNDlBZzFSMTN6WEN4MzA2aDBUMWZBb0dCQUpBRjBJMk9sTGpTOG9Iai94WUoKbGp0NFFPelc2UlBQUG9CNUhLR2V0bWlJemtBdUpVcmZCcVRGYU02VUlobEZNVkVtVlpQSTh6Q1JqSUJhdTJpVApEbXpHdElqQ1ZZYWpzSzZZNHlxTlg4V2gyVjgzSmF5dk8vaElBRTlqUFZRU1Urem1MWE5rTGI3UGdnMSsvVXlZCnFScGFrcmdtV1RUcUVjK25GazdMdVVCQkFvR0FGNTdhY0hkTCtsVmljNW9kb1RzSlZDWlhXbW5MUWpzTWthYk4KLzVOMDBRckFxRXJQZDlPS0p3UmRMdkZTOEt3V1hLbjkwM1dtVU5SSCt1TnN1THVEWHNiaW9tWkEwV0RFSklsVQplc3pXeDZaT1FjcXNtNW9aNFVTMDlvNFZFUytlZVR6dFRaZjk0T29XQmt3YUVPcVJiK3ZObklMdk1BK29WcmJHCjVjcnBBNTBDZ1lFQTFiNHZrVy9CNEtoY2Z1S3gvZ1FhRzdyemI0MjZmNVRyVFllb0VYN1FxVldCdTR6V0lqUUsKUVBJZ04xSk5kYnFsVm1Pa2g3QzNyQ29xUGg4STNEUkphQXNCMXpWQ0hCcysyVGtFM1pOajhBekZKeDROY0U2VwowTlNSYmZYdmxyS1dHb2RvcVUyNWZhVk1zUWJDSG0wcm9Ya1EwWHlBaytZb284R3BvSnRPNlVNPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ public String home(Model model) {
return "home";
}

@PostMapping("/tickets")
public String tickets(@ModelAttribute Ticket ticket) {
@PostMapping("/submit")
public String submit(@ModelAttribute Ticket ticket) {
for (long i = 0; i < ticket.getQuantity(); i++) {
String id = UUID.randomUUID().toString();
queueService.addJob(mainQueueName, id);
Expand Down
18 changes: 9 additions & 9 deletions src/main/resources/templates/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,29 @@
layout:decorator="layout.html">
<div layout:fragment="content">
<div class="store" th:if="${isStoreEnabled}">
<h1 class="f1">Lucky Lottery</h1>
<h1 class="f1">Store</h1>
<div class="bg-near-white ph3 pv1">
<p class="sans-serif lh-copy measure">Buy tickets, win the lottery, become a millionaire.</p>
<p class="sans-serif lh-copy measure">You can buy items.</p>
</div>
<div class="pv4">
<form th:action="@{/tickets}" th:object="${ticket}" method="post">
<form th:action="@{/submit}" th:object="${ticket}" method="post">
<input type="hidden" name="quantity" th:value="1">
<button class="f4 link br1 ba bw2 ph3 pv2 mb2 dib near-black b--near-black b hover-bg-near-black hover-white">Buy 1 ticket</button>
<button class="f4 link br1 ba bw2 ph3 pv2 mb2 dib near-black b--near-black b hover-bg-near-black hover-white">Buy 1 item</button>
</form>
<form th:action="@{/tickets}" th:object="${ticket}" method="post">
<form th:action="@{/submit}" th:object="${ticket}" method="post">
<input type="hidden" name="quantity" th:value="10">
<button class="f4 link br1 ba bw2 ph3 pv2 mb2 dib near-black b--near-black b hover-bg-near-black hover-white">Buy 10 tickets</button>
<button class="f4 link br1 ba bw2 ph3 pv2 mb2 dib near-black b--near-black b hover-bg-near-black hover-white">Buy 10 items</button>
</form>
<form th:action="@{/tickets}" th:object="${ticket}" method="post">
<form th:action="@{/submit}" th:object="${ticket}" method="post">
<input type="hidden" name="quantity" th:value="100">
<button class="f4 link br1 ba bw2 ph3 pv2 mb2 dib near-black b--near-black b hover-bg-near-black hover-white">Buy 100 tickets</button>
<button class="f4 link br1 ba bw2 ph3 pv2 mb2 dib near-black b--near-black b hover-bg-near-black hover-white">Buy 100 items</button>
</form>
</div>
</div>
<div class="worker" th:if="${isWorkerEnabled}">
<h2 class="f1">Admin</h2>
<div class="bg-near-white ph3 pv1">
<p class="sans-serif lh-copy measure">Lottery backend system.</p>
<p class="sans-serif lh-copy measure">Store backend system.</p>
</div>
<ul class="pl0 list">
<li class="mv2"><span class="f6 ttu near-gray">Connected:</span> <span class="b" th:text="${isConnected}"></span></li>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/templates/layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<title>Lucky Lottery</title>
<title>Store</title>
<link rel="stylesheet" th:href="@{/tachyons.min.css}">
</head>
<body class="sans-serif mw7 center pb6">
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/templates/success.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
<div layout:fragment="content">
<h1 class="f1">Congratulations!</h1>
<div class="bg-near-white ph3 pv1 mb4">
<p class="sans-serif lh-copy measure">You bought <span th:text="${ticket.quantity}"></span> tickets.</p>
<p class="sans-serif lh-copy measure">You bought <span th:text="${ticket.quantity}"></span> items.</p>
</div>
<a href="/" class="f4 link br1 ba bw2 ph3 pv2 mb2 dib near-black b--near-black b hover-bg-near-black hover-white">Buy more tickets</a>
<a href="/" class="f4 link br1 ba bw2 ph3 pv2 mb2 dib near-black b--near-black b hover-bg-near-black hover-white">Buy more items</a>
</div>
</html>

0 comments on commit 48b6773

Please sign in to comment.