Kubernetes (for development)
Install k3d
:
wget -q -O - https://raw.githubusercontent.com/rancher/k3d/master/install.sh | TAG=v1.3.4 bash
Install kubectl
:
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.16.3/bin/linux/amd64/kubectl
mv kubectl ~/bin/
chmod +x ~/bin/kubectl
Create a cluster:
k3d create
Set the KUBECONFIG
environment variable:
# bash
export KUBECONFIG=$(k3d get-kubeconfig)
# fish
set -x KUBECONFIG (k3d get-kubeconfig)
Helm
From Initialize Helm (Install Tiller) (and GitHub issue, tiller won’t install #489)
Download helm
from https://github.com/helm/helm/releases/tag/v2.16.1
Note
These instructions work for helm
version 2.x.x, but not 3.x.x.
For example:
Download
helm-v2.16.1-linux-amd64.tar.gz
.Extract
helm
and move it to your~/bin/
folder.
helm version
kubectl -n kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
helm init --service-account tiller
# test
kubectl -n kube-system rollout status deploy/tiller-deploy
Postgres
helm install --name kb-dev-db stable/postgresql --set service.nodePort=30432 --set service.type=NodePort --set postgresqlPassword=postgres
Connect using the service
:
# bash
export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services kb-dev-db-postgresql)
PGPASSWORD="postgres" psql --host $NODE_IP --port $NODE_PORT -U postgres -d postgres
# fish
set -x NODE_IP (kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
set -x NODE_PORT (kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services kb-dev-db-postgresql)
export PGPASSWORD="postgres"; psql --host $NODE_IP --port $NODE_PORT -U postgres -d postgres
Flowable
Note
Install Postgres first…
Log into psql
and create the flowable
table:
CREATE DATABASE flowable TEMPLATE=template0 ENCODING='utf-8';
Then run misc/k3s/init_flowable.sh
redis
Install:
helm install stable/redis --name kb-redis --set master.service.nodePort=30379 --set master.service.type=NodePort --set usePassword=false --cluster.enabled=false
Note
cluster.enabled=false
is not recognised (for some reason)…
Just remove it for now…
Connect:
export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services kb-redis-master)
redis-cli -h $NODE_IP -p $NODE_PORT
Traefik
https://github.com/rancher/k3d/issues/103#issuecomment-528896912
sudo -i service tomcat8 stop
kubectl -n kube-system edit configmap traefik
Add the api
section below metrics
e.g:
[metrics]
[metrics.prometheus]
entryPoint = "traefik"
[api]
entryPoint = "dash"
dashboard = true
To find the ‘EXTERNAL-IP’:
kubectl get service --all-namespaces
Nothing is happening… I tried:
http GET http://172.20.0.2:8080/dash/
https://felixwiedmann.de/k3d-manage-k3s-clusters/
https://localhost:6443/ does ask for a user name and password!
I think this just worked:
From: https://github.com/rancher/k3d/blob/master/docs/examples.md
Apply this:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: flowable-rest
annotations:
ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: flowable-rest
servicePort: 8080
➤ kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
kb-flowable-ingress * 80 132m
flowable-rest * 172.20.0.2 80 2m6s
http GET http://172.20.0.2/
http GET http://rest-admin:test@172.20.0.2/repository/deployments/
http GET http://admin:test@172.20.0.2/repository/deployments/
# this one is OK
http GET http://rest-admin:test@172.20.0.2/actuator/health
# this one is working!
http GET http://rest-admin:test@172.20.0.2/service/repository/deployments/
Elastic
https://github.com/helm/charts/tree/master/stable/elasticsearch
helm install --name kb-elastic stable/elasticsearch
client.serviceType=
client.httpNodePort
Elasticsearch can be accessed:
* Within your cluster, at the following DNS name at port 9200:
kb-elastic-elasticsearch-client.default.svc
* From outside the cluster, run these commands in the same shell:
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services kb-elastic-elasticsearch-client)
export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
To remove:
➤ helm delete kb-elastic
# list pvc and delete
➤ kubectl get pvc
➤ kubectl delete pvc data-kb-elastic-elasticsearch-data-0
Install
# you will need your sudo password here...
➤ curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644
➤ kubectl get nodes
NAME STATUS ROLES AGE VERSION
patrick-inspiron Ready master 105s v1.16.3-k3s.2
➤ kubectl get po -n kube-system
➤ kubectl get pods --all-namespaces
➤ kubectl version
Remove
/usr/local/bin/k3s-uninstall.sh
Commands
ConfigMap
:
kubectl get configmaps -o yaml
Pod
:
kubectl get pod
kubectl get pods --all-namespaces
kubectl describe pod
# a specific pod (get the name from the 'get pod' command)
kubectl describe pod postgres-78b64dc858-d8ktt
# logs for a pod (get the name from the 'get pod' command)
kubectl logs postgres-78b64dc858-d8ktt -f
kubectl get ing
kubectl get endpoints
Test
To deploy a simple pod
From Intro to Kubernetes and Rancher Online Training: August 1, 2019
Download misc/k3s/pod.yaml
kubectl apply -f pod.yaml
# check progress
kubectl get pods -w
# check logs
kubectl describe pod
Note
CrashLoopBackOff
is an expected response because the bash script
in the pod is completing. Kubernetes doesn’t expect this, so the
backoff is a delay before re-starting.
Delete the pod:
kubectl delete po/myapp-pod
Local Storage
kubectl apply -f ~/dev/module/docs/source/misc/k3s/flowable/rancher-local-path-storage.yaml
# check
kubectl get storageclass
Flowable
The GIT repository is here: https://github.com/flowable/flowable-engine/tree/master/k8s
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml
# try without local storage
# kubectl apply -f ~/dev/module/docs/source/misc/k3s/flowable/flowable-local-storageclass.yaml
helm repo add flowable https://flowable.org/helm/
# helm install flowable/flowable --name=flowable
helm install flowable/flowable --name=kb-flowable --set postgres.enabled=false --set rest.enabled=true --set database.username=postgres --set database.password=postgres --set database.datasourceDriverClassName=org.postgresql.Driver --set database.datasourceUrl=jdbc:postgresql://postgres-service-name:5432/flowable
WIP
This gets an Nginx response: http://flowable-idm-default.localhost.nip.io/ You can see the ingress using this command:
kubectl get ing
So try: http://kb-flowable.localhost.nip.io/flowable-rest/
Old Postgres Notes
Version 3 (helm
)
helm install --name kb-dev-db stable/postgresql --set service.nodePort=30432 --set service.type=NodePort --set postgresqlPassword=postgres
Tip
If you change the password and need to re-install, then you will need
to delete the persistent volume…
For more information, search for
kubectl get pvc
and
kubectl delete pvc data-some-lingering-pvc
in
https://github.com/helm/charts/issues/12836
Connect using the service
:
# password 'postgres'
psql -h 127.0.0.1 -U postgres -d postgres -p 30432
Uninstall:
helm del --purge kb-dev-db
kubectl delete pvc data-kb-dev-db-postgresql-0
Version 2 (I am hoping this may be persistent)
From: https://severalnines.com/database-blog/using-kubernetes-deploy-postgresql
Using these yaml
files:
kubectl create -f postgres-configmap.yaml
kubectl create -f postgres-storage.yaml
kubectl create -f postgres-deployment.yaml
kubectl create -f postgres-service.yaml
Find the IP address:
kubectl get service
Connect to Postgres using the port number::
psql -h localhost -U postgresadmin --password -p 31053 postgresdb
Version 1 (is not persistent)
kubectl apply -f ~/dev/module/docs/source/misc/k3s/postgres.yaml
# check progress
kubectl get pods -w
kubectl apply -f ~/dev/module/docs/source/misc/k3s/postgres-service.yaml
# check progress
kubectl get service
# output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 55m
postgres NodePort 10.43.51.112 <none> 5432:30432/TCP 15m
To connect Postgres to the port listed above:
psql -h localhost -U postgres -d postgres -p 30432
redis (with helm
)
Install:
helm install stable/redis --name kb-redis --set master.service.nodePort=30379 --set master.service.type=NodePort --set usePassword=false --cluster.enabled=false
Connect:
redis-cli -h 127.0.0.1 -p 30379 ping
Uninstall:
helm del --purge kb-redis