VOL-1295: Deploy a read/write Voltha core pair to each Kubernetes node
- Added Kubernetes manifest for deploying ponsim OLT & ONU adapters
- Added MAC-specific content to BUILD.md

Change-Id: Ib8c972a1feb90ead605bc1c467d36ee4227ff566
diff --git a/BUILD.md b/BUILD.md
index 749777d..fa51929 100644
--- a/BUILD.md
+++ b/BUILD.md
@@ -1,3 +1,72 @@
-# How to Build VOLTHA
+# How to Build and Develop VOLTHA
 
-TODO
\ No newline at end of file
+## Building natively on MAC OS X
+
+For advanced developers this may provide a more comfortable developer environment
+(e.g. by allowing IDE-assisted debugging), but setting it up can be a bit more challenging.
+
+### Prerequisites
+
+* git installed
+* Docker-for-Mac installed
+* Go 1.9
+* Python 2.7
+* virtualenv
+* brew (or macports if you prefer)
+* protoc
+
+Get the Voltha-go repository:
+```
+git clone ssh://<your-user-ID>@gerrit.opencord.org:29418/voltha-go
+cd voltha-go
+```
+
+### Setting up the Go environment
+
+After installing Go on the MAC, the GOPATH environment variable should be set to ~/go.
+Create a symbolic link in the $GOPATH/src tree to the voltha-go repository:
+
+```
+mkdir $GOPATH/src/github.com/opencord
+ln -s ~/repos/voltha-go $GOPATH/src/github.com/opencord/voltha-go
+```
+
+### Installing Voltha dependencies
+
+```
+go get -u google.golang.org/grpc   # gRPC
+go get -u github.com/golang/protobuf/protoc-gen-go   # protoc plugin for Go
+go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
+go get -u github.com/gogo/protobuf/proto   # Clone function
+go get -u go.uber.org/zap   # logger
+go get -u github.com/Shopify/sarama   # kafka
+go get -u github.com/google/uuid
+go get -u github.com/cevaris/ordered_map
+go get -u github.com/gyuho/goraph
+go get -u go.etcd.io/etcd   # etcd client
+```
+
+### Building the protobufs
+```
+cd voltha-go
+protos/scripts/build_protos.sh protos
+```
+
+### Building and running Voltha
+A fatal error occurs if Voltha is built and executed at this stage:
+```
+> go run rw_core/main.go
+panic: /debug/requests is already registered.
+You may have two independent copies of golang.org/x/net/trace in your binary, trying to maintain separate state.
+This may involve a vendored copy of golang.org/x/net/trace.
+```
+Fix this by removing directory ~/go/src/go.etcd.io/etcd/vendor/golang.org/x/net/trace.
+
+Voltha can now be run directly at the shell prompt:
+```
+go run rw_core/main.go
+```
+or from a docker image built via:
+```
+make rw_core
+```
diff --git a/k8s/adapters-ponsim.yml b/k8s/adapters-ponsim.yml
new file mode 100644
index 0000000..55b7411
--- /dev/null
+++ b/k8s/adapters-ponsim.yml
@@ -0,0 +1,106 @@
+# Copyright 2018 the original author or authors.
+#
+# 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.
+
+# Ponsim OLT adapter
+
+apiVersion: v1
+kind: Service
+metadata:
+  name: adapter-ponsim-olt
+  namespace: voltha
+spec:
+  clusterIP: None
+  selector:
+    app: adapter-ponsim-olt
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: adapter-ponsim-olt
+  namespace: voltha
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: adapter-ponsim-olt
+  template:
+    metadata:
+      labels:
+        app: adapter-ponsim-olt
+      annotations:
+        cni: "calico"
+    spec:
+      containers:
+        - name: adapter-ponsim-olt
+          image: voltha-adapter-ponsim-olt
+          env:
+            - name: NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+          args:
+            - "/adapters/adapters/ponsim_olt/main.py"
+            - "-v"
+            - "--name=ponsim_olt"
+            - "--kafka_adapter=kafka.$(NAMESPACE).svc.cluster.local:9092"
+            - "--kafka_cluster=kafka.$(NAMESPACE).svc.cluster.local:9092"
+            - "--core_topic=rwcore"
+          imagePullPolicy: IfNotPresent
+---
+
+# Ponsim ONU adapter
+
+apiVersion: v1
+kind: Service
+metadata:
+  name: adapter-ponsim-onu
+  namespace: voltha
+spec:
+  clusterIP: None
+  selector:
+    app: adapter-ponsim-onu
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: adapter-ponsim-onu
+  namespace: voltha
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: adapter-ponsim-onu
+  template:
+    metadata:
+      labels:
+        app: adapter-ponsim-onu
+      annotations:
+        cni: "calico"
+    spec:
+      containers:
+        - name: adapter-ponsim-onu
+          image: voltha-adapter-ponsim-onu
+          env:
+            - name: NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+          args:
+            - "/adapters/adapters/ponsim_onu/main.py"
+            - "-v"
+            - "--name=ponsim_onu"
+            - "--kafka_adapter=kafka.$(NAMESPACE).svc.cluster.local:9092"
+            - "--kafka_cluster=kafka.$(NAMESPACE).svc.cluster.local:9092"
+            - "--core_topic=rwcore"
+          imagePullPolicy: IfNotPresent