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


Делаю:
17.07.2022


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/')

$ echo ${LATEST_VERSION}

// Если меньше 1.14.1
$ export LATEST_VERSION=1.14.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.14.1


Установка ресурсов istio на minikube

$ istioctl experimental precheck
✔ No issues found when checking the cluster. Istio is safe to install or upgrade!


// Install Istio using the demo profile
$ istioctl install --skip-confirmation \
  --set profile=demo \
  --set meshConfig.accessLogFile=/dev/stdout \
  --set meshConfig.accessLogEncoding=JSON


$ kubectl -n istio-system wait --timeout=600s --for=condition=available deployment --all


// install Kiali, Jaeger, Prometheus, and Grafana
$ istio_version=$(istioctl version --short --remote=false)

$ echo "Installing integrations for Istio v$istio_version"

$ {
    kubectl apply -n istio-system -f https://raw.githubusercontent.com/istio/istio/${istio_version}/samples/addons/kiali.yaml
    kubectl apply -n istio-system -f https://raw.githubusercontent.com/istio/istio/${istio_version}/samples/addons/jaeger.yaml
    kubectl apply -n istio-system -f https://raw.githubusercontent.com/istio/istio/${istio_version}/samples/addons/prometheus.yaml
    kubectl apply -n istio-system -f https://raw.githubusercontent.com/istio/istio/${istio_version}/samples/addons/grafana.yaml
}


$ kubectl -n istio-system wait --timeout=600s --for=condition=available deployment --all


$ kubectl -n istio-system get deploy
NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
grafana                1/1     1            1           76s
istio-egressgateway    1/1     1            1           5m7s
istio-ingressgateway   1/1     1            1           5m7s
istiod                 1/1     1            1           5m21s
jaeger                 1/1     1            1           92s
kiali                  1/1     1            1           99s
prometheus             1/1     1            1           83s


Запуск сервисов 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


$ 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.

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