ПРОГРАММИРОВАНИЕ
Knative Service с Kubernetes и Spring Boot
Установите knative сервис поверх kubernetes и разверните бессерверный весенний загрузочный образ.
Что такое Кнатив
Цитировать
Knativeпредоставляет открытый API и среду выполнения, которая позволяет запускать бессерверные рабочие нагрузки в любом месте по вашему выбору: полностью управляемое в Google Cloud, в Anthos на Google Kubernetes Engine (GKE) или на вашем собственный кластер Kubernetes
Из https://cloud.google.com/knative
Что такое бессерверное
Чистейшая идея бессерверных технологий заключается в том, что вы пишете код, затем что-то берет этот код, создает, развертывает и запускает его, не беспокоясь о том, как и где.
Другая идея заключается в том, что никакие ресурсы не используются до тех пор, пока они не будут запрошены. Вы открываете кран только тогда, когда вам нужно пить. Таким образом, вы платите по мере использования ресурсов. Ресурсы увеличиваются или уменьшаются в зависимости от спроса, что называется эластичным использованием ресурсов.
Подробнее о бессерверных вычислениях см.:
https://en.wikipedia.org/wiki/Serverless_computing
Кнатив
Мы смотрим на Knative, который пытается выполнить некоторые из вышеперечисленных действий, создавая pod только при наличии запроса (хотя это тоже настраивается).
Мы запустим сервер Knative в нашем локальном кластере K8s и развернем существующий образ в качестве сервиса Knative.
Настраивать
MacOs
Desktop для Docker: v 2.3.0.3
k8s: v 1.16.5
Установите Knative Serving
Knative зависит от Istio, который мы установили ранее.
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.16.0/serving-crds.yaml
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.16.0/serving-core.yaml
пространство имен kubectl label knative-serving istio-injection=enabled
Добавить собственное соединение istio
kubectl apply --filename https://github.com/knative/net-istio/releases/download/v0.16.0/release.yaml
kubectl --namespace istio-system get service istio-ingressgateway
КН CLI
Перейдите по ссылке ниже, чтобы установить:
https://knative.dev/docs/install/install-kn/
Создайте тестовый сервис Knative с помощью Knative CLI kn
kn service create helloworld-go — image gcr.io/knative-samples/helloworld-go — env TARGET="Go Sample v1"
kn service description helloworld-go
Имя: helloworld-go
Пространство имен: default
Возраст: 4 м
URL: http://helloworld-go.default.example .com
Редакции:
100% @latest (helloworld-go-yljzr-1) [1] (4m)
Изображение: gcr.io/knative-samples/helloworld-go ( прикреплен к 5ea96b)
Условия:
OK ТИП ВОЗРАСТ ПРИЧИНА
++ Готов 3 мес.
++ Готов конфигураций 3 мес.
++ Готов 3 мес.
Запустите его, подов нет, если нет запросов, поэтому первый запрос будет медленным.
curl -H Хост: helloworld-go.default.example.com http://localhost:80
Пример Hello Go v1!
Необходимые модули были созданы по запросу. Если в течение определенного времени (по умолчанию 30 секунд) запросов нет, модули будут удалены. Хорошо, вы используете ресурс только тогда, когда это необходимо, если у вас все в порядке с начальной задержкой.
Удалите тестовую службу.
kn service удалить helloworld-go
Разверните наш локальный образ
У нас есть существующий локальный образ докера, vadal-echo, который мы построили ранее.
В отличие от наших предыдущих блогов, где мы можем развернуть наши локальные образы докеров непосредственно на K8s, для Knative необходим реестр докеров.
Первая попытка состояла в том, чтобы повторно пометить локальный образ, как это предлагается в документации, и обновить конфигурацию knative, чтобы включить локальные образы (см. ниже).
Ретегируйте так:
тег docker vadal-echo:0.0.1-SNAPSHOT dev.local/vadal-echo
Но это все еще дало отказ:
`..ошибка с сообщением: отложить загрузку изображения «dev.local/vadal-echo»
Итак, план Б. Добавить локальный реестр и нажать на него, а также добавить в конфиг (см. ниже):
docker run -d -p 5007:5000 --name реестр --restart=всегда реестр:2
Порт 5007 произвольный.
Изменить Knative Config:
kubectl -n knative-serving edit configmap config-deployment
Добавьте следующее после строки данных:
data:
registriesSkippingTagResolving: ko.local,dev.local,localhost:5007
Теперь пометьте и нажмите:
тег докера vadal-echo:0.0.1-SNAPSHOT localhost:5007/vadal-echo
docker push localhost:5007/vadal-echo
Проверьте наш реестр докеров:
curl localhost:5007/v2/_catalog
{"репозитории":["vadal-echo"]}
Развернуть с помощью Kn:
kn service create vecho --image localhost:5007/vadal-echo
Создание службы vecho в пространстве имен default:
0,053 с Конфигурация все еще работает, чтобы отразить последнюю требуемую спецификацию.
0,176 с Маршрут все еще работает, чтобы отразить последнюю требуемую спецификацию.
0,227 с Конфигурация «vecho» ожидает пересмотра чтобы стать готовым.
12,893 с …
13,330 с. Входящие данные еще не согласованы.
13,456 с. Ожидание готовности балансировщика нагрузки
13,750 с. Готов к работе.
Служба vecho, созданная для последней версии vecho-jvjfg-1, доступна по адресу:
http://vecho.default.example.com
Проверьте это:
curl -i -H «Хост: vecho.default.example.com» localhost:80
HTTP/1.1 200 OK
тип содержимого: application/json
дата: Вт, 21 июля 2020 г., 01:15:22 по Гринвичу
сервер: istio-envoy
x-envoy-upstream-service-time: 16
transfer-encoding: chunked
{«отметка времени»: «2020–07–21T01:15:22.624», «заголовки»: {«хост»: «vecho.default.example.com», «пользовательский агент»: «curl/7.64. 1', "принять": "/", "принять кодировку": "gzip", "переадресовать": "for=192.168.65.3;proto=http, for=10.1.0.35', «k-proxy-request»: «активатор», «x-b3-parentspanid»: «884680e6f10832a3», «x-b3-sampled»: «1», «x-b3-spanid»: «f74293af107c73eb», «x -b3-traceid":"62d4adff218c6fe6884680e6f10832a3", "x-request-id": "0ce4f3b5-ea69–9bd4–87bf-3aef0dfa52e1", "x-forwarded-proto": "http"}
Хорошо, доменное имя API, балансировка нагрузки, сервисы и конфигурация развертывания — все в одной строке. Вы можете видеть, как модуль создается, а затем удаляется по истечении тайм-аута.
Список услуг КН:
kn service list
ИМЯ URL ПОСЛЕДНИЙ ВОЗРАСТ УСЛОВИЯ ГОТОВНОСТЬ ПРИЧИНА
vecho http://vecho.default.example.com vecho-jvjfg-1 7m9s 3 OK / 3 True
Удалить сервис Knative:
kn service удалить вечо
Удалите грубую силу, если что-то запуталось:
прокси kubectl
тогда
curl -X УДАЛИТЬ http://localhost:8001/apis/serving.knative.dev/v1alpha1/namespaces/default/services/vecho
Тайм-аут службы по умолчанию составляет 30 секунд, после чего он удаляется до следующего запроса.
Время выселения пода, количество реплик и т. д. являются предметом автомасштабирования и обсуждаются здесь https://knative.dev/v0.15-docs/serving/configuring-autoscaling/.
Когда нет подов, где логи? Для этого нам нужно добавить логирование.
Наблюдаемость
Здесь мы рассмотрим ведение журнала, трассировку и метрики для knative слоя в нашем кластере k8s.
логирование
На основании следующего:
https://knative.dev/docs/serving/installing-logging-metrics-traces/
узлы меток kubectl --all beta.kubernetes.io/fluentd-ds-ready="true"
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.16.0/monitoring-core.yaml
Изменения конфигурации сервера Knative:
kubectl edit cm -n knative-serving config-observability
И добавьте следующее, если вам также нужны журналы запросов/доступа:
data:
metrics.request-metrics-backend-destination: prometheus
logging.request-log-template: '{"httpRequest": {"requestMethod": "{{.Request.Method }}», «requestUrl»: «{{js .Request.RequestURI}}», «requestSize»: «{{.Request.ContentLength}}», «status»: {{.Response.Code}}, «responseSize ”: “{{.Response.Size}}”, “userAgent”: “{{js .Request.UserAgent}}”, “remoteIp”: “{{js .Request.RemoteAddr}}”, “serverIp”: “ {{.Revision.PodIP}}», «referer»: «{{js .Request.Referer}}», «latency»: «{{.Response.Latency}}s», «protocol»: «{{. Request.Proto}}"}, "traceId": "{{index .Request.Header "X-B3-Traceid"}}"}'
Журналы:
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.16.0/monitoring-logs-elasticsearch.yaml
Убедитесь, что все в порядке (настольный компьютер для докера может потребовать увеличения количества используемых ЦП, если какие-либо модули зависли в ожидании).
kubectl get po -n knative-monitoring
ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ
elasticsearch-logging-0 1/1 Выполняется 0 34 м
elasticsearch-logging-1 1/1 Выполняется 0 32 м
fluentd-ds-l6mgg 1/1 Бег 0 105 с
kibana-logging-669968b8d4-nc4b2 1/1 Бег 0 34 м
Ознакомьтесь с пользовательским интерфейсом Kibana:
http://localhost:8001/api/v1/namespaces/knative-monitoring/services/kibana-logging/proxy/app/kibana
Настройка, как показано ниже, и создание.
Отслеживание
http://localhost:8001/api/v1/namespaces/istio-system/services/zipkin:9411/proxy/zipkin/
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.16.0/monitoring-tracing-zipkin.yaml
Метрики
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.16.0/monitoring-metrics-prometheus.yaml
kubectl port-forward --namespace knative-monitoring
$(kubectl get pods --namespace knative-monitoring
--selector=app=grafana --output=jsonpath=”{.items. .metadata.name}")
3000
Вывод
Мы установили компонент Knative Serving, добавили локальный реестр докеров и развернули существующий сервис с помощью Kn. Поскольку pod’ы эфемерны, журналы Istio бесполезны, но мы можем использовать Kibana для просмотра журналов. Мы также добавили трассировку и метрики.
Первоначально опубликовано на https://blog.ramjee.uk 3 августа 2020 г.