Skip to content

Commit

Permalink
Add ECK. Reorganize ./extras dependencies, seperate concerns. Add REA…
Browse files Browse the repository at this point in the history
…DMEs. Start supporting Ingress (Ambassador for now).
  • Loading branch information
boldandbusted committed Dec 30, 2021
1 parent c88520d commit 2385e49
Show file tree
Hide file tree
Showing 11 changed files with 198 additions and 45 deletions.
2 changes: 1 addition & 1 deletion extras/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Extras

Files in this directory could be used to create example deployments, demos, local proof-of-concepts,etc. All are meant to be run within the Vagrant VM/Guest.
Files in this directory could be used to create example deployments, demos, local proof-of-concepts,etc. All are meant to be run within the Vagrant VM/Guest, and you must change directory in the guest to `/vagrant/extras`.

Quality may vary, though there should be simple instructions output at the end of the script runs. Please report any issues, and include the shell output in the Issue you report. New 'extras' are also welcome! Thanks!

Expand Down
4 changes: 4 additions & 0 deletions extras/create-plain-cluster.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env bash

. ./lib/create-cluster.sh

11 changes: 11 additions & 0 deletions extras/eck.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/usr/bin/env bash

. ./lib/dashboard.sh

# Install Elasticsearch ECK, and add necessary glue to Prometheus
helm repo add elastic https://helm.elastic.co
helm repo update

helm install --atomic elastic-operator elastic/eck-operator -n elastic-system --create-namespace \
--set podMonitor.enabled=true \
--set config.metricsPort="8080"
15 changes: 2 additions & 13 deletions extras/fun_with_prometheus_grafana_and_k8s.sh
Original file line number Diff line number Diff line change
@@ -1,24 +1,13 @@
. ./lib/dashboard.sh

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
#helm install --atomic my-metrics-server bitnami/metrics-server --version 5.9.2
#helm upgrade --atomic my-metrics-server bitnami/metrics-server --set apiService.create=true
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm repo update
kubectl create namespace monitor
helm install --atomic my-metrics-server metrics-server/metrics-server --version 3.6.0 --set apiService.create=true --set args={--kubelet-insecure-tls} -n monitor
helm install --atomic my-kube-state-metrics bitnami/kube-state-metrics --version 2.1.1
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install --atomic my-prometheus-stack prometheus-community/kube-prometheus-stack --create-namespace -n monitor \
--set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
sleep 30
kubectl port-forward -n monitor prometheus-my-prometheus-stack-kube-p-prometheus-0 9090 --address 0.0.0.0 >> /dev/null &
my_ip=$(ip -j -p addr show eth1 | jq -r .[].addr_info[0].local)
#my_ip=$(ip -j -p addr show eth1 | jq -r .[].addr_info[0].local)
echo "Prometheus UI: http://kind.test:9090/ or http://$my_ip:9090/"
kubectl --namespace monitor port-forward svc/my-prometheus-stack-grafana 3000:80 --address 0.0.0.0 >> /dev/null &
echo "Grafana: http://kind.test:3000/ or http://$my_ip:9090/ user: admin password: prom-operator"


echo "Grafana: http://kind.test:3000/ or http://$my_ip:3000/ user: admin password: prom-operator"
2 changes: 1 addition & 1 deletion extras/google-demo-microservice.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ kubectl -n demo apply -f ./release/kubernetes-manifests.yaml
kubectl wait --for=condition=available deployment/frontend -n demo
#kubectl port-forward deployment/frontend 9292:8080
kubectl -n demo port-forward svc/frontend 8081:80 --address 0.0.0.0 >> /dev/null &
my_ip=$(ip -j -p addr show eth1 | jq -r .[].addr_info[0].local)
#my_ip=$(ip -j -p addr show eth1 | jq -r .[].addr_info[0].local)
echo "Browse to http://kind.test:8081 or http://$my_ip:8081/"
80 changes: 80 additions & 0 deletions extras/kind-example-app-ambassador.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/usr/bin/env bash

# Deploy example app from KinD Ingress documentation, but add relevant Ambassador ingress annotations


kubectl apply -f - <<EOF
kind: Pod
apiVersion: v1
metadata:
name: foo-app
labels:
app: foo
spec:
containers:
- name: foo-app
image: hashicorp/http-echo:0.2.3
args:
- "-text=foo"
---
kind: Service
apiVersion: v1
metadata:
name: foo-service
spec:
selector:
app: foo
ports:
# Default port used by the image
- port: 5678
---
kind: Pod
apiVersion: v1
metadata:
name: bar-app
labels:
app: bar
spec:
containers:
- name: bar-app
image: hashicorp/http-echo:0.2.3
args:
- "-text=bar"
---
kind: Service
apiVersion: v1
metadata:
name: bar-service
spec:
selector:
app: bar
ports:
# Default port used by the image
- port: 5678
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
kubernetes.io/ingress.class: ambassador
spec:
rules:
- http:
paths:
- pathType: Prefix
path: "/foo"
backend:
service:
name: foo-service
port:
number: 5678
- pathType: Prefix
path: "/bar"
backend:
service:
name: bar-service
port:
number: 5678
---
EOF
1 change: 1 addition & 0 deletions extras/lib/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
NOTE: Every script must inherit this file, so that variables set here are set in those scripts as well.
47 changes: 47 additions & 0 deletions extras/lib/create-cluster.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/usr/bin/env bash

echo "vagrant-kind: Create a 10 node, 9 worker cluster, ready for ingress use"
kind create cluster --config=- <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: worker
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
- role: worker
- role: worker
- role: worker
- role: worker
- role: worker
- role: worker
- role: worker
- role: worker
EOF

echo "vagrant-kind: KinD cluster info"
kubectl cluster-info --context kind-kind

echo "vagrant-kind: Install some utilities"
sudo apt-get install jq --yes

echo "vagrant-kind: Prepare for helm use"
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

echo "vagrant-kind: Cluster creation complete."

60 changes: 30 additions & 30 deletions extras/lib/dashboard.sh
Original file line number Diff line number Diff line change
@@ -1,40 +1,34 @@
#!/usr/bin/env bash

echo "Create a 7 node, 6 worker cluster"
kind create cluster --config=- <<EOF
# seven node (6 workers) cluster config
. ./lib/create-cluster.sh

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
- role: worker
- role: worker
- role: worker
EOF
echo "Prep helm"
helm repo add bitnami https://charts.bitnami.com/bitnami
#helm install --atomic my-metrics-server bitnami/metrics-server --version 5.9.2
#helm upgrade --atomic my-metrics-server bitnami/metrics-server --set apiService.create=true
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm repo update

echo "KinD cluster info"
kubectl cluster-info --context kind-kind
echo "Install metrics-server"
kubectl create namespace monitor
helm install -n monitor --atomic my-metrics-server metrics-server/metrics-server \
--version 3.6.0 \
--set apiService.create=true \
--set args={--kubelet-insecure-tls}

echo "Prepare for helm use"
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
echo "Install kube-state-metrics"
helm install --atomic my-kube-state-metrics bitnami/kube-state-metrics \
--version 2.1.1

echo "Install Kubernetes Dashboard (latest version)"
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm install --atomic dashboard kubernetes-dashboard/kubernetes-dashboard -n kubernetes-dashboard --create-namespace

echo "Show all Kubernetes Dashboard-related resources"
kubectl get all -n kubernetes-dashboard -o wide
helm install -n kubernetes-dashboard --atomic dashboard kubernetes-dashboard/kubernetes-dashboard \
--create-namespace

echo "Wait until the Dashboard pod is ready"
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=kubernetes-dashboard -n kubernetes-dashboard
kubectl wait -n kubernetes-dashboard pod \
--for=condition=ready \
-l app.kubernetes.io/name=kubernetes-dashboard

echo "Prepare token for user login"
cat <<EOF | kubectl apply -f -
Expand All @@ -60,10 +54,16 @@ subjects:
namespace: kubernetes-dashboard
EOF

my_ip=$(ip -j -p addr show eth1 | jq -r .[].addr_info[0].local)
#my_ip=$(ip -j -p addr show eth1 | jq -r .[].addr_info[0].local)
export my_ip="192.168.61.10"

echo "Browse to https://kind.test:8080/ or https://$my_ip:8080/"
kubectl port-forward -n kubernetes-dashboard service/dashboard-kubernetes-dashboard 8080:443 --address=0.0.0.0 >> /dev/null &

echo "Display the Token (copy and paste this into the Dashboard Web UI)"
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
echo "Copy and paste the token below into the Dashboard Web UI"
echo "---snip---"
kubectl get secret -n kubernetes-dashboard \
$(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") \
-o go-template="{{.data.token | base64decode}}"
echo
echo "---snip--"
17 changes: 17 additions & 0 deletions extras/lib/ingress.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash

. ./lib/dashboard.sh

# Tried:
# NGINX Ingress: Failed
# Ambassador: Success

kubectl apply -f https://github.com/datawire/ambassador-operator/releases/latest/download/ambassador-operator-crds.yaml

kubectl apply -n ambassador -f https://github.com/datawire/ambassador-operator/releases/latest/download/ambassador-operator-kind.yaml
kubectl wait --timeout=180s -n ambassador --for=condition=deployed ambassadorinstallations/ambassador

echo "NOTE: You will need to annotate any ingress resources you wish to expose via Ambassador"
echo "with the following *after* the resources are created:"
echo
echo "kubectl annotate ingress example-ingress kubernetes.io/ingress.class=ambassador"
4 changes: 4 additions & 0 deletions extras/nginx-ingress-controller.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env bash

. ./lib/ingress.sh

0 comments on commit 2385e49

Please sign in to comment.