Skip to content

Commit c174fe7

Browse files
authored
Merge pull request #254 from istalker2/etcd-app-ha
etcd app with HA
2 parents c7b8ae2 + e372f7f commit c174fe7

File tree

13 files changed

+168
-39
lines changed

13 files changed

+168
-39
lines changed

examples/etcd/README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ etcd cluster application
55

66
1. Start AppController Pod. Suppose its name is k8s-appcontroller
77
2. Upload etcd graph definition resources to k8s by running create.sh.
8-
This script uploads two AppController flows: `etcd-bootstrap` and `etcd-scale`.
8+
This script uploads three AppController flows: `etcd-bootstrap`, `etcd-scale` and `etcd-recover`.
99
3. This application uses custom etcd docker image which is the original etcd image plus kubectl binary.
1010
Use build-image.sh script to build the image `etcd-kubectl` and then publish it to the docker repository
1111
used by your k8s environment.
@@ -19,6 +19,8 @@ etcd cluster application
1919
`--arg clusterName=my-cluster` - cluster name. This allows to deploy several independent cluster in one k8s namespace.
2020
If omitted, `etcd` name is used by default.
2121

22+
`--arg livenessProbeInterval=30` - how often monitoring job examines cluster health (in seconds, default is 30).
23+
2224
3. Scale the cluster:
2325

2426
`kubectl exec k8s-appcontroller kubeac run etcd-scale -n +1 --arg clusterName=my-cluster`
@@ -28,3 +30,14 @@ added node is going to be deleted. At the moment it is only possible to scale cl
2830
However, any number of nodes can be removed. Note, that this can also remove nodes created upon initial deployment.
2931

3032
`--arg clusterName=my-cluster` - name of the cluster to scale (`etcd` if not specified).
33+
34+
4. Recover broken cluster nodes
35+
36+
`kubectl exec k8s-appcontroller kubeac run etcd-recover --arg clusterName=my-cluster --arg nodeSuffix=abcde`
37+
38+
`--arg clusterName=my-cluster` - name of the cluster to scale (`etcd` if not specified).
39+
40+
`--arg nodeSuffix=abcde` - name suffix of the broken node (XXX in http://etcd-XXX:2379)
41+
42+
However, there is no need to invoke this flow manually as the bootstrap flow creates a job that checks and
43+
recovers broken nodes on the regular basis

examples/etcd/create.sh

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,5 @@ do
1111
cat $file | $KUBECTL_NAME exec -i $AC_POD_NAME kubeac wrap | $KUBECTL_NAME create -f-
1212
done
1313

14-
for file in dependencies/*.yaml
15-
do
16-
cat $file | $KUBECTL_NAME create -f-
17-
done
14+
$KUBECTL_NAME create -f dependencies/
15+
$KUBECTL_NAME create -f resources/

examples/etcd/dependencies/etcd-bootstrap.yaml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,17 @@ kind: Dependency
3030
metadata:
3131
generateName: dependency-
3232
labels:
33-
flow: cleanup
33+
flow: etcd-bootstrap
34+
parent: pod/initial-etcd-pod-$AC_NAME
35+
child: job/monitor-$clusterName-job
36+
---
37+
apiVersion: appcontroller.k8s/v1alpha1
38+
kind: Dependency
39+
metadata:
40+
generateName: dependency-
41+
labels:
42+
flow: etcd-bootstrap-cleanup
3443
parent: flow/etcd-bootstrap
35-
child: job/delete-node-$AC_NAME-job
44+
child: job/delete-node-$NAME-job
45+
args:
46+
NAME: $AC_NAME
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: appcontroller.k8s/v1alpha1
2+
kind: Dependency
3+
metadata:
4+
generateName: dependency-
5+
labels:
6+
flow: etcd-recover
7+
parent: flow/etcd-recover
8+
child: job/delete-node-$NAME-job
9+
args:
10+
NAME: $nodeSuffix
11+
---
12+
apiVersion: appcontroller.k8s/v1alpha1
13+
kind: Dependency
14+
metadata:
15+
generateName: dependency-
16+
labels:
17+
flow: etcd-recover
18+
parent: job/delete-node-$NAME-job
19+
child: flow/etcd-scale
20+
args:
21+
clusterName: $clusterName

examples/etcd/dependencies/etcd-scale.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ kind: Dependency
3030
metadata:
3131
generateName: dependency-
3232
labels:
33-
flow: cleanup
33+
flow: etcd-scale-cleanup
3434
parent: flow/etcd-scale
35-
child: job/delete-node-$AC_NAME-job
35+
child: job/delete-node-$NAME-job
36+
args:
37+
NAME: $AC_NAME
3638

examples/etcd/resdefs/bootstrap-flow.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@ exported: true
77
construction:
88
flow: etcd-bootstrap
99
destruction:
10-
flow: cleanup
10+
flow: etcd-bootstrap-cleanup
1111

1212
replicaSpace: etcd-$clusterName-node
1313

1414
parameters:
1515
clusterName:
1616
description: etcd cluster name
1717
default: etcd
18+
livenessProbeInterval:
19+
description: how often monitoring job examines cluster health (in seconds)
20+
default: "30"

examples/etcd/resdefs/delete-node-job.yaml

Lines changed: 0 additions & 27 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: appcontroller.k8s/v1alpha1
2+
kind: Flow
3+
metadata:
4+
name: etcd-recover
5+
6+
exported: true
7+
construction:
8+
flow: etcd-recover
9+
10+
replicaSpace: etcd-recover-$clusterName
11+
12+
parameters:
13+
clusterName:
14+
description: etcd cluster name
15+
default: etcd
16+
nodeSuffix:
17+
description: node name suffix (X in http://etcd-X:2379)

examples/etcd/resdefs/scale-flow.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ exported: true
77
construction:
88
flow: etcd-scale
99
destruction:
10-
flow: cleanup
10+
flow: etcd-scale-cleanup
1111

1212
replicaSpace: etcd-$clusterName-node
1313

examples/etcd/resdefs/service.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ metadata:
77
serviceRole: cluster
88
name: $clusterName-client
99
spec:
10+
type: NodePort
1011
ports:
1112
- name: etcd-client-port
1213
port: 2379

0 commit comments

Comments
 (0)