Подготовка окружения для тестов Istio в minikube


Делаю:
08.11.2021


https://istio.io/docs/setup/getting-started/#download


  1. Инсталляция MiniKube

Испольновалась версия KUBERNETES_VERSION=v1.22.2

  1. Инсталляция Kubectl


Устанавливаю istioctl на локальном хосте

$ cd ~/tmp/
$ export LATEST_VERSION=$(curl --silent "https://api.github.com/repos/istio/istio/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')

$ curl -L https://istio.io/downloadIstio | sh - && chmod +x ./istio-${LATEST_VERSION}/bin/istioctl && sudo mv ./istio-${LATEST_VERSION}/bin/istioctl /usr/local/bin/


$ istioctl version
no running Istio pods in "istio-system"
1.11.4


Запуск сервисов istio

UPD. Оказазось istio уже есть среди предустановленных расширений на minikube, и можно просто активироваь.

$ minikube addons --profile istio-lab enable istio

Но чего-то ранее не заработало из коробки на 16.9. Не хочу сейчас пробовать. Поэтому, будем ставить сами.


Дока:
https://istio.io/docs/setup/additional-setup/config-profiles/


$ istioctl profile list
Istio configuration profiles:
    default
    demo
    empty
    external
    minimal
    openshift
    preview
    remote


// $ istioctl manifest install -y --set profile=demo
$ istioctl manifest install -y --set profile=default


// После выполнения данной команды, **новые** pod будут "проксируемыми". Т.е. старые нужно пересоздать.
$ kubectl label namespace default istio-injection=enabled


$ kubectl get ns --show-labels | grep istio
default           Active   12m     istio-injection=enabled,kubernetes.io/metadata.name=default
istio-system      Active   2m35s   kubernetes.io/metadata.name=istio-system


Добавляю Metal LB


Всевозможные проверки


$ watch kubectl -n istio-system get all


// 13
$ kubectl get crds | grep istio | wc -l
13


$ kubectl get pods -n istio-system
NAME                                   READY   STATUS    RESTARTS   AGE
istio-ingressgateway-8dbb57f65-hc5dz   1/1     Running   0          10m
istiod-7859559dd-68rdz                 1/1     Running   0          10m


$ kubectl get svc -n istio-system
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                                                                      AGE
istio-ingressgateway   LoadBalancer   10.106.144.8   192.168.49.20   15021:32220/TCP,80:32270/TCP,443:31357/TCP,15012:30385/TCP,15443:30134/TCP   3m27s
istiod                 ClusterIP      10.99.91.237   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        3m45s


Дополнительные сервисы (Prometheus, Grafana, Kiali, Jaeger):


$ export LATEST_VERSION=$(curl --silent "https://api.github.com/repos/istio/istio/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')

$ cd ~/tmp/istio-${LATEST_VERSION}/samples/addons/
$ kubectl apply -n istio-system -f ./


Чтобы запустился только Kiali нужно повторить


$ kubectl apply -n istio-system -f ./kiali.yaml


$ kubectl -n istio-system get pods
NAME                                   READY   STATUS    RESTARTS   AGE
grafana-68cc7d6d78-gvhsf               1/1     Running   0          32s
istio-ingressgateway-8dbb57f65-hc5dz   1/1     Running   0          17m
istiod-7859559dd-68rdz                 1/1     Running   0          18m
jaeger-5d44bc5c5d-4f4gl                1/1     Running   0          32s
kiali-fd9f88575-tml7d                  1/1     Running   0          31s
prometheus-77b49cb997-hs7nq            2/2     Running   0          31s


$ kubectl -n istio-system port-forward svc/grafana 3000
$ kubectl -n istio-system port-forward svc/prometheus 9090
$ kubectl -n istio-system port-forward svc/kiali 20001


Пока непонятно как работать с jaeger


$ kubectl -n istio-system port-forward svc/jaeger-collector 14268


Zipkin и Prometheus Operator

$ cd ~/tmp/istio-1.9.0/samples/addons/extras
$ kubectl apply -n istio-system -f ./


$ kubectl apply -n istio-system -f ./prometheus-operator.yaml
unable to recognize "./prometheus-operator.yaml": no matches for kind "PodMonitor" in version "monitoring.coreos.com/v1"
unable to recognize "./prometheus-operator.yaml": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"


В общем, нужно еще и добавлять из стандартной установки компоненты, чтобы он понимал, что за ServiceMonitor и PodMonitor.

Пока неактуально.