RPI Microk8s Golang Tutorial
Hello Golang
main.go
#main.go
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
log.Print("running 8080")
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Dockerfile
FROM golang:1.12 RUN mkdir /app ADD . /app WORKDIR /app RUN go build -o hello-web . CMD ["/app/hello-web"]
Docker Image in lokaler Registry erstellen
microk8s enable registry
docker build -t localhost:32000/hello-golang:1.0 . docker push localhost:32000/hello-golang:1.0
Helm Chart in ./k8s Verzeichnis im Namespace dev installieren
microk8s helm3 install hello-golang ./k8s --set defaultBackend.enabled=false,controller.defaultBackendService=hello-golang-service -n dev --create-namespace microk8s helm3 list
Helm Chart deinstallieren
microk8s helm3 uninstall hello-golang -n dev
Deployment & Service (deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-golang
spec:
replicas: 1
selector:
matchLabels:
app: hello-golang
template:
metadata:
labels:
app: hello-golang
spec:
containers:
- name: app
image: localhost:32000/hello-golang:1.0
ports:
- containerPort: 8080
env:
- name: MONGO_URL
value: mongodb://mongo:27017/dev
imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
labels:
app: hello-golang-service
name: hello-golang-service
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: hello-golang
type: NodePort
Ingress ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: "hello-golang-ingress"
spec:
ingressClassName: public
rules:
- host: www.yourdomain.com
http:
paths:
- path: /hello-golang
pathType: Prefix
backend:
service:
name: hello-golang-service
port:
number: 80
Zugriff über https://www.yourdomain.com/hello-golang