From d536776a44d5e6ec2cc55f2d4df81d7265d65f4b Mon Sep 17 00:00:00 2001 From: srodenhuis Date: Tue, 12 Nov 2024 08:47:38 +0000 Subject: [PATCH] deploy: e005a12597bf3e9a0faa2dd18b5dfb5cb765d750 --- 404.html | 2 +- assets/js/0097d0fa.c95816fc.js | 1 + assets/js/0097d0fa.dae2702e.js | 1 - assets/js/090174e7.19854578.js | 1 + assets/js/090174e7.573e5eca.js | 1 - .../js/{2548183b.90e507a6.js => 2548183b.850dec47.js} | 2 +- .../js/{2f447487.40eaf98c.js => 2f447487.f6ec24be.js} | 2 +- .../js/{6ef6f599.c4798feb.js => 6ef6f599.5e58f0a5.js} | 2 +- assets/js/7e13be3f.080b68c4.js | 1 + assets/js/7e13be3f.398946f7.js | 1 - assets/js/80f670fe.093f0106.js | 1 + assets/js/80f670fe.c1abcbab.js | 1 - .../js/{88cad7e1.a2e818ed.js => 88cad7e1.0bbf8092.js} | 2 +- assets/js/8afa6453.269f12ee.js | 1 - assets/js/8afa6453.8f562ee0.js | 1 + assets/js/b4e198bf.099a705f.js | 1 + assets/js/b4e198bf.e4d6eabc.js | 1 - assets/js/bf0e2243.1952483c.js | 1 + assets/js/bf0e2243.8b72d533.js | 1 - .../js/{d248c736.e9e87892.js => d248c736.7f9542de.js} | 2 +- ...time~main.687bee06.js => runtime~main.1cae8d93.js} | 2 +- docs.html | 2 +- docs/akamai-app-platform/introduction.html | 2 +- docs/apps/alertmanager.html | 2 +- docs/apps/apps-overview.html | 2 +- docs/apps/argocd.html | 2 +- docs/apps/certmanager.html | 2 +- docs/apps/cloudnativepg.html | 2 +- docs/apps/drone.html | 2 +- docs/apps/external-dns.html | 2 +- docs/apps/falco.html | 2 +- docs/apps/gitea.html | 2 +- docs/apps/grafana.html | 2 +- docs/apps/harbor.html | 2 +- docs/apps/ingress-nginx.html | 2 +- docs/apps/istio.html | 2 +- docs/apps/jaeger.html | 2 +- docs/apps/keycloak.html | 2 +- docs/apps/kiali.html | 2 +- docs/apps/knative.html | 2 +- docs/apps/kured.html | 2 +- docs/apps/kyverno.html | 2 +- docs/apps/loki.html | 2 +- docs/apps/minio.html | 2 +- docs/apps/otel.html | 2 +- docs/apps/prometheus.html | 2 +- docs/apps/rabbitmq.html | 2 +- docs/apps/sealed-secrets.html | 2 +- docs/apps/tekton.html | 2 +- docs/apps/tempo.html | 2 +- docs/apps/thanos.html | 2 +- docs/apps/trivy.html | 2 +- docs/apps/velero.html | 2 +- docs/for-devs/console/apps.html | 2 +- docs/for-devs/console/builds.html | 2 +- docs/for-devs/console/catalog.html | 2 +- docs/for-devs/console/dashboard.html | 2 +- docs/for-devs/console/deploy-changes.html | 2 +- docs/for-devs/console/netpols.html | 2 +- docs/for-devs/console/overview.html | 2 +- docs/for-devs/console/projects.html | 2 +- docs/for-devs/console/secrets.html | 2 +- docs/for-devs/console/security-policies.html | 2 +- docs/for-devs/console/services.html | 2 +- docs/for-devs/console/settings.html | 2 +- docs/for-devs/console/shell.html | 2 +- docs/for-devs/console/user-management.html | 2 +- docs/for-devs/console/workloads.html | 2 +- docs/for-ops/cli/apply.html | 2 +- docs/for-ops/cli/bash.html | 2 +- docs/for-ops/cli/bootstrap.html | 2 +- docs/for-ops/cli/commit.html | 2 +- docs/for-ops/cli/decrypt.html | 2 +- docs/for-ops/cli/deploying.html | 2 +- docs/for-ops/cli/destroy.html | 2 +- docs/for-ops/cli/diff.html | 2 +- docs/for-ops/cli/encrypt.html | 2 +- docs/for-ops/cli/installation.html | 2 +- docs/for-ops/cli/known-issues.html | 2 +- docs/for-ops/cli/lint.html | 2 +- docs/for-ops/cli/pull.html | 2 +- docs/for-ops/cli/rotate-keys.html | 2 +- docs/for-ops/cli/status.html | 2 +- docs/for-ops/cli/sync.html | 2 +- docs/for-ops/cli/template.html | 2 +- docs/for-ops/cli/test.html | 2 +- docs/for-ops/cli/validate-templates.html | 2 +- docs/for-ops/cli/validate-values.html | 2 +- docs/for-ops/cli/values.html | 2 +- docs/for-ops/cli/x.html | 2 +- docs/for-ops/console/apps.html | 2 +- docs/for-ops/console/backups.html | 2 +- docs/for-ops/console/builds.html | 2 +- docs/for-ops/console/dashboard.html | 2 +- docs/for-ops/console/deploy-changes.html | 2 +- docs/for-ops/console/maintenance.html | 2 +- docs/for-ops/console/netpols.html | 2 +- docs/for-ops/console/overview.html | 2 +- docs/for-ops/console/projects.html | 2 +- docs/for-ops/console/services.html | 2 +- docs/for-ops/console/settings/alerts.html | 2 +- docs/for-ops/console/settings/backup.html | 2 +- docs/for-ops/console/settings/cluster.html | 2 +- docs/for-ops/console/settings/dns.html | 2 +- docs/for-ops/console/settings/ingress.html | 2 +- docs/for-ops/console/settings/key-management.html | 2 +- docs/for-ops/console/settings/obj.html | 2 +- docs/for-ops/console/settings/oidc.html | 2 +- docs/for-ops/console/settings/platform.html | 2 +- docs/for-ops/console/settings/smtp.html | 2 +- docs/for-ops/console/shell.html | 2 +- docs/for-ops/console/teams.html | 2 +- docs/for-ops/console/user-management.html | 2 +- docs/for-ops/console/workloads.html | 2 +- docs/for-ops/how-to/backups.html | 2 +- docs/for-ops/how-to/catalog.html | 2 +- docs/for-ops/how-to/clone-apl.html | 2 +- docs/for-ops/how-to/core-only.html | 2 +- docs/for-ops/how-to/ingress-classes.html | 2 +- docs/for-ops/how-to/manage-age.html | 2 +- docs/for-ops/how-to/overview.html | 2 +- docs/for-ops/how-to/use-team-admin.html | 2 +- docs/for-ops/sre/daily.html | 2 +- docs/for-ops/sre/overview.html | 2 +- docs/for-ops/sre/troubleshooting.html | 2 +- docs/get-started.html | 2 +- .../installation/akamai-connected-cloud.html | 2 +- docs/get-started/installation/byo-wildcard-cert.html | 2 +- docs/get-started/installation/custom.html | 2 +- docs/get-started/installation/dns.html | 2 +- docs/get-started/installation/entrypoint.html | 2 +- docs/get-started/installation/helm.html | 2 +- docs/get-started/installation/linode.html | 2 +- docs/get-started/installation/oidc.html | 2 +- docs/get-started/installation/overview.html | 2 +- .../installation/post-installation-steps.html | 2 +- docs/get-started/installation/sops.html | 2 +- docs/get-started/labs/auto-image-update.html | 2 +- docs/get-started/labs/build-images.html | 4 ++-- docs/get-started/labs/canary-deployment.html | 2 +- docs/get-started/labs/create-netpols.html | 2 +- docs/get-started/labs/create-postgresql-db.html | 2 +- docs/get-started/labs/create-projects.html | 7 +++++-- docs/get-started/labs/create-rabbitmq-cluster.html | 2 +- docs/get-started/labs/create-repos.html | 4 ++-- docs/get-started/labs/create-sealed-secrets.html | 4 ++-- docs/get-started/labs/create-workloads.html | 2 +- docs/get-started/labs/custom-metrics.html | 2 +- docs/get-started/labs/detect-threats.html | 2 +- docs/get-started/labs/expose-services.html | 4 ++-- docs/get-started/labs/lab-prerequisites.html | 10 +++++----- docs/get-started/labs/monitor-services.html | 2 +- docs/get-started/labs/overview.html | 2 +- docs/get-started/labs/push-images.html | 11 ++++++----- docs/get-started/labs/scan-containers.html | 2 +- docs/get-started/labs/scan-images.html | 2 +- docs/get-started/labs/trigger-builds.html | 4 ++-- docs/get-started/labs/use-catalog.html | 2 +- docs/get-started/labs/use-otel.html | 4 ++-- docs/get-started/labs/using-argo-cd.html | 4 ++-- docs/get-started/labs/view-logs.html | 4 ++-- docs/get-started/labs/view-metrics.html | 4 ++-- docs/get-started/overview.html | 2 +- index.html | 2 +- search.html | 2 +- 165 files changed, 180 insertions(+), 176 deletions(-) create mode 100644 assets/js/0097d0fa.c95816fc.js delete mode 100644 assets/js/0097d0fa.dae2702e.js create mode 100644 assets/js/090174e7.19854578.js delete mode 100644 assets/js/090174e7.573e5eca.js rename assets/js/{2548183b.90e507a6.js => 2548183b.850dec47.js} (66%) rename assets/js/{2f447487.40eaf98c.js => 2f447487.f6ec24be.js} (65%) rename assets/js/{6ef6f599.c4798feb.js => 6ef6f599.5e58f0a5.js} (76%) create mode 100644 assets/js/7e13be3f.080b68c4.js delete mode 100644 assets/js/7e13be3f.398946f7.js create mode 100644 assets/js/80f670fe.093f0106.js delete mode 100644 assets/js/80f670fe.c1abcbab.js rename assets/js/{88cad7e1.a2e818ed.js => 88cad7e1.0bbf8092.js} (79%) delete mode 100644 assets/js/8afa6453.269f12ee.js create mode 100644 assets/js/8afa6453.8f562ee0.js create mode 100644 assets/js/b4e198bf.099a705f.js delete mode 100644 assets/js/b4e198bf.e4d6eabc.js create mode 100644 assets/js/bf0e2243.1952483c.js delete mode 100644 assets/js/bf0e2243.8b72d533.js rename assets/js/{d248c736.e9e87892.js => d248c736.7f9542de.js} (75%) rename assets/js/{runtime~main.687bee06.js => runtime~main.1cae8d93.js} (74%) diff --git a/404.html b/404.html index 9a6a96567..d4530192b 100644 --- a/404.html +++ b/404.html @@ -10,7 +10,7 @@ - + diff --git a/assets/js/0097d0fa.c95816fc.js b/assets/js/0097d0fa.c95816fc.js new file mode 100644 index 000000000..50107d892 --- /dev/null +++ b/assets/js/0097d0fa.c95816fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[9832],{9101:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>n,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var s=o(5893),a=o(1151);const r={slug:"push-images",title:"Push images to Harbor",sidebar_label:"Push Images"},n=void 0,i={id:"get-started/labs/push-images",title:"Push images to Harbor",description:"For this lab, Harbor needs to be activated and the cluster needs to be configured with trusted certificates (like Let's Encrypt using production certificate).",source:"@site/docs/get-started/labs/push-images.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/push-images",permalink:"/docs/get-started/labs/push-images",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/push-images.md",tags:[],version:"current",frontMatter:{slug:"push-images",title:"Push images to Harbor",sidebar_label:"Push Images"},sidebar:"mainSidebar",previous:{title:"Trigger Builds",permalink:"/docs/get-started/labs/trigger-builds"},next:{title:"Create Sealed Secrets",permalink:"/docs/get-started/labs/create-sealed-secrets"}},d={},c=[{value:"Login to Harbor",id:"login-to-harbor",level:2}];function l(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"For this lab, Harbor needs to be activated and the cluster needs to be configured with trusted certificates (like Let's Encrypt using production certificate)."})}),"\n",(0,s.jsx)(t.h2,{id:"login-to-harbor",children:"Login to Harbor"}),"\n",(0,s.jsxs)(t.p,{children:["To be able to push images to Harbor, you'll need a robot account with push permissions. Teams are offered the option to download the Docker config for their team's private registry in Harbor. In the left menu you will see the option ",(0,s.jsx)(t.code,{children:"Download DOCKERCFG"}),". Click on it to download the credentials."]}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["To download the DOCKERCFG, enable this option in the team settings. See team settings for more information: ",(0,s.jsx)(t.a,{href:"/docs/for-ops/console/teams",children:"Platform - Teams"}),"."]})}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"harbor-projects",src:o(5701).Z+"",width:"3144",height:"1488"})}),"\n",(0,s.jsxs)(t.p,{children:["When you have downloaded the docker config. Get the password from the config and paste it below, then run ",(0,s.jsx)(t.code,{children:"docker login"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"docker login -u 'otomi-team--push' -p harbor.\n"})}),"\n",(0,s.jsx)(t.p,{children:"Build and tag your image:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"docker build -t harbor./team-/: \n"})}),"\n",(0,s.jsx)(t.p,{children:"Push the image to Harbor:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"docker push harbor./team-/:\n"})})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},5701:(e,t,o)=>{o.d(t,{Z:()=>s});const s=o.p+"assets/images/download-dcfg-5bee3033cdd1d4ea9d5a49b0b250082c.png"},1151:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>n});var s=o(7294);const a={},r=s.createContext(a);function n(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:n(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0097d0fa.dae2702e.js b/assets/js/0097d0fa.dae2702e.js deleted file mode 100644 index d509b8871..000000000 --- a/assets/js/0097d0fa.dae2702e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[9832],{9101:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>n,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var o=s(5893),r=s(1151);const a={slug:"push-images",title:"Push images to Harbor",sidebar_label:"Push Images"},n=void 0,i={id:"get-started/labs/push-images",title:"Push images to Harbor",description:"For this lab, Harbor needs to be activated and the cluster needs to be configured with trusted certificates (like Let's Encrypt using production certificate).",source:"@site/docs/get-started/labs/push-images.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/push-images",permalink:"/docs/get-started/labs/push-images",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/push-images.md",tags:[],version:"current",frontMatter:{slug:"push-images",title:"Push images to Harbor",sidebar_label:"Push Images"},sidebar:"mainSidebar",previous:{title:"Trigger Builds",permalink:"/docs/get-started/labs/trigger-builds"},next:{title:"Create Sealed Secrets",permalink:"/docs/get-started/labs/create-sealed-secrets"}},d={},c=[{value:"Login to Harbor",id:"login-to-harbor",level:2}];function l(e){const t={admonition:"admonition",code:"code",h2:"h2",img:"img",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"For this lab, Harbor needs to be activated and the cluster needs to be configured with trusted certificates (like Let's Encrypt using production certificate)."})}),"\n",(0,o.jsx)(t.h2,{id:"login-to-harbor",children:"Login to Harbor"}),"\n",(0,o.jsxs)(t.p,{children:["To be able to push images to Harbor, you'll need a robot account with push permissions. Teams are offered the option to download the Docker config for their team's private registry in Harbor. In the left menu you will see the option ",(0,o.jsx)(t.code,{children:"Download DOCKERCFG"}),". Click on it to download the credentials."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"harbor-projects",src:s(5701).Z+"",width:"3144",height:"1488"})}),"\n",(0,o.jsxs)(t.p,{children:["When you have downloaded the docker config then run ",(0,o.jsx)(t.code,{children:"docker login"}),":"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"docker login -u 'otomi-team--push' -p harbor.\n"})}),"\n",(0,o.jsx)(t.p,{children:"Build and tag your image:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"docker build -t harbor.//: .\n"})}),"\n",(0,o.jsx)(t.p,{children:"Push the image to Harbor:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"docker push harbor.//:\n"})})]})}function u(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},5701:(e,t,s)=>{s.d(t,{Z:()=>o});const o=s.p+"assets/images/download-dcfg-5bee3033cdd1d4ea9d5a49b0b250082c.png"},1151:(e,t,s)=>{s.d(t,{Z:()=>i,a:()=>n});var o=s(7294);const r={},a=o.createContext(r);function n(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/090174e7.19854578.js b/assets/js/090174e7.19854578.js new file mode 100644 index 000000000..287aa6344 --- /dev/null +++ b/assets/js/090174e7.19854578.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[4019],{9260:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>a,frontMatter:()=>l,metadata:()=>d,toc:()=>h});var s=i(5893),t=i(1151);const l={slug:"trigger-builds",title:"Trigger Builds",sidebar_label:"Trigger Builds"},r=void 0,d={id:"get-started/labs/trigger-builds",title:"Trigger Builds",description:"In the previous lab we created a Build using the blue repo in Gitea. In this lab we'll create a build for the green repo and trigger the build based on a webhook.",source:"@site/docs/get-started/labs/trigger-builds.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/trigger-builds",permalink:"/docs/get-started/labs/trigger-builds",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/trigger-builds.md",tags:[],version:"current",frontMatter:{slug:"trigger-builds",title:"Trigger Builds",sidebar_label:"Trigger Builds"},sidebar:"mainSidebar",previous:{title:"Build Images",permalink:"/docs/get-started/labs/build-images"},next:{title:"Push Images",permalink:"/docs/get-started/labs/push-images"}},o={},h=[{value:"Create a Build with Trigger enabled",id:"create-a-build-with-trigger-enabled",level:2},{value:"Get the webhook URL",id:"get-the-webhook-url",level:2},{value:"Create a Webhook",id:"create-a-webhook",level:2},{value:"Trigger the build",id:"trigger-the-build",level:2},{value:"Check the status of the build",id:"check-the-status-of-the-build",level:2}];function c(e){const n={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["In the previous lab we created a Build using the ",(0,s.jsx)(n.code,{children:"blue"})," repo in Gitea. In this lab we'll create a build for the ",(0,s.jsx)(n.code,{children:"green"})," repo and trigger the build based on a webhook."]}),"\n",(0,s.jsx)(n.h2,{id:"create-a-build-with-trigger-enabled",children:"Create a Build with Trigger enabled"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the left menu, click on ",(0,s.jsx)(n.code,{children:"Builds"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click on ",(0,s.jsx)(n.code,{children:"Create Build"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fill in the name ",(0,s.jsx)(n.code,{children:"green"})," for your build."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Choose ",(0,s.jsx)(n.code,{children:"Docker"})," and fill in the repo URL for the ",(0,s.jsx)(n.code,{children:"green"})," repo created in the previous lab: ",(0,s.jsx)(n.code,{children:"https://gitea.//green"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Enable ",(0,s.jsx)(n.code,{children:"Trigger"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"get-the-webhook-url",children:"Get the webhook URL"}),"\n",(0,s.jsxs)(n.p,{children:["Before we can configure the webhook for the ",(0,s.jsx)(n.code,{children:"green"})," repo in Gitea, we will need the webhook URL. You can find this webhook URL for your build in the list of Builds. Add the webhook URL to your clipboard."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"trigger build",src:i(8424).Z+"",width:"2360",height:"698"})}),"\n",(0,s.jsx)(n.p,{children:"Also notice that the status of the Build shows an exclamation mark. This is because the Pipeline is created, but the PipelineRun is not yet created because it was not triggered yet."}),"\n",(0,s.jsx)(n.h2,{id:"create-a-webhook",children:"Create a Webhook"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the Console, click on ",(0,s.jsx)(n.code,{children:"apps"})," the left menu and then open ",(0,s.jsx)(n.code,{children:"Gitea"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the top menu of Gitea, click on ",(0,s.jsx)(n.code,{children:"Explore"})," and then on the ",(0,s.jsx)(n.code,{children:"green"})," repo."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.code,{children:"Settings"})," (top right) and then to ",(0,s.jsx)(n.code,{children:"Webhooks"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Add Webhook"})," and select ",(0,s.jsx)(n.code,{children:"Gitea"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"Target URL"}),", paste the webhook URL from your clipboard."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Add Webhook"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"trigger-the-build",children:"Trigger the build"}),"\n",(0,s.jsxs)(n.p,{children:["You can now trigger the build by doing a commit in the ",(0,s.jsx)(n.code,{children:"green"})," repo, or by testing the webhook. Let's test the webhook:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In Gitea, go to the ",(0,s.jsx)(n.code,{children:"Settings"})," (top right) of the ",(0,s.jsx)(n.code,{children:"green"})," repo and then to ",(0,s.jsx)(n.code,{children:"Webhooks"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Click on the webhook we just created."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the bottom, click on ",(0,s.jsx)(n.code,{children:"Test Delivery"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"check-the-status-of-the-build",children:"Check the status of the build"}),"\n",(0,s.jsxs)(n.p,{children:["The build should now have started. Based on the webhook, Tekton has now created a ",(0,s.jsx)(n.code,{children:"PipelineRun"}),". Let's check the status of the PipelineRun:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["In the Console, click on ",(0,s.jsx)(n.code,{children:"Builds"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Because the Build was triggered, a PipelineRun is now running and the status of the Build will show ",(0,s.jsx)(n.code,{children:"in progress"}),":"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"trigger build",src:i(5869).Z+"",width:"2362",height:"590"})}),"\n",(0,s.jsxs)(n.p,{children:["When the Build is completed, the status will show ",(0,s.jsx)(n.code,{children:"healthy"}),":"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"trigger build",src:i(9144).Z+"",width:"2362",height:"568"})}),"\n",(0,s.jsxs)(n.ol,{start:"2",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the list of Builds, click on the ",(0,s.jsx)(n.code,{children:"PipelineRun"})," link of the ",(0,s.jsx)(n.code,{children:"green"})," build."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Tekton Dashboard will open and show a list of all the PipelineRuns. It will show all PipelineRuns because when using a Trigger, the PipelineRun resource is created based on a template and the Console will not know the exact name of the PipelineRun because the name is automatically generated."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click on the PipelineRun with the name ",(0,s.jsx)(n.code,{children:"docker-trigger-build-green-*"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"You can now see the the full log of the build."}),"\n"]}),"\n"]})]})}function a(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},5869:(e,n,i)=>{i.d(n,{Z:()=>s});const s=i.p+"assets/images/trigger-builds-2-9f348d714c4575cd0c29885aa89b080d.png"},9144:(e,n,i)=>{i.d(n,{Z:()=>s});const s=i.p+"assets/images/trigger-builds-3-ac613b058bf063484fd0e2053ce31d6b.png"},8424:(e,n,i)=>{i.d(n,{Z:()=>s});const s=i.p+"assets/images/trigger-builds-85cafb4c9ab213c35fd5792b9cce8fc2.png"},1151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>r});var s=i(7294);const t={},l=s.createContext(t);function r(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/090174e7.573e5eca.js b/assets/js/090174e7.573e5eca.js deleted file mode 100644 index 6302e53fa..000000000 --- a/assets/js/090174e7.573e5eca.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[4019],{9260:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>r,default:()=>a,frontMatter:()=>l,metadata:()=>d,toc:()=>h});var s=n(5893),t=n(1151);const l={slug:"trigger-builds",title:"Trigger Builds",sidebar_label:"Trigger Builds"},r=void 0,d={id:"get-started/labs/trigger-builds",title:"Trigger Builds",description:"In the previous lab we created a Build using the blue repo in Gitea. In this lab we'll create a build for the green repo and trigger the build based on a webhook.",source:"@site/docs/get-started/labs/trigger-builds.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/trigger-builds",permalink:"/docs/get-started/labs/trigger-builds",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/trigger-builds.md",tags:[],version:"current",frontMatter:{slug:"trigger-builds",title:"Trigger Builds",sidebar_label:"Trigger Builds"},sidebar:"mainSidebar",previous:{title:"Build Images",permalink:"/docs/get-started/labs/build-images"},next:{title:"Push Images",permalink:"/docs/get-started/labs/push-images"}},o={},h=[{value:"Create a Build with Trigger enabled",id:"create-a-build-with-trigger-enabled",level:2},{value:"Get the webhook URL",id:"get-the-webhook-url",level:2},{value:"Create a Webhook",id:"create-a-webhook",level:2},{value:"Trigger the build",id:"trigger-the-build",level:2},{value:"Check the status of the build",id:"check-the-status-of-the-build",level:2}];function c(e){const i={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(i.p,{children:["In the previous lab we created a Build using the ",(0,s.jsx)(i.code,{children:"blue"})," repo in Gitea. In this lab we'll create a build for the ",(0,s.jsx)(i.code,{children:"green"})," repo and trigger the build based on a webhook."]}),"\n",(0,s.jsx)(i.h2,{id:"create-a-build-with-trigger-enabled",children:"Create a Build with Trigger enabled"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["In the left menu, click on ",(0,s.jsx)(i.code,{children:"Builds"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click on ",(0,s.jsx)(i.code,{children:"Create Build"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Fill in the name ",(0,s.jsx)(i.code,{children:"green"})," for your build."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Choose ",(0,s.jsx)(i.code,{children:"./Dockerfile"})," and fill in the repo URL for the ",(0,s.jsx)(i.code,{children:"green"})," repo created in the previous lab: ",(0,s.jsx)(i.code,{children:"https://gitea.//green"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Enable ",(0,s.jsx)(i.code,{children:"Trigger"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"get-the-webhook-url",children:"Get the webhook URL"}),"\n",(0,s.jsxs)(i.p,{children:["Before we can configure the webhook for the ",(0,s.jsx)(i.code,{children:"green"})," repo in Gitea, we will need the webhook URL. You can find this webhook URL for your build in the list of Builds. Add the webhook URL to your clipboard."]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"trigger build",src:n(8424).Z+"",width:"2360",height:"698"})}),"\n",(0,s.jsx)(i.p,{children:"Also notice that the status of the Build shows an exclamation mark. This is because the Pipeline is created, but the PipelineRun is not yet created because it was not triggered yet."}),"\n",(0,s.jsx)(i.h2,{id:"create-a-webhook",children:"Create a Webhook"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["In the Console, click on ",(0,s.jsx)(i.code,{children:"apps"})," the left menu and then open ",(0,s.jsx)(i.code,{children:"Gitea"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["In the top menu of Gitea, click on ",(0,s.jsx)(i.code,{children:"Explore"})," and then on the ",(0,s.jsx)(i.code,{children:"green"})," repo."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Go to ",(0,s.jsx)(i.code,{children:"Settings"})," (top right) and then to ",(0,s.jsx)(i.code,{children:"Webhooks"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Add Webhook"})," and select ",(0,s.jsx)(i.code,{children:"Gitea"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["In the ",(0,s.jsx)(i.code,{children:"Target URL"}),", paste the webhook URL from your clipboard."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Add Webhook"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"trigger-the-build",children:"Trigger the build"}),"\n",(0,s.jsxs)(i.p,{children:["You can now trigger the build by doing a commit in the ",(0,s.jsx)(i.code,{children:"green"})," repo, or by testing the webhook. Let's test the webhook:"]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["In Gitea, go to the ",(0,s.jsx)(i.code,{children:"Settings"})," (top right) of the ",(0,s.jsx)(i.code,{children:"green"})," repo and then to ",(0,s.jsx)(i.code,{children:"Webhooks"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Click on the webhook we just created."}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["In the bottom, click on ",(0,s.jsx)(i.code,{children:"Test Delivery"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"check-the-status-of-the-build",children:"Check the status of the build"}),"\n",(0,s.jsxs)(i.p,{children:["The build should now have started. Based on the webhook, Tekton has now created a ",(0,s.jsx)(i.code,{children:"PipelineRun"}),". Let's check the status of the PipelineRun:"]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["In the Console, click on ",(0,s.jsx)(i.code,{children:"Builds"})]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["Because the Build was triggered, a PipelineRun is now running and the status of the Build will show ",(0,s.jsx)(i.code,{children:"in progress"}),":"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"trigger build",src:n(5869).Z+"",width:"2362",height:"590"})}),"\n",(0,s.jsxs)(i.p,{children:["When the Build is completed, the status will show ",(0,s.jsx)(i.code,{children:"healthy"}),":"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"trigger build",src:n(9144).Z+"",width:"2362",height:"568"})}),"\n",(0,s.jsxs)(i.ol,{start:"2",children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["In the list of Builds, click on the ",(0,s.jsx)(i.code,{children:"PipelineRun"})," link of the ",(0,s.jsx)(i.code,{children:"green"})," build."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Tekton Dashboard will open and show a list of all the PipelineRuns. It will show all PipelineRuns because when using a Trigger, the PipelineRun resource is created based on a template and the Console will not know the exact name of the PipelineRun because the name is automatically generated."}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click on the PipelineRun with the name ",(0,s.jsx)(i.code,{children:"docker-trigger-build-green-*"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"You can now see the the full log of the build."}),"\n"]}),"\n"]})]})}function a(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},5869:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/trigger-builds-2-9f348d714c4575cd0c29885aa89b080d.png"},9144:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/trigger-builds-3-ac613b058bf063484fd0e2053ce31d6b.png"},8424:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/trigger-builds-85cafb4c9ab213c35fd5792b9cce8fc2.png"},1151:(e,i,n)=>{n.d(i,{Z:()=>d,a:()=>r});var s=n(7294);const t={},l=s.createContext(t);function r(e){const i=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function d(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2548183b.90e507a6.js b/assets/js/2548183b.850dec47.js similarity index 66% rename from assets/js/2548183b.90e507a6.js rename to assets/js/2548183b.850dec47.js index c11b4a518..a52279c5c 100644 --- a/assets/js/2548183b.90e507a6.js +++ b/assets/js/2548183b.850dec47.js @@ -1 +1 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[9717],{2394:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>i,contentTitle:()=>c,default:()=>h,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var n=t(5893),r=t(1151);const a={slug:"create-sealed-secrets",title:"Create Sealed Secrets",sidebar_label:"Create Sealed Secrets"},c=void 0,l={id:"get-started/labs/create-sealed-secrets",title:"Create Sealed Secrets",description:"In this lab we will create sealed secrets and see how to securely sensitive information in git repository.",source:"@site/docs/get-started/labs/create-sealed-secrets.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/create-sealed-secrets",permalink:"/docs/get-started/labs/create-sealed-secrets",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/create-sealed-secrets.md",tags:[],version:"current",frontMatter:{slug:"create-sealed-secrets",title:"Create Sealed Secrets",sidebar_label:"Create Sealed Secrets"},sidebar:"mainSidebar",previous:{title:"Push Images",permalink:"/docs/get-started/labs/push-images"},next:{title:"Using Argo CD",permalink:"/docs/get-started/labs/using-argo-cd"}},i={},d=[{value:"Creating a Sealed Secret",id:"creating-a-sealed-secret",level:2},{value:"Checking the GIT repository",id:"checking-the-git-repository",level:2},{value:"Checking the Kubernetes secret",id:"checking-the-kubernetes-secret",level:2}];function o(e){const s={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.p,{children:"In this lab we will create sealed secrets and see how to securely sensitive information in git repository."}),"\n",(0,n.jsx)(s.h2,{id:"creating-a-sealed-secret",children:"Creating a Sealed Secret"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Click on the ",(0,n.jsx)(s.code,{children:"Sealed Secrets"})," in the sidebar."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Click on ",(0,n.jsx)(s.code,{children:"Create SealedSecret"}),". This will take you to the page where you can create a sealed secret."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Fill in a name for your secret. In this lab we will use the name ",(0,n.jsx)(s.code,{children:"secret-credentials"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Select the secret type. In this lab we will create a secret of type ",(0,n.jsx)(s.code,{children:"opaque"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Add the secret ",(0,n.jsx)(s.code,{children:"data"}),". Add the following key-value pairs:"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"password=helloworld"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"username=labs-user"})}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Create sealed secret",src:t(6485).Z+"",width:"2384",height:"1900"})}),"\n",(0,n.jsxs)(s.ol,{start:"6",children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Click on ",(0,n.jsx)(s.code,{children:"submit"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Click on ",(0,n.jsx)(s.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Note that the secret value will only be visible at the time of creation or once it has been successfully synchronized with the cluster."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Created sealed secret",src:t(4613).Z+"",width:"2382",height:"1894"})}),"\n",(0,n.jsx)(s.h2,{id:"checking-the-git-repository",children:"Checking the GIT repository"}),"\n",(0,n.jsxs)(s.p,{children:["Now go to Gitea and check the otomi/values repository. You will see that under ",(0,n.jsx)(s.code,{children:"values/env/teams/sealedsecrets..yaml"})," the secret is stored in yaml, but the values are encrypted."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Repository sealed secret",src:t(8849).Z+"",width:"1714",height:"723"})}),"\n",(0,n.jsx)(s.h2,{id:"checking-the-kubernetes-secret",children:"Checking the Kubernetes secret"}),"\n",(0,n.jsx)(s.p,{children:"The only way to see the values of the secret is to decrypt the secret. The secret values are stored as base64 encoded values. Open a Shell and run the following command:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"kubectl get secret secret-credentials -o yaml -n team-labs\n"})}),"\n",(0,n.jsx)(s.p,{children:"This wil return the secret in yaml format. The values are stored as base64 encoded values."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:'apiVersion: v1\ndata:\n password: aGVsbG93b3JsZA==\n username: bGFicy11c2Vy\nkind: Secret\nmetadata:\n creationTimestamp: "2024-09-12T06:11:55Z"\n name: secret-credentials\n namespace: team-labs\n ownerReferences:\n - apiVersion: bitnami.com/v1alpha1\n controller: true\n kind: SealedSecret\n name: secret-credentials\n uid: b9dc5d5c-9699-4efb-86a8-7bd1dd869318\n resourceVersion: "357105"\n uid: 84dd34e1-2313-482d-b7de-e5d848675fb7\ntype: kubernetes.io/opaque\n'})}),"\n",(0,n.jsxs)(s.p,{children:["If you want to decode the secret you can use ",(0,n.jsx)(s.code,{children:"base64 -- decode"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:'kubectl get secret secret-credentials -n team-labs -o jsonpath="{.data.password}" | base64 --decode\nhelloworld\n'})})]})}function h(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},6485:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/create-sealed-secrets-0e70f5c68ac5cf07df0eaf20cd9da781.png"},4613:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/created-sealed-secrets-02f6e4bb69a26875d72787a9419b8ac7.png"},8849:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/repository-sealed-secrets-6b6ff826474e2f5c6a57cc7510aed318.png"},1151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>c});var n=t(7294);const r={},a=n.createContext(r);function c(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[9717],{2394:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>i,contentTitle:()=>c,default:()=>h,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var n=t(5893),r=t(1151);const a={slug:"create-sealed-secrets",title:"Create Sealed Secrets",sidebar_label:"Create Sealed Secrets"},c=void 0,l={id:"get-started/labs/create-sealed-secrets",title:"Create Sealed Secrets",description:"In this lab we will create sealed secrets and see how to securely sensitive information in git repository.",source:"@site/docs/get-started/labs/create-sealed-secrets.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/create-sealed-secrets",permalink:"/docs/get-started/labs/create-sealed-secrets",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/create-sealed-secrets.md",tags:[],version:"current",frontMatter:{slug:"create-sealed-secrets",title:"Create Sealed Secrets",sidebar_label:"Create Sealed Secrets"},sidebar:"mainSidebar",previous:{title:"Push Images",permalink:"/docs/get-started/labs/push-images"},next:{title:"Using Argo CD",permalink:"/docs/get-started/labs/using-argo-cd"}},i={},d=[{value:"Creating a Sealed Secret",id:"creating-a-sealed-secret",level:2},{value:"Checking the GIT repository",id:"checking-the-git-repository",level:2},{value:"Checking the Kubernetes secret",id:"checking-the-kubernetes-secret",level:2}];function o(e){const s={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.p,{children:"In this lab we will create sealed secrets and see how to securely sensitive information in git repository."}),"\n",(0,n.jsx)(s.h2,{id:"creating-a-sealed-secret",children:"Creating a Sealed Secret"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Click on the ",(0,n.jsx)(s.code,{children:"Sealed Secrets"})," in the sidebar."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Click on ",(0,n.jsx)(s.code,{children:"Create SealedSecret"}),". This will take you to the page where you can create a sealed secret."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Fill in a name for your secret. In this lab we will use the name ",(0,n.jsx)(s.code,{children:"secret-credentials"})]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Select the secret type. In this lab we will create a secret of type ",(0,n.jsx)(s.code,{children:"opaque"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Add the secret ",(0,n.jsx)(s.code,{children:"data"}),". Add the following key-value pairs:"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"password=helloworld"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.code,{children:"username=labs-user"})}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Create sealed secret",src:t(6485).Z+"",width:"2384",height:"1900"})}),"\n",(0,n.jsxs)(s.ol,{start:"6",children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Click on ",(0,n.jsx)(s.code,{children:"submit"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:["Click on ",(0,n.jsx)(s.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Note that the secret value will only be visible at the time of creation or once it has been successfully synchronized with the cluster."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Created sealed secret",src:t(4613).Z+"",width:"2382",height:"1894"})}),"\n",(0,n.jsx)(s.h2,{id:"checking-the-git-repository",children:"Checking the GIT repository"}),"\n",(0,n.jsxs)(s.p,{children:["Now go to Gitea and check the otomi/values repository. You will see that under ",(0,n.jsx)(s.code,{children:"values/env/teams/sealedsecrets..yaml"})," the secret is stored in yaml, but the values are encrypted."]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Repository sealed secret",src:t(8849).Z+"",width:"1714",height:"723"})}),"\n",(0,n.jsx)(s.h2,{id:"checking-the-kubernetes-secret",children:"Checking the Kubernetes secret"}),"\n",(0,n.jsx)(s.p,{children:"The only way to see the values of the secret is to decrypt the secret. The secret values are stored as base64 encoded values. In the left menu click on Shell and run the following command:"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:"kubectl get secret secret-credentials -o yaml -n team-labs\n"})}),"\n",(0,n.jsx)(s.p,{children:"This wil return the secret in yaml format. The values are stored as base64 encoded values."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:'apiVersion: v1\ndata:\n password: aGVsbG93b3JsZA==\n username: bGFicy11c2Vy\nkind: Secret\nmetadata:\n creationTimestamp: "2024-09-12T06:11:55Z"\n name: secret-credentials\n namespace: team-labs\n ownerReferences:\n - apiVersion: bitnami.com/v1alpha1\n controller: true\n kind: SealedSecret\n name: secret-credentials\n uid: b9dc5d5c-9699-4efb-86a8-7bd1dd869318\n resourceVersion: "357105"\n uid: 84dd34e1-2313-482d-b7de-e5d848675fb7\ntype: kubernetes.io/opaque\n'})}),"\n",(0,n.jsxs)(s.p,{children:["If you want to decode the secret you can use ",(0,n.jsx)(s.code,{children:"base64 -- decode"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-bash",children:'kubectl get secret secret-credentials -n team-labs -o jsonpath="{.data.password}" | base64 --decode\nhelloworld\n'})})]})}function h(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(o,{...e})}):o(e)}},6485:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/create-sealed-secrets-0e70f5c68ac5cf07df0eaf20cd9da781.png"},4613:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/created-sealed-secrets-02f6e4bb69a26875d72787a9419b8ac7.png"},8849:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/repository-sealed-secrets-6b6ff826474e2f5c6a57cc7510aed318.png"},1151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>c});var n=t(7294);const r={},a=n.createContext(r);function c(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2f447487.40eaf98c.js b/assets/js/2f447487.f6ec24be.js similarity index 65% rename from assets/js/2f447487.40eaf98c.js rename to assets/js/2f447487.f6ec24be.js index cdbf93215..d51ce4fb4 100644 --- a/assets/js/2f447487.40eaf98c.js +++ b/assets/js/2f447487.f6ec24be.js @@ -1 +1 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[5935],{4238:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>a,default:()=>g,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var o=n(5893),s=n(1151);const i={slug:"view-logs",title:"View container logs",sidebar_label:"View Container Logs"},a=void 0,l={id:"get-started/labs/view-logs",title:"View container logs",description:"Loki needs to be enabled on the platform level and Grafana needs to be enabled for the Team.",source:"@site/docs/get-started/labs/view-logs.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/view-logs",permalink:"/docs/get-started/labs/view-logs",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/view-logs.md",tags:[],version:"current",frontMatter:{slug:"view-logs",title:"View container logs",sidebar_label:"View Container Logs"},sidebar:"mainSidebar",previous:{title:"Detect Threats",permalink:"/docs/get-started/labs/detect-threats"},next:{title:"View Container Metrics",permalink:"/docs/get-started/labs/view-metrics"}},r={},c=[{value:"View container logs",id:"view-container-logs",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Loki needs to be enabled on the platform level and Grafana needs to be enabled for the Team."})}),"\n",(0,o.jsx)(t.p,{children:"When your application is deployed, you would of course like to be able to see container logs for debugging purposes. Grafana Loki is used for log aggregation. When Loki on the Platform level is enabled, you'll see the Loki app in your Team Apps."}),"\n",(0,o.jsx)(t.h2,{id:"view-container-logs",children:"View container logs"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Open the Loki app in your team apps:"}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"kubecfg",src:n(8016).Z+"",width:"3162",height:"1540"})}),"\n",(0,o.jsxs)(t.p,{children:["In Grafana, you are directed to the ",(0,o.jsx)(t.code,{children:"Explore"})," section:"]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"kubecfg",src:n(8504).Z+"",width:"2888",height:"1834"})}),"\n",(0,o.jsxs)(t.p,{children:["Select the label ",(0,o.jsx)(t.code,{children:"app"})," and then select ",(0,o.jsx)(t.code,{children:"blue"}),". You will now see all the ",(0,o.jsx)(t.code,{children:"blue"})," container logs. You can also create your own queries. Learn more about LogQL ",(0,o.jsx)(t.a,{href:"https://grafana.com/docs/loki/latest/logql/",children:"here"}),"."]})]})}function g(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8504:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/grafana-loki-34e8753bc77eacda8b46f7ca40fc35d1.png"},8016:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/loki-teams-3e92a37dc42f9f1cac49cd5cb4054900.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>a});var o=n(7294);const s={},i=o.createContext(s);function a(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[5935],{4238:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var o=n(5893),s=n(1151);const i={slug:"view-logs",title:"View container logs",sidebar_label:"View Container Logs"},a=void 0,l={id:"get-started/labs/view-logs",title:"View container logs",description:"Loki needs to be enabled on the platform level and Grafana needs to be enabled for the Team.",source:"@site/docs/get-started/labs/view-logs.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/view-logs",permalink:"/docs/get-started/labs/view-logs",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/view-logs.md",tags:[],version:"current",frontMatter:{slug:"view-logs",title:"View container logs",sidebar_label:"View Container Logs"},sidebar:"mainSidebar",previous:{title:"Detect Threats",permalink:"/docs/get-started/labs/detect-threats"},next:{title:"View Container Metrics",permalink:"/docs/get-started/labs/view-metrics"}},r={},c=[{value:"View container logs",id:"view-container-logs",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Loki needs to be enabled on the platform level and Grafana needs to be enabled for the Team."})}),"\n",(0,o.jsx)(t.p,{children:"When your application is deployed, you would of course like to be able to see container logs for debugging purposes. Grafana Loki is used for log aggregation. When Loki on the Platform level is enabled, you'll see the Loki app in your Team Apps."}),"\n",(0,o.jsx)(t.h2,{id:"view-container-logs",children:"View container logs"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"Open the Loki app in your team apps:"}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"kubecfg",src:n(8016).Z+"",width:"3162",height:"1540"})}),"\n",(0,o.jsxs)(t.p,{children:["In Grafana, you are directed to the ",(0,o.jsx)(t.code,{children:"Explore"})," section:"]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"kubecfg",src:n(8504).Z+"",width:"2888",height:"1834"})}),"\n",(0,o.jsxs)(t.p,{children:["Select the ",(0,o.jsx)(t.code,{children:"app"})," label, then choose ",(0,o.jsx)(t.code,{children:"blue"}),", and click ",(0,o.jsx)(t.code,{children:"Run Query"}),". This will display all logs for the ",(0,o.jsx)(t.code,{children:"blue"})," container. You can also create custom queries; learn more about LogQL here: ",(0,o.jsx)(t.a,{href:"https://grafana.com/docs/loki/latest/logql/",children:"here"}),"."]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8504:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/grafana-loki-34e8753bc77eacda8b46f7ca40fc35d1.png"},8016:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/loki-teams-3e92a37dc42f9f1cac49cd5cb4054900.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>l,a:()=>a});var o=n(7294);const s={},i=o.createContext(s);function a(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6ef6f599.c4798feb.js b/assets/js/6ef6f599.5e58f0a5.js similarity index 76% rename from assets/js/6ef6f599.c4798feb.js rename to assets/js/6ef6f599.5e58f0a5.js index e83b74c4c..e729566ec 100644 --- a/assets/js/6ef6f599.c4798feb.js +++ b/assets/js/6ef6f599.5e58f0a5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[1164],{6041:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var s=i(5893),l=i(1151);const t={slug:"use-otel",title:"OpenTelemetry",sidebar_label:"Use OpenTelemery"},r=void 0,c={id:"get-started/labs/use-otel",title:"OpenTelemetry",description:"In order to make a system observable, it must be instrumented. Language specific implementation of OpenTelemetry provides a way to instrument your application without touching your source code. In this lab we're going to instrument a Java application.",source:"@site/docs/get-started/labs/use-otel.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/use-otel",permalink:"/docs/get-started/labs/use-otel",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/use-otel.md",tags:[],version:"current",frontMatter:{slug:"use-otel",title:"OpenTelemetry",sidebar_label:"Use OpenTelemery"},sidebar:"mainSidebar",previous:{title:"Create Network Policies",permalink:"/docs/get-started/labs/create-netpols"},next:{title:"Canary Deployment",permalink:"/docs/get-started/labs/canary-deployment"}},o={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Build an image from source code",id:"build-an-image-from-source-code",level:2},{value:"Create a workload from the developer catalog",id:"create-a-workload-from-the-developer-catalog",level:2},{value:"Expose the service",id:"expose-the-service",level:2},{value:"See traces",id:"see-traces",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"In order to make a system observable, it must be instrumented. Language specific implementation of OpenTelemetry provides a way to instrument your application without touching your source code. In this lab we're going to instrument a Java application."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"Make sure the following Apps are enabled:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Tempo"})," on Platform"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Otel"})," on Platform"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Loki"})," on Platform"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Grafana"})," for the Team"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Enable tracing for ",(0,s.jsx)(n.code,{children:"Istio"})," and ",(0,s.jsx)(n.code,{children:"ingress-nginx-platform"}),":"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Go to ",(0,s.jsx)(n.code,{children:"Apps"})]}),"\n",(0,s.jsxs)(n.li,{children:["Click on ",(0,s.jsx)(n.code,{children:"Istio"})]}),"\n",(0,s.jsx)(n.li,{children:"Click on the configuration icon"}),"\n",(0,s.jsxs)(n.li,{children:["Click on the ",(0,s.jsx)(n.code,{children:"Values"})," tab"]}),"\n",(0,s.jsxs)(n.li,{children:["In the values click ",(0,s.jsx)(n.code,{children:"Edit"})," and set the following values"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'tracing:\n enabled: true\n samplingRatio: "100"\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Setting the ",(0,s.jsx)(n.code,{children:"samplingRatio"})," to ",(0,s.jsx)(n.code,{children:"100"})," is only done for this lab to make sure all traces are sampled. In a production environment the ratio would normally be set to ",(0,s.jsx)(n.code,{children:"0.01"}),"."]})}),"\n",(0,s.jsxs)(n.ol,{start:"6",children:["\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.code,{children:"Submit"})]}),"\n",(0,s.jsxs)(n.li,{children:["Repeat step 2 to 6 for the ",(0,s.jsx)(n.code,{children:"ingress-nginx-platform"})," app"]}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.code,{children:"Deploy Changes"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"build-an-image-from-source-code",children:"Build an image from source code"}),"\n",(0,s.jsxs)(n.p,{children:["For this lab we're going to use the ",(0,s.jsx)(n.a,{href:"https://github.com/spring-projects/spring-petclinic",children:"Spring PetClinic Sample Application"}),". Follow these steps to build an image from source code:"]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Using a Gitea repository is not required. You can also build using public repositories."})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Create a new repo called ",(0,s.jsx)(n.code,{children:"petclinic"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Clone the Spring PetClinic Sample Application:"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/spring-projects/spring-petclinic.git\ncd spring-petclinic\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"3",children:["\n",(0,s.jsxs)(n.li,{children:["Mirror the Spring PetClinic Sample Application to your ",(0,s.jsx)(n.code,{children:"petclinc"})," repo:"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"git push --mirror https://gitea.//petclinic.git\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"4",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.code,{children:"Builds"})," in the left menu and click ",(0,s.jsx)(n.code,{children:"Create Build"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fill in the Build name ",(0,s.jsx)(n.code,{children:"petclinic"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Choose ",(0,s.jsx)(n.code,{children:"Buildpacks"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fill in the ",(0,s.jsx)(n.code,{children:"Repo URL"})," with the ",(0,s.jsx)(n.code,{children:"petclinic"})," Gitea repo you created."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Submit"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"create-a-workload-from-the-developer-catalog",children:"Create a workload from the developer catalog"}),"\n",(0,s.jsxs)(n.p,{children:["Go to the list of Builds and add the repository of the ",(0,s.jsx)(n.code,{children:"petclinc"})," build to your clipboard. Remember that the tag is latest."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.code,{children:"Workloads"})," in the left menu and click on ",(0,s.jsx)(n.code,{children:"Create Workload"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Select ",(0,s.jsx)(n.code,{children:"Quickstart-K8s-Deployment-Otel"})," from the catalog."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add the Name ",(0,s.jsx)(n.code,{children:"petclinic"})," for the workload."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Leave the ",(0,s.jsx)(n.code,{children:"Auto image updater"})," to ",(0,s.jsx)(n.code,{children:"Disabled"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the workload ",(0,s.jsx)(n.code,{children:"values"}),", change the following parameters:"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"image:\n repository: \n tag: latest\n"})}),"\n",(0,s.jsx)(n.p,{children:"Because we're deploying a Java application here, maybe also change the resources:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"resources:\n limits:\n cpu: 500m\n memory: 1Gi\n requests:\n cpu: 300m\n memory: 256Mi\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"6",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click on ",(0,s.jsx)(n.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"expose-the-service",children:"Expose the service"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the left menu panel under click ",(0,s.jsx)(n.code,{children:"Services"})," then click on ",(0,s.jsx)(n.code,{children:"Create Service"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Select the ",(0,s.jsx)(n.code,{children:"petclinic"})," service."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.code,{children:"Exposure Ingress"}),", select ",(0,s.jsx)(n.code,{children:"Ingress"})," and use the default configuration."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Deploy Changes"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"see-traces",children:"See traces"}),"\n",(0,s.jsxs)(n.p,{children:["To be able to see traces, we'll first need to generate some requests. Click on the URL of the ",(0,s.jsx)(n.code,{children:"petclinic"})," service and generate some requests."]}),"\n",(0,s.jsxs)(n.p,{children:["To see traces, you'll first need to find a ",(0,s.jsx)(n.code,{children:"TraceID"})," of a trace. Go to ",(0,s.jsx)(n.code,{children:"Apps"})," in the left menu and then click op ",(0,s.jsx)(n.code,{children:"Loki"}),". Select the label ",(0,s.jsx)(n.code,{children:"App"})," and select value ",(0,s.jsx)(n.code,{children:"petclinic"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Click on a log entry of a request. Note that the requests are logged by the Istio Envoy proxy. You will now see a link to the full trace in Grafana Tempo. Click on it."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If you don't see any traces, then check and see if the pod runs the ",(0,s.jsx)(n.code,{children:"ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.26.0"})," container. Sometimes the pod starts before the ",(0,s.jsx)(n.code,{children:"Instrumentation"})," resource has been created. If this is the case, restart the Pod."]})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Team apps",src:i(559).Z+"",width:"3848",height:"2486"})}),"\n",(0,s.jsx)(n.p,{children:"And when you click on the Node graph, you\u2019ll see the complete flow:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Team apps",src:i(9159).Z+"",width:"3848",height:"2250"})})]})}function h(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},9159:(e,n,i)=>{i.d(n,{Z:()=>s});const s=i.p+"assets/images/traces-loki-nodes-38816351351dd20a779500a0c943ef79.png"},559:(e,n,i)=>{i.d(n,{Z:()=>s});const s=i.p+"assets/images/traces-loki-7acf9107b085b83d75001a9138a0e4bb.png"},1151:(e,n,i)=>{i.d(n,{Z:()=>c,a:()=>r});var s=i(7294);const l={},t=s.createContext(l);function r(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[1164],{6041:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>c,toc:()=>d});var s=i(5893),l=i(1151);const t={slug:"use-otel",title:"OpenTelemetry",sidebar_label:"Use OpenTelemery"},r=void 0,c={id:"get-started/labs/use-otel",title:"OpenTelemetry",description:"In order to make a system observable, it must be instrumented. Language specific implementation of OpenTelemetry provides a way to instrument your application without touching your source code. In this lab we're going to instrument a Java application.",source:"@site/docs/get-started/labs/use-otel.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/use-otel",permalink:"/docs/get-started/labs/use-otel",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/use-otel.md",tags:[],version:"current",frontMatter:{slug:"use-otel",title:"OpenTelemetry",sidebar_label:"Use OpenTelemery"},sidebar:"mainSidebar",previous:{title:"Create Network Policies",permalink:"/docs/get-started/labs/create-netpols"},next:{title:"Canary Deployment",permalink:"/docs/get-started/labs/canary-deployment"}},o={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Build an image from source code",id:"build-an-image-from-source-code",level:2},{value:"Create a workload from the developer catalog",id:"create-a-workload-from-the-developer-catalog",level:2},{value:"Expose the service",id:"expose-the-service",level:2},{value:"See traces",id:"see-traces",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"In order to make a system observable, it must be instrumented. Language specific implementation of OpenTelemetry provides a way to instrument your application without touching your source code. In this lab we're going to instrument a Java application."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"Make sure the following Apps are enabled:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Tempo"})," on Platform"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Otel"})," on Platform"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Loki"})," on Platform"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Grafana"})," for the Team"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Enable tracing for ",(0,s.jsx)(n.code,{children:"Istio"})," and ",(0,s.jsx)(n.code,{children:"ingress-nginx-platform"}),":"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Go to ",(0,s.jsx)(n.code,{children:"Apps"})]}),"\n",(0,s.jsxs)(n.li,{children:["Click on ",(0,s.jsx)(n.code,{children:"Istio"})]}),"\n",(0,s.jsx)(n.li,{children:"Click on the configuration icon"}),"\n",(0,s.jsxs)(n.li,{children:["Click on the ",(0,s.jsx)(n.code,{children:"Values"})," tab"]}),"\n",(0,s.jsxs)(n.li,{children:["In the values click ",(0,s.jsx)(n.code,{children:"Edit"})," and set the following values"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'tracing:\n enabled: true\n samplingRatio: "100"\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["Setting the ",(0,s.jsx)(n.code,{children:"samplingRatio"})," to ",(0,s.jsx)(n.code,{children:"100"})," is only done for this lab to make sure all traces are sampled. In a production environment the ratio would normally be set to ",(0,s.jsx)(n.code,{children:"0.01"}),"."]})}),"\n",(0,s.jsxs)(n.ol,{start:"6",children:["\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.code,{children:"Submit"})]}),"\n",(0,s.jsxs)(n.li,{children:["Repeat step 2 to 6 for the ",(0,s.jsx)(n.code,{children:"ingress-nginx-platform"})," app"]}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.code,{children:"Deploy Changes"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"build-an-image-from-source-code",children:"Build an image from source code"}),"\n",(0,s.jsxs)(n.p,{children:["For this lab we're going to use the ",(0,s.jsx)(n.a,{href:"https://github.com/spring-projects/spring-petclinic",children:"Spring PetClinic Sample Application"}),". Follow these steps to build an image from source code:"]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Using a Gitea repository is not required. You can also build using public repositories."})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Create a new repo called ",(0,s.jsx)(n.code,{children:"petclinic"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Clone the Spring PetClinic Sample Application:"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/spring-projects/spring-petclinic.git\ncd spring-petclinic\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"3",children:["\n",(0,s.jsxs)(n.li,{children:["Mirror the Spring PetClinic Sample Application to your ",(0,s.jsx)(n.code,{children:"petclinc"})," repo:"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"git push --mirror https://gitea.//petclinic.git\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"4",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.code,{children:"Builds"})," in the left menu and click ",(0,s.jsx)(n.code,{children:"Create Build"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fill in the Build name ",(0,s.jsx)(n.code,{children:"petclinic"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Choose ",(0,s.jsx)(n.code,{children:"Buildpacks"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fill in the ",(0,s.jsx)(n.code,{children:"Repo URL"})," with the ",(0,s.jsx)(n.code,{children:"petclinic"})," Gitea repo you created."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Submit"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"create-a-workload-from-the-developer-catalog",children:"Create a workload from the developer catalog"}),"\n",(0,s.jsxs)(n.p,{children:["Go to the list of Builds and add the repository of the ",(0,s.jsx)(n.code,{children:"petclinc"})," build to your clipboard. Remember that the tag is latest."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Go to ",(0,s.jsx)(n.code,{children:"Workloads"})," in the left menu and click on ",(0,s.jsx)(n.code,{children:"Create Workload"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Select ",(0,s.jsx)(n.code,{children:"Quickstart-K8s-Deployment-Otel"})," from the catalog."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add the Name ",(0,s.jsx)(n.code,{children:"petclinic"})," for the workload."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Leave the ",(0,s.jsx)(n.code,{children:"Auto image updater"})," to ",(0,s.jsx)(n.code,{children:"Disabled"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the workload ",(0,s.jsx)(n.code,{children:"values"}),", change the following parameters:"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"image:\n repository: \n tag: latest\n"})}),"\n",(0,s.jsx)(n.p,{children:"Because we're deploying a Java application here, maybe also change the resources:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"resources:\n limits:\n cpu: 500m\n memory: 1Gi\n requests:\n cpu: 300m\n memory: 256Mi\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"6",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click on ",(0,s.jsx)(n.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"expose-the-service",children:"Expose the service"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the left menu panel under click ",(0,s.jsx)(n.code,{children:"Services"})," then click on ",(0,s.jsx)(n.code,{children:"Create Service"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Select the ",(0,s.jsx)(n.code,{children:"petclinic"})," service."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.code,{children:"Exposure Ingress"}),", select ",(0,s.jsx)(n.code,{children:"External"})," and use the default configuration."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.code,{children:"Deploy Changes"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"see-traces",children:"See traces"}),"\n",(0,s.jsxs)(n.p,{children:["To be able to see traces, we'll first need to generate some requests. Click on the URL of the ",(0,s.jsx)(n.code,{children:"petclinic"})," service and generate some requests."]}),"\n",(0,s.jsxs)(n.p,{children:["To see traces, you'll first need to find a ",(0,s.jsx)(n.code,{children:"TraceID"})," of a trace. Go to ",(0,s.jsx)(n.code,{children:"Apps"})," in the left menu and then click op ",(0,s.jsx)(n.code,{children:"Loki"}),". Select the label ",(0,s.jsx)(n.code,{children:"App"})," and select value ",(0,s.jsx)(n.code,{children:"petclinic"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Click on a log entry of a request. Note that the requests are logged by the Istio Envoy proxy. You will now see a link to the full trace in Grafana Tempo. Click on it."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["If you don't see any traces, then check and see if the pod runs the ",(0,s.jsx)(n.code,{children:"ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.26.0"})," container. Sometimes the pod starts before the ",(0,s.jsx)(n.code,{children:"Instrumentation"})," resource has been created. If this is the case, restart the Pod."]})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Team apps",src:i(559).Z+"",width:"3848",height:"2486"})}),"\n",(0,s.jsx)(n.p,{children:"And when you click on the Node graph, you\u2019ll see the complete flow:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Team apps",src:i(9159).Z+"",width:"3848",height:"2250"})})]})}function h(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},9159:(e,n,i)=>{i.d(n,{Z:()=>s});const s=i.p+"assets/images/traces-loki-nodes-38816351351dd20a779500a0c943ef79.png"},559:(e,n,i)=>{i.d(n,{Z:()=>s});const s=i.p+"assets/images/traces-loki-7acf9107b085b83d75001a9138a0e4bb.png"},1151:(e,n,i)=>{i.d(n,{Z:()=>c,a:()=>r});var s=i(7294);const l={},t=s.createContext(l);function r(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:r(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7e13be3f.080b68c4.js b/assets/js/7e13be3f.080b68c4.js new file mode 100644 index 000000000..b87e125a9 --- /dev/null +++ b/assets/js/7e13be3f.080b68c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[7702],{4894:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>n,metadata:()=>d,toc:()=>o});var t=r(5893),i=r(1151);const n={slug:"lab-prerequisites",title:"Lab Prerequisites",sidebar_label:"Lab Prerequisites"},l=void 0,d={id:"get-started/labs/labs-prerequisites",title:"Lab Prerequisites",description:"Prerequisites",source:"@site/docs/get-started/labs/labs-prerequisites.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/lab-prerequisites",permalink:"/docs/get-started/labs/lab-prerequisites",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/labs-prerequisites.md",tags:[],version:"current",frontMatter:{slug:"lab-prerequisites",title:"Lab Prerequisites",sidebar_label:"Lab Prerequisites"},sidebar:"mainSidebar",previous:{title:"Labs Overview",permalink:"/docs/get-started/labs/overview"},next:{title:"Create GIT repos",permalink:"/docs/get-started/labs/create-repos"}},a={},o=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Sign in to the Console",id:"sign-in-to-the-console",level:2}];function c(e){const s={a:"a",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["DNS is configured. See ",(0,t.jsx)(s.a,{href:"/docs/get-started/installation/overview",children:"here"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Platform Applications that are required for the following labs are enabled:"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Lab"}),(0,t.jsx)(s.th,{children:"App"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Build images"}),(0,t.jsx)(s.td,{children:"Harbor"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Trigger builds"}),(0,t.jsx)(s.td,{children:"Harbor"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Push images to harbor"}),(0,t.jsx)(s.td,{children:"Harbor"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Scan running containers for vulnerabilities"}),(0,t.jsx)(s.td,{children:"Prometheus, Grafana, Trivy Operator"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"View container logs"}),(0,t.jsx)(s.td,{children:"Loki, Grafana"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"View container metrics"}),(0,t.jsx)(s.td,{children:"Prometheus"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Monitor services"}),(0,t.jsx)(s.td,{children:"Alertmanager"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Using custom metrics"}),(0,t.jsx)(s.td,{children:"Prometheus"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Tracing with Open Telemetry"}),(0,t.jsx)(s.td,{children:"Loki, Otel, Tempo"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Create a RabbitMQ cluster"}),(0,t.jsx)(s.td,{children:"RabbitMQ"})]})]})]}),"\n",(0,t.jsxs)(s.p,{children:["For the ",(0,t.jsx)(s.a,{href:"/docs/get-started/labs/use-otel",children:"Tracing with Open Telemetry"})," Lab, tracing needs to be configured in the ",(0,t.jsx)(s.code,{children:"Istio"})," and ",(0,t.jsx)(s.code,{children:"Nginx Ingress"})," apps."]}),"\n",(0,t.jsxs)(s.ol,{start:"3",children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["A team called ",(0,t.jsx)(s.code,{children:"labs"})," is created with ",(0,t.jsx)(s.code,{children:"Alertmanager"})," activated. See how you can create teams on: ",(0,t.jsx)(s.a,{href:"/docs/for-ops/console/teams",children:"Platform - Teams"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["A user account is created and added to the ",(0,t.jsx)(s.code,{children:"labs"})," Team. In the labs we'll be using the user ",(0,t.jsx)(s.code,{children:"labs-user@example.com"}),". See how you can create users on: ",(0,t.jsx)(s.a,{href:"/docs/for-ops/console/user-management",children:"Platform - User Management"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"sign-in-to-the-console",children:"Sign in to the Console"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:["Go to the provided URL. The URL will look like this: ",(0,t.jsx)(s.a,{href:"https://console.yourdomain.com",children:"https://console.yourdomain.com"})]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:"Sign in with the created user account (or when OIDC is configured, use your existing corporate AD account)"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"After sign in, you will see this page (with grafana enabled):"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.img,{alt:"Team dashboard",src:r(3798).Z+"",width:"3216",height:"2012"})})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},3798:(e,s,r)=>{r.d(s,{Z:()=>t});const t=r.p+"assets/images/team-dashboard-41058b2f383096d555cba1cdb7b9b130.png"},1151:(e,s,r)=>{r.d(s,{Z:()=>d,a:()=>l});var t=r(7294);const i={},n=t.createContext(i);function l(e){const s=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7e13be3f.398946f7.js b/assets/js/7e13be3f.398946f7.js deleted file mode 100644 index 3e5a3fe37..000000000 --- a/assets/js/7e13be3f.398946f7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[7702],{4894:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var r=t(5893),i=t(1151);const n={slug:"lab-prerequisites",title:"Lab Prerequisites",sidebar_label:"Lab Prerequisites"},d=void 0,l={id:"get-started/labs/labs-prerequisites",title:"Lab Prerequisites",description:"Prerequisites",source:"@site/docs/get-started/labs/labs-prerequisites.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/lab-prerequisites",permalink:"/docs/get-started/labs/lab-prerequisites",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/labs-prerequisites.md",tags:[],version:"current",frontMatter:{slug:"lab-prerequisites",title:"Lab Prerequisites",sidebar_label:"Lab Prerequisites"},sidebar:"mainSidebar",previous:{title:"Labs Overview",permalink:"/docs/get-started/labs/overview"},next:{title:"Create GIT repos",permalink:"/docs/get-started/labs/create-repos"}},a={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Sign in to the Console",id:"sign-in-to-the-console",level:2}];function o(e){const s={a:"a",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["DNS is configured. See ",(0,r.jsx)(s.a,{href:"/docs/get-started/installation/overview",children:"here"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"Platform Applications that are required for the following labs are enabled:"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Lab"}),(0,r.jsx)(s.th,{children:"App"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Build images"}),(0,r.jsx)(s.td,{children:"Harbor"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Trigger builds"}),(0,r.jsx)(s.td,{children:"Harbor"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Push images to harbor"}),(0,r.jsx)(s.td,{children:"Harbor"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Scan running containers for vulnerabilities"}),(0,r.jsx)(s.td,{children:"Prometheus, Grafana, Trivy Operator"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"View container logs"}),(0,r.jsx)(s.td,{children:"Loki, Grafana"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"View container metrics"}),(0,r.jsx)(s.td,{children:"Prometheus"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Using custom metrics"}),(0,r.jsx)(s.td,{children:"Prometheus"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Monitoring availability of Workloads"}),(0,r.jsx)(s.td,{children:"Prometheus"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Tracing with Open Telemetry"}),(0,r.jsx)(s.td,{children:"Loki, Otel, Tempo"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Create a RabbitMQ cluster"}),(0,r.jsx)(s.td,{children:"RabbitMQ"})]})]})]}),"\n",(0,r.jsxs)(s.p,{children:["For the ",(0,r.jsx)(s.a,{href:"/docs/get-started/labs/use-otel",children:"Tracing with Open Telemetry"})," Lab, tracing needs to be configured in the ",(0,r.jsx)(s.code,{children:"Istio"})," and ",(0,r.jsx)(s.code,{children:"Nginx Ingress"})," apps."]}),"\n",(0,r.jsxs)(s.ol,{start:"3",children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["A team called ",(0,r.jsx)(s.code,{children:"labs"})," is created with ",(0,r.jsx)(s.code,{children:"Alertmanager"})," activated."]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["A user account is created and added to the ",(0,r.jsx)(s.code,{children:"labs"})," Team. In the labs we'll be using the user ",(0,r.jsx)(s.code,{children:"labs-user"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"sign-in-to-the-console",children:"Sign in to the Console"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:["Go to the provided URL. The URL will look like this: ",(0,r.jsx)(s.a,{href:"https://console.yourdomain.com",children:"https://console.yourdomain.com"})]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:"Sign in with the created user account (or when OIDC is configured, use your existing corporate AD account)"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"After sign in, you will see this page:"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Team dashboard",src:t(3798).Z+"",width:"3216",height:"2012"})})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},3798:(e,s,t)=>{t.d(s,{Z:()=>r});const r=t.p+"assets/images/team-dashboard-41058b2f383096d555cba1cdb7b9b130.png"},1151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>d});var r=t(7294);const i={},n=r.createContext(i);function d(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/80f670fe.093f0106.js b/assets/js/80f670fe.093f0106.js new file mode 100644 index 000000000..5af144a07 --- /dev/null +++ b/assets/js/80f670fe.093f0106.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[2477],{9765:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>o});var s=n(5893),t=n(1151);const l={slug:"build-images",title:"Build images from application source",sidebar_label:"Build Images"},d=void 0,r={id:"get-started/labs/build-images",title:"Build images from application source",description:"Harbor needs to be activated for this lab.",source:"@site/docs/get-started/labs/build-images.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/build-images",permalink:"/docs/get-started/labs/build-images",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/build-images.md",tags:[],version:"current",frontMatter:{slug:"build-images",title:"Build images from application source",sidebar_label:"Build Images"},sidebar:"mainSidebar",previous:{title:"Create GIT repos",permalink:"/docs/get-started/labs/create-repos"},next:{title:"Trigger Builds",permalink:"/docs/get-started/labs/trigger-builds"}},a={},o=[{value:"Build the blue image",id:"build-the-blue-image",level:2},{value:"Re-run the build (optional)",id:"re-run-the-build-optional",level:2}];function c(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.admonition,{type:"info",children:(0,s.jsx)(i.p,{children:"Harbor needs to be activated for this lab."})}),"\n",(0,s.jsxs)(i.p,{children:["When your team is using Harbor for private image registries, you can build images from source using pre-configured Tekton pipelines using the ",(0,s.jsx)(i.a,{href:"https://buildpacks.io/docs/buildpack-author-guide/package-a-buildpack/",children:"paketo"})," (used by Buildpacks mode) task or the ",(0,s.jsx)(i.a,{href:"https://github.com/GoogleContainerTools/kaniko",children:"Kaniko"})," task (used by the Docker mode) to build images from application source."]}),"\n",(0,s.jsx)(i.h2,{id:"build-the-blue-image",children:"Build the blue image"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["In the left menu, click on ",(0,s.jsx)(i.code,{children:"Builds"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click on ",(0,s.jsx)(i.code,{children:"Create Build"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Fill in the name ",(0,s.jsx)(i.code,{children:"blue"})," for your build and a tag (default tag is latest)."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Choose ",(0,s.jsx)(i.code,{children:"Docker"})," and fill in the repo URL for the ",(0,s.jsx)(i.code,{children:"blue"})," repo created in the previous lab: ",(0,s.jsx)(i.code,{children:"https://gitea.//blue"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Deploy changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["Now a Tekton Pipeline and PipelineRun resource to build the image will be created. This will take around 30 seconds. Then the PipelineRun will start building the image. During this time the status will show ",(0,s.jsx)(i.code,{children:"in progress"}),":"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"build status",src:n(2073).Z+"",width:"2396",height:"1106"})}),"\n",(0,s.jsxs)(i.p,{children:["When the build is finished, the status will show ",(0,s.jsx)(i.code,{children:"healthy"}),":"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"build status",src:n(2105).Z+"",width:"2348",height:"1112"})}),"\n",(0,s.jsxs)(i.p,{children:["To see the full PipelineRun of the build, go to the list of Builds and click on ",(0,s.jsx)(i.code,{children:"PipelineRun"})," of the ",(0,s.jsx)(i.code,{children:"blue"})," build. This will open the Tekton Dashboard and show the status of the PipelineRun of the build:"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"build status",src:n(7935).Z+"",width:"3114",height:"1536"})}),"\n",(0,s.jsx)(i.p,{children:"When the build is ready you can see the image in Harbor:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Open Harbor."}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Click on the project of your team. Here you will see all the registries of the team, including the registry of the new build image."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"build status",src:n(8280).Z+"",width:"2904",height:"1026"})}),"\n",(0,s.jsx)(i.h2,{id:"re-run-the-build-optional",children:"Re-run the build (optional)"}),"\n",(0,s.jsxs)(i.p,{children:["For this step you need to have the Tekton cli installed. If you don't have the Tekton cli installed, you can install it from this page: ",(0,s.jsx)(i.a,{href:"https://tekton.dev/docs/cli/",children:"https://tekton.dev/docs/cli/"})]}),"\n",(0,s.jsx)(i.p,{children:"To run the build again using the Console, follow these steps:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Change the tag of the build for example to ",(0,s.jsx)(i.code,{children:"v1.0.0"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Deploy changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"To re-build the image using the same tag, restart the build pipeline using the Tekton cli in the Shell:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Start a shell in the Console"}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Get the name of the pipeline"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"kubectl get pipelines\nNAME AGE\ndocker-build-blue 41h\n"})}),"\n",(0,s.jsxs)(i.ol,{start:"3",children:["\n",(0,s.jsx)(i.li,{children:"Get the name of the pipelinerun:"}),"\n"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"kubectl get pipelineruns\nNAME SUCCEEDED REASON STARTTIME COMPLETIONTIME\ndocker-build-blue-latest True Succeeded 41h 41h\n"})}),"\n",(0,s.jsxs)(i.ol,{start:"4",children:["\n",(0,s.jsx)(i.li,{children:"Start the pipeline using the pipelinerun:"}),"\n"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"tkn pipeline start docker-build-blue --use-pipelinerun docker-build-blue-latest\nPipelineRun started: docker-build-blue-latest-j5mmt\n"})}),"\n",(0,s.jsxs)(i.ol,{start:"5",children:["\n",(0,s.jsx)(i.li,{children:"In order to track the PipelineRun progress run:"}),"\n"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"tkn pipelinerun logs docker-build-blue-latest-j5mmt -f\n"})}),"\n",(0,s.jsxs)(i.p,{children:["But it's easier to just open the Tekton dashboard and Click on ",(0,s.jsx)(i.code,{children:"PipelineRuns"}),"."]})]})}function h(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},2105:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/build-status-1-a8942e71700cd65f2b669c25b2681894.png"},7935:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/build-status-2-97c38bcf38a5b5a4b435bcce7f2344d3.png"},8280:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/build-status-3-2c2ff329951664d48d94f6b767e52c2d.png"},2073:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/build-status-7da8376994e53ec9a83b1e51c3ed57cf.png"},1151:(e,i,n)=>{n.d(i,{Z:()=>r,a:()=>d});var s=n(7294);const t={},l=s.createContext(t);function d(e){const i=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),s.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/80f670fe.c1abcbab.js b/assets/js/80f670fe.c1abcbab.js deleted file mode 100644 index f53d2c3f0..000000000 --- a/assets/js/80f670fe.c1abcbab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[2477],{9765:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>t,metadata:()=>r,toc:()=>o});var s=n(5893),l=n(1151);const t={slug:"build-images",title:"Build images from application source",sidebar_label:"Build Images"},d=void 0,r={id:"get-started/labs/build-images",title:"Build images from application source",description:"Harbor needs to be activated for this lab.",source:"@site/docs/get-started/labs/build-images.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/build-images",permalink:"/docs/get-started/labs/build-images",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/build-images.md",tags:[],version:"current",frontMatter:{slug:"build-images",title:"Build images from application source",sidebar_label:"Build Images"},sidebar:"mainSidebar",previous:{title:"Create GIT repos",permalink:"/docs/get-started/labs/create-repos"},next:{title:"Trigger Builds",permalink:"/docs/get-started/labs/trigger-builds"}},a={},o=[{value:"Build the blue image",id:"build-the-blue-image",level:2},{value:"Re-run the build (optional)",id:"re-run-the-build-optional",level:2}];function c(e){const i={a:"a",admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.admonition,{type:"info",children:(0,s.jsx)(i.p,{children:"Harbor needs to be activated for this lab."})}),"\n",(0,s.jsxs)(i.p,{children:["When your team is using Harbor for private image registries, you can build images from source using pre-configured Tekton pipelines using the ",(0,s.jsx)(i.a,{href:"https://buildpacks.io/docs/buildpack-author-guide/package-a-buildpack/",children:"paketo"})," (used by Buildpacks mode) task or the ",(0,s.jsx)(i.a,{href:"https://github.com/GoogleContainerTools/kaniko",children:"Kaniko"})," task (used by the Docker mode) to build images from application source."]}),"\n",(0,s.jsx)(i.h2,{id:"build-the-blue-image",children:"Build the blue image"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["In the left menu, click on ",(0,s.jsx)(i.code,{children:"Builds"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click on ",(0,s.jsx)(i.code,{children:"Create Build"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Fill in the name ",(0,s.jsx)(i.code,{children:"blue"})," for your build and a tag (default tag is latest)."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Choose ",(0,s.jsx)(i.code,{children:"Docker"})," and fill in the repo URL for the ",(0,s.jsx)(i.code,{children:"blue"})," repo created in the previous lab."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Deploy changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["Now a Tekton Pipeline and PipelineRun resource to build the image will be created. This will take around 30 seconds. Then the PipelineRun will start building the image. During this time the status will show ",(0,s.jsx)(i.code,{children:"in progress"}),":"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"build status",src:n(2073).Z+"",width:"2396",height:"1106"})}),"\n",(0,s.jsxs)(i.p,{children:["When the build is finished, the status will show ",(0,s.jsx)(i.code,{children:"healthy"}),":"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"build status",src:n(2105).Z+"",width:"2348",height:"1112"})}),"\n",(0,s.jsxs)(i.p,{children:["To see the full PipelineRun of the build, go to the list of Builds and click on ",(0,s.jsx)(i.code,{children:"PipelineRun"})," of the ",(0,s.jsx)(i.code,{children:"blue"})," build. This will open the Tekton Dashboard and show the status of the PipelineRun of the build:"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"build status",src:n(7935).Z+"",width:"3114",height:"1536"})}),"\n",(0,s.jsx)(i.p,{children:"When the build is ready you can see the image in Harbor:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Open Harbor."}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Click on the project of your team. Here you will see all the registries of the team, including the registry of the new build image."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"build status",src:n(8280).Z+"",width:"2904",height:"1026"})}),"\n",(0,s.jsx)(i.h2,{id:"re-run-the-build-optional",children:"Re-run the build (optional)"}),"\n",(0,s.jsxs)(i.p,{children:["For this step you need to have the Tekton cli installed. If you don't have the Tekton cli installed, you can install it from this page: ",(0,s.jsx)(i.a,{href:"https://tekton.dev/docs/cli/",children:"https://tekton.dev/docs/cli/"})]}),"\n",(0,s.jsx)(i.p,{children:"To run the build again using the Console, follow these steps:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Change the tag of the build for example to ",(0,s.jsx)(i.code,{children:"v1.0.0"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsxs)(i.p,{children:["Click ",(0,s.jsx)(i.code,{children:"Deploy changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"To re-build the image using the same tag, restart the build pipeline using the Tekton cli in the Shell:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Start a shell in the Console"}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["\n",(0,s.jsx)(i.p,{children:"Get the name of the pipeline"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"kubectl get pipelines\nNAME AGE\ndocker-build-blue 41h\n"})}),"\n",(0,s.jsxs)(i.ol,{start:"3",children:["\n",(0,s.jsx)(i.li,{children:"Get the name of the pipelinerun:"}),"\n"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"kubectl get pipelineruns\nNAME SUCCEEDED REASON STARTTIME COMPLETIONTIME\ndocker-build-blue-latest True Succeeded 41h 41h\n"})}),"\n",(0,s.jsxs)(i.ol,{start:"4",children:["\n",(0,s.jsx)(i.li,{children:"Start the pipeline using the pipelinerun:"}),"\n"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"tkn pipeline start docker-build-blue --use-pipelinerun docker-build-blue-latest\nPipelineRun started: docker-build-blue-latest-j5mmt\n"})}),"\n",(0,s.jsxs)(i.ol,{start:"5",children:["\n",(0,s.jsx)(i.li,{children:"In order to track the PipelineRun progress run:"}),"\n"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"tkn pipelinerun logs docker-build-blue-latest-j5mmt -f\n"})}),"\n",(0,s.jsxs)(i.p,{children:["But it's easier to just open the Tekton dashboard and Click on ",(0,s.jsx)(i.code,{children:"PipelineRuns"}),"."]})]})}function h(e={}){const{wrapper:i}={...(0,l.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},2105:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/build-status-1-a8942e71700cd65f2b669c25b2681894.png"},7935:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/build-status-2-97c38bcf38a5b5a4b435bcce7f2344d3.png"},8280:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/build-status-3-2c2ff329951664d48d94f6b767e52c2d.png"},2073:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/build-status-7da8376994e53ec9a83b1e51c3ed57cf.png"},1151:(e,i,n)=>{n.d(i,{Z:()=>r,a:()=>d});var s=n(7294);const l={},t=s.createContext(l);function d(e){const i=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:d(e.components),s.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/88cad7e1.a2e818ed.js b/assets/js/88cad7e1.0bbf8092.js similarity index 79% rename from assets/js/88cad7e1.a2e818ed.js rename to assets/js/88cad7e1.0bbf8092.js index 62cf459b9..5ee4b158a 100644 --- a/assets/js/88cad7e1.a2e818ed.js +++ b/assets/js/88cad7e1.0bbf8092.js @@ -1 +1 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[8760],{4636:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var s=n(5893),i=n(1151);const r={slug:"view-metrics",title:"View container metrics",sidebar_label:"View Container Metrics"},a=void 0,d={id:"get-started/labs/view-metrics",title:"View container metrics",description:"Prometheus and Grafana for the Team need to be activated for this lab.",source:"@site/docs/get-started/labs/view-metrics.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/view-metrics",permalink:"/docs/get-started/labs/view-metrics",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/view-metrics.md",tags:[],version:"current",frontMatter:{slug:"view-metrics",title:"View container metrics",sidebar_label:"View Container Metrics"},sidebar:"mainSidebar",previous:{title:"View Container Logs",permalink:"/docs/get-started/labs/view-logs"},next:{title:"Monitor Services",permalink:"/docs/get-started/labs/monitor-services"}},o={},l=[{value:"View dashboards",id:"view-dashboards",level:2},{value:"View container metrics",id:"view-container-metrics",level:2}];function c(e){const t={admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"Prometheus and Grafana for the Team need to be activated for this lab."})}),"\n",(0,s.jsx)(t.p,{children:"When your application is deployed, you would of course like to be able to see container metrics for debugging purposes. Prometheus is used for collecting metrics. When Prometheus is enabled on the platform level and Grafana is enabled for the Team, general container metrics (provided by the Platform Prometheus) can be used in Grafana dashboards."}),"\n",(0,s.jsx)(t.h2,{id:"view-dashboards",children:"View dashboards"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Open the Grafana app in your team apps:"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"kubecfg",src:n(3957).Z+"",width:"3162",height:"1556"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Grafana will open the Dashboards page:"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"kubecfg",src:n(4240).Z+"",width:"2970",height:"1568"})}),"\n",(0,s.jsx)(t.p,{children:"The dashboards are dynamically added based on the enabled platform capabilities:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Dashboard"}),(0,s.jsx)(t.th,{children:"When added"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Kubernetes / Deployment"}),(0,s.jsx)(t.td,{children:"When Prometheus on the platform level is enabled"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Kubernetes / Pods"}),(0,s.jsx)(t.td,{children:"When Prometheus on the platform level is enabled"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Team status"}),(0,s.jsx)(t.td,{children:"When Prometheus on the platform level is enabled"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Container scan results"}),(0,s.jsx)(t.td,{children:"When Trivy Operator on the platform level is enabled"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Detected threads in containers"}),(0,s.jsx)(t.td,{children:"When Falco on the platform level is enabled"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"view-container-metrics",children:"View container metrics"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Click on the ",(0,s.jsx)(t.code,{children:"Kubernetes / Pods"})," dashboard."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Select the required Pod and Container."}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},4240:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/grafana-dashboards-cfb37f301b6a3086d8dedece2ac801d5.png"},3957:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/grafana-teams-da4d4051b53ba06afd6c119aaaeea9b5.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>a});var s=n(7294);const i={},r=s.createContext(i);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[8760],{4636:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var s=n(5893),i=n(1151);const r={slug:"view-metrics",title:"View container metrics",sidebar_label:"View Container Metrics"},a=void 0,d={id:"get-started/labs/view-metrics",title:"View container metrics",description:"Prometheus and Grafana for the Team need to be activated for this lab.",source:"@site/docs/get-started/labs/view-metrics.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/view-metrics",permalink:"/docs/get-started/labs/view-metrics",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/view-metrics.md",tags:[],version:"current",frontMatter:{slug:"view-metrics",title:"View container metrics",sidebar_label:"View Container Metrics"},sidebar:"mainSidebar",previous:{title:"View Container Logs",permalink:"/docs/get-started/labs/view-logs"},next:{title:"Monitor Services",permalink:"/docs/get-started/labs/monitor-services"}},o={},l=[{value:"View dashboards",id:"view-dashboards",level:2},{value:"View container metrics",id:"view-container-metrics",level:2}];function c(e){const t={admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"Prometheus and Grafana for the Team need to be activated for this lab."})}),"\n",(0,s.jsx)(t.p,{children:"When your application is deployed, you would of course like to be able to see container metrics for debugging purposes. Prometheus is used for collecting metrics. When Prometheus is enabled on the platform level and Grafana is enabled for the Team, general container metrics (provided by the Platform Prometheus) can be used in Grafana dashboards."}),"\n",(0,s.jsx)(t.h2,{id:"view-dashboards",children:"View dashboards"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Open the Grafana app in your team apps:"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"kubecfg",src:n(3957).Z+"",width:"3162",height:"1556"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Grafana will open the Dashboards page:"}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"kubecfg",src:n(4240).Z+"",width:"2970",height:"1568"})}),"\n",(0,s.jsx)(t.p,{children:"The dashboards are dynamically added based on the enabled platform capabilities:"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Dashboard"}),(0,s.jsx)(t.th,{children:"When added"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Kubernetes / Deployment"}),(0,s.jsx)(t.td,{children:"When Prometheus on the platform level is enabled"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Kubernetes / Pods"}),(0,s.jsx)(t.td,{children:"When Prometheus on the platform level is enabled"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Team status"}),(0,s.jsx)(t.td,{children:"When Prometheus on the platform level is enabled"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Container scan results"}),(0,s.jsx)(t.td,{children:"When Trivy Operator on the platform level is enabled"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:"Detected threads in containers"}),(0,s.jsx)(t.td,{children:"When Falco on the platform level is enabled"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"view-container-metrics",children:"View container metrics"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Click on the ",(0,s.jsx)(t.code,{children:"Kubernetes / Pods"})," dashboard."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Select the desired Pod and Container, e.g., ",(0,s.jsx)(t.code,{children:"blue-"})," and ",(0,s.jsx)(t.code,{children:"all"}),"."]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},4240:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/grafana-dashboards-cfb37f301b6a3086d8dedece2ac801d5.png"},3957:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/grafana-teams-da4d4051b53ba06afd6c119aaaeea9b5.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>a});var s=n(7294);const i={},r=s.createContext(i);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8afa6453.269f12ee.js b/assets/js/8afa6453.269f12ee.js deleted file mode 100644 index 4ea231545..000000000 --- a/assets/js/8afa6453.269f12ee.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[4385],{7604:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>n,default:()=>p,frontMatter:()=>c,metadata:()=>l,toc:()=>a});var i=t(5893),r=t(1151);const c={slug:"expose-services",title:"Publicly expose workloads",sidebar_label:"Expose Services"},n=void 0,l={id:"get-started/labs/expose-services",title:"Publicly expose workloads",description:"When you have deployed your application using the Workloads feature, you will probably like to expose it publicly. In this lab we'll create a Service to publicly expose your application. When you create a Service, the Istio virtual service and and ingress resource for your application will be created automatically.",source:"@site/docs/get-started/labs/expose-services.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/expose-services",permalink:"/docs/get-started/labs/expose-services",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/expose-services.md",tags:[],version:"current",frontMatter:{slug:"expose-services",title:"Publicly expose workloads",sidebar_label:"Expose Services"},sidebar:"mainSidebar",previous:{title:"Create Workloads",permalink:"/docs/get-started/labs/create-workloads"},next:{title:"Configure Auto Image Updater",permalink:"/docs/get-started/labs/auto-image-update"}},o={},a=[{value:"Create a Service",id:"create-a-service",level:2}];function d(e){const s={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.p,{children:"When you have deployed your application using the Workloads feature, you will probably like to expose it publicly. In this lab we'll create a Service to publicly expose your application. When you create a Service, the Istio virtual service and and ingress resource for your application will be created automatically."}),"\n",(0,i.jsx)(s.h2,{id:"create-a-service",children:"Create a Service"}),"\n",(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsxs)(s.li,{children:["In the left menu panel under click ",(0,i.jsx)(s.code,{children:"Services"})," then click on ",(0,i.jsx)(s.code,{children:"Create Service"}),":"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"expose services",src:t(725).Z+"",width:"3200",height:"1614"})}),"\n",(0,i.jsxs)(s.ol,{start:"2",children:["\n",(0,i.jsxs)(s.li,{children:["Select the ",(0,i.jsx)(s.code,{children:"blue"})," service of the Workload we created in the previous lab:"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"expose services",src:t(5923).Z+"",width:"3198",height:"1698"})}),"\n",(0,i.jsxs)(s.ol,{start:"3",children:["\n",(0,i.jsxs)(s.li,{children:["Under ",(0,i.jsx)(s.code,{children:"Exposure Ingress"}),", select ",(0,i.jsx)(s.code,{children:"External"})," and use the default configuration:"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"expose services",src:t(1736).Z+"",width:"2364",height:"478"})}),"\n",(0,i.jsxs)(s.ol,{start:"4",children:["\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:["Click ",(0,i.jsx)(s.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:["Click ",(0,i.jsx)(s.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:"You will see your service in the list of Services:"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"expose services",src:t(4889).Z+"",width:"2366",height:"566"})}),"\n",(0,i.jsx)(s.p,{children:"Click on the URL and see the blue application publicly exposed."})]})}function p(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},5923:(e,s,t)=>{t.d(s,{Z:()=>i});const i=t.p+"assets/images/create-svc-2-f29410d7f3f92dd787b5809c086e67fc.png"},1736:(e,s,t)=>{t.d(s,{Z:()=>i});const i=t.p+"assets/images/create-svc-3-3df39f4611c80679cce15d49e89decf7.png"},4889:(e,s,t)=>{t.d(s,{Z:()=>i});const i=t.p+"assets/images/create-svc-4-1992fd5a3e9f19d1fefeeb94adcd0cd6.png"},725:(e,s,t)=>{t.d(s,{Z:()=>i});const i=t.p+"assets/images/create-svc-e9bb194f1fcd03591705d4fac5f28903.png"},1151:(e,s,t)=>{t.d(s,{Z:()=>l,a:()=>n});var i=t(7294);const r={},c=i.createContext(r);function n(e){const s=i.useContext(c);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),i.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8afa6453.8f562ee0.js b/assets/js/8afa6453.8f562ee0.js new file mode 100644 index 000000000..7db7e667a --- /dev/null +++ b/assets/js/8afa6453.8f562ee0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[4385],{7604:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>l,default:()=>p,frontMatter:()=>c,metadata:()=>n,toc:()=>a});var i=t(5893),r=t(1151);const c={slug:"expose-services",title:"Publicly expose workloads",sidebar_label:"Expose Services"},l=void 0,n={id:"get-started/labs/expose-services",title:"Publicly expose workloads",description:"When you have deployed your application using the Workloads feature, you will probably like to expose it publicly. In this lab we'll create a Service to publicly expose your application. When you create a Service, the Istio virtual service and and ingress resource for your application will be created automatically.",source:"@site/docs/get-started/labs/expose-services.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/expose-services",permalink:"/docs/get-started/labs/expose-services",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/expose-services.md",tags:[],version:"current",frontMatter:{slug:"expose-services",title:"Publicly expose workloads",sidebar_label:"Expose Services"},sidebar:"mainSidebar",previous:{title:"Create Workloads",permalink:"/docs/get-started/labs/create-workloads"},next:{title:"Configure Auto Image Updater",permalink:"/docs/get-started/labs/auto-image-update"}},o={},a=[{value:"Create a Service",id:"create-a-service",level:2}];function d(e){const s={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.p,{children:"When you have deployed your application using the Workloads feature, you will probably like to expose it publicly. In this lab we'll create a Service to publicly expose your application. When you create a Service, the Istio virtual service and and ingress resource for your application will be created automatically."}),"\n",(0,i.jsx)(s.h2,{id:"create-a-service",children:"Create a Service"}),"\n",(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsxs)(s.li,{children:["In the left menu panel under click ",(0,i.jsx)(s.code,{children:"Services"})," then click on ",(0,i.jsx)(s.code,{children:"Create Service"}),":"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"expose services",src:t(725).Z+"",width:"3200",height:"1614"})}),"\n",(0,i.jsxs)(s.ol,{start:"2",children:["\n",(0,i.jsxs)(s.li,{children:["Select the ",(0,i.jsx)(s.code,{children:"blue"})," service of the workload created in the previous lab. The blue service will become available once the ArgoCD application is ready:"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"expose services",src:t(5923).Z+"",width:"3198",height:"1698"})}),"\n",(0,i.jsxs)(s.ol,{start:"3",children:["\n",(0,i.jsxs)(s.li,{children:["Under ",(0,i.jsx)(s.code,{children:"Exposure Ingress"}),", select ",(0,i.jsx)(s.code,{children:"External"})," and use the default configuration:"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"expose services",src:t(1736).Z+"",width:"2364",height:"478"})}),"\n",(0,i.jsxs)(s.ol,{start:"4",children:["\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:["Click ",(0,i.jsx)(s.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:["Click ",(0,i.jsx)(s.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:"You will see your service in the list of Services:"}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"expose services",src:t(4889).Z+"",width:"2366",height:"566"})}),"\n",(0,i.jsx)(s.p,{children:"Click on the URL and see the blue application publicly exposed."})]})}function p(e={}){const{wrapper:s}={...(0,r.a)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},5923:(e,s,t)=>{t.d(s,{Z:()=>i});const i=t.p+"assets/images/create-svc-2-f29410d7f3f92dd787b5809c086e67fc.png"},1736:(e,s,t)=>{t.d(s,{Z:()=>i});const i=t.p+"assets/images/create-svc-3-3df39f4611c80679cce15d49e89decf7.png"},4889:(e,s,t)=>{t.d(s,{Z:()=>i});const i=t.p+"assets/images/create-svc-4-1992fd5a3e9f19d1fefeeb94adcd0cd6.png"},725:(e,s,t)=>{t.d(s,{Z:()=>i});const i=t.p+"assets/images/create-svc-e9bb194f1fcd03591705d4fac5f28903.png"},1151:(e,s,t)=>{t.d(s,{Z:()=>n,a:()=>l});var i=t(7294);const r={},c=i.createContext(r);function l(e){const s=i.useContext(c);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function n(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(c.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4e198bf.099a705f.js b/assets/js/b4e198bf.099a705f.js new file mode 100644 index 000000000..1a9e17ddb --- /dev/null +++ b/assets/js/b4e198bf.099a705f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[7360],{2741:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>a,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var o=t(5893),s=t(1151);const l={slug:"create-projects",title:"Create projects",sidebar_label:"Create Projects"},i=void 0,r={id:"get-started/labs/create-projects",title:"Create projects",description:"A Project is a collection of a Build, a Workload and a Service. The benefit of using Projects is that you can create a Build, a Workload and a Service in one run. Projects are ideal for developers to run multiple code branches next to each other and automatically update the deployment based on a push. In this lab we are going to create a Project and see how everything now comes together is one simple form.",source:"@site/docs/get-started/labs/create-projects.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/create-projects",permalink:"/docs/get-started/labs/create-projects",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/create-projects.md",tags:[],version:"current",frontMatter:{slug:"create-projects",title:"Create projects",sidebar_label:"Create Projects"},sidebar:"mainSidebar",previous:{title:"Configure Auto Image Updater",permalink:"/docs/get-started/labs/auto-image-update"},next:{title:"Create a Database",permalink:"/docs/get-started/labs/create-postgresql-db"}},c={},d=[{value:"Create a new Git repository",id:"create-a-new-git-repository",level:2},{value:"Create a Project",id:"create-a-project",level:2},{value:"Get the webhook URL",id:"get-the-webhook-url",level:2},{value:"Create a Webhook",id:"create-a-webhook",level:2},{value:"Trigger the build",id:"trigger-the-build",level:2},{value:"Check the status of the Workload",id:"check-the-status-of-the-workload",level:2},{value:"Check the status of the Service",id:"check-the-status-of-the-service",level:2},{value:"Change the code and push the commit",id:"change-the-code-and-push-the-commit",level:2}];function h(e){const n={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"A Project is a collection of a Build, a Workload and a Service. The benefit of using Projects is that you can create a Build, a Workload and a Service in one run. Projects are ideal for developers to run multiple code branches next to each other and automatically update the deployment based on a push. In this lab we are going to create a Project and see how everything now comes together is one simple form."}),"\n",(0,o.jsx)(n.h2,{id:"create-a-new-git-repository",children:"Create a new Git repository"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Create a new repo called ",(0,o.jsx)(n.code,{children:"nodejs-helloworld"})," in Gitea."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Set the Default Branch to ",(0,o.jsx)(n.code,{children:"master"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Clone the Hello World Sample Application:"}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/linode/apl-nodejs-helloworld\ncd apl-nodejs-helloworld\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"4",children:["\n",(0,o.jsxs)(n.li,{children:["Mirror the Hello World Sample Application to your ",(0,o.jsx)(n.code,{children:"nodejs-helloworld"})," repo:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"git push --mirror https://gitea.//nodejs-helloworld.git\n"})}),"\n",(0,o.jsx)(n.h2,{id:"create-a-project",children:"Create a Project"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Go to ",(0,o.jsx)(n.code,{children:"Project"})," and click ",(0,o.jsx)(n.code,{children:"Create Project"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Fill in a name for the Project. This name is used for the Build (the name of the image) and the Workload. The Service will automatically select the ClusterIP service name based on the Workload name."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.code,{children:"Create build from source"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.code,{children:"Next"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Choose ",(0,o.jsx)(n.code,{children:"Docker"})," and fill in the repository URL of the ",(0,o.jsx)(n.code,{children:"nodejs-helloworld"})," repository."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Enable ",(0,o.jsx)(n.code,{children:"Trigger"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.code,{children:"Next"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Select the ",(0,o.jsx)(n.code,{children:"Digest"})," strategy for the ",(0,o.jsx)(n.code,{children:"Auto image updater"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.code,{children:"imageRepository"})," is already filled in. Make sure the ",(0,o.jsx)(n.code,{children:"tag"})," is identical to the tag used for the Build."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Use the default Chart values."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.code,{children:"Next"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Under ",(0,o.jsx)(n.code,{children:"Exposure"})," select ",(0,o.jsx)(n.code,{children:"External"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"get-the-webhook-url",children:"Get the webhook URL"}),"\n",(0,o.jsxs)(n.p,{children:["Before we can configure the webhook for the ",(0,o.jsx)(n.code,{children:"nodejs-helloworld"})," repo in Gitea, we will need the webhook URL. You can find this webhook URL for your build in the list of Builds. Add the webhook URL to your clipboard."]}),"\n",(0,o.jsx)(n.p,{children:"Also notice that the status of the Build shows an exclamation mark. This is because the Tekton Pipeline is created, but the PipelineRun is not yet created because it was not triggered yet."}),"\n",(0,o.jsx)(n.h2,{id:"create-a-webhook",children:"Create a Webhook"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the Console, click on ",(0,o.jsx)(n.code,{children:"apps"})," the left menu and then open ",(0,o.jsx)(n.code,{children:"Gitea"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the top menu of Gitea, click on ",(0,o.jsx)(n.code,{children:"Explore"})," and then on the ",(0,o.jsx)(n.code,{children:"nodejs-helloworld"})," repo."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Go to ",(0,o.jsx)(n.code,{children:"Settings"})," (top right) and then to ",(0,o.jsx)(n.code,{children:"Webhooks"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.code,{children:"Add Webhook"})," and select ",(0,o.jsx)(n.code,{children:"Gitea"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the ",(0,o.jsx)(n.code,{children:"Target URL"}),", paste the webhook URL from your clipboard."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click ",(0,o.jsx)(n.code,{children:"Add Webhook"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"trigger-the-build",children:"Trigger the build"}),"\n",(0,o.jsxs)(n.p,{children:["You can now trigger the Build by doing a commit in the ",(0,o.jsx)(n.code,{children:"nodejs-helloworld"})," repo, or by testing the webhook. Let's test the webhook:"]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In Gitea, go to the ",(0,o.jsx)(n.code,{children:"Settings"})," (top right) of the ",(0,o.jsx)(n.code,{children:"nodejs-helloworld"})," repo and then to ",(0,o.jsx)(n.code,{children:"Webhooks"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Click on the webhook we just created."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["In the bottom, click on ",(0,o.jsx)(n.code,{children:"Test Delivery"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"check-the-status-of-the-workload",children:"Check the status of the Workload"}),"\n",(0,o.jsxs)(n.p,{children:["Go to Workloads and click on the Argo CD ",(0,o.jsx)(n.code,{children:"application"})," link of the Workload created by the Project. What do you see? The Argo CD application is still in a ",(0,o.jsx)(n.code,{children:"Degraded"})," state because the image build has not completed yet. When the build in finished and the image can be pulled, the status of the application will automatically become ",(0,o.jsx)(n.code,{children:"Healthy"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"check-the-status-of-the-service",children:"Check the status of the Service"}),"\n",(0,o.jsxs)(n.p,{children:["When the state of the Workload becomes ",(0,o.jsx)(n.code,{children:"Healthy"}),", the URL of the Service created by the Project will show the following page:"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Hello World",src:t(3145).Z+"",width:"778",height:"182"})}),"\n",(0,o.jsx)(n.h2,{id:"change-the-code-and-push-the-commit",children:"Change the code and push the commit"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Go to the ",(0,o.jsx)(n.code,{children:"hello-world"})," repository."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Edit the ",(0,o.jsx)(n.code,{children:"package.json"})," and set the ",(0,o.jsx)(n.code,{children:"Version"})," to ",(0,o.jsx)(n.code,{children:"1.4.0"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Commit the changes."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"Check the URL again. After a couple of minutes you will see the following page:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Hello World",src:t(6090).Z+"",width:"890",height:"252"})})]})}function a(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},6090:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/hello-world-2-671a268fda45f814837a1a130d96823a.png"},3145:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/hello-world-ff027196740055b940f6785f98b26500.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>i});var o=t(7294);const s={},l=o.createContext(s);function i(e){const n=o.useContext(l);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4e198bf.e4d6eabc.js b/assets/js/b4e198bf.e4d6eabc.js deleted file mode 100644 index 7be2a627d..000000000 --- a/assets/js/b4e198bf.e4d6eabc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[7360],{2741:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>a,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var o=n(5893),s=n(1151);const l={slug:"create-projects",title:"Create projects",sidebar_label:"Create Projects"},i=void 0,r={id:"get-started/labs/create-projects",title:"Create projects",description:"A Project is a collection of a Build, a Workload and a Service. The benefit of using Projects is that you can create a Build, a Workload and a Service in one run. Projects are ideal for developers to run multiple code branches next to each other and automatically update the deployment based on a push. In this lab we are going to create a Project and see how everything now comes together is one simple form.",source:"@site/docs/get-started/labs/create-projects.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/create-projects",permalink:"/docs/get-started/labs/create-projects",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/create-projects.md",tags:[],version:"current",frontMatter:{slug:"create-projects",title:"Create projects",sidebar_label:"Create Projects"},sidebar:"mainSidebar",previous:{title:"Configure Auto Image Updater",permalink:"/docs/get-started/labs/auto-image-update"},next:{title:"Create a Database",permalink:"/docs/get-started/labs/create-postgresql-db"}},c={},d=[{value:"Create a new Git repository",id:"create-a-new-git-repository",level:2},{value:"Create a Project",id:"create-a-project",level:2},{value:"Get the webhook URL",id:"get-the-webhook-url",level:2},{value:"Create a Webhook",id:"create-a-webhook",level:2},{value:"Trigger the build",id:"trigger-the-build",level:2},{value:"Check the status of the Workload",id:"check-the-status-of-the-workload",level:2},{value:"Check the status of the Service",id:"check-the-status-of-the-service",level:2},{value:"Change the code and push the commit",id:"change-the-code-and-push-the-commit",level:2}];function h(e){const t={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:"A Project is a collection of a Build, a Workload and a Service. The benefit of using Projects is that you can create a Build, a Workload and a Service in one run. Projects are ideal for developers to run multiple code branches next to each other and automatically update the deployment based on a push. In this lab we are going to create a Project and see how everything now comes together is one simple form."}),"\n",(0,o.jsx)(t.h2,{id:"create-a-new-git-repository",children:"Create a new Git repository"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Create a new repo called ",(0,o.jsx)(t.code,{children:"nodejs-helloworld"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Set the Default Branch to ",(0,o.jsx)(t.code,{children:"master"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Clone the Hello World Sample Application:"}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:"git clone https://github.com/linode/apl-nodejs-helloworld\ncd apl-nodejs-helloworld\n"})}),"\n",(0,o.jsxs)(t.ol,{start:"4",children:["\n",(0,o.jsxs)(t.li,{children:["Mirror the Hello World Sample Application to your ",(0,o.jsx)(t.code,{children:"nodejs-helloworld"})," repo:"]}),"\n"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"git push --mirror https://gitea.//nodejs-helloworld.git\n"})}),"\n",(0,o.jsx)(t.h2,{id:"create-a-project",children:"Create a Project"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Go to ",(0,o.jsx)(t.code,{children:"Project"})," and click ",(0,o.jsx)(t.code,{children:"Create Project"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Fill in a name for the Project. This name is used for the Build (the name of the image) and the Workload. The Service will automatically select the ClusterIP service name based on the Workload name."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Click ",(0,o.jsx)(t.code,{children:"Create build from source"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Click ",(0,o.jsx)(t.code,{children:"Next"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Choose ",(0,o.jsx)(t.code,{children:"Docker"})," and fill in the repository URL of the ",(0,o.jsx)(t.code,{children:"nodejs-helloworld"})," repository."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Enable ",(0,o.jsx)(t.code,{children:"Trigger"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Select the ",(0,o.jsx)(t.code,{children:"Digest"})," strategy for the ",(0,o.jsx)(t.code,{children:"Auto image updater"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.code,{children:"imageRepository"})," is already filled in. Make sure the ",(0,o.jsx)(t.code,{children:"tag"})," is identical to the tag used for the Build."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Use the default Chart values."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Click ",(0,o.jsx)(t.code,{children:"Next"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Under ",(0,o.jsx)(t.code,{children:"Exposure"})," select ",(0,o.jsx)(t.code,{children:"External"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Click ",(0,o.jsx)(t.code,{children:"Submit"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Click ",(0,o.jsx)(t.code,{children:"Deploy Changes"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"get-the-webhook-url",children:"Get the webhook URL"}),"\n",(0,o.jsxs)(t.p,{children:["Before we can configure the webhook for the ",(0,o.jsx)(t.code,{children:"nodejs-helloworld"})," repo in Gitea, we will need the webhook URL. You can find this webhook URL for your build in the list of Builds. Add the webhook URL to your clipboard."]}),"\n",(0,o.jsx)(t.p,{children:"Also notice that the status of the Build shows an exclamation mark. This is because the Tekton Pipeline is created, but the PipelineRun is not yet created because it was not triggered yet."}),"\n",(0,o.jsx)(t.h2,{id:"create-a-webhook",children:"Create a Webhook"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["In the Console, click on ",(0,o.jsx)(t.code,{children:"apps"})," the left menu and then open ",(0,o.jsx)(t.code,{children:"Gitea"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["In the top menu of Gitea, click on ",(0,o.jsx)(t.code,{children:"Explore"})," and then on the ",(0,o.jsx)(t.code,{children:"nodejs-helloworld"})," repo."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Go to ",(0,o.jsx)(t.code,{children:"Settings"})," (top right) and then to ",(0,o.jsx)(t.code,{children:"Webhooks"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Click ",(0,o.jsx)(t.code,{children:"Add Webhook"})," and select ",(0,o.jsx)(t.code,{children:"Gitea"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["In the ",(0,o.jsx)(t.code,{children:"Target URL"}),", paste the webhook URL from your clipboard."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Click ",(0,o.jsx)(t.code,{children:"Add Webhook"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"trigger-the-build",children:"Trigger the build"}),"\n",(0,o.jsxs)(t.p,{children:["You can now trigger the Build by doing a commit in the ",(0,o.jsx)(t.code,{children:"nodejs-helloworld"})," repo, or by testing the webhook. Let's test the webhook:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["In Gitea, go to the ",(0,o.jsx)(t.code,{children:"Settings"})," (top right) of the ",(0,o.jsx)(t.code,{children:"nodejs-helloworld"})," repo and then to ",(0,o.jsx)(t.code,{children:"Webhooks"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Click on the webhook we just created."}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["In the bottom, click on ",(0,o.jsx)(t.code,{children:"Test Delivery"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"check-the-status-of-the-workload",children:"Check the status of the Workload"}),"\n",(0,o.jsxs)(t.p,{children:["Go to Workloads and click on the Argo CD ",(0,o.jsx)(t.code,{children:"application"})," link of the Workload created by the Project. What do you see? The Argo CD application is still in a ",(0,o.jsx)(t.code,{children:"Degraded"})," state because the image build has not completed yet. When the build in finished and the image can be pulled, the status of the application will automatically become ",(0,o.jsx)(t.code,{children:"Healthy"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"check-the-status-of-the-service",children:"Check the status of the Service"}),"\n",(0,o.jsxs)(t.p,{children:["When the state of the Workload becomes ",(0,o.jsx)(t.code,{children:"Healthy"}),", the URL of the Service created by the Project will show the following page:"]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Hello World",src:n(3145).Z+"",width:"778",height:"182"})}),"\n",(0,o.jsx)(t.h2,{id:"change-the-code-and-push-the-commit",children:"Change the code and push the commit"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Go to the ",(0,o.jsx)(t.code,{children:"hello-world"})," repository."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:["Edit the ",(0,o.jsx)(t.code,{children:"package.json"})," and set the ",(0,o.jsx)(t.code,{children:"Version"})," to ",(0,o.jsx)(t.code,{children:"1.4.0"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Commit the changes."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Check the URL again. After a couple of minutes you will see the following page:"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Hello World",src:n(6090).Z+"",width:"890",height:"252"})})]})}function a(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},6090:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/hello-world-2-671a268fda45f814837a1a130d96823a.png"},3145:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/hello-world-ff027196740055b940f6785f98b26500.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>i});var o=n(7294);const s={},l=o.createContext(s);function i(e){const t=o.useContext(l);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(l.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bf0e2243.1952483c.js b/assets/js/bf0e2243.1952483c.js new file mode 100644 index 000000000..094db0ada --- /dev/null +++ b/assets/js/bf0e2243.1952483c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[1313],{9794:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=t(5893),s=t(1151);const r={slug:"create-repos",title:"Create a private Git repo",sidebar_label:"Create GIT repos"},o=void 0,l={id:"get-started/labs/create-repos",title:"Create a private Git repo",description:"As a developer you'll need a Git repository for your code. Most organizations will probably have a central code repository like Gitlab, or use Github. But if you don't, you can use the integrated Git service.",source:"@site/docs/get-started/labs/create-repos.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/create-repos",permalink:"/docs/get-started/labs/create-repos",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/create-repos.md",tags:[],version:"current",frontMatter:{slug:"create-repos",title:"Create a private Git repo",sidebar_label:"Create GIT repos"},sidebar:"mainSidebar",previous:{title:"Lab Prerequisites",permalink:"/docs/get-started/labs/lab-prerequisites"},next:{title:"Build Images",permalink:"/docs/get-started/labs/build-images"}},a={},c=[{value:"Using a Git client",id:"using-a-git-client",level:2},{value:"Create the private repository",id:"create-the-private-repository",level:2}];function d(e){const n={admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"As a developer you'll need a Git repository for your code. Most organizations will probably have a central code repository like Gitlab, or use Github. But if you don't, you can use the integrated Git service."}),"\n",(0,i.jsx)(n.p,{children:"As a team member, you can create and manage your own repositories."}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Team members first have to sign in to Gitea (using OpenID), after which they are automatically added to the correct team."})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"otomi-admin"})," account is unable to login with OpenID, this account needs to login with the user/password login form."]})}),"\n",(0,i.jsxs)(n.p,{children:["In the labs we'll be using a Team called ",(0,i.jsx)(n.code,{children:"labs"})," and a user called ",(0,i.jsx)(n.code,{children:"labs-user@example.com"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"using-a-git-client",children:"Using a Git client"}),"\n",(0,i.jsx)(n.p,{children:"Gitea only supports HTTPS for Git authentication. To connect to Git using HTTPS you'll first need to add a password to your account in Gitea:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Sign in to Gitea using OpenID."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click on your account (top right) and then click ",(0,i.jsx)(n.code,{children:"Settings"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Fill in a password in the ",(0,i.jsx)(n.code,{children:"Account"})," tab."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"After adding a password, you can now authenticate using your username (labs-user) and the password created in Gitea."}),"\n",(0,i.jsx)(n.h2,{id:"create-the-private-repository",children:"Create the private repository"}),"\n",(0,i.jsx)(n.p,{children:"In the apps section in the console, you'll see an app called Gitea. Click on it."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"kubecfg",src:t(6242).Z+"",width:"3124",height:"1530"})}),"\n",(0,i.jsx)(n.p,{children:"Now follow these steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Click on ",(0,i.jsx)(n.code,{children:"Sign In"})," with OpenID."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"kubecfg",src:t(5737).Z+"",width:"2200",height:"1082"})}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsxs)(n.li,{children:["Click on ",(0,i.jsx)(n.code,{children:"+ New Repository"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"kubecfg",src:t(9193).Z+"",width:"2926",height:"1224"})}),"\n",(0,i.jsxs)(n.ol,{start:"3",children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add the name ",(0,i.jsx)(n.code,{children:"blue"})," for the repository."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Select ",(0,i.jsx)(n.code,{children:"Make Repository Private"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Select ",(0,i.jsx)(n.code,{children:"Initialize Repository"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click on ",(0,i.jsx)(n.code,{children:"Create Repository"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Your repo is now ready to be used!"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"kubecfg",src:t(8602).Z+"",width:"3002",height:"1302"})}),"\n",(0,i.jsx)(n.p,{children:"Add the following 2 files to the repository:"}),"\n",(0,i.jsxs)(n.p,{children:["Add ",(0,i.jsx)(n.code,{children:"Dockerfile"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:"FROM nginxinc/nginx-unprivileged:stable\nCOPY blue.html /usr/share/nginx/html/index.html\nEXPOSE 8080\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Add ",(0,i.jsx)(n.code,{children:"blue.html"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",children:'\n\n \n \n Sample Deployment\n \n \n \n
\n

Welcome to Blue

\n
\n \n\n'})}),"\n",(0,i.jsxs)(n.p,{children:["In the following labs we are going to use the ",(0,i.jsx)(n.code,{children:"blue"})," repository, but we'll also need a ",(0,i.jsx)(n.code,{children:"green"})," repository.\nCreate the ",(0,i.jsx)(n.code,{children:"green"})," repository and add the 2 files, but change ",(0,i.jsx)(n.code,{children:"blue"})," into ",(0,i.jsx)(n.code,{children:"green"}),":"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click on ",(0,i.jsx)(n.code,{children:"+ New Repository"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add the name ",(0,i.jsx)(n.code,{children:"green"})," for the repository."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Optional: Enable ",(0,i.jsx)(n.code,{children:"Initialize Repository"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Make Repository Private."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click on ",(0,i.jsx)(n.code,{children:"Create Repository"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Add the following 2 files to the repository:"}),"\n",(0,i.jsxs)(n.p,{children:["Add ",(0,i.jsx)(n.code,{children:"Dockerfile"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:"FROM nginxinc/nginx-unprivileged:stable\nCOPY green.html /usr/share/nginx/html/index.html\nEXPOSE 8080\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Add ",(0,i.jsx)(n.code,{children:"green.html"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",children:'\n\n \n \n Sample Deployment\n \n \n \n
\n

Welcome to Green

\n
\n \n\n'})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},5737:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/gitea-openid-dca1d73e3512321edcd5fc9a3c290cb0.png"},8602:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/new-gitea-repo-ready-263e35893562092e57d84bfa588e8fef.png"},9193:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/new-gitea-repo-ae8b4ad9ecc7436acffaade0a79585d6.png"},6242:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/team-app-gitea-668891a94451284ad62d1634796bc8bc.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>o});var i=t(7294);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bf0e2243.8b72d533.js b/assets/js/bf0e2243.8b72d533.js deleted file mode 100644 index 78ddfccb8..000000000 --- a/assets/js/bf0e2243.8b72d533.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[1313],{9794:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=t(5893),s=t(1151);const r={slug:"create-repos",title:"Create a private Git repo",sidebar_label:"Create GIT repos"},o=void 0,l={id:"get-started/labs/create-repos",title:"Create a private Git repo",description:"As a developer you'll need a Git repository for your code. Most organizations will probably have a central code repository like Gitlab, or use Github. But if you don't, you can use the integrated Git service.",source:"@site/docs/get-started/labs/create-repos.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/create-repos",permalink:"/docs/get-started/labs/create-repos",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/create-repos.md",tags:[],version:"current",frontMatter:{slug:"create-repos",title:"Create a private Git repo",sidebar_label:"Create GIT repos"},sidebar:"mainSidebar",previous:{title:"Lab Prerequisites",permalink:"/docs/get-started/labs/lab-prerequisites"},next:{title:"Build Images",permalink:"/docs/get-started/labs/build-images"}},a={},c=[{value:"Using a Git client",id:"using-a-git-client",level:2},{value:"Create the private repository",id:"create-the-private-repository",level:2}];function d(e){const n={admonition:"admonition",code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"As a developer you'll need a Git repository for your code. Most organizations will probably have a central code repository like Gitlab, or use Github. But if you don't, you can use the integrated Git service."}),"\n",(0,i.jsx)(n.p,{children:"As a team member, you can create and manage your own repositories."}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Team members first have to sign in to Gitea (using OpenID), after which they are automatically added to the correct team."})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"otomi-admin"})," account is unable to login with OpenID, this account needs to login with the user/password login form."]})}),"\n",(0,i.jsxs)(n.p,{children:["In the labs we'll be using a Team called ",(0,i.jsx)(n.code,{children:"labs"})," and a user called ",(0,i.jsx)(n.code,{children:"labs-user"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"using-a-git-client",children:"Using a Git client"}),"\n",(0,i.jsx)(n.p,{children:"Gitea only supports HTTPS for Git authentication. To connect to Git using HTTPS you'll first need to add a password to your account in Gitea:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Sign in to Gitea using OpenID."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click on your account (top right) and then click ",(0,i.jsx)(n.code,{children:"Settings"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Fill in a password in the ",(0,i.jsx)(n.code,{children:"Account"})," tab."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"After adding a password, you can now authenticate using your username (labs-user) and the password created in Gitea."}),"\n",(0,i.jsx)(n.h2,{id:"create-the-private-repository",children:"Create the private repository"}),"\n",(0,i.jsx)(n.p,{children:"In the apps section in the console, you'll see an app called Gitea. Click on it."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"kubecfg",src:t(6242).Z+"",width:"3124",height:"1530"})}),"\n",(0,i.jsx)(n.p,{children:"Now follow these steps:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["Click on ",(0,i.jsx)(n.code,{children:"Sign In"})," with OpenID."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"kubecfg",src:t(5737).Z+"",width:"2200",height:"1082"})}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsxs)(n.li,{children:["Click on ",(0,i.jsx)(n.code,{children:"+ New Repository"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"kubecfg",src:t(9193).Z+"",width:"2926",height:"1224"})}),"\n",(0,i.jsxs)(n.ol,{start:"3",children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add the name ",(0,i.jsx)(n.code,{children:"blue"})," for the repository."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Select ",(0,i.jsx)(n.code,{children:"Make Repository Private"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Select ",(0,i.jsx)(n.code,{children:"Initialize Repository"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click on ",(0,i.jsx)(n.code,{children:"Create Repository"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Your repo is now ready to be used!"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"kubecfg",src:t(8602).Z+"",width:"3002",height:"1302"})}),"\n",(0,i.jsx)(n.p,{children:"Add the following 2 files to the repository:"}),"\n",(0,i.jsxs)(n.p,{children:["Add ",(0,i.jsx)(n.code,{children:"Dockerfile"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:"FROM nginxinc/nginx-unprivileged:stable\nCOPY blue.html /usr/share/nginx/html/index.html\nEXPOSE 8080\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Add ",(0,i.jsx)(n.code,{children:"blue.html"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",children:'\n\n \n \n Sample Deployment\n \n \n \n
\n

Welcome to Blue

\n
\n \n\n'})}),"\n",(0,i.jsxs)(n.p,{children:["In the following labs we are going to use the ",(0,i.jsx)(n.code,{children:"blue"})," repository, but we'll also need a ",(0,i.jsx)(n.code,{children:"green"})," repository.\nCreate the ",(0,i.jsx)(n.code,{children:"green"})," repository and add the 2 files, but change ",(0,i.jsx)(n.code,{children:"blue"})," into ",(0,i.jsx)(n.code,{children:"green"}),":"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click on ",(0,i.jsx)(n.code,{children:"+ New Repository"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Add the name ",(0,i.jsx)(n.code,{children:"green"})," for the repository."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Optional: Enable ",(0,i.jsx)(n.code,{children:"Initialize Repository"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Make Repository Private."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Click on ",(0,i.jsx)(n.code,{children:"Create Repository"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Add the following 2 files to the repository:"}),"\n",(0,i.jsxs)(n.p,{children:["Add ",(0,i.jsx)(n.code,{children:"Dockerfile"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Dockerfile",children:"FROM nginxinc/nginx-unprivileged:stable\nCOPY green.html /usr/share/nginx/html/index.html\nEXPOSE 8080\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Add ",(0,i.jsx)(n.code,{children:"green.html"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-html",children:'\n\n \n \n Sample Deployment\n \n \n \n
\n

Welcome to Green

\n
\n \n\n'})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},5737:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/gitea-openid-dca1d73e3512321edcd5fc9a3c290cb0.png"},8602:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/new-gitea-repo-ready-263e35893562092e57d84bfa588e8fef.png"},9193:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/new-gitea-repo-ae8b4ad9ecc7436acffaade0a79585d6.png"},6242:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/team-app-gitea-668891a94451284ad62d1634796bc8bc.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>o});var i=t(7294);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d248c736.e9e87892.js b/assets/js/d248c736.7f9542de.js similarity index 75% rename from assets/js/d248c736.e9e87892.js rename to assets/js/d248c736.7f9542de.js index a2ca02549..248fd0227 100644 --- a/assets/js/d248c736.e9e87892.js +++ b/assets/js/d248c736.7f9542de.js @@ -1 +1 @@ -"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[7787],{66:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var s=t(5893),i=t(1151);const r={slug:"using-argo-cd",title:"Using Argo CD",sidebar_label:"Using Argo CD"},a=void 0,o={id:"get-started/labs/using-argo-cd",title:"Using Argo CD",description:"Creating Kubernetes resources using kubectl apply -f can be inefficient. As a developer, managing resources based on code stored in Git enhances control and traceability. Argo CD is integrated to provide a seamless GitOps experience, streamlining your deployment process.",source:"@site/docs/get-started/labs/using-argo-cd.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/using-argo-cd",permalink:"/docs/get-started/labs/using-argo-cd",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/using-argo-cd.md",tags:[],version:"current",frontMatter:{slug:"using-argo-cd",title:"Using Argo CD",sidebar_label:"Using Argo CD"},sidebar:"mainSidebar",previous:{title:"Create Sealed Secrets",permalink:"/docs/get-started/labs/create-sealed-secrets"},next:{title:"Use the Catalog",permalink:"/docs/get-started/labs/use-catalog"}},c={},d=[{value:"Create Kubernetes resources with Argo CD",id:"create-kubernetes-resources-with-argo-cd",level:2},{value:"See the Power of Argo CD in action",id:"see-the-power-of-argo-cd-in-action",level:2}];function l(e){const n={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["Creating Kubernetes resources using ",(0,s.jsx)(n.code,{children:"kubectl apply -f"})," can be inefficient. As a developer, managing resources based on code stored in Git enhances control and traceability. Argo CD is integrated to provide a seamless GitOps experience, streamlining your deployment process."]}),"\n",(0,s.jsx)(n.h2,{id:"create-kubernetes-resources-with-argo-cd",children:"Create Kubernetes resources with Argo CD"}),"\n",(0,s.jsx)(n.p,{children:"Start by navigating to the apps section in the Console, where you will find an app named Argo CD. Click on it to proceed."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Argo CD App in the Console",src:t(3330).Z+"",width:"3160",height:"1564"})}),"\n",(0,s.jsx)(n.p,{children:"In Argo CD, notice that an application specific to your team has already been set up. This application syncs with any manifest present in the Gitea repository designated for your team."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Argo CD Team Application Overview",src:t(9319).Z+"",width:"2992",height:"2314"})}),"\n",(0,s.jsxs)(n.p,{children:["After clicking on the app and selecting ",(0,s.jsx)(n.code,{children:"APP DETAILS"}),", you'll find the ",(0,s.jsx)(n.code,{children:"REPO URL"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Return to the Console, select the Gitea app in the apps section. In Gitea you will see a repository titled ",(0,s.jsx)(n.code,{children:"otomi/team--argocd"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Gitea Repository for Argo CD",src:t(4710).Z+"",width:"2878",height:"1554"})}),"\n",(0,s.jsx)(n.h2,{id:"see-the-power-of-argo-cd-in-action",children:"See the Power of Argo CD in action"}),"\n",(0,s.jsx)(n.p,{children:"Let's demonstrate the capabilities of Argo CD by adding some manifests to the repository:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Create a file named ",(0,s.jsx)(n.code,{children:"deploy-nginx.yaml"})," in the repository."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Insert the following contents into the file:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: nginx\n labels:\n otomi.io/app: nginx\n app: nginx\nspec:\n replicas: 1\n selector:\n matchLabels:\n app: nginx\n template:\n metadata:\n labels:\n app: nginx\n spec:\n containers:\n - name: nginx\n image: nginxinc/nginx-unprivileged:stable\n resources:\n limits:\n memory: '128Mi'\n cpu: '200m'\n requests:\n memory: '64Mi'\n cpu: '100m'\n ports:\n - containerPort: 8080\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: nginx\nspec:\n selector:\n app: nginx\n ports:\n - port: 80\n targetPort: 8080\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Commit the changes to the repository."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Once you return to the Argo CD application, click on the ",(0,s.jsx)(n.code,{children:"team"})," application."]}),"\n",(0,s.jsxs)(n.p,{children:["The application is configured for automatic syncing, so a manual ",(0,s.jsx)(n.code,{children:"SYNC"})," is not needed."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Syncing in ArgoCD",src:t(7086).Z+"",width:"2900",height:"1484"})})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},9319:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/argo-team-app-c542dc6043accbd15bd6e1341e0f2621.png"},4710:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/argo-team-repo-55d332f9a5cd3961872c7b4c2dc42c73.png"},7086:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/argo-team-sync-fadd7f408a457c16fc11e9faf568ee2a.png"},3330:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/team-app-argo-2550459b6c97751b91a978b167d343c7.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var s=t(7294);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkredkubes_github_io=self.webpackChunkredkubes_github_io||[]).push([[7787],{66:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var s=t(5893),i=t(1151);const r={slug:"using-argo-cd",title:"Using Argo CD",sidebar_label:"Using Argo CD"},a=void 0,o={id:"get-started/labs/using-argo-cd",title:"Using Argo CD",description:"Creating Kubernetes resources using kubectl apply -f can be inefficient. As a developer, managing resources based on code stored in Git enhances control and traceability. Argo CD is integrated to provide a seamless GitOps experience, streamlining your deployment process.",source:"@site/docs/get-started/labs/using-argo-cd.md",sourceDirName:"get-started/labs",slug:"/get-started/labs/using-argo-cd",permalink:"/docs/get-started/labs/using-argo-cd",draft:!1,unlisted:!1,editUrl:"https://github.com/linode/linode.github.io/tree/main/docs/get-started/labs/using-argo-cd.md",tags:[],version:"current",frontMatter:{slug:"using-argo-cd",title:"Using Argo CD",sidebar_label:"Using Argo CD"},sidebar:"mainSidebar",previous:{title:"Create Sealed Secrets",permalink:"/docs/get-started/labs/create-sealed-secrets"},next:{title:"Use the Catalog",permalink:"/docs/get-started/labs/use-catalog"}},c={},l=[{value:"Create Kubernetes resources with Argo CD",id:"create-kubernetes-resources-with-argo-cd",level:2},{value:"See the Power of Argo CD in action",id:"see-the-power-of-argo-cd-in-action",level:2}];function d(e){const n={code:"code",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["Creating Kubernetes resources using ",(0,s.jsx)(n.code,{children:"kubectl apply -f"})," can be inefficient. As a developer, managing resources based on code stored in Git enhances control and traceability. Argo CD is integrated to provide a seamless GitOps experience, streamlining your deployment process."]}),"\n",(0,s.jsx)(n.h2,{id:"create-kubernetes-resources-with-argo-cd",children:"Create Kubernetes resources with Argo CD"}),"\n",(0,s.jsx)(n.p,{children:"Start by navigating to the apps section in the Console, where you will find an app named Argo CD. Click on it to proceed."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Argo CD App in the Console",src:t(3330).Z+"",width:"3160",height:"1564"})}),"\n",(0,s.jsx)(n.p,{children:"In Argo CD, notice that an application specific to your team has already been set up. This application syncs with any manifest present in the Gitea repository designated for your team."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Argo CD Team Application Overview",src:t(9319).Z+"",width:"2992",height:"2314"})}),"\n",(0,s.jsxs)(n.p,{children:["After clicking on the app and selecting ",(0,s.jsx)(n.code,{children:"APP DETAILS"}),", you'll find the ",(0,s.jsx)(n.code,{children:"REPO URL"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Return to the Console, select the Gitea app in the apps section. In Gitea you will see a repository titled ",(0,s.jsx)(n.code,{children:"otomi/team--argocd"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Gitea Repository for Argo CD",src:t(4710).Z+"",width:"2878",height:"1554"})}),"\n",(0,s.jsx)(n.h2,{id:"see-the-power-of-argo-cd-in-action",children:"See the Power of Argo CD in action"}),"\n",(0,s.jsx)(n.p,{children:"Let's demonstrate the capabilities of Argo CD by adding some manifests to the repository:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Create a file named ",(0,s.jsx)(n.code,{children:"deploy-nginx.yaml"})," in the repository."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Insert the following contents into the file:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: nginx\n labels:\n otomi.io/app: nginx\n app: nginx\nspec:\n replicas: 1\n selector:\n matchLabels:\n app: nginx\n template:\n metadata:\n labels:\n app: nginx\n spec:\n containers:\n - name: nginx\n image: nginxinc/nginx-unprivileged:stable\n resources:\n limits:\n memory: '128Mi'\n cpu: '200m'\n requests:\n memory: '64Mi'\n cpu: '100m'\n ports:\n - containerPort: 8080\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: nginx\nspec:\n selector:\n app: nginx\n ports:\n - port: 80\n targetPort: 8080\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Commit the changes to the repository."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Once you return to the Argo CD application, click on the ",(0,s.jsx)(n.code,{children:"team"})," application."]}),"\n",(0,s.jsxs)(n.p,{children:["The application is set to sync automatically, so a manual ",(0,s.jsx)(n.code,{children:"SYNC"})," is not required. Once ArgoCD completes the sync, the nginx deployment will appear as shown below:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Syncing in ArgoCD",src:t(7086).Z+"",width:"2900",height:"1484"})})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},9319:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/argo-team-app-c542dc6043accbd15bd6e1341e0f2621.png"},4710:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/argo-team-repo-55d332f9a5cd3961872c7b4c2dc42c73.png"},7086:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/argo-team-sync-fadd7f408a457c16fc11e9faf568ee2a.png"},3330:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/team-app-argo-2550459b6c97751b91a978b167d343c7.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var s=t(7294);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.687bee06.js b/assets/js/runtime~main.1cae8d93.js similarity index 74% rename from assets/js/runtime~main.687bee06.js rename to assets/js/runtime~main.1cae8d93.js index a80306ca5..612e276a8 100644 --- a/assets/js/runtime~main.687bee06.js +++ b/assets/js/runtime~main.1cae8d93.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,d,c,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=b,r.c=t,e=[],r.O=(f,a,d,c)=>{if(!a){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[a,d,c]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&d&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(c,b),c},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({48:"98c047c6",53:"935f2afb",117:"62e5798c",256:"bd8a3d8f",263:"8dc82fcd",411:"80cc8fc2",439:"db2fd2f7",443:"9824b3d7",537:"c9644b78",634:"0d519d5d",670:"31647fbf",681:"ca2bccd7",725:"fd458deb",767:"df2434c5",912:"1d911987",965:"d53aaf7f",1020:"ffd636c4",1113:"4380e181",1164:"6ef6f599",1177:"a40f2921",1195:"1830c2e3",1241:"e2cc03cb",1254:"443e3a65",1280:"58e1910b",1313:"bf0e2243",1390:"96d3f3ac",1391:"9cb4274e",1470:"f9528352",1515:"f34c6cc5",1573:"a722ee7a",1576:"c3a9c637",1591:"09735fc0",1730:"69fd0b9a",1809:"04608aca",1854:"be94a9c8",1872:"c42226db",1902:"8ef33b61",1913:"c9ff9b08",2020:"7f5d7fca",2036:"54cc2d4c",2098:"00210a32",2115:"abc5e328",2144:"aa3203ff",2237:"1f668492",2280:"5ce65c80",2370:"afd24866",2430:"188da18d",2477:"80f670fe",2615:"d8a040d1",2668:"d9893b92",2704:"10959509",2717:"397109c3",2722:"14bc3799",2780:"3c110fea",2930:"2b4f9f78",3063:"cba11a7e",3126:"17a7c5fe",3237:"1df93b7f",3272:"052260a8",3418:"3fd50427",3544:"cd151fd5",3576:"13689ae4",3599:"80b07506",3611:"d1409995",3635:"1f918bbd",3942:"5f4e8093",4011:"feda9f98",4019:"090174e7",4234:"1a23fb22",4247:"43db5d1f",4321:"6d553b82",4368:"a94703ab",4385:"8afa6453",4473:"1d3542c3",4559:"5c5eecab",4576:"612b9100",4584:"8b7dda8f",4655:"2a3fc902",4717:"d76c6a89",4722:"e7ee1f4e",4778:"399357cc",4791:"a3cca685",4986:"219ad9fa",5018:"871ddaf7",5033:"ca4242f5",5112:"b3921f18",5195:"3379d6c0",5290:"98242336",5616:"c5c74bfd",5720:"646a49d4",5775:"46a4fdf9",5786:"2e429803",5824:"81e06d7e",5827:"20b057c1",5920:"b04270fa",5935:"2f447487",5940:"385dd0a0",5949:"6a5c8ca2",5996:"9a6fbba2",6096:"0c3fdeeb",6128:"83b70ecd",6299:"48f8b5b9",6306:"e65ca800",6535:"9184e37b",6576:"bcbdbf75",6781:"6340fb34",6866:"a6a14297",6888:"af9df136",6907:"f4935766",6932:"5bcba466",6935:"a1e5de72",7159:"d1254c3d",7282:"1dcded0d",7360:"b4e198bf",7376:"a375f470",7386:"28c78037",7444:"af8b4e82",7578:"1db000ad",7638:"c0f9889b",7674:"270f6692",7702:"7e13be3f",7787:"d248c736",7878:"386e030b",7896:"9ed16ae1",7918:"17896441",7920:"1a4e3797",7973:"46be4bcd",7984:"a47e2810",8028:"c4d36760",8036:"490175b0",8129:"30f4d83c",8344:"1afc8419",8383:"246b758f",8392:"0be2dc55",8506:"9899ea6d",8518:"a7bd4aaa",8607:"2df7e88d",8696:"541249eb",8760:"88cad7e1",8852:"9b2db8ea",8897:"af477ebb",9063:"11153061",9091:"6ebb893e",9153:"ed3faf6d",9216:"5cb822a3",9237:"bde17074",9661:"5e95c892",9683:"7ea98ab3",9717:"2548183b",9742:"c3394322",9832:"0097d0fa",9836:"dc5f95d0"}[e]||e)+"."+{48:"57409454",53:"830cfdc0",117:"dc20ac70",256:"d210cd9c",263:"aec43c6f",411:"c867d2c5",439:"b28f5f13",443:"d514fedc",537:"899eeb3a",634:"7b757be2",670:"8ff72611",681:"f4f3f019",725:"bd5ea6ac",767:"4ebfc7f2",912:"3c470e49",965:"0767a5b4",1020:"9fc69dd5",1113:"b81e78ce",1164:"c4798feb",1177:"a75c7188",1195:"d70a4c78",1241:"579eebb9",1254:"53108c0f",1280:"784f2607",1313:"8b72d533",1390:"a3b90106",1391:"5c063f04",1426:"707aef92",1470:"20ca772b",1515:"43eaeb40",1573:"b2cc64d6",1576:"d0cdcfe6",1591:"5416ccfd",1730:"b480ea2a",1772:"a30dfd8b",1809:"098d20f1",1854:"6b4ad9b2",1872:"202182e1",1902:"f1d400a3",1913:"539b3b7b",2020:"87d1ba37",2036:"ba5c0abe",2098:"b72a3ef6",2115:"80c4ff65",2144:"aeee67d9",2237:"b7ea2058",2280:"24fb8fa7",2370:"f1feb680",2430:"1f928026",2477:"c1abcbab",2615:"42c42e4d",2668:"bc6abf89",2704:"432c28a3",2717:"9f850d24",2722:"1b1256ea",2780:"1bd9c4cd",2930:"9a047a8e",3063:"b991afbe",3126:"617de7ad",3237:"bce1c66c",3272:"f40f2de8",3418:"a5098121",3544:"29a2287a",3576:"cd96fab9",3599:"f3cc872e",3611:"cd7954f0",3635:"adcf53f4",3942:"2dabe2c9",4011:"a9a61aa3",4019:"573e5eca",4234:"68b4c56c",4247:"679e6dbe",4321:"3745d4a5",4368:"e58383c9",4385:"269f12ee",4473:"bcc95119",4559:"a45fe330",4576:"21c1299d",4584:"29560a5d",4655:"92856cb7",4717:"fe41aa5b",4722:"bd2e6ad9",4778:"99555cf3",4791:"314bc0e3",4986:"69fb53e7",5018:"6a938ed7",5033:"a9676278",5112:"8b8a1b7f",5195:"7c82b839",5290:"7ef7031f",5616:"c67da531",5720:"f6beac8d",5775:"f93a791b",5786:"96bf2866",5824:"f664eaae",5827:"6d9de8bf",5920:"7329cd3a",5935:"40eaf98c",5940:"944d6278",5949:"6b8c5711",5996:"8b3f342b",6096:"6571ccc6",6128:"f5b32dda",6299:"7f2d0e72",6306:"ade2adf7",6535:"68f1898f",6576:"dc287203",6781:"8c5bc192",6866:"4c2e22cc",6888:"2b585b44",6907:"ad258e6f",6932:"13ce2cdd",6935:"837a5e5f",6945:"bfc572ea",7159:"67d03583",7282:"c7ef1626",7360:"e4d6eabc",7376:"20082051",7386:"ff0b2b0a",7444:"494e5744",7578:"efacfd20",7638:"2144e89a",7674:"5c2cdf73",7702:"398946f7",7787:"e9e87892",7878:"19a189b5",7896:"e1b49827",7918:"723e23a3",7920:"3ce85a9e",7973:"61fa8068",7984:"0896103b",8028:"e67117c5",8036:"a62c642b",8129:"574c795b",8344:"d5e97690",8383:"1650d1b0",8392:"9080d564",8506:"4d17247f",8518:"e964aaea",8607:"25958a3b",8696:"89c82b02",8760:"a2e818ed",8852:"b4bde40b",8894:"ced69189",8897:"d3937ba5",9063:"1e2d95c4",9091:"98b73abc",9153:"90d2345f",9216:"41f9b8c7",9237:"b41b1f82",9661:"ad7630aa",9683:"6a7963f0",9717:"90e507a6",9742:"fb014f32",9832:"dae2702e",9836:"33206c54"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),d={},c="redkubes-github-io:",r.l=(e,f,a,b)=>{if(d[e])d[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={10959509:"2704",11153061:"9063",17896441:"7918",98242336:"5290","98c047c6":"48","935f2afb":"53","62e5798c":"117",bd8a3d8f:"256","8dc82fcd":"263","80cc8fc2":"411",db2fd2f7:"439","9824b3d7":"443",c9644b78:"537","0d519d5d":"634","31647fbf":"670",ca2bccd7:"681",fd458deb:"725",df2434c5:"767","1d911987":"912",d53aaf7f:"965",ffd636c4:"1020","4380e181":"1113","6ef6f599":"1164",a40f2921:"1177","1830c2e3":"1195",e2cc03cb:"1241","443e3a65":"1254","58e1910b":"1280",bf0e2243:"1313","96d3f3ac":"1390","9cb4274e":"1391",f9528352:"1470",f34c6cc5:"1515",a722ee7a:"1573",c3a9c637:"1576","09735fc0":"1591","69fd0b9a":"1730","04608aca":"1809",be94a9c8:"1854",c42226db:"1872","8ef33b61":"1902",c9ff9b08:"1913","7f5d7fca":"2020","54cc2d4c":"2036","00210a32":"2098",abc5e328:"2115",aa3203ff:"2144","1f668492":"2237","5ce65c80":"2280",afd24866:"2370","188da18d":"2430","80f670fe":"2477",d8a040d1:"2615",d9893b92:"2668","397109c3":"2717","14bc3799":"2722","3c110fea":"2780","2b4f9f78":"2930",cba11a7e:"3063","17a7c5fe":"3126","1df93b7f":"3237","052260a8":"3272","3fd50427":"3418",cd151fd5:"3544","13689ae4":"3576","80b07506":"3599",d1409995:"3611","1f918bbd":"3635","5f4e8093":"3942",feda9f98:"4011","090174e7":"4019","1a23fb22":"4234","43db5d1f":"4247","6d553b82":"4321",a94703ab:"4368","8afa6453":"4385","1d3542c3":"4473","5c5eecab":"4559","612b9100":"4576","8b7dda8f":"4584","2a3fc902":"4655",d76c6a89:"4717",e7ee1f4e:"4722","399357cc":"4778",a3cca685:"4791","219ad9fa":"4986","871ddaf7":"5018",ca4242f5:"5033",b3921f18:"5112","3379d6c0":"5195",c5c74bfd:"5616","646a49d4":"5720","46a4fdf9":"5775","2e429803":"5786","81e06d7e":"5824","20b057c1":"5827",b04270fa:"5920","2f447487":"5935","385dd0a0":"5940","6a5c8ca2":"5949","9a6fbba2":"5996","0c3fdeeb":"6096","83b70ecd":"6128","48f8b5b9":"6299",e65ca800:"6306","9184e37b":"6535",bcbdbf75:"6576","6340fb34":"6781",a6a14297:"6866",af9df136:"6888",f4935766:"6907","5bcba466":"6932",a1e5de72:"6935",d1254c3d:"7159","1dcded0d":"7282",b4e198bf:"7360",a375f470:"7376","28c78037":"7386",af8b4e82:"7444","1db000ad":"7578",c0f9889b:"7638","270f6692":"7674","7e13be3f":"7702",d248c736:"7787","386e030b":"7878","9ed16ae1":"7896","1a4e3797":"7920","46be4bcd":"7973",a47e2810:"7984",c4d36760:"8028","490175b0":"8036","30f4d83c":"8129","1afc8419":"8344","246b758f":"8383","0be2dc55":"8392","9899ea6d":"8506",a7bd4aaa:"8518","2df7e88d":"8607","541249eb":"8696","88cad7e1":"8760","9b2db8ea":"8852",af477ebb:"8897","6ebb893e":"9091",ed3faf6d:"9153","5cb822a3":"9216",bde17074:"9237","5e95c892":"9661","7ea98ab3":"9683","2548183b":"9717",c3394322:"9742","0097d0fa":"9832",dc5f95d0:"9836"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var d=r.o(e,f)?e[f]:void 0;if(0!==d)if(d)a.push(d[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var c=new Promise(((a,c)=>d=e[f]=[a,c]));a.push(d[2]=c);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(d=e[f])&&(e[f]=void 0),d)){var c=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var d,c,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=b,r.c=t,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({48:"98c047c6",53:"935f2afb",117:"62e5798c",256:"bd8a3d8f",263:"8dc82fcd",411:"80cc8fc2",439:"db2fd2f7",443:"9824b3d7",537:"c9644b78",634:"0d519d5d",670:"31647fbf",681:"ca2bccd7",725:"fd458deb",767:"df2434c5",912:"1d911987",965:"d53aaf7f",1020:"ffd636c4",1113:"4380e181",1164:"6ef6f599",1177:"a40f2921",1195:"1830c2e3",1241:"e2cc03cb",1254:"443e3a65",1280:"58e1910b",1313:"bf0e2243",1390:"96d3f3ac",1391:"9cb4274e",1470:"f9528352",1515:"f34c6cc5",1573:"a722ee7a",1576:"c3a9c637",1591:"09735fc0",1730:"69fd0b9a",1809:"04608aca",1854:"be94a9c8",1872:"c42226db",1902:"8ef33b61",1913:"c9ff9b08",2020:"7f5d7fca",2036:"54cc2d4c",2098:"00210a32",2115:"abc5e328",2144:"aa3203ff",2237:"1f668492",2280:"5ce65c80",2370:"afd24866",2430:"188da18d",2477:"80f670fe",2615:"d8a040d1",2668:"d9893b92",2704:"10959509",2717:"397109c3",2722:"14bc3799",2780:"3c110fea",2930:"2b4f9f78",3063:"cba11a7e",3126:"17a7c5fe",3237:"1df93b7f",3272:"052260a8",3418:"3fd50427",3544:"cd151fd5",3576:"13689ae4",3599:"80b07506",3611:"d1409995",3635:"1f918bbd",3942:"5f4e8093",4011:"feda9f98",4019:"090174e7",4234:"1a23fb22",4247:"43db5d1f",4321:"6d553b82",4368:"a94703ab",4385:"8afa6453",4473:"1d3542c3",4559:"5c5eecab",4576:"612b9100",4584:"8b7dda8f",4655:"2a3fc902",4717:"d76c6a89",4722:"e7ee1f4e",4778:"399357cc",4791:"a3cca685",4986:"219ad9fa",5018:"871ddaf7",5033:"ca4242f5",5112:"b3921f18",5195:"3379d6c0",5290:"98242336",5616:"c5c74bfd",5720:"646a49d4",5775:"46a4fdf9",5786:"2e429803",5824:"81e06d7e",5827:"20b057c1",5920:"b04270fa",5935:"2f447487",5940:"385dd0a0",5949:"6a5c8ca2",5996:"9a6fbba2",6096:"0c3fdeeb",6128:"83b70ecd",6299:"48f8b5b9",6306:"e65ca800",6535:"9184e37b",6576:"bcbdbf75",6781:"6340fb34",6866:"a6a14297",6888:"af9df136",6907:"f4935766",6932:"5bcba466",6935:"a1e5de72",7159:"d1254c3d",7282:"1dcded0d",7360:"b4e198bf",7376:"a375f470",7386:"28c78037",7444:"af8b4e82",7578:"1db000ad",7638:"c0f9889b",7674:"270f6692",7702:"7e13be3f",7787:"d248c736",7878:"386e030b",7896:"9ed16ae1",7918:"17896441",7920:"1a4e3797",7973:"46be4bcd",7984:"a47e2810",8028:"c4d36760",8036:"490175b0",8129:"30f4d83c",8344:"1afc8419",8383:"246b758f",8392:"0be2dc55",8506:"9899ea6d",8518:"a7bd4aaa",8607:"2df7e88d",8696:"541249eb",8760:"88cad7e1",8852:"9b2db8ea",8897:"af477ebb",9063:"11153061",9091:"6ebb893e",9153:"ed3faf6d",9216:"5cb822a3",9237:"bde17074",9661:"5e95c892",9683:"7ea98ab3",9717:"2548183b",9742:"c3394322",9832:"0097d0fa",9836:"dc5f95d0"}[e]||e)+"."+{48:"57409454",53:"830cfdc0",117:"dc20ac70",256:"d210cd9c",263:"aec43c6f",411:"c867d2c5",439:"b28f5f13",443:"d514fedc",537:"899eeb3a",634:"7b757be2",670:"8ff72611",681:"f4f3f019",725:"bd5ea6ac",767:"4ebfc7f2",912:"3c470e49",965:"0767a5b4",1020:"9fc69dd5",1113:"b81e78ce",1164:"5e58f0a5",1177:"a75c7188",1195:"d70a4c78",1241:"579eebb9",1254:"53108c0f",1280:"784f2607",1313:"1952483c",1390:"a3b90106",1391:"5c063f04",1426:"707aef92",1470:"20ca772b",1515:"43eaeb40",1573:"b2cc64d6",1576:"d0cdcfe6",1591:"5416ccfd",1730:"b480ea2a",1772:"a30dfd8b",1809:"098d20f1",1854:"6b4ad9b2",1872:"202182e1",1902:"f1d400a3",1913:"539b3b7b",2020:"87d1ba37",2036:"ba5c0abe",2098:"b72a3ef6",2115:"80c4ff65",2144:"aeee67d9",2237:"b7ea2058",2280:"24fb8fa7",2370:"f1feb680",2430:"1f928026",2477:"093f0106",2615:"42c42e4d",2668:"bc6abf89",2704:"432c28a3",2717:"9f850d24",2722:"1b1256ea",2780:"1bd9c4cd",2930:"9a047a8e",3063:"b991afbe",3126:"617de7ad",3237:"bce1c66c",3272:"f40f2de8",3418:"a5098121",3544:"29a2287a",3576:"cd96fab9",3599:"f3cc872e",3611:"cd7954f0",3635:"adcf53f4",3942:"2dabe2c9",4011:"a9a61aa3",4019:"19854578",4234:"68b4c56c",4247:"679e6dbe",4321:"3745d4a5",4368:"e58383c9",4385:"8f562ee0",4473:"bcc95119",4559:"a45fe330",4576:"21c1299d",4584:"29560a5d",4655:"92856cb7",4717:"fe41aa5b",4722:"bd2e6ad9",4778:"99555cf3",4791:"314bc0e3",4986:"69fb53e7",5018:"6a938ed7",5033:"a9676278",5112:"8b8a1b7f",5195:"7c82b839",5290:"7ef7031f",5616:"c67da531",5720:"f6beac8d",5775:"f93a791b",5786:"96bf2866",5824:"f664eaae",5827:"6d9de8bf",5920:"7329cd3a",5935:"f6ec24be",5940:"944d6278",5949:"6b8c5711",5996:"8b3f342b",6096:"6571ccc6",6128:"f5b32dda",6299:"7f2d0e72",6306:"ade2adf7",6535:"68f1898f",6576:"dc287203",6781:"8c5bc192",6866:"4c2e22cc",6888:"2b585b44",6907:"ad258e6f",6932:"13ce2cdd",6935:"837a5e5f",6945:"bfc572ea",7159:"67d03583",7282:"c7ef1626",7360:"099a705f",7376:"20082051",7386:"ff0b2b0a",7444:"494e5744",7578:"efacfd20",7638:"2144e89a",7674:"5c2cdf73",7702:"080b68c4",7787:"7f9542de",7878:"19a189b5",7896:"e1b49827",7918:"723e23a3",7920:"3ce85a9e",7973:"61fa8068",7984:"0896103b",8028:"e67117c5",8036:"a62c642b",8129:"574c795b",8344:"d5e97690",8383:"1650d1b0",8392:"9080d564",8506:"4d17247f",8518:"e964aaea",8607:"25958a3b",8696:"89c82b02",8760:"0bbf8092",8852:"b4bde40b",8894:"ced69189",8897:"d3937ba5",9063:"1e2d95c4",9091:"98b73abc",9153:"90d2345f",9216:"41f9b8c7",9237:"b41b1f82",9661:"ad7630aa",9683:"6a7963f0",9717:"850dec47",9742:"fb014f32",9832:"c95816fc",9836:"33206c54"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="redkubes-github-io:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={10959509:"2704",11153061:"9063",17896441:"7918",98242336:"5290","98c047c6":"48","935f2afb":"53","62e5798c":"117",bd8a3d8f:"256","8dc82fcd":"263","80cc8fc2":"411",db2fd2f7:"439","9824b3d7":"443",c9644b78:"537","0d519d5d":"634","31647fbf":"670",ca2bccd7:"681",fd458deb:"725",df2434c5:"767","1d911987":"912",d53aaf7f:"965",ffd636c4:"1020","4380e181":"1113","6ef6f599":"1164",a40f2921:"1177","1830c2e3":"1195",e2cc03cb:"1241","443e3a65":"1254","58e1910b":"1280",bf0e2243:"1313","96d3f3ac":"1390","9cb4274e":"1391",f9528352:"1470",f34c6cc5:"1515",a722ee7a:"1573",c3a9c637:"1576","09735fc0":"1591","69fd0b9a":"1730","04608aca":"1809",be94a9c8:"1854",c42226db:"1872","8ef33b61":"1902",c9ff9b08:"1913","7f5d7fca":"2020","54cc2d4c":"2036","00210a32":"2098",abc5e328:"2115",aa3203ff:"2144","1f668492":"2237","5ce65c80":"2280",afd24866:"2370","188da18d":"2430","80f670fe":"2477",d8a040d1:"2615",d9893b92:"2668","397109c3":"2717","14bc3799":"2722","3c110fea":"2780","2b4f9f78":"2930",cba11a7e:"3063","17a7c5fe":"3126","1df93b7f":"3237","052260a8":"3272","3fd50427":"3418",cd151fd5:"3544","13689ae4":"3576","80b07506":"3599",d1409995:"3611","1f918bbd":"3635","5f4e8093":"3942",feda9f98:"4011","090174e7":"4019","1a23fb22":"4234","43db5d1f":"4247","6d553b82":"4321",a94703ab:"4368","8afa6453":"4385","1d3542c3":"4473","5c5eecab":"4559","612b9100":"4576","8b7dda8f":"4584","2a3fc902":"4655",d76c6a89:"4717",e7ee1f4e:"4722","399357cc":"4778",a3cca685:"4791","219ad9fa":"4986","871ddaf7":"5018",ca4242f5:"5033",b3921f18:"5112","3379d6c0":"5195",c5c74bfd:"5616","646a49d4":"5720","46a4fdf9":"5775","2e429803":"5786","81e06d7e":"5824","20b057c1":"5827",b04270fa:"5920","2f447487":"5935","385dd0a0":"5940","6a5c8ca2":"5949","9a6fbba2":"5996","0c3fdeeb":"6096","83b70ecd":"6128","48f8b5b9":"6299",e65ca800:"6306","9184e37b":"6535",bcbdbf75:"6576","6340fb34":"6781",a6a14297:"6866",af9df136:"6888",f4935766:"6907","5bcba466":"6932",a1e5de72:"6935",d1254c3d:"7159","1dcded0d":"7282",b4e198bf:"7360",a375f470:"7376","28c78037":"7386",af8b4e82:"7444","1db000ad":"7578",c0f9889b:"7638","270f6692":"7674","7e13be3f":"7702",d248c736:"7787","386e030b":"7878","9ed16ae1":"7896","1a4e3797":"7920","46be4bcd":"7973",a47e2810:"7984",c4d36760:"8028","490175b0":"8036","30f4d83c":"8129","1afc8419":"8344","246b758f":"8383","0be2dc55":"8392","9899ea6d":"8506",a7bd4aaa:"8518","2df7e88d":"8607","541249eb":"8696","88cad7e1":"8760","9b2db8ea":"8852",af477ebb:"8897","6ebb893e":"9091",ed3faf6d:"9153","5cb822a3":"9216",bde17074:"9237","5e95c892":"9661","7ea98ab3":"9683","2548183b":"9717",c3394322:"9742","0097d0fa":"9832",dc5f95d0:"9836"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n