рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд╛рдЗрдЯ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ, рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ, рдЕрдиреБрд╕реВрдЪрд┐рдд рдиреМрдХрд░рд┐рдпреЛрдВ рдФрд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдХрд░рдиреЗ (рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрд▓рдЧреНрди рд╣реИрдВ) рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп
-
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ-
рдпреВрдЖрдИ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ-
рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ-
рдЖрд╡реЗрджрди рдореЗрдВ рдХрд╕реНрдЯрдо рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЬреЛрдбрд╝рдирд╛-
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕рдВрдЧреНрд░рд╣-
рдЧреНрд░рд╛рдлрд╛рдирд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕-
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдп-
рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛-
рдирд┐рд╖реНрдХрд░реНрд╖-
рдиреЛрдЯреНрд╕-
рд╕рдВрджрд░реНрднрдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рд▓рд┐рдирдХреНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдорд┐рдиреАрдмреНрдпреВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛- рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЙрдХрдЯрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рд╣реИ
- рдЗрд╕рдореЗрдВ рдЖрдкрдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдХрд▓-рдиреЛрдб рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

- рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ kubernetis рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ http: // localhost: 8001 / рд╣реИ
- рдЙрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреБрдмреЗрдХреЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ
рдХрдорд╛рдВрдб> kubectl version
рд╕рд╛рде рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рдирд╡реАрдирддрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдпрд╣рд╛рдБ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ https://storage.googleapis.com/kubernetes-release/release/stable.txt
рдЖрдк рдЗрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд▓рд┐рдВрдХ https://storage.googleapis.com/kubernetes-release/release/v1.13.2/bin/windows/amd64/kubectl.exe рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ kubectl cluster-info
рдХрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛рд░реНрдп рдХрд░ рд░рд╣рд╛ рд╣реИ> kubectl cluster-info
рдпреВрдЖрдИ рд╕реНрдерд╛рдкрдирд╛
- рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХ рд╣реА рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
- рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
kubectl describe secret
рдФрд░ рдХреЙрдкреА рдХрд░реЗрдВ

- рдЕрдм рдкреНрд░реЙрдХреНрд╕реА рд╢реБрд░реВ рдХрд░реЗрдВ
kubectl proxy
- рдФрд░ рдЖрдк http: // localhost: 8001 / api / v1 / namespaces / kube-system / services / https: kubernetes-dashboard: /xy / рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдЪрд▓ рд░рд╣рд╛ рд╣реИ
- рдореИрдВрдиреЗ рд╕реНрдЯреВрдбрд┐рдпреЛ https://github.com/SanSYS/kuberfirst рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдорд╛рдирдХ mvc netcoreapp2.1 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛
- Dockerfile:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src COPY ./MetricsDemo.csproj . RUN ls RUN dotnet restore "MetricsDemo.csproj" COPY . . RUN dotnet build "MetricsDemo.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "MetricsDemo.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "MetricsDemo.dll"]
- рдЗрд╕ рдЪреАрдЬрд╝ рдХреЛ рдореАрдЯреНрд░рд┐рдХ 3 рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛
docker build -t metricsdemo3 .
- рд▓реЗрдХрд┐рди! рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдмрд░рд╛ рд╣рдм рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдЙрдард╛рддрд╛ рд╣реВрдВ
- рдиреЛрдЯ - рдХреБрдмреЗрд░рдиреЗрдЯрд┐рд╕ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА
docker create -p 5000:5000 --restart always --name registry registry:2
- рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЕрдзрд┐рдХреГрдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ:

{ "registry-mirrors": [], "insecure-registries": [ "localhost:5000" ], "debug": true, "experimental": false }
- рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдзрдХреНрдХрд╛ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЗрд╢рд╛рд░реЛрдВ
docker start registry docker tag metricsdemo3 localhost:5000/sansys/metricsdemo3 docker push localhost:5000/sansys/metricsdemo3
- рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

UI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
рдпрджрд┐ рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рдФрд░ рдЖрдк рд╕рдВрдЪрд╛рд▓рди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ рддреИрдирд╛рддреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
1-рддреИрдирд╛рддреА-app.yaml kind: Deployment apiVersion: apps/v1 metadata: name: metricsdemo labels: app: web spec: replicas: 2
рдЫреЛрдЯрд╛ рд╡рд┐рд╡рд░рдг
- Kind - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ yaml рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдХрд╛рдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- apiVersion - рд╡рд╕реНрддреБ рдХреЛ рдХрд┐рд╕ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд▓реЗрдмрд▓ - рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рд▓реЗрдмрд▓ (рдмрд╛рдИрдВ рдУрд░ рдХреА рдХреБрдВрдЬрд┐рдпрд╛рдБ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рд╕реЛрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
- рдЪрдпрдирдХрд░реНрддрд╛ - рдЖрдкрдХреЛ рддреИрдирд╛рддреА рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЗрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдЕрдЧрд▓рд╛:
kubectl create -f .\1-deployment-app.yaml
рдФрд░ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЕрдкрдиреА рддреИрдирд╛рддреА рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП
http: // localhost: 8001 / api / v1 / namespaces / kube-system / services / https: kubernetes-рдбреИрд╢рдмреЛрд░реНрдб: / рдкреНрд░реЙрдХреНрд╕реА / #! / рддреИрдирд╛рддреА? рдиреЗрдорд╕реНрдкреЗрд╕ = рдбрд┐рдлрд╝реЙрд▓реНрдЯрдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ (рдкреЙрдбреНрд╕) рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбрдм рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рд╕реЗ рдПрдХ рдкрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╕реЗрд╡рд╛ рд╣реИ
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд╕реНрдЯрдо рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЬреЛрдбрд╝рдирд╛
рдЖрд╡реЗрджрди рдореЗрдВ рдкреИрдХреЗрдЬ
https://www.app-metrics.io/ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝реВрдВрдЧрд╛, рдЕрднреА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдореИрдВ рдПрдкреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХреЗ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реВрдВ
рдпрд╣рд╛рдБ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣реИ private static void AutoDiscoverRoutes(HttpContext context) { if (context.Request.Path.Value == "/favicon.ico") return; List<string> keys = new List<string>(); List<string> vals = new List<string>(); var routeData = context.GetRouteData(); if (routeData != null) { keys.AddRange(routeData.Values.Keys); vals.AddRange(routeData.Values.Values.Select(p => p.ToString())); } keys.Add("method"); vals.Add(context.Request.Method); keys.Add("response"); vals.Add(context.Response.StatusCode.ToString()); keys.Add("url"); vals.Add(context.Request.Path.Value); Program.Metrics.Measure.Counter.Increment(new CounterOptions { Name = "api",
рдФрд░ рдПрдХрддреНрд░рд┐рдд рдореЗрдЯреНрд░рд┐рдХреНрд╕
http: // localhost: 9376 / рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ
* IMetricRoot рдпрд╛ рдЗрд╕рдХреЗ рдЕрдореВрд░реНрдд рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
(Services.AddMetrics (Program.Metrics); )
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕рдВрдЧреНрд░рд╣
рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕реЗрдЯрд┐рдВрдЧ: рдЗрд╕рдХреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ (prometheus.yml) рдореЗрдВ рдПрдХ рдирдпрд╛ рдХрд╛рдо рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирдпрд╛ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдПрдВ:
global: scrape_interval: 15s evaluation_interval: 15s rule_files:
рд▓реЗрдХрд┐рди рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯрд┐рд╕
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kuberneteses/sd_config рд╕реЗ рдореАрдЯреНрд░рд┐рдХ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХрд╛ рдореВрд▓ рд╕рдорд░реНрдерди рд╣реИ
рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЫрд╛рдирдиреЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд▓реЗрдмрд▓
рдбреЙрдХ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдиреМрдХрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- job_name: business-metrics
рдХреБрдмреЗрд░рдиреЗрдЯрд┐рд╕ рдореЗрдВ, рдХреЙрдиреНрдлрд┐рдЧрд░ рдлрд╛рдЗрд▓ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд╛рди рд╣реИ -
рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдореИрдВ рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рд╡рд╣рд╛рдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВ:
2-рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-configmap.yaml apiVersion: v1 kind: ConfigMap
рдХреБрдмреЗрд░рдиреЗрдЯрд┐рд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрдерд╛рди
kubectl create -f .\2-prometheus-configmap.yaml
рдЕрдм рдЖрдкрдХреЛ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
kubectl create -fред \ 3-рдкрд░рд┐рдирд┐рдпреЛрдЬрди-prometheus.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: prometheus namespace: default spec: replicas: 1 template: metadata: labels: app: prometheus-server spec: containers: - name: prometheus image: prom/prometheus args: - "--config.file=/etc/config/prometheus.yml" - "--web.enable-lifecycle" ports: - containerPort: 9090 volumeMounts: - name: prometheus-config-volume
рдзреНрдпрд╛рди рджреЗрдВ - prometheus.yml рдлрд╝рд╛рдЗрд▓ рдХрд╣реАрдВ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди-рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди-рд╡реЙрд▓реНрдпреВрдо рдЦрдВрдб рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдмрди рдЬрд╛рддреА рд╣реИрдВ, рдЬреЛ / etc / config / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореБрд╣рд┐рдо рдХреА рдЬрд╛рддреА рд╣реИ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рд╕рд╛рде рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рддрд░реНрдХ рд╣реИрдВ
--web.enable-lifecycle - рдХрд╣рддреА рд╣реИ рдХрд┐ рдЖрдк POST / - / рд░реАрд▓реЛрдб рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдирдП рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ (рдЙрдкрдпреЛрдЧреА рдЕрдЧрд░ рдХреЙрдиреНрдлрд┐рдЧрд░ "рдлреНрд▓рд╛рдИ рдкрд░" рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдХрдВрдЯреЗрдирд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреИрдирд╛рдд рд╣реИ
kubectl create -f .\3-deployment-prometheus.yaml
рдЫреЛрдЯреЗ рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдФрд░ рдкрддрд╛
http: // localhost: 9090 / рд▓рдХреНрд╖реНрдп рдкрд░ рдЬрд╛рдПрдВ , рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП

рдФрд░ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдЖрдк рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
sum by (response, action, url, app) (delta(application_api[15s]))
рдмрд╢рд░реНрддреЗ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓реЗрдЧрд╛ рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ -
https://prometheus.io/docs/prometheus/latest/querying/asasics/рдЧреНрд░рд╛рдлрд╛рдирд╛ рдореЗрдВ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереЗ - рд╕рдВрд╕реНрдХрд░рдг 5 рддрдХ, рдбреИрд╢рдмреЛрд░реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗрд╡рд▓ HTTP рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦрд┐рд╕рдХрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреНрд░рд╛рдлреНрдЯрд╛рдирд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдбреИрд╢рдмреЛрд░реНрдб
рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддрд╛ рд╣реИ/etc/grafana/provisioning/datasources/
- source configs (рдкреНрд░реЛрдореЗрдЯрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝, рдЬрд╝реИрдмрд┐рдХреНрд╕, рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ, рдЖрджрд┐)/etc/grafana/provisioning/dashboards/
- /etc/grafana/provisioning/dashboards/
рдПрдХреНрд╕реЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕/var/lib/grafana/dashboards/
- рдпрд╣рд╛рдБ рдореИрдВ рдЦреБрдж рдХреЛ рдбреИрд╢рдмреЛрд░реНрдб рдХреЛ json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реВрдБрдЧрд╛
рдпрд╣ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛ apiVersion: v1 kind: ConfigMap metadata: creationTimestamp: null name: grafana-provisioning-datasources namespace: default data: all.yml: | datasources: - name: 'Prometheus' type: 'prometheus' access: 'proxy' org_id: 1 url: 'http://prometheus:9090' is_default: true version: 1 editable: true --- apiVersion: v1 kind: ConfigMap metadata: creationTimestamp: null name: grafana-provisioning-dashboards namespace: default data: all.yml: | apiVersion: 1 providers: - name: 'default' orgId: 1 folder: '' type: file disableDeletion: false updateIntervalSeconds: 10
рдЦреБрдж рдХреА рддреИрдирд╛рддреА, рдХреЛрдИ рдирдИ рдмрд╛рдд рдирд╣реАрдВ apiVersion: extensions/v1beta1 kind: Deployment metadata: name: grafana namespace: default labels: app: grafana component: core spec: replicas: 1 template: metadata: labels: app: grafana component: core spec: containers: - image: grafana/grafana name: grafana imagePullPolicy: IfNotPresent resources: limits: cpu: 100m memory: 100Mi requests: cpu: 100m memory: 100Mi env: - name: GF_AUTH_BASIC_ENABLED value: "true" - name: GF_AUTH_ANONYMOUS_ENABLED value: "true" - name: GF_AUTH_ANONYMOUS_ORG_ROLE value: Admin readinessProbe: httpGet: path: /login port: 3000
рд╡рд┐рд╕реНрддреГрдд рдХрд░реЗрдВ
kubectl create -f .\4-grafana-configmap.yaml kubectl create -f .\5-deployment-grafana.yaml
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЧреНрд░реЗрдлрд╛рди рддреБрд░рдВрдд рдирд╣реАрдВ рдмрдврд╝рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕рд╛рдЗрдХреНрд▓реЗрдЗрдЯ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк
рд▓реЙрдЧ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ
рд╣реИрдВрдЕрдм
http: // localhost: 3000 / рдкрд░ рдЬрд╛рдПрдВрдФрд░ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ


рдпрджрд┐ рдЖрдк рдПрдХ рдирдпрд╛ рджреГрд╢реНрдп рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддреЛ рдЗрд╕реЗ рд╕реАрдзреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдмрджрд▓реЗрдВ, рдФрд░ рдлрд┐рд░ рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдЖрдкрдХреЛ json рдХреЗ рд╕рд╛рде рдПрдХ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдорд┐рд▓реЗрдЧреА, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореИрдк рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд╕рдм рдХреБрдЫ рддреИрдирд╛рдд рд╣реИ рдФрд░ рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдп
рдХреНрдпреВрдмреЗрд░ рдореЗрдВ рдореБрдХреБрдЯ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЛрдирдЬреЛрдм рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ
рдХреНрд░реЛрдирдЬреЙрдм рдХреЗ рд╕рд╛рде, рдЖрдк рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╢реЗрдбреНрдпреВрд▓ рд╕реЗрдХреНрд╢рди рдореБрдХреБрдЯ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕рд┐рдХ рдирд┐рдпрдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
рдЯреНрд░рд┐рдЧрд░ рдХрдВрдЯреЗрдирд░ (рдкреЙрдбрдмреЙрдХреНрд╕) рдХреА рдкреЙрдб рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдореЗрдЯреНрд░рд┐рд╕рдбреЗрдореЗрдореЛ рд╕реЗрд╡рд╛ рдПрдкреА рд╡рд┐рдзрд┐ рдЦреАрдВрдЪрддрд╛ рд╣реВрдВ
рдЖрдк рдХрд╛рдо рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
kubectl.exe get cronjob runapijob --watch

рдиреМрдХрд░реА рд╕реЗ рдЭрдЯрдХрд╛ рджреЗрдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рд╕реЗрд╡рд╛ рдХреЛ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реЗрд╡рд╛ рдореЗрдВ рдХреЙрд▓ рд▓рдЧрднрдЧ рдПрдХ рд╕рдорд╛рди рдкреНрд░рд╕рд╛рд░ рдХреЗ рд╕рд╛рде рдЪреВрд▓реНрд╣рд╛ рдореЗрдВ рдЬрд╛рддреА рд╣реИ
рдпрд╣ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд╛рд░реНрдп рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрдВрд╕реЛрд▓ рд╕реЗ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ about рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдбреЗрдореЛ
рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛
рдпрджрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд╕реНрдЯрд░ рдкреЙрдб рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рддрд░реАрдХрд╛ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдПрдкреА рдбреНрд░реЙрдк рдХрд░рддрд╛ рд╣реИ
[HttpGet("kill/me")] public async void Kill() { throw new Exception("Selfkill"); }
* Async рд╢реВрдиреНрдп рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕реЗ рдЕрдирд╣реЗрд▓реНрдб рдЕрдкрд╡рд╛рдж рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд░реИрд╢ рдХрд░ рджреЗрддрд╛ рд╣реИрдореИрдВ
http: // localhost: 9376 / api / job / рдХрд┐рд▓ / me рд╕реЗ рдЕрдкреАрд▓ рдХрд░рддрд╛
рд╣реВрдВрд╢реНрд░рд╡рдг рдХреА рд╕реВрдЪреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рдХреЗ рдХрд┐рд╕реА рдПрдХ рдЪреВрд▓реНрд╣рд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рд▓реЙрдЧ рдХрдорд╛рдВрдб рд╡рд░реНрддрдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ -p рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдпрд╣ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓реЙрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧрд┐рд░рд╛рд╡рдЯ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдЧрд┐рд░ рдЧрдпрд╛ - рдЧреБрд▓рд╛рдм
рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рд▓рд╛рдЗрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЧрд┐рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреАрд░реЗ-рдзреАрд░реЗ
рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░
, рдлрд▓реА рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдХрдо рд╕реЗ рдХрдо рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ "рдЙрддреНрддрд░рдЬреАрд╡рд┐рддрд╛" рд╣реИрдВ
- рддрддреНрдкрд░рддрд╛ - рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдкреЙрдб рдкрд░ рдпрд╛рддрд╛рдпрд╛рдд рд╢реБрд░реВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдлрд▓реА рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдиреЗ рддрдХ рд╡рд╛рдкрд╕ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- liveness - "рдЙрддреНрддрд░рдЬреАрд╡рд┐рддрд╛ рдХреЗ рд▓рд┐рдП" рдЖрд╡реЗрджрди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдХрд┐рд╕реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрддрд┐рд░реЛрдз рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдордпрдмрд╛рд╣реНрдп), рддреЛ рдХрдВрдЯреЗрдирд░ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред 200 рдФрд░ 400 рдХреЗ рдмреАрдЪ рдХреЗ рд╕рднреА http рдХреЛрдб рдХреЛ рд╕рдлрд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╛рдХреА рд╕рднреА рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ
рдореИрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рджреНрд╡рд╛рд░рд╛ рдкреБрдирдГ рдЖрд░рдВрдн рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХ рдирдпрд╛ рдПрдкреА рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реВрдВрдЧрд╛, рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ 123 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рдЬреАрд╡рд┐рддрд╛ рд╕рддреНрдпрд╛рдкрди рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдзреАрдорд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред
static bool deadlock; [HttpGet("alive/{cmd}")] public string Kill(string cmd) { if (cmd == "deadlock") { deadlock = true; return "Deadlocked"; } if (deadlock) Thread.Sleep(123 * 1000); return deadlock ? "Deadlocked!!!" : "Alive"; }
рдореИрдВ рдХрдВрдЯреЗрдирд░ рдореЗрдВ 1-рдкрд░рд┐рдирд┐рдпреЛрдЬрди- app.yaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдЦрдВрдб рдЬреЛрдбрд╝рддрд╛ рд╣реВрдБ:
containers: - name: metricsdemo image: localhost:5000/sansys/metricsdemo3:6 ports: - containerPort: 80 readinessProbe:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрдк рдиреЗ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд░рд╣рд╛ рд╣реИ
kubectl get events --watch
рдореИрдВ рдореЗрдиреВ рдХреЛ рджрдмрд╛рддрд╛ рд╣реВрдВ рдбреЗрдбрд▓реЙрдХ рдореА (
http: // localhost: 9376 / api / job / рдЬрд╝рд┐рдВрджрд╛ / рдЧрддрд┐рд░реЛрдз )

рдФрд░ рдкрд╛рдБрдЪ рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдБ
1s Warning Unhealthy Pod Liveness probe failed: Get http://10.1.0.137:80/api/job/alive/check: net/http: request canceled (Client.Timeout exceeded while awaiting headers) 1s Warning Unhealthy Pod Liveness probe failed: Get http://10.1.0.137:80/api/job/alive/check: net/http: request canceled (Client.Timeout exceeded while awaiting headers) 0s Warning Unhealthy Pod Liveness probe failed: Get http://10.1.0.137:80/api/job/alive/check: net/http: request canceled (Client.Timeout exceeded while awaiting headers) 0s Warning Unhealthy Pod Readiness probe failed: Get http://10.1.0.137:80/health: dial tcp 10.1.0.137:80: connect: connection refused 0s Normal Killing Pod Killing container with id docker://metricsdemo:Container failed liveness probe.. Container will be killed and recreated. 0s Normal Pulled Pod Container image "localhost:5000/sansys/metricsdemo3:6" already present on machine 0s Normal Created Pod Created container 0s Normal Started Pod Started container
рдирд┐рд╖реНрдХрд░реНрд╖
- рдПрдХ рддрд░рдл, рдкреНрд░рд╡реЗрд╢ рджрд╣рд▓реАрдЬ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдмрд╣реБрдд рдХрдо рдирд┐рдХрд▓рд╛, рджреВрд╕рд░реА рддрд░рдл, рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рд╣реИред рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ, рд░рд╛рдЬреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ, рдП / рдмреА рдкрд░реАрдХреНрд╖рдг рдЖрджрд┐ рдХреА рд╕реАрдорд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
- рдкреНрд░реЛрдореЗрдерд╕ рдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреНрдпреВрдмрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рднрд┐рдиреНрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкрдврд╝рдХрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рдХреНрд▓рд╕реНрдЯрд░ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ
- рдпрд╣ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдлреАрдЪрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рдмрд┐рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирдП рдореАрдЯреНрд░рд┐рдХред рдкреНрд░рдпрд╛рд╕ рдордВрдЪ рдФрд░ рдареЗрд╕ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд▓рдЧреЗрдВрдЧреЗред рдЖрд░рд╛рдо рд╕реЗ
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ
- рдЕрдиреБрдкреНрд░рдпреЛрдЧ
:
рдХреЗ :
рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :
, рдЬреЛ рдХрд┐ рдЧреНрд░рд╛рдлреНрдЯрд╛рдирд╛ тЖТ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реИ kubectl create -f file.yml
- рдПрдХ рдЗрдХрд╛рдИ рдмрдирд╛рдПрдБkubectl delete -f file.yml
- рдПрдХ рдЗрдХрд╛рдИ рд╣рдЯрд╛рдПрдВkubectl get pod
- рд╕рднреА рдЪреВрд▓реНрд╣реЛрдВ (рд╕реЗрд╡рд╛, рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ ...) рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ--namespace=kube-system
- рдиреЗрдорд╕реНрдкреЗрд╕ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ-n kube-system
- рдЗрд╕реА рддрд░рд╣
kubectl -it exec grafana-d8d4d9f5c-cvnkh -- /bin/bash
- рддрд▓ рдкрд░ рдЕрдиреБрд▓рдЧреНрдирдХkubectl delete service grafana
- рдПрдХ рд╕реЗрд╡рд╛, рдлрд▓реА рдХреЛ рд╣рдЯрд╛рдПрдВред рдкрд░рд┐рдирд┐рдпреЛрдЬрди (- рд╕рднреА рд╣рдЯрд╛рдПрдБ)kubectl describe
- рдЗрдХрд╛рдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ (рдЖрдк рдЗрд╕реЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)kubectl edit service metricsdemo
- рдиреЛрдЯрдкреИрдб рд▓реЙрдиреНрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдордХреНрдЦреА рдкрд░ рд╕рднреА рдпрд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВkubectl --help
- рдмрдбрд╝реА рдорджрдж)- рдПрдХ рдЖрдо рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдлрд▓реА (рд╡рд┐рдЪрд╛рд░ - рдПрдХ рдЪрд▓ рд░рд╣реА рдЫрд╡рд┐), рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рдФрд░ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЕрдВрджрд░ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (tcpdump / nc рдЖрджрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред - рдпреБрдЬрд╝рд╛рдИ рдХреБрдмреЗрдЯреЗрд▓-рдбрд┐рдмрдЧ рд╣реИрдмреНрд░. com/en/company/flant/blog/ 436112
рд╕рдВрджрд░реНрдн
- рдРрдк рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреНрдпрд╛ рд╣реИ?
- Kubernetes
- рдкреНрд░реЛрдореЗрдерд┐рдпрд╕
- рдкреВрд░реНрд╡ рддреИрдпрд╛рд░ рдЧреНрд░рд╛рдлреНрдЯрд╛рдирд╛ рд╡рд┐рдиреНрдпрд╛рд╕
- рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд▓реЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдкреБрд░рд╛рдиреА рд╣реИрдВ) - рд╡рд╣рд╛рдБ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд▓реЙрдЧрд┐рдВрдЧ, рдЕрд▓рд░реНрдЯ рдЖрджрд┐ рднреА рд╣реИрдВред
- рд╣реЗрд▓реНрдо - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ - рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдореЗрдерд╕ + рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдерд╛, рд▓реЗрдХрд┐рди рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ - рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ
- Coober рд╕реЗ Prometheus рдХреЗ рд▓рд┐рдП рдХреНрдпреВрдмреНрд╕
- рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЕрд╕рдлрд▓рддрд╛ рдХреА рдХрд╣рд╛рдирд┐рдпрд╛рдБ
- Kubernetes-рд╣рд╛ред 5 рдЬрд╛рджреВрдЧрд░ рдХреЗ рд╕рд╛рде рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдлреЗрд▓рдУрд╡рд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВ
рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рдЬреИрдо