Add example helm chart, replace example dashboard.

This commit is contained in:
Jeremy Edwards
2019-03-26 12:43:57 -07:00
parent 3b1c6b9141
commit eaa811f9ac
22 changed files with 834 additions and 159 deletions

@ -42,7 +42,6 @@ GOLANG_VERSION = 1.12
HELM_VERSION = 2.13.0
HUGO_VERSION = 0.54.0
KUBECTL_VERSION = 1.13.0
PROTOC_RELEASE_BASE = https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTOC_VERSION)/protoc-$(PROTOC_VERSION)
GO = go
GO_BIN := $(GOPATH)/bin
@ -52,11 +51,11 @@ TOOLCHAIN_DIR = $(BUILD_DIR)/toolchain
TOOLCHAIN_BIN = $(TOOLCHAIN_DIR)/bin
PROTOC := $(TOOLCHAIN_BIN)/protoc
PROTOC_INCLUDES := $(TOOLCHAIN_DIR)/include/
GCP_PROJECT_ID = "Set $$GCP_PROJECT_ID in your bashrc."
GCP_PROJECT_ID =
GCP_PROJECT_FLAG = --project=$(GCP_PROJECT_ID)
OM_SITE_GCP_PROJECT_ID = open-match-site
OM_SITE_GCP_PROJECT_FLAG = --project=$(OM_SITE_GCP_PROJECT_ID)
REGISTRY := gcr.io/$(GCP_PROJECT_ID)
REGISTRY = gcr.io/$(GCP_PROJECT_ID)
TAG := $(VERSION)
ALTERNATE_TAG := dev
GKE_CLUSTER_NAME = om-cluster
@ -88,6 +87,11 @@ ifneq (,$(wildcard $(TOOLCHAIN_GOLANG_DIR)/bin/go))
export PATH := $(TOOLCHAIN_GOLANG_DIR):$(PATH)
endif
# Get the project from gcloud if it's not set.
ifeq ($(GCP_PROJECT_ID),)
export GCP_PROJECT_ID = $(shell gcloud config list --format 'value(core.project)')
endif
ifeq ($(OS),Windows_NT)
# TODO: Windows packages are here but things are broken since many paths are Linux based and zip vs tar.gz.
HELM_PACKAGE = https://storage.googleapis.com/kubernetes-helm/helm-v$(HELM_VERSION)-windows-amd64.zip
@ -244,6 +248,9 @@ clean-images:
-docker rmi -f $(REGISTRY)/openmatch-frontendclient:$(TAG) $(REGISTRY)/openmatch-frontendclient:$(ALTERNATE_TAG)
-docker rmi -f $(REGISTRY)/openmatch-evaluator-simple:$(TAG) $(REGISTRY)/openmatch-evaluator-simple:$(ALTERNATE_TAG)
install-redis: build/toolchain/bin/helm$(EXE_EXTENSION)
$(HELM) upgrade --install --wait --debug redis stable/redis --namespace redis
chart-deps: build/toolchain/bin/helm$(EXE_EXTENSION)
(cd install/helm/open-match; $(HELM) dependency update)
@ -256,6 +263,15 @@ install-chart: build/toolchain/bin/helm$(EXE_EXTENSION)
--set openmatch.image.registry=$(REGISTRY) \
--set openmatch.image.tag=$(TAG)
install-example-chart: build/toolchain/bin/helm$(EXE_EXTENSION)
$(HELM) upgrade --install --wait --debug open-match-example install/helm/open-match-example \
--namespace=open-match \
--set openmatch.image.registry=$(REGISTRY) \
--set openmatch.image.tag=$(TAG)
delete-example-chart: build/toolchain/bin/helm$(EXE_EXTENSION)
-$(HELM) delete --purge open-match-example
dry-chart: build/toolchain/bin/helm$(EXE_EXTENSION)
$(HELM) upgrade --install --wait --debug --dry-run open-match install/helm/open-match \
--namespace=open-match \
@ -349,7 +365,7 @@ build/toolchain/python/:
virtualenv --python=python3 build/toolchain/python/
# Hack to workaround some crazy bug in pip that's chopping off python executable's name.
cd build/toolchain/python/bin && ln -s python3 pytho
cd build/toolchain/python/ && . bin/activate && pip install grpcio-tools && deactivate
cd build/toolchain/python/ && source bin/activate && pip install grpcio-tools && deactivate
build/toolchain/bin/protoc$(EXE_EXTENSION):
mkdir -p $(TOOLCHAIN_BIN)
@ -377,10 +393,10 @@ internal/pb/function.pb.go: internal/pb/messages.pb.go
mmlogic-simple-protos: examples/functions/python3/mmlogic-simple/api/protobuf_spec/messages_pb2.py examples/functions/python3/mmlogic-simple/api/protobuf_spec/mmlogic_pb2.py
examples/functions/python3/mmlogic-simple/api/protobuf_spec/%_pb2.py: api/protobuf-spec/%.proto build/toolchain/python/
. build/toolchain/python/bin/activate && python3 -m grpc_tools.protoc -I $(CURDIR) -I $(PROTOC_INCLUDES) --python_out=examples/functions/python3/mmlogic-simple/ --grpc_python_out=examples/functions/python3/mmlogic-simple/ $< && deactivate
source build/toolchain/python/bin/activate && python3 -m grpc_tools.protoc -I $(CURDIR) -I $(PROTOC_INCLUDES) --python_out=examples/functions/python3/mmlogic-simple/ --grpc_python_out=examples/functions/python3/mmlogic-simple/ $< && deactivate
internal/pb/%_pb2.py: api/protobuf-spec/%.proto build/toolchain/python/
. build/toolchain/python/bin/activate && python3 -m grpc_tools.protoc -I $(CURDIR) -I $(PROTOC_INCLUDES) --python_out=$(CURDIR) --grpc_python_out=$(CURDIR) $< && deactivate
source build/toolchain/python/bin/activate && python3 -m grpc_tools.protoc -I $(CURDIR) -I $(PROTOC_INCLUDES) --python_out=$(CURDIR) --grpc_python_out=$(CURDIR) $< && deactivate
build:
$(GO) build ./...
@ -409,10 +425,10 @@ cmd/mmlogicapi/mmlogicapi: internal/pb/mmlogic.pb.go
examples/backendclient/backendclient: internal/pb/backend.pb.go
cd examples/backendclient; $(GO_BUILD_COMMAND)
examples/evaluators/golang/simple: internal/pb/messages.pb.go
examples/evaluators/golang/simple/simple: internal/pb/messages.pb.go
cd examples/evaluators/golang/simple; $(GO_BUILD_COMMAND)
examples/functions/golang/manual-simple: internal/pb/messages.pb.go
examples/functions/golang/manual-simple/manual-simple: internal/pb/messages.pb.go
cd examples/functions/golang/manual-simple; $(GO_BUILD_COMMAND)
test/cmd/clientloadgen/clientloadgen:
@ -450,7 +466,10 @@ deploy-dev-site: build/site/
run-site: build/toolchain/bin/hugo$(EXE_EXTENSION)
cd site/ && ../build/toolchain/bin/hugo$(EXE_EXTENSION) server --debug --watch --enableGitInfo . --bind 0.0.0.0 --port $(SITE_PORT) --disableFastRender
all: cmd/backendapi/backendapi cmd/frontendapi/frontendapi cmd/mmforc/mmforc cmd/mmlogicapi/mmlogicapi examples/backendclient/backendclient examples/evaluators/golang/simple examples/functions/golang/manual-simple test/cmd/clientloadgen/clientloadgen test/cmd/frontendclient/frontendclient
all: service-binaries client-binaries example-binaries
service-binaries: cmd/backendapi/backendapi cmd/frontendapi/frontendapi cmd/mmforc/mmforc cmd/mmlogicapi/mmlogicapi
client-binaries: examples/backendclient/backendclient test/cmd/clientloadgen/clientloadgen test/cmd/frontendclient/frontendclient
example-binaries: examples/evaluators/golang/simple/simple examples/functions/golang/manual-simple
presubmit: fmt vet build test
clean-site:
@ -501,5 +520,5 @@ proxy-prometheus: build/toolchain/bin/kubectl$(EXE_EXTENSION)
proxy-dashboard: build/toolchain/bin/kubectl$(EXE_EXTENSION)
$(KUBECTL) port-forward --namespace kube-system $(shell $(KUBECTL) get pod --namespace kube-system --selector="app=kubernetes-dashboard" --output jsonpath='{.items[0].metadata.name}') $(DASHBOARD_PORT):9090 $(PORT_FORWARD_ADDRESS_FLAG)
.PHONY: proxy-dashboard proxy-prometheus proxy-grafana
.PHONY: proxy-dashboard proxy-prometheus proxy-grafana clean clean-toolchain clean-binaries clean-protos presubmit test vet

@ -219,6 +219,26 @@ cd open-match
Lastly, this project uses go modules so you'll want to set `export GO111MODULE=on` before building.
## Zero to Open Match
To deploy Open Match quickly to a Kubernetes cluster run these commands.
```bash
# Downloads all the tools.
make install-toolchain
# Create a GKE Cluster
make create-gke-cluster
# OR Create a Minikube Cluster
make create-mini-cluster
# Install Helm
make push-helm
# Build and push images
make push-images -j4
# Deploy Open Match with example functions
make install-chart install-example-chart
```
## Docker Image Builds
All the core components for Open Match are written in Golang and use the [Dockerfile multistage builder pattern](https://docs.docker.com/develop/develop-images/multistage-build/). This pattern uses intermediate Docker containers as a Golang build environment while producing lightweight, minimized container images as final build artifacts. When the project is ready for production, we will modify the `Dockerfile`s to uncomment the last build stage. Although this pattern is great for production container images, it removes most of the utilities required to troubleshoot issues during development.
## Configuration

@ -5,5 +5,6 @@ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo .
FROM gcr.io/distroless/static
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/examples/backendclient/backendclient .
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/examples/backendclient/profiles profiles
ENTRYPOINT ["/backendclient"]

@ -5,7 +5,5 @@ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo .
FROM gcr.io/distroless/static
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/examples/evaluators/golang/simple/simple .
# TODO: Remove embedding the config once loading configuration is normalized and this can respect the ConfigMap.
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/config/matchmaker_config.yaml ./config/
ENTRYPOINT ["/simple"]

@ -16,8 +16,9 @@ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admi
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
# Deploy Open Match
helm upgrade --install --wait --debug open-match install/helm/open-match \
--namespace=open-match \
--set openmatch.image.registry=gcr.io/open-match-public-images \
--set openmatch.image.tag=0.4.0
helm upgrade --install --wait --debug open-match \
install/helm/open-match \
--namespace=open-match \
--set openmatch.image.registry=$(REGISTRY) \
--set openmatch.image.tag=$(TAG)
```

@ -0,0 +1,36 @@
# Copyright 2019 Google Inc. 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.
apiVersion: v1
appVersion: "0.4.0"
version: 0.4.0
name: open-match-example
description: Flexible, extensible, and scalable video game matchmaking.
keywords:
- kubernetes
- game-development
- multiplayer
- matchmaking
- go
- golang
home: https://github.com/GoogleCloudPlatform/open-match
sources:
- https://github.com/GoogleCloudPlatform/open-match
maintainers:
- name: open-match
email: open-match-discuss@googlegroups.com
url: https://groups.google.com/forum/#!forum/open-match-discuss
engine: gotpl
#icon: https://github.com/GoogleCloudPlatform/open-match/raw/master/docs/open-match.png
tillerVersion: ">2.10.0"

@ -0,0 +1,14 @@
Open Match Example Helm Chart
=============================
This chart installs the Open Match example clientloadgen, frontendclient, backendclient, and example MMF and evaluator.
To deploy this chart run:
```bash
helm upgrade --install --wait --debug open-match-example
install/helm/open-match-example \
--namespace=open-match \
--set openmatch.image.registry=$(REGISTRY) \
--set openmatch.image.tag=$(TAG)
```

@ -0,0 +1,3 @@
The Open Match examples have been installed in the namespace {{ .Release.Namespace }}.
You can watch the status by running 'kubectl --namespace {{ .Release.Namespace }} get pods,svc'

@ -0,0 +1,48 @@
{*
Copyright 2019 Google Inc. 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.
*}
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "openmatch.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 "openmatch.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 "openmatch.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

@ -0,0 +1,67 @@
# Copyright 2019 Google Inc. 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.
{{- if .Values.openmatch.backendclient.install }}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: om-backendclient
namespace: {{ .Release.Namespace }}
labels:
app: {{ template "openmatch.name" . }}
component: backendclient
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: 1
selector:
matchLabels:
app: {{ template "openmatch.name" . }}
component: backendclient
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
template:
namespace: {{ .Release.Namespace }}
metadata:
labels:
app: {{ template "openmatch.name" . }}
component: backendclient
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
containers:
- name: om-backendclient
image: "{{ .Values.openmatch.image.registry }}/{{ .Values.openmatch.image.backendclient.name}}:{{ .Values.openmatch.image.tag }}"
imagePullPolicy: {{ .Values.openmatch.image.backendclient.pullPolicy }}
volumeMounts:
- name: om-config-volume
mountPath: {{ .Values.openmatch.config.matchmaker }}
resources:
requests:
memory: 100Mi
cpu: 100m
env:
- name: REDIS_SERVICE_HOST
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_HOST)"
- name: REDIS_SERVICE_PORT
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_PORT)"
volumes:
- name: om-config-volume
configMap:
name: om-configmap
{{- end }}

@ -0,0 +1,67 @@
# Copyright 2019 Google Inc. 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.
{{- if .Values.openmatch.clientloadgen.install }}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: om-clientloadgen
namespace: {{ .Release.Namespace }}
labels:
app: {{ template "openmatch.name" . }}
component: clientloadgen
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: 1
selector:
matchLabels:
app: {{ template "openmatch.name" . }}
component: clientloadgen
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
template:
namespace: {{ .Release.Namespace }}
metadata:
labels:
app: {{ template "openmatch.name" . }}
component: clientloadgen
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
containers:
- name: om-clientloadgen
image: "{{ .Values.openmatch.image.registry }}/{{ .Values.openmatch.image.clientloadgen.name}}:{{ .Values.openmatch.image.tag }}"
imagePullPolicy: {{ .Values.openmatch.image.clientloadgen.pullPolicy }}
volumeMounts:
- name: om-config-volume
mountPath: {{ .Values.openmatch.config.matchmaker }}
resources:
requests:
memory: 100Mi
cpu: 100m
env:
- name: REDIS_SERVICE_HOST
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_HOST)"
- name: REDIS_SERVICE_PORT
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_PORT)"
volumes:
- name: om-config-volume
configMap:
name: om-configmap
{{- end }}

@ -0,0 +1,67 @@
# Copyright 2019 Google Inc. 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.
{{- if .Values.openmatch.evaluator.install }}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: om-evaluator
namespace: {{ .Release.Namespace }}
labels:
app: {{ template "openmatch.name" . }}
component: evaluator
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: 1
selector:
matchLabels:
app: {{ template "openmatch.name" . }}
component: evaluator
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
template:
namespace: {{ .Release.Namespace }}
metadata:
labels:
app: {{ template "openmatch.name" . }}
component: evaluator
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
containers:
- name: om-evaluator
image: "{{ .Values.openmatch.image.registry }}/{{ .Values.openmatch.image.evaluator.name}}:{{ .Values.openmatch.image.tag }}"
imagePullPolicy: {{ .Values.openmatch.image.evaluator.pullPolicy }}
volumeMounts:
- name: om-config-volume
mountPath: {{ .Values.openmatch.config.matchmaker }}
resources:
requests:
memory: 100Mi
cpu: 100m
env:
- name: REDIS_SERVICE_HOST
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_HOST)"
- name: REDIS_SERVICE_PORT
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_PORT)"
volumes:
- name: om-config-volume
configMap:
name: om-configmap
{{- end }}

@ -0,0 +1,67 @@
# Copyright 2019 Google Inc. 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.
{{- if .Values.openmatch.frontendclient.install }}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: om-frontendclient
namespace: {{ .Release.Namespace }}
labels:
app: {{ template "openmatch.name" . }}
component: frontendclient
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: 1
selector:
matchLabels:
app: {{ template "openmatch.name" . }}
component: frontendclient
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
template:
namespace: {{ .Release.Namespace }}
metadata:
labels:
app: {{ template "openmatch.name" . }}
component: frontendclient
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
containers:
- name: om-frontendclient
image: "{{ .Values.openmatch.image.registry }}/{{ .Values.openmatch.image.frontendclient.name}}:{{ .Values.openmatch.image.tag }}"
imagePullPolicy: {{ .Values.openmatch.image.frontendclient.pullPolicy }}
volumeMounts:
- name: om-config-volume
mountPath: {{ .Values.openmatch.config.matchmaker }}
resources:
requests:
memory: 100Mi
cpu: 100m
env:
- name: REDIS_SERVICE_HOST
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_HOST)"
- name: REDIS_SERVICE_PORT
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_PORT)"
volumes:
- name: om-config-volume
configMap:
name: om-configmap
{{- end }}

@ -0,0 +1,67 @@
# Copyright 2019 Google Inc. 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.
{{- if .Values.openmatch.function.install }}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: om-function
namespace: {{ .Release.Namespace }}
labels:
app: {{ template "openmatch.name" . }}
component: function
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: 1
selector:
matchLabels:
app: {{ template "openmatch.name" . }}
component: function
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
template:
namespace: {{ .Release.Namespace }}
metadata:
labels:
app: {{ template "openmatch.name" . }}
component: function
chart: {{ template "openmatch.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
containers:
- name: om-function
image: "{{ .Values.openmatch.image.registry }}/{{ .Values.openmatch.image.function.name}}:{{ .Values.openmatch.image.tag }}"
imagePullPolicy: {{ .Values.openmatch.image.function.pullPolicy }}
volumeMounts:
- name: om-config-volume
mountPath: {{ .Values.openmatch.config.matchmaker }}
resources:
requests:
memory: 100Mi
cpu: 100m
env:
- name: REDIS_SERVICE_HOST
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_HOST)"
- name: REDIS_SERVICE_PORT
value: "$(OPEN_MATCH_REDIS_MASTER_SERVICE_PORT)"
volumes:
- name: om-config-volume
configMap:
name: om-configmap
{{- end }}

@ -0,0 +1,44 @@
# Copyright 2019 Google Inc. 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.
openmatch:
backendclient:
install: true
frontendclient:
install: true
clientloadgen:
install: true
evaluator:
install: true
function:
install: true
config:
matchmaker: /config
image:
registry: gcr.io/open-match-public-images
tag: 0.4.0
backendclient:
name: openmatch-backendclient
pullPolicy: Always
frontendclient:
name: openmatch-frontendclient
pullPolicy: Always
clientloadgen:
name: openmatch-clientloadgen
pullPolicy: Always
evaluator:
name: openmatch-evaluator-simple
function:
name: openmatch-mmf-go-mmlogic-simple
pullPolicy: Always

@ -6,7 +6,7 @@ To deploy this chart run:
```bash
helm upgrade --install --wait --debug open-match install/helm/open-match \
--namespace=open-match \
--set openmatch.image.registry=$(REGISTRY) \
--set openmatch.image.tag=$(TAG)
--namespace=open-match \
--set openmatch.image.registry=$(REGISTRY) \
--set openmatch.image.tag=$(TAG)
```

@ -0,0 +1,289 @@
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": 2,
"iteration": 1552341236942,
"links": [],
"panels": [
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"description": "",
"fill": 1,
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 0
},
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"paceLength": 10,
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "rate(open_match_frontend_grpc_requests[$timewindow])",
"format": "time_series",
"interval": "",
"intervalFactor": 1,
"legendFormat": "/{{component}}.{{method}}",
"refId": "A"
},
{
"expr": "rate(open_match_backend_grpc_requests[$timewindow])",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "/{{component}}.{{method}}",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Request Rate",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"decimals": null,
"format": "reqps",
"label": "",
"logBase": 10,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
"y": 0
},
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"paceLength": 10,
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "histogram_quantile(0.9, rate(open_match_grpc_io_server_server_latency_bucket[$timewindow]))",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "{{grpc_server_method}}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "RPC Latency",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "µs",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
}
],
"schemaVersion": 18,
"style": "dark",
"tags": [],
"templating": {
"list": [
{
"allValue": null,
"current": {
"text": "5m",
"value": "5m"
},
"hide": 0,
"includeAll": false,
"label": "Time Window",
"multi": false,
"name": "timewindow",
"options": [
{
"selected": true,
"text": "5m",
"value": "5m"
},
{
"selected": false,
"text": "10m",
"value": "10m"
},
{
"selected": false,
"text": "15m",
"value": "15m"
},
{
"selected": false,
"text": "30m",
"value": "30m"
},
{
"selected": false,
"text": "1h",
"value": "1h"
},
{
"selected": false,
"text": "4h",
"value": "4h"
}
],
"query": "5m,10m,15m,30m,1h,4h",
"skipUrlSync": false,
"type": "custom"
}
]
},
"time": {
"from": "now-30m",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "",
"title": "gRPC",
"uid": "nlrmG_Cmk",
"version": 4
}

@ -1,138 +0,0 @@
{
"annotations": {
"list": [{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": 1,
"links": [],
"panels": [{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"fill": 1,
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
"y": 0
},
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"paceLength": 10,
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"stack": false,
"steppedLine": false,
"targets": [{
"expr": "histogram_quantile(0.9, rate(open_match_grpc_io_server_server_latency_bucket[10m]))",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "{{grpc_server_method}}",
"refId": "A"
}],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "RPC Latency",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [{
"format": "µs",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
}],
"schemaVersion": 18,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "",
"title": "RPCs",
"uid": "HvKlCC9mk",
"version": 1
}

@ -19,8 +19,9 @@ metadata:
subjects:
- kind: ServiceAccount
name: default
namespace: default
namespace: {{ .Release.Namespace }}
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io

@ -35,7 +35,7 @@ openmatch:
grpc:
port: 50503
config:
matchmaker: /go/src/github.com/GoogleCloudPlatform/open-match/config
matchmaker: /config
image:
registry: gcr.io/open-match-public-images
tag: 0.4.0

@ -5,5 +5,7 @@ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o clientloadgen .
FROM gcr.io/distroless/static
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/test/cmd/clientloadgen/clientloadgen .
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/test/cmd/clientloadgen/*.percent ./
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/test/cmd/clientloadgen/*.ping ./
ENTRYPOINT ["/clientloadgen"]

@ -5,5 +5,7 @@ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o frontendclient .
FROM gcr.io/distroless/static
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/test/cmd/frontendclient/frontendclient .
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/test/cmd/frontendclient/*.percent ./
COPY --from=builder /go/src/github.com/GoogleCloudPlatform/open-match/test/cmd/frontendclient/*.ping ./
ENTRYPOINT ["/frontendclient"]