Rancher RIO - test sur GKE

Rancher Labs vient d’introduire son nouveau projet dénommé Rio. Rio est un MicroPaaS qui peut être superposé sur n’importe quel cluster Kubernetes standard. Composé de quelques ressources personnalisées et d’un outil en ligne de commande pour améliorer l’expérience utilisateur, on peut facilement déployer des services vers Kubernetes et obtenir automatiquement un processus de livraison continue, un service de ReverseDNS, du routage, de la surveillance, de la mise à l’échelle automatique et bien plus encore …

Tout ce qu’il faut pour démarrer, c’est un cluster Kubernetes existant et le Rio CLI.
Je pars au préalable d’un déploiement d’un cluster Kubernetes via GKE.
MacBook-Pro-de-admin:~ admin$ gcloud container clusters create ghost-cluster --enable-cloud-logging --enable-cloud-monitoring --subnetwork default
Ce qui donne au bout de quelque secondes :
kubeconfig entry generated for ghost-cluster.
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS
ghost-cluster europe-west1-b 1.12.8-gke.10 35.195.19.118 n1-standard-1 1.12.8-gke.10 3 RUNNING
MacBook-Pro-de-admin:~ admin$ gcloud container clusters get-credentials ghost-cluster
Après quoi on vérifie l'état des serveurs :
MacBook-Pro-de-admin:~ admin$ kubectl cluster-info
Kubernetes master is running at https://35.195.19.118
GLBCDefaultBackend is running at https://35.195.19.118/api/v1/namespaces/kube-system/services/default-http-backend:http/proxy
Heapster is running at https://35.195.19.118/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://35.195.19.118/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://35.195.19.118/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
Et on lance Rio :
MacBook-Pro-de-admin:~ admin$ curl -sfL https://get.rio.io | sh -
Password:
[INFO] Finding latest release
[INFO] Using v0.1.1 as release
[INFO] Downloading hash https://github.com/rancher/rio/releases/download/v0.1.1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/rio/releases/download/v0.1.1/rio-darwin-amd64
[INFO] Verifying binary download
[INFO] Installing rio to /usr/local/bin/rio
On installe :
MacBook-Pro-de-admin:~ admin$ rio install
Defaulting cluster CIDR to 10.20.0.1/16
Deploying Rio control plane....
Welcome to Rio!
Run `rio run https://github.com/rancher/rio-demo` as an example
MacBook-Pro-de-admin:~ admin$ kubectl get po -n rio-system
On vérifie si tout est prêt :
MacBook-Pro-de-admin:~ admin$ kubectl get po -n rio-system
NAME READY STATUS RESTARTS AGE
autoscaler-df59df498-mkpvt 1/1 Running 0 3m45s
build-controller-7468d8c455-thxrs 2/2 Running 0 3m44s
buildkit-5f944f4cd8-mm485 2/2 Running 0 3m44s
cert-manager-cd7b5788-pxqs6 1/1 Running 0 2m56s
grafana-6ddd6b87c4-tjvgk 2/2 Running 0 3m37s
istio-citadel-7c48c8d9d5-bbf9m 1/1 Running 0 3m36s
istio-gateway-5pds7 2/2 Running 0 3m27s
istio-gateway-pdswq 2/2 Running 0 3m27s
istio-gateway-r7pbr 2/2 Running 0 3m28s
istio-pilot-5d847f8b48-27j7r 2/2 Running 0 3m28s
istio-telemetry-9b5f45488-l4jxw 2/2 Running 0 3m38s
kiali-97c4cb7d9-8lw89 2/2 Running 0 2m56s
prometheus-7c55879d46-dnpl2 1/1 Running 0 3m45s
registry-98568d48d-2htcr 2/2 Running 0 3m44s
registry-proxy-4h7qg 1/1 Running 0 3m42s
registry-proxy-5s96j 1/1 Running 0 3m42s
registry-proxy-7vm8d 1/1 Running 0 3m42s
rio-controller-56cc89bf6b-brmf7 1/1 Running 0 3m58s
webhook-77c7c9bdcc-8s7cg 2/2 Running 0 3m44s
On peut lancer un service web en démo :
rio run https://github.com/rancher/rio-demo
Et checker l'état du déploiement en live :
$ rio ps
$ rio console
$ rio info
Voici l'état de chacun :
MacBook-Pro-de-admin:~ admin$ rio ps
Name CREATED ENDPOINT REVISIONS SCALE WEIGHT DETAIL
default/romantic-knuth9 About a minute ago https://romantic-knuth9-default.ytckyt.on-rio.io:9443 v0 0/1 100% v0 NotReady

et :
MacBook-Pro-de-admin:~ admin$ rio info
Rio Version: v0.1.1 (271d9196)
Rio CLI Version: v0.1.1 (271d9196)
Cluster Domain: ytckyt.on-rio.io
Cluster Domain IPs: 34.76.32.247
System Namespace: rio-system
System Components:
Autoscaler status: running
BuildController status: running
BuildKit status: running
CertManager status: running
Grafana status: running
IstioCitadel status: running
IstioPilot status: running
IstioTelemetry status: running
Kiali status: running
Prometheus status: running
Registry status: running
Webhook status: running
Puis au bout de quelques minutes nous obtenons :
MacBook-Pro-de-admin:~ admin$ rio ps
Name CREATED ENDPOINT REVISIONS SCALE WEIGHT DETAIL
default/romantic-knuth9 16 hours ago https://romantic-knuth9-default.ytckyt.on-rio.io:9443 v0 1 100%
Et en web :


Pour connaître l'état de tout les services sur votre cluster, la commande habituelle et son résultat :
MacBook-Pro-de-admin:~ admin$ sudo kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.20.0.1 <none> 443/TCP 47h
default romantic-knuth9 ClusterIP 10.20.5.90 <none> 80/TCP 46h
default romantic-knuth9-v0 ClusterIP 10.20.14.181 <none> 80/TCP 46h
kube-system default-http-backend NodePort 10.20.14.164 <none> 80:30464/TCP 47h
kube-system heapster ClusterIP 10.20.10.143 <none> 80/TCP 47h
kube-system kube-dns ClusterIP 10.20.0.10 <none> 53/UDP,53/TCP 47h
kube-system metrics-server ClusterIP 10.20.4.186 <none> 443/TCP 47h
rio-system autoscaler ClusterIP 10.20.7.60 <none> 80/TCP 46h
rio-system autoscaler-v0 ClusterIP 10.20.10.162 <none> 80/TCP 46h
rio-system build-controller ClusterIP 10.20.11.2 <none> 80/TCP 46h
rio-system build-controller-v0 ClusterIP 10.20.5.209 <none> 80/TCP 46h
rio-system buildkit ClusterIP 10.20.1.55 <none> 9001/TCP 46h
rio-system buildkit-v0 ClusterIP 10.20.14.226 <none> 9001/TCP 46h
rio-system cert-manager ClusterIP 10.20.14.151 <none> 80/TCP 46h
rio-system cert-manager-v0 ClusterIP 10.20.5.92 <none> 80/TCP 46h
rio-system grafana ClusterIP 10.20.14.124 <none> 3000/TCP 46h
rio-system grafana-v0 ClusterIP 10.20.15.184 <none> 3000/TCP 46h
rio-system istio-citadel ClusterIP 10.20.13.95 <none> 80/TCP 46h
rio-system istio-citadel-v0 ClusterIP 10.20.13.68 <none> 80/TCP 46h
rio-system istio-gateway ClusterIP 10.20.4.5 <none> 80/TCP 46h
rio-system istio-gateway-v0 LoadBalancer 10.20.3.166 34.76.32.247 9080:31973/TCP,9443:31128/TCP 46h
rio-system istio-pilot ClusterIP 10.20.9.9 <none> 8080/TCP,15010/TCP,15011/TCP,15014/TCP 46h
rio-system istio-pilot-v0 ClusterIP 10.20.4.247 <none> 8080/TCP,15010/TCP,15014/TCP,15011/TCP 46h
rio-system istio-telemetry ClusterIP 10.20.13.139 <none> 9091/TCP,9093/TCP,15004/TCP,42422/TCP 46h
rio-system istio-telemetry-v0 ClusterIP 10.20.5.143 <none> 42422/TCP,15004/TCP,9091/TCP,9093/TCP 46h
rio-system kiali ClusterIP 10.20.15.238 <none> 20001/TCP 46h
rio-system kiali-v0 ClusterIP 10.20.15.253 <none> 20001/TCP 46h
rio-system prometheus ClusterIP 10.20.8.255 <none> 9090/TCP 46h
rio-system prometheus-v0 ClusterIP 10.20.13.207 <none> 9090/TCP 46h
rio-system registry ClusterIP 10.20.14.198 <none> 80/TCP 46h
rio-system registry-v0 ClusterIP 10.20.9.176 <none> 80/TCP 46h
rio-system webhook ClusterIP 10.20.11.36 <none> 8090/TCP 46h
rio-system webhook-v0 ClusterIP 10.20.0.155 <none> 8090/TCP 46h
Du beau monde installé sur notre cluster GKE !
Checker les logs ? rien de plus simple avec Rio :
MacBook-Pro-de-admin:~ admin$ rio systemlogs
rio-controller | time="2019-07-12T14:10:54Z" level=info msg="Starting admin.rio.cattle.io/v1, Kind=Feature controller"
rio-controller | time="2019-07-12T14:10:54Z" level=info msg="Starting feature stack"
rio-controller | time="2019-07-12T14:10:54Z" level=info msg="Starting feature prometheus"
rio-controller | time="2019-07-12T14:10:54Z" level=info msg="Starting feature mixer"
rio-controller | time="2019-07-12T14:10:55Z" level=info msg="Starting rio.cattle.io/v1, Kind=Service controller"
rio-controller | time="2019-07-12T14:10:55Z" level=info msg="Starting rio.cattle.io/v1, Kind=ExternalService controller"
rio-controller | time="2019-07-12T14:10:55Z" level=info msg="Starting rio.cattle.io/v1, Kind=Router controller"
rio-controller | time="2019-07-12T14:10:55Z" level=info msg="Starting rio.cattle.io/v1, Kind=App controller"
rio-controller | time="2019-07-12T14:10:56Z" level=info msg="Starting feature grafana"
rio-controller | time="2019-07-12T14:10:56Z" level=info msg="Starting feature kiali"
rio-controller | time="2019-07-12T14:10:56Z" level=info msg="Starting feature letsencrypt"
rio-controller | time="2019-07-12T14:10:56Z" level=info msg="Starting feature autoscaling"
rio-controller | time="2019-07-12T14:10:56Z" level=info msg="Starting feature build"
rio-controller | time="2019-07-12T14:10:56Z" level=info msg="Starting feature istio"
rio-controller | time="2019-07-12T14:10:56Z" level=info msg="Starting apps/v1, Kind=Deployment controller"
rio-controller | time="2019-07-12T14:10:56Z" level=info msg="Starting autoscale.rio.cattle.io/v1, Kind=ServiceScaleRecommendation controller"
rio-controller | time="2019-07-12T14:10:56Z" level=info msg="Starting build.knative.dev/v1alpha1, Kind=Build controller"
Déployer d'autres applications
Un autre exemple où nous allons scaler notre application web cette fois-ci :
MacBook-Pro-de-admin:~ admin$ rio run -p 80/http --name svc --scale=3 ibuildthecloud/demo:v1
default/svc:v0
Suivons l'état d'avancement :
MacBook-Pro-de-admin:~ admin$ rio ps
Name CREATED ENDPOINT REVISIONS SCALE WEIGHT DETAIL
default/svc 23 seconds ago https://svc-default.ytckyt.on-rio.io:9443 v0 3 100%
default/romantic-knuth9 46 hours ago https://romantic-knuth9-default.ytckyt.on-rio.io:9443 v0 1 100%
On run comme pour Docker en récupérant une image du Docker Hub conçue pour Rancher, on l'appelle démo et on déploie sur le port 8080 :
MacBook-Pro-de-admin:~ admin$ rio run -p 8080/http --name demo monachus/rancher-demo:yellow
default/demo:v0
Ce qui nous donne :
MacBook-Pro-de-admin:~ admin$ rio ps
Name CREATED ENDPOINT REVISIONS SCALE WEIGHT DETAIL
default/demo About a minute ago https://demo-default.ytckyt.on-rio.io:9443 v0 1 100%
default/svc 5 minutes ago https://svc-default.ytckyt.on-rio.io:9443 v0 3 100%
default/romantic-knuth9 47 hours ago https://romantic-knuth9-default.ytckyt.on-rio.io:9443 v0 1 100%
avec l’accès à ces services par un dispositif de ReverseDNS inclus avec Rio. Par défaut, Rio créera un enregistrement DNS pointant vers le cluster Kubernetes. Rio utilise également Let’s Encrypt pour créer un certificat pour le domaine cluster afin que tous les services puissent supporter HTTPS par défaut :



Petit récapitulatif qui peut-être obtenu simplement :
MacBook-Pro-de-admin:~ admin$ rio info
Rio Version: v0.1.1 (271d9196)
Rio CLI Version: v0.1.1 (271d9196)
Cluster Domain: ytckyt.on-rio.io
Cluster Domain IPs: 34.76.32.247
System Namespace: rio-system
System Components:
Autoscaler status: running
BuildController status: running
BuildKit status: running
CertManager status: running
Grafana status: running
IstioCitadel status: running
IstioPilot status: running
IstioTelemetry status: running
Kiali status: running
Prometheus status: running
Registry status: running
Webhook status: running
Autoscaling or not ?
Rio permet la mise en oeuvre de l’Auto Scaling ou dimensionnement automatique.
"Identifier les ressources qui ne sont plus utiles
En production, il est fort probable qu’une application soit prévue pour fonctionner en continu, à un certain niveau. Vous n’avez donc pas à déterminer si elle doit ou non tourner, mais en revanche, il faut vous appuyer sur des services d’auto-scaling pour accroitre ou diminuer les ressources de compute (scale-up, scale-out) en fonction des fluctuations de la demande."
Mise en oeuvre de l’outil Hey en ligne de commande pour générer de la charge sur le démonstrateur :
hey -z 60s -n 400 -c 100 https://svc-default.ytckyt.on-rio.io:9443
Par défaut, Rio activera cette mise à l’échelle automatique des charges de travail. En fonction des Qps et des demandes actives en cours, Rio adaptera automatiquement la charge de travail à l’échelle appropriée …
Pour finir, test du maillage de service. Les services peuvent avoir plusieurs versions déployées en même temps. Le maillage du service peut alors décider du volume de trafic à acheminer vers chaque révision. La commande rio stage mettra en scène une nouvelle révision d’un service existant. Par exemple, ici un scénario pour faire un déploiement canari :
MacBook-Pro-de-admin:~ admin$ rio stage --image=ibuildthecloud/demo:v3 default/svc:v3
default/svc:v3
MacBook-Pro-de-admin:~ admin$ rio ps
Name CREATED ENDPOINT REVISIONS SCALE WEIGHT DETAIL
default/fcdemo 2 minutes ago https://fcdemo-default.ytckyt.on-rio.io:9443 v0 1 100%
default/demo 26 minutes ago https://demo-default.ytckyt.on-rio.io:9443 v0 1 100%
default/svc 31 minutes ago https://svc-default.ytckyt.on-rio.io:9443 v0 3 100%
default/romantic-knuth9 47 hours ago https://romantic-knuth9-default.ytckyt.on-rio.io:9443 v0 1 100%
MacBook-Pro-de-admin:~ admin$ rio promote default/svc:v3
MacBook-Pro-de-admin:~ admin$ rio ps
Name CREATED ENDPOINT REVISIONS SCALE WEIGHT DETAIL
default/fcdemo 3 minutes ago https://fcdemo-default.ytckyt.on-rio.io:9443 v0 1 100%
default/demo 28 minutes ago https://demo-default.ytckyt.on-rio.io:9443 v0,v3 1,1 85%,15%
default/svc 32 minutes ago https://svc-default.ytckyt.on-rio.io:9443 v0,v3 3,3 95%,5%
default/romantic-knuth9 47 hours ago https://romantic-knuth9-default.ytckyt.on-rio.io:9443 v0 1 100%
MacBook-Pro-de-admin:~ admin$
MacBook-Pro-de-admin:~ admin$ rio revision default/svc
Name IMAGE CREATED SCALE ENDPOINT WEIGHT DETAIL
default/svc:v3 ibuildthecloud/demo:v3 3 minutes ago 3 https://svc-v3-default.ytckyt.on-rio.io:9443 95
default/svc:v0 ibuildthecloud/demo:v1 34 minutes ago 3 https://svc-v0-default.ytckyt.on-rio.io:9443 5
ce qui donne en web :

MacBook-Pro-de-admin:~ admin$ rio weight default/svc:v0=25% default/svc:v3=75%
MacBook-Pro-de-admin:~ admin$ rio ps
Name CREATED ENDPOINT REVISIONS SCALE WEIGHT DETAIL
default/fcdemo 10 minutes ago https://fcdemo-default.ytckyt.on-rio.io:9443 v0 1 100%
default/demo 34 minutes ago https://demo-default.ytckyt.on-rio.io:9443 v3 1 100%
default/svc 39 minutes ago https://svc-default.ytckyt.on-rio.io:9443 v0,v3 3,3 25%,75%
default/romantic-knuth9 47 hours ago https://romantic-knuth9-default.ytckyt.on-rio.io:9443 v0 1 100%
Rio permet de lancer un service sur la base de source hébergée sur un dépôt Git ou même activer un webhook ainsi que d’autres fonctionnalités à explorer …
Par défaut, Rio déploie grafana et kiali pour permettre à l’utilisateur de surveiller toutes les métriques correspondant au maillage des services :





Nul doute que Rancher Labs va continuer à faire évoluer Rio, à suivre donc.