Skip to content

Commit 4466fbb

Browse files
Ticket #63: Prepare kubernetes files (RabbitMQ + Kafka)
1 parent 69824ad commit 4466fbb

File tree

18 files changed

+422
-39
lines changed

18 files changed

+422
-39
lines changed

default.ps1

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,19 @@ task publishDockerCI -depends publishDocker {
174174
exec { docker push simpleidserver/eventmeshserver:0.0.5 }
175175
}
176176

177+
# Kubernetes
178+
task deployEventMeshServerInMemoryBroker {
179+
exec { kubectl apply -f ./kubernetes/eventmeshserver.yml --namespace=faas }
180+
}
181+
182+
task deployEventMeshServerRabbitMQ {
183+
exec { kubectl apply -f ./kubernetes/eventmeshserver.rabbitmq.yml --namespace=faas }
184+
}
185+
186+
task deployEventMeshServerKafka {
187+
exec { kubectl apply -f ./kubernetes/eventmeshserver.kafka.yml --namespace=faas }
188+
}
189+
177190
task test {
178191
Push-Location -Path $base_dir\tests\EventMesh.Runtime.Tests
179192

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,13 @@
1-
# Docker
1+
# Docker
2+
3+
## InMemory
4+
5+
TODO
6+
7+
## RabbitMQ
8+
9+
TODO
10+
11+
## Kafka
12+
13+
TODO
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: faas
5+
---
6+
apiVersion: v1
7+
kind: Service
8+
metadata:
9+
name: eventmeshserver-entry
10+
spec:
11+
type: NodePort
12+
selector:
13+
run: eventmeshserver
14+
ports:
15+
- port: 4000
16+
name: server
17+
protocol: UDP
18+
targetPort: 4000
19+
nodePort: 30005
20+
- port: 5001
21+
name: website
22+
protocol: TCP
23+
targetPort: 5001
24+
nodePort: 30004
25+
---
26+
apiVersion: apps/v1
27+
kind: Deployment
28+
metadata:
29+
name: eventmeshserver
30+
spec:
31+
selector:
32+
matchLabels:
33+
run: eventmeshserver
34+
replicas: 1
35+
template:
36+
metadata:
37+
labels:
38+
run: eventmeshserver
39+
spec:
40+
containers:
41+
- name: eventmeshserver
42+
image: localhost:5000/eventmeshserver
43+
ports:
44+
- containerPort: 4000
45+
protocol: UDP
46+
- containerPort: 5001
47+
env:
48+
- name: Kafka.Enabled
49+
value: "true"
50+
- name: Kafka.BootstrapServers
51+
value: "kafka-service.faas.svc.cluster.local:9092"
52+
---
53+
apiVersion: v1
54+
kind: Service
55+
metadata:
56+
name: kafka-service
57+
spec:
58+
type: LoadBalancer
59+
ports:
60+
- port: 9092
61+
name: kafka-port
62+
protocol: TCP
63+
selector:
64+
app: kafka
65+
---
66+
apiVersion: v1
67+
kind: Service
68+
metadata:
69+
name: zoo1
70+
spec:
71+
type: LoadBalancer
72+
ports:
73+
- name: client
74+
port: 2181
75+
protocol: TCP
76+
- name: follower
77+
port: 2888
78+
protocol: TCP
79+
- name: leader
80+
port: 3888
81+
protocol: TCP
82+
selector:
83+
app: zookeeper-1
84+
---
85+
apiVersion: apps/v1
86+
kind: Deployment
87+
metadata:
88+
name: zookeeper-deployment-1
89+
spec:
90+
replicas: 1
91+
selector:
92+
matchLabels:
93+
app: zookeeper-1
94+
template:
95+
metadata:
96+
labels:
97+
app: zookeeper-1
98+
spec:
99+
containers:
100+
- name: zoo1
101+
image: digitalwonderland/zookeeper
102+
ports:
103+
- containerPort: 2181
104+
env:
105+
- name: ZOOKEEPER_ID
106+
value: "1"
107+
- name: ZOOKEEPER_SERVER_1
108+
value: zoo1
109+
---
110+
apiVersion: apps/v1
111+
kind: Deployment
112+
metadata:
113+
name: kafka-broker1
114+
spec:
115+
replicas: 1
116+
selector:
117+
matchLabels:
118+
app: kafka
119+
template:
120+
metadata:
121+
labels:
122+
app: kafka
123+
spec:
124+
containers:
125+
- name: kafka
126+
image: wurstmeister/kafka
127+
env:
128+
- name: KAFKA_ADVERTISED_PORT
129+
value: "9092"
130+
- name: KAFKA_ADVERTISED_HOST_NAME
131+
value: "kafka-service"
132+
- name: KAFKA_ZOOKEEPER_CONNECT
133+
value: zoo1:2181
134+
- name: KAFKA_BROKER_ID
135+
value: "1"
136+
ports:
137+
- containerPort: 9092
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: faas
5+
---
6+
apiVersion: v1
7+
kind: Service
8+
metadata:
9+
name: eventmeshserver-entry
10+
spec:
11+
type: NodePort
12+
selector:
13+
run: eventmeshserver
14+
ports:
15+
- port: 4000
16+
name: server
17+
protocol: UDP
18+
targetPort: 4000
19+
nodePort: 30005
20+
- port: 5001
21+
name: website
22+
protocol: TCP
23+
targetPort: 5001
24+
nodePort: 30004
25+
---
26+
apiVersion: apps/v1
27+
kind: Deployment
28+
metadata:
29+
name: eventmeshserver
30+
spec:
31+
selector:
32+
matchLabels:
33+
run: eventmeshserver
34+
replicas: 1
35+
template:
36+
metadata:
37+
labels:
38+
run: eventmeshserver
39+
spec:
40+
containers:
41+
- name: eventmeshserver
42+
image: localhost:5000/eventmeshserver
43+
ports:
44+
- containerPort: 4000
45+
protocol: UDP
46+
- containerPort: 5001
47+
env:
48+
- name: RabbitMQ.Enabled
49+
value: "true"
50+
- name: RabbitMQ.HostName
51+
value: "rabbitmq-entry.faas.svc.cluster.local"
52+
- name: RabbitMQ.UserName
53+
value: "guest"
54+
- name: RabbitMQ.Password
55+
value: "guest"
56+
---
57+
apiVersion: v1
58+
kind: Service
59+
metadata:
60+
name: rabbitmq-management
61+
labels:
62+
app: rabbitmq
63+
spec:
64+
ports:
65+
- port: 15672
66+
name: http
67+
nodePort: 30006
68+
selector:
69+
app: rabbitmq
70+
type: NodePort
71+
---
72+
apiVersion: v1
73+
kind: Service
74+
metadata:
75+
name: rabbitmq-entry
76+
spec:
77+
type: ClusterIP
78+
selector:
79+
app: rabbitmq
80+
ports:
81+
- port: 5672
82+
protocol: TCP
83+
targetPort: 5672
84+
---
85+
apiVersion: apps/v1
86+
kind: StatefulSet
87+
metadata:
88+
name: rabbitmq
89+
spec:
90+
serviceName: "rabbitmq"
91+
selector:
92+
matchLabels:
93+
app: rabbitmq
94+
replicas: 1
95+
template:
96+
metadata:
97+
labels:
98+
app: rabbitmq
99+
spec:
100+
containers:
101+
- name: rabbitmq
102+
image: rabbitmq:3.6.6-management-alpine
103+
lifecycle:
104+
postStart:
105+
exec:
106+
command:
107+
- /bin/sh
108+
- -c
109+
- >
110+
if [ -z "$(grep rabbitmq /etc/resolv.conf)" ]; then
111+
sed "s/^search \([^ ]\+\)/search rabbitmq.\1 \1/" /etc/resolv.conf > /etc/resolv.conf.new;
112+
cat /etc/resolv.conf.new > /etc/resolv.conf;
113+
rm /etc/resolv.conf.new;
114+
fi;
115+
until rabbitmqctl node_health_check; do sleep 1; done;
116+
if [[ "$HOSTNAME" != "rabbitmq-0" && -z "$(rabbitmqctl cluster_status | grep rabbitmq-0)" ]]; then
117+
rabbitmqctl stop_app;
118+
rabbitmqctl join_cluster rabbit@rabbitmq-0;
119+
rabbitmqctl start_app;
120+
fi;
121+
rabbitmqctl set_policy ha-all "." '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}'
122+
ports:
123+
- containerPort: 5672
124+
name: amqp
125+
volumeMounts:
126+
- name: rabbitmq
127+
mountPath: /var/lib/rabbitmq
128+
volumeClaimTemplates:
129+
- metadata:
130+
name: rabbitmq
131+
annotations:
132+
volume.alpha.kubernetes.io/storage-class: anything
133+
spec:
134+
accessModes: [ "ReadWriteOnce" ]
135+
resources:
136+
requests:
137+
storage: 1Gi

kubernetes/eventmeshserver.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
name: faas
5+
---
6+
apiVersion: v1
7+
kind: Service
8+
metadata:
9+
name: eventmeshserver-entry
10+
spec:
11+
type: NodePort
12+
selector:
13+
run: eventmeshserver
14+
ports:
15+
- port: 4000
16+
name: server
17+
protocol: UDP
18+
targetPort: 4000
19+
nodePort: 30005
20+
- port: 5001
21+
name: website
22+
protocol: TCP
23+
targetPort: 5001
24+
nodePort: 30004
25+
---
126
apiVersion: apps/v1
227
kind: Deployment
328
metadata:

src/EventMesh.Runtime.AMQP/BrokerConfigurationExtensions.cs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,30 @@ public static AMQPOptions ToAMQPOptions(this BrokerConfiguration conf)
1616
TopicName = conf.GetValue("topicName"),
1717
ConnectionFactory = (opt) =>
1818
{
19-
opt.HostName = conf.GetValue("connectionFactory.hostName");
20-
opt.Port = int.Parse(conf.GetValue("connectionFactory.port"));
21-
opt.UserName = conf.GetValue("connectionFactory.username");
22-
opt.Password = conf.GetValue("connectionFactory.password");
19+
var hostName = conf.GetValue("connectionFactory.hostName");
20+
if (!string.IsNullOrWhiteSpace(hostName))
21+
{
22+
opt.HostName = hostName;
23+
}
24+
25+
var port = int.Parse(conf.GetValue("connectionFactory.port"));
26+
if (port == -1)
27+
{
28+
port = 5672;
29+
}
30+
31+
opt.Port = port;
32+
var userName = conf.GetValue("connectionFactory.username");
33+
if (!string.IsNullOrWhiteSpace(userName))
34+
{
35+
opt.UserName = userName;
36+
}
37+
38+
var password = conf.GetValue("connectionFactory.password");
39+
if (!string.IsNullOrWhiteSpace(password))
40+
{
41+
opt.Password = password;
42+
}
2343
}
2444
};
2545
}

src/EventMesh.Runtime.AMQP/README.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/EventMesh.Runtime.AMQP/ServiceCollectionExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ public static IServiceCollection AddAMQP(this IServiceCollection services, Actio
1818
services.Configure<AMQPOptions>(opt => { });
1919
}
2020

21-
services.AddSingleton<IMessageConsumer, AMQPConsumer>();
22-
services.AddSingleton<IMessagePublisher, AMQPPublisher>();
21+
services.AddScoped<IMessageConsumer, AMQPConsumer>();
22+
services.AddScoped<IMessagePublisher, AMQPPublisher>();
2323
return services;
2424
}
2525
}

0 commit comments

Comments
 (0)