Skip to content

Commit d01826f

Browse files
authored
General improvements for iter8.tools text and Iter8 repo issue/PR templates (#732)
* built in metrics Signed-off-by: Srinivasan Parthasarathy <[email protected]> * built in metrics installation Signed-off-by: Srinivasan Parthasarathy <[email protected]> * dummy jq expression Signed-off-by: Srinivasan Parthasarathy <[email protected]> * updated images Signed-off-by: Srinivasan Parthasarathy <[email protected]> * updated installer for v0.5 Signed-off-by: Srinivasan Parthasarathy <[email protected]> * temporary image using personal repo Signed-off-by: Srinivasan Parthasarathy <[email protected]> * iter8 conformance test with builtin metrics Signed-off-by: Srinivasan Parthasarathy <[email protected]> * statistical rigor Signed-off-by: Srinivasan Parthasarathy <[email protected]> * expanded documentation for builtins Signed-off-by: Srinivasan Parthasarathy <[email protected]> * updated builtin docs Signed-off-by: Srinivasan Parthasarathy <[email protected]> * updated handler image Signed-off-by: Srinivasan Parthasarathy <[email protected]> * fixing builtins Signed-off-by: Srinivasan Parthasarathy <[email protected]> * mkdocs version pinning Signed-off-by: Srinivasan Parthasarathy <[email protected]> * contributor documentation Signed-off-by: Srinivasan Parthasarathy <[email protected]> * removed commented blocks on integrations Signed-off-by: Srinivasan Parthasarathy <[email protected]> * reverting experiment yaml https url Signed-off-by: Srinivasan Parthasarathy <[email protected]> * improved illustrations Signed-off-by: Srinivasan Parthasarathy <[email protected]> * PR and issue templates Signed-off-by: Srinivasan Parthasarathy <[email protected]> * fixing issue and PR templates Signed-off-by: Srinivasan Parthasarathy <[email protected]>
1 parent 37ebc19 commit d01826f

File tree

10 files changed

+120
-108
lines changed

10 files changed

+120
-108
lines changed

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
---
22
name: Bug report
33
about: Create a report to help us improve
4-
title: "[BUG]"
5-
labels: bug
4+
title: ""
5+
labels: kind/bug
66
assignees: ""
77

88
---

.github/ISSUE_TEMPLATE/documentation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
---
22
name: "Documentation issue"
33
about: The documentation is unclear, missing informations, or could be improved
4-
title: "[Documentation Request]"
5-
labels: documentation
4+
title: ""
5+
labels: kind/docs
66
assignees: ''
77
---
88

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,32 @@
11
---
22
name: Feature request
33
about: Suggest an idea for Iter8
4-
title: '[Feature Request]'
5-
labels: 'enhancement'
4+
title: ""
5+
labels: kind/enhancement
66
assignees: ''
77

88
---
99

10-
**Is your feature request related to a problem? Please describe.**
11-
A clear and concise description of the problem that will be solved by this feature.
10+
**Is your feature request related to a **problem**? Please describe the **problem**.**
11+
A clear and concise description of the **problem**.
1212

13-
**Why is the feature useful for Iter8 users?**
14-
How will this feature add value to Iter8 users and improve Iter8 experiments.
15-
16-
**Describe the solution you'd like**
13+
**Describe the feature/solution you'd like**
1714
A clear and concise description of what you want to happen.
1815

19-
**Describe alternatives you've considered**
20-
A clear and concise description of any alternative solutions or features you've considered.
16+
**Will this feature/solution bring new benefits for Iter8 users? What are they?**
17+
How will this feature/solution add value to Iter8 users.
18+
19+
**Will this feature/solution bring new benefits for Iter8 developers? What are they?**
20+
How will this feature/solution add value to Iter8 developers.
2121

2222
**Does this issue require a design doc/discussion? If there is a link to the design document/discussions, please provide it below.**
23-
You can use this issue thread, or a discussion thread in this repo, for design discussions. If you do so, please provide a link to the specific issue/discussion comment(s) that describes the design.
23+
You can use this issue thread, or a discussion thread in this repo, for design discussions. Please provide the appropriate links. You can use the issue/discussion to also discuss and describe alternatives.
2424

2525
**How will this feature be tested?**
26-
[ ] A checklist of behaviors that will be tested as part of this feature implementation.
27-
28-
Mark this as TBD if testing requirements are unclear at this time.
26+
- [ ] A checklist of behaviors that will be tested as part of this feature implementation.
2927

3028
**How will this feature be documented?**
31-
[ ] A checklist which maybe a combination of user and developer documentation. This includes new (or modifications to existing) code-samples, references, or other forms of user documentation that will be added to https://iter8.tools as part of this feature implementation. Also includes developer documentation, that must always accompany code in the `iter8-analytics`, `etc3`, `handler`, and `iter8ctl` repos.
32-
33-
Mark this as TBD if documentation requirements are unclear at this time.
29+
- [ ] Most new features require end-user documentation at https://iter8.tools. Describe the specific documentation that will be added.
3430

3531
**Additional context**
3632
Add any other context or screenshots about the feature request here.

.github/PULL_REQUEST_TEMPLATE/pull_request_template.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
### Description
2-
Please describe your pull request, specifically, the issue which this PR is intended to resolve.
1+
### Issue resolved/partially addressed by this PR
2+
Please describe your pull request, specifically, the issue which this PR is intended to resolve or partially address.
33

44
### Testing
55
- [ ] Does this PR fix a bug? How is the bug covered by new test(s)?

mkdocs/docs/concepts/buildingblocks.md

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ template: main.html
44

55
# Building Blocks
66

7-
> Iter8 defines a Kubernetes resource called **Experiment** that automates A/B, A/B/n, Canary, and Conformance experiments. During an experiment, Iter8 can compare multiple versions, find, and safely promote the **winning version (winner)** based on business metrics and SLOs.
7+
> Iter8 defines a Kubernetes resource called **Experiment** that automates SLO validation, A/B, and A/B/n testing experiments. During an experiment, Iter8 can compare multiple versions, find, and safely promote the **winning version (winner)** based on business metrics and performance metrics like latency and error-rate.
88
99
We now introduce the building blocks of an Iter8 experiment.
1010

@@ -75,10 +75,15 @@ A version of your app/ML model is considered **validated**, if it satisfies the
7575

7676
## Traffic engineering
7777

78-
**Traffic engineering** refers to features such as **traffic mirroring/shadowing** and **user segmentation** that provide fine-grained controls over how traffic is routed to and from app versions.
78+
**Traffic engineering** refers to features such as **dark launch, traffic mirroring/shadowing, user segmentation** and **session affinity** that provide fine-grained controls over how traffic is routed to and from app versions.
7979

8080
Iter8 enables you to take total advantage of all the traffic engineering features available in the service mesh, ingress technology, or networking layer present in your Kubernetes cluster.
8181

82+
=== "Dark launch"
83+
**Dark launch** enables you to deploy and experiment with a new version of your application/ML model in such a way that it is hidden from all (or most) of your end-users.
84+
85+
![Canary](../images/mirroring.png)
86+
8287
=== "Traffic mirroring/shadowing"
8388
**Traffic mirroring** or **shadowing** enables experimenting with a *dark* launched version with zero-impact on end-users. Mirrored traffic is a replica of the real user requests[^1] that is routed to the dark version. Metrics are collected and evaluated for the dark version, but responses from the dark version are ignored.
8489

@@ -104,22 +109,8 @@ Iter8 enables you to take total advantage of all the traffic engineering feature
104109

105110
When two or more versions participate in an experiment, Iter8 **recommends a version for promotion**; if the experiment yielded a winner, then the version recommended for promotion is the winner; otherwise, the version recommended for promotion is the **baseline** version of your app/ML model.
106111

107-
Iter8 can optionally **promote the recommended version** at the end of an experiment.
112+
Iter8 can **promote the recommended version** at the end of an experiment.
108113

109114
![Canary](../images/yamljson.png)
110115

111-
## Resource config tools
112-
113-
Iter8 can be easily integrated with Helm and Kustomize. This integration is especially useful if you use these tools for configuring Kubernetes resources needed for releases of your app/ML model.
114-
115-
=== "Helm charts"
116-
An experiment that uses `helm` charts for version promotion is illustrated below.
117-
118-
![Canary](../images/helm.png)
119-
120-
=== "Kustomize resources"
121-
An experiment that uses `kustomize` resources for version promotion is illustrated below.
122-
123-
![Canary](../images/kustomize.png)
124-
125116
[^1]: It is possible to mirror only a certain percentage of the requests instead of all requests.

mkdocs/docs/concepts/whatisiter8.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ template: main.html
44

55
# What is Iter8?
66

7-
**Iter8** is an AI-powered platform for cloud native release automation, validation, and experimentation. Iter8 makes it easy to unlock business value and guarantee SLOs by identifying the best performing app/ML model version and promoting it safely.
7+
**Iter8** is an AI-powered platform for cloud native release automation and experimentation platform that enables SLO validation, A/B testing and progressive delivery.
88

9-
Iter8 is designed for **developers, SREs, service operators, data scientists, and ML engineers** who wish to maximize release velocity and business value with their apps/ML models while protecting end-user experience.
9+
Iter8 makes it easy to **unlock business value and guarantee SLOs** by identifying the best performing version of your app/ML model and promoting it safely.
10+
11+
Iter8 is designed for **DevOps and MLOps teams** interested in maximizing release velocity and business value with their apps/ML models while protecting end-user experience.
1012

1113
## What is an Iter8 experiment?
12-
Iter8 defines a Kubernetes resource called **Experiment** that automates A/B, A/B/n, Canary, and Conformance experiments. During an experiment, Iter8 can compare multiple versions, find, and safely promote the winning version based on business metrics and SLOs.
14+
Iter8 defines a Kubernetes resource called **Experiment** that automates SLO validation, A/B, and A/B/n testing experiments. During an experiment, Iter8 can compare multiple versions, find, and safely promote the **winning version (winner)** based on business metrics and performance metrics like latency and error-rate.
1315

1416
![Process automated by an Iter8 experiment](../images/whatisiter8.png)
1517

mkdocs/docs/images/illustration.png

14.8 KB
Loading
-401 Bytes
Binary file not shown.

mkdocs/docs/reference/tasks/common.md

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,49 +8,73 @@ template: main.html
88

99
### Overview
1010

11-
The `common/exec` task executes a shell commands with any specified arguments. Arguments are specified using placeholders, or templated variables, that are dynamically instantiated at runtime using values defined when the task is. The `common/exec` task is used in most tutorials as part of a finish action to promote the winning version at the end of an experiment.
11+
The `common/exec` task executes a shell command with arguments. Arguments are specified using placeholders that are dynamically substituted at runtime. The `common/exec` task can be used as part of a finish action to promote the winning version at the end of an experiment.
1212

13-
### Examples
13+
### Example
1414

15-
The following example executes `kubectl apply` using the file defined by the placeholder `.promte` when the experiment has completed.
15+
The following (partially-specified) experiment executes `kubectl apply` using a YAML manifest at the end of the experiment. The URL for the manifest contains a placeholder `.promote`, which is dynamically substituted at the end of the experiment.
1616

1717
```yaml
18-
- finish:
19-
task: common/exec
20-
with:
21-
- cmd: /bin/bash
22-
- args:
23-
- -c
24-
- |
25-
kubectl apply -f {{ .promote }}
18+
kind: Experiment
19+
...
20+
spec:
21+
...
22+
strategy:
23+
...
24+
actions:
25+
finish: # run the following sequence of tasks at the end of the experiment
26+
- task: common/exec # promote the winning version
27+
with:
28+
cmd: /bin/sh
29+
args:
30+
- "-c"
31+
- |
32+
kubectl apply -f https://raw.githubusercontent.com/iter8-tools/iter8/master/samples/knative/quickstart/{{ .promote }}.yaml
33+
...
34+
versionInfo:
35+
# information about app versions used in this experiment
36+
baseline:
37+
name: sample-app-v1
38+
variables:
39+
- name: promote
40+
value: baseline
41+
candidates:
42+
- name: sample-app-v2
43+
variables:
44+
- name: promote
45+
value: candidate
2646
```
2747
28-
### Result
29-
30-
The command will be executed; in this case, the yaml file will be applied to the cluster. If a task exits with a non-zero error code, the experiment to which it belongs will also fail.
31-
32-
### Arguments
48+
### Inputs
3349
3450
| Field name | Field type | Description | Required |
3551
| ----- | ---- | ----------- | -------- |
3652
| cmd | string | The command that should be executed | Yes |
3753
| args | []string | A list of command line arguments that should be passed to `cmd`. | No |
3854
| disableInterpolation | bool | Flag indicating whether or not to disable placeholder subsitution. For details, see [below](#disabling-placeholder-substitution). Default is `false`. | No |
3955

40-
### Details
56+
### Result
4157

42-
#### Dynamic Placeholder Substitution
58+
The command with the supplied arguments will be executed.
4359

44-
Inputs to tasks can contain placeholders, or template variables, which will be dynamically substituted when the task is executed by Iter8. For example, in the sample experiment above, one input is:
60+
In the [example above](#example), a YAML file corresponding to the baseline or candidate version will be applied to the cluster.
4561

46-
kubectl apply -f {{ .promote }}
62+
If this task exits with a non-zero error code, the experiment to which it belongs will fail.
63+
64+
### Dynamic placeholder substitution
65+
66+
Inputs to tasks can contain placeholders, or template variables, which will be dynamically substituted when the task is executed by Iter8. In the [example above](#example), one input is:
67+
```shell
68+
kubectl apply -f https://raw.githubusercontent.com/iter8-tools/iter8/master/samples/knative/quickstart/{{ .promote }}.yaml
69+
```
70+
In this case, the placeholder is `{{ .promote }}`.
4771

48-
In this case, the placeholder is `{{ .promote }}`. Placeholder substitution in task inputs works as follows.
72+
Placeholder substitution in task inputs works as follows.
4973

50-
Iter8 will find the version recommended for promotion. This information is set by Iter8 as the experiment exectuted and in stored in the `status.versionRecommendedForPromotion` field of the experiment. The version recommended for promotion is the winner, if a winner has been found in the experiment. Otherwise, it is the baseline version supplied in the `spec.versionInfo` field of the experiment.
74+
Iter8 will find the version recommended for promotion which is determined by Iter8 during the course of the experiment, and stored in the `status.versionRecommendedForPromotion` field of the experiment resource. The version recommended for promotion is the winner, if a winner has been found in the experiment. Otherwise, it is the baseline version supplied in the `spec.versionInfo` field of the experiment.
5175

52-
If the placeholder is `{{ .name }}`, Iter8 will substitute it with the name of the version recommended for promotion. If it is any other variable, Iter8 will substitute it with the value of the corresponding variable for the version recommended for promotion. Variable values are specified in the variables field of the version detail. Note that variable values could have been supplied by the creator of the experiment, or by other tasks that may already have been executed by Iter8 as part of the experiment.
76+
If the placeholder is `{{ .name }}`, Iter8 will substitute it with the name of the version recommended for promotion. If it is any other variable, Iter8 will substitute it with the value of the corresponding variable for the version recommended for promotion. Variable values are specified in the variables field of the version detail when the experiment is created.
5377

54-
#### Disabling Placeholder Substitution
78+
### Disabling placeholder substitution
5579

5680
By default, the `common/exec` task will attempt to find the version recommended for promotion, and use the values defined for it (in the spec.versionInfo portion of the experiment). However, this behavior will lead to task failure when the version recommended for promotion is not available. This is usually the case when a start task is executed. To use the `common/exec` task as part of an experiment start action, set `disableInterpolation` to true.

mkdocs/docs/reference/tasks/notification.md

Lines changed: 40 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,33 @@ template: main.html
1010

1111
The `notification/slack` task posts a slack message about current state of the experiment.
1212

13-
### Examples
13+
### Example
1414

15-
The following task creates a notification that will be posted to the slack channel with id `channel` during the execution of an action.
15+
The following task notifies a slack channel with id `C0138103183` and using the token contained in the secret `slack-token` in the `ns` namespace.
1616

1717
```yaml
1818
task: notification/slack
19-
with:
20-
- channel: channel
21-
- secret: ns/slack-token
19+
with:
20+
channel: C0138103183
21+
secret: ns/slack-token
2222
```
2323
24-
### Result
25-
26-
A slack message describing the experiment will be posted to the specified channel. It will look something like this:
27-
28-
![Sample slack notificiation](../../images/slack-notification.png)
29-
30-
### Arguments
24+
### Inputs
3125
3226
| Field name | Field type | Description | Required |
3327
| ----- | ---- | ----------- | -------- |
3428
| channel | string | Name of the slack channel to which messages should be posted. | Yes |
3529
| secret | string | Identifies a secret containing a `token` to be used for authentication. Expressed as `namespace/name`. If `namespace` is not specified, the namespace of the experiment is used. | Yes |
3630

31+
### Result
32+
33+
A slack message describing the experiment will be posted to the specified channel. Below is a sample slack notification from this task.
34+
35+
![Sample slack notificiation](../../images/slack-notification.png)
36+
3737
### Requirements
3838

39-
#### Slack API Token
39+
#### Slack API token
4040

4141
An API token allowing posting messages to the desired slack channel is needed. To obtain a suitable token, see [Sending messages using Incoming Webhooks](https://api.slack.com/messaging/webhooks). Once you have the token, store it in a Kubernetes secret. For example, to create the secret _slack-secret_ in the default namespace:
4242

@@ -54,35 +54,34 @@ kubectl apply -f https://raw.githubusercontent.com/iter8-tools/iter8/master/samp
5454

5555
??? info "Inspect role and rolebinding"
5656
```yaml linenums="1"
57-
# This role enables reading of secrets
58-
apiVersion: rbac.authorization.k8s.io/v1
59-
kind: ClusterRole
60-
metadata:
61-
name: iter8-secret-reader
62-
rules:
63-
- apiGroups:
64-
- ""
65-
resources:
66-
- secrets
67-
verbs: ["get", "list"]
68-
---
69-
# This role binding enables Iter8 handler to read secrets in the default namespace.
70-
# To change the namespace apply to the target namespace
71-
apiVersion: rbac.authorization.k8s.io/v1
72-
kind: RoleBinding
73-
metadata:
74-
name: iter8-secret-reader-handler
75-
roleRef:
76-
apiGroup: rbac.authorization.k8s.io
77-
kind: ClusterRole
78-
name: iter8-secret-reader
79-
subjects:
80-
- kind: ServiceAccount
81-
name: iter8-handlers
82-
namespace: iter8-system
83-
57+
# This role enables reading of secrets
58+
apiVersion: rbac.authorization.k8s.io/v1
59+
kind: ClusterRole
60+
metadata:
61+
name: iter8-secret-reader
62+
rules:
63+
- apiGroups:
64+
- ""
65+
resources:
66+
- secrets
67+
verbs: ["get", "list"]
68+
---
69+
# This role binding enables Iter8 handler to read secrets in the default namespace.
70+
# To change the namespace apply to the target namespace
71+
apiVersion: rbac.authorization.k8s.io/v1
72+
kind: RoleBinding
73+
metadata:
74+
name: iter8-secret-reader-handler
75+
roleRef:
76+
apiGroup: rbac.authorization.k8s.io
77+
kind: ClusterRole
78+
name: iter8-secret-reader
79+
subjects:
80+
- kind: ServiceAccount
81+
name: iter8-handlers
82+
namespace: iter8-system
8483
```
8584

86-
#### Target Slack Channel ID
85+
#### Slack channel ID
8786

8887
A slack channel is identified by an id. To find the id, open the slack channel in a web browser. The channel id is the portion of the URL of the form: `CXXXXXXXX`

0 commit comments

Comments
 (0)