diff --git a/.github/ISSUE_TEMPLATE/typo.md b/.github/ISSUE_TEMPLATE/typo.md index 56a7cc148..705d20960 100644 --- a/.github/ISSUE_TEMPLATE/typo.md +++ b/.github/ISSUE_TEMPLATE/typo.md @@ -7,7 +7,7 @@ assignees: '' --- **URL of the docs page** - + **How is it currently worded?** diff --git a/.github/config/.pyspelling.yml b/.github/config/.pyspelling.yml index 469d58e5e..0c38c5223 100644 --- a/.github/config/.pyspelling.yml +++ b/.github/config/.pyspelling.yml @@ -9,6 +9,8 @@ matrix: - .github/config/en-custom.txt pipeline: - pyspelling.filters.markdown: + markdown_extensions: + - markdown.extensions.fenced_code - pyspelling.filters.html: comments: false ignores: diff --git a/.github/config/en-custom.txt b/.github/config/en-custom.txt index 53eff00f9..8624fee94 100644 --- a/.github/config/en-custom.txt +++ b/.github/config/en-custom.txt @@ -18,6 +18,7 @@ ClusterIssuer CLI CLIs CMD +CNCF CQRS CRDs CRUDL @@ -39,6 +40,7 @@ Docsy DocumentDB EKS eksClusterName +ElastiCache entrypoint EOF Extensibility @@ -88,6 +90,7 @@ PowerShell Pre PubSub ProjectRadius +radify RBAC RabbitMQ ResourceDeploymentClient @@ -946,4 +949,64 @@ XRay PodSpec ConfigMap CRD -composable \ No newline at end of file +composable +gatewaydemo +tlsdemo +ConfigMap +PodSpec +composable +CRD +nd +OSI +scaffolded +bb +df +rc +mongodatabases +secureString +btdgzez +bzmp +Webhook +Appi +ness +DevOps +DevSecOps +learnings +architected +customizable +Gitops +OSS +SRE +SREs +OSI +ghcr +png +src +todoapp +todolist +mockup +diataxis +appdiagram +tmp +jpg +buildingblocks +svg +ClusterIP +NodePort +replicaset +radified +cd +ddgq +dfc +fh +qd +vf +zht +Elasticache +FinOps +SecOps +podspec +sngm +nmqpk +fluentbit +nmqpk diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 33db12592..615442fff 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,7 +2,7 @@ Thank you for helping make the Radius documentation better! **Please follow this checklist before submitting:** -- [ ] [Read the contribution guide](https://docs.radapp.dev/contributing/docs/) +- [ ] [Read the contribution guide](https://docs.radapp.io/community/contributing/docs/) - [ ] Commands include options for Linux, MacOS, and Windows within codetabs - [ ] New file and folder names are globally unique - [ ] Page references use shortcodes instead of markdown or URL links diff --git a/.github/scripts/algolia.py b/.github/scripts/algolia.py index 7ee94513d..e453320ca 100644 --- a/.github/scripts/algolia.py +++ b/.github/scripts/algolia.py @@ -5,7 +5,7 @@ from bs4 import BeautifulSoup from algoliasearch.search_client import SearchClient -url = "docs.radapp.dev" +url = "docs.radapp.io" if len(sys.argv) > 1: starting_directory = os.path.join(os.getcwd(), str(sys.argv[1])) else: diff --git a/.github/scripts/release-docs.sh b/.github/scripts/release-docs.sh index fcc4eafda..4117c7cf1 100755 --- a/.github/scripts/release-docs.sh +++ b/.github/scripts/release-docs.sh @@ -44,8 +44,8 @@ pushd $REPOSITORY git checkout -B "${CHANNEL_VERSION}" -# In docs/config.toml, change baseURL to https://docs.radapp.dev/ instead of https://edge.docs.radapp.dev/ -awk '{gsub(/baseURL = \"https:\/\/edge\.docs\.radapp.dev\/\"/,"baseURL = \"https:\/\/docs.radapp.dev\/\""); print}' docs/config.toml > docs/config.toml.tmp +# In docs/config.toml, change baseURL to https://docs.radapp.io/ instead of https://edge.docs.radapp.io/ +awk '{gsub(/baseURL = \"https:\/\/edge\.docs\.radapp.io\/\"/,"baseURL = \"https:\/\/docs.radapp.io\/\""); print}' docs/config.toml > docs/config.toml.tmp mv docs/config.toml.tmp docs/config.toml # In docs/config.toml, change version to VERSION instead of edge diff --git a/.github/workflows/spellcheck.yaml b/.github/workflows/spellcheck.yaml index 1e0530acf..0926f55b3 100644 --- a/.github/workflows/spellcheck.yaml +++ b/.github/workflows/spellcheck.yaml @@ -35,7 +35,7 @@ jobs: echo "## :x: Spellcheck Failed" >> $GITHUB_STEP_SUMMARY echo "There are spelling errors in your PR. Visit [the workflow output](${{ env.ACTION_LINK }}) to see what words are failing." >> $GITHUB_STEP_SUMMARY echo "### Adding new words" >> $GITHUB_STEP_SUMMARY - echo "If you are adding a new custom word refer to the [docs guide](https://docs.radapp.dev/contributing/docs/#spelling)" >> $GITHUB_STEP_SUMMARY + echo "If you are adding a new custom word refer to the [docs guide](https://docs.radapp.io/contributing/docs/#spelling)" >> $GITHUB_STEP_SUMMARY - name: Post GitHub workflow output on success run: | echo "## :white_check_mark: Spellcheck Passed" >> $GITHUB_STEP_SUMMARY @@ -50,7 +50,7 @@ jobs: ## :x: Spellcheck Failed There are spelling errors in your PR. Visit [the workflow output](${{ env.ACTION_LINK }}) to see what words are failing. ### Adding new words - If you are adding a new custom word refer to the [docs guide](https://docs.radapp.dev/contributing/docs/#spelling) + If you are adding a new custom word refer to the [docs guide](https://docs.radapp.io/contributing/docs/#spelling) - name: Clear GitHub comment on success uses: marocchino/sticky-pull-request-comment@v2 continue-on-error: true diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index e23c8ced5..830cab0e5 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -17,13 +17,14 @@ jobs: name: Build Hugo Website if: github.event.action != 'closed' runs-on: ubuntu-latest + environment: + name: ${{ github.ref_name == 'edge' && 'edge' || 'latest' }} env: GOVER: '^1.17' TUTORIAL_PATH: './docs/content/user-guides/tutorials/' CODE_ZIP_PATH: './docs/static/tutorial/' HUGO_VERSION: 0.117.0 HUGO_ENV: production - SWA_BASE: 'wonderful-plant-020417a1e' steps: - name: Checkout docs repo uses: actions/checkout@v3 @@ -38,10 +39,6 @@ jobs: ref: ${{ env.RELEASE_BRANCH }} path: ./radius token: ${{ secrets.GH_RAD_CI_BOT_PAT }} - - name: Setup Go ${{ env.GOVER }} - uses: actions/setup-go@v2 - with: - go-version: ${{ env.GOVER }} - name: Setup Node uses: actions/setup-node@v2 with: @@ -58,29 +55,6 @@ jobs: sudo npm install -D --save postcss-cli cd themes/docsy npm install - - name: Restore CLI Docs Cache - uses: actions/cache@v3 - id: cli_cache - with: - path: | - ./docs/content/reference/cli - key: ${{ runner.os }}-cli-${{ hashFiles('radius/pkg/cli') }} - - name: Restore Go Modules Cache - uses: actions/cache@v3 - if: steps.cli_cache.outputs.cache-hit != 'true' - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-go-${{ hashFiles('radius/go.sum') }} - restore-keys: | - ${{ runner.os }}-go- - - name: Generate CLI Docs - run: | - if [ ! -f ./docs/content/reference/cli/rad.md ]; then - cd radius - go run ./cmd/docgen/main.go ../docs/content/reference/cli - fi - name: Generate Swagger docs run : | mkdir -p ./docs/static/swagger @@ -89,7 +63,7 @@ jobs: run: | cd docs if [ $GITHUB_EVENT_NAME == 'pull_request' ]; then - STAGING_URL="https://${SWA_BASE}-${{github.event.number}}.westus2.azurestaticapps.net/" + STAGING_URL="https://${{ vars.ENV_STATICWEBAPP_BASE }}-${{github.event.number }}.westus2.3.azurestaticapps.net/" fi hugo ${STAGING_URL+-b "$STAGING_URL"} - name: Upload Hugo artifacts @@ -100,13 +74,13 @@ jobs: if-no-files-found: error deploy: - name: Deploy Hugo Website + name: Deploy Hugo Website to App Service if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' needs: ['build'] runs-on: ubuntu-latest environment: name: ${{ github.ref_name == 'edge' && 'edge' || 'latest' }} - url: ${{ github.ref_name == 'edge' && 'https://edge.docs.radapp.dev' || 'https://docs.radapp.dev' }} + url: ${{ github.ref_name == 'edge' && 'https://edge.docs.radapp.io' || 'https://docs.radapp.io' }} steps: - name: Checkout docs repo uses: actions/checkout@v3 @@ -131,11 +105,13 @@ jobs: resource-group-name: ${{ vars.ENV_APPSERVICE_RESOURCEGROUP }} package: site/ - open_staging_site: - name: Open Staging Site + deploy-website: + name: Deploy Hugo Website needs: ['build'] runs-on: ubuntu-latest - continue-on-error: true + environment: + name: ${{ github.ref_name == 'edge' && 'edge' || 'latest' }} + url: ${{ github.ref_name == 'edge' && 'https://edge.docs.radapp.io' || 'https://docs.radapp.io' }} steps: - name: Download Hugo artifacts uses: actions/download-artifact@v3 @@ -145,7 +121,7 @@ jobs: - name: Deploy staging site uses: Azure/static-web-apps-deploy@v1 with: - azure_static_web_apps_api_token: ${{ secrets.STAGING_DOCS_SITE_TOKEN }} + azure_static_web_apps_api_token: ${{ secrets.ENV_STATICWEBAPP_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }} action: "upload" app_location: "site/" @@ -174,12 +150,15 @@ jobs: name: Close PR Staging Site if: github.event_name == 'pull_request' && github.event.action == 'closed' runs-on: ubuntu-latest + environment: + name: ${{ github.ref_name == 'edge' && 'edge' || 'latest' }} + url: ${{ github.ref_name == 'edge' && 'https://edge.docs.radapp.io' || 'https://docs.radapp.io' }} steps: - name: Close Pull Request id: closepullrequest uses: Azure/static-web-apps-deploy@v1 with: - azure_static_web_apps_api_token: ${{ secrets.STAGING_DOCS_SITE_TOKEN }} + azure_static_web_apps_api_token: ${{ secrets.ENV_STATICWEBAPP_TOKEN }} action: "close" algolia_index: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ca1baedc6..c1015e254 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contributing to Radius documentation -Thank you for your interesting in contributing to the Radius documentation! For more information please refer to https://docs.radapp.dev/contributing/docs/ +Thank you for your interesting in contributing to the Radius documentation! For more information please refer to [https://docs.radapp.io/community/contributing/docs/](https://docs.radapp.io/community/contributing/docs/) diff --git a/README.md b/README.md index 7b51a9658..85588b5a0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # πŸ“• Radius documentation -This repo contains the documentation source for https://radapp.dev +This repo contains the documentation source for https://radapp.io ## πŸ“¦ Framework @@ -16,7 +16,7 @@ The [rad CLI](https://github.com/radius-project/radius/tree/main/cmd/rad) refere ## πŸ‘¨β€πŸ’» Contributing -Visit the [docs contribution guide](https://radapp.dev/contributing/contributing-docs/) to learn how to contribute to the docs. +Visit the [docs contribution guide](https://radapp.io/contributing/contributing-docs/) to learn how to contribute to the docs. ### Local server @@ -28,11 +28,11 @@ The Radius docs are hosted on Azure App Service. ### Latest docs -The latest release docs are available at https://radapp.dev +The latest release docs are available at https://radapp.io ### Edge docs -Edge docs are available at https://edge.radapp.dev +Edge docs are available at https://edge.radapp.io ### Staging docs diff --git a/docs/README.md b/docs/README.md index afeacf412..8c464447d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ # Radius documentation -This directory contains the files to generate the https://docs.radapp.dev site. Please go there to consume Radius docs. This document will describe how to build Radius docs locally. +This directory contains the files to generate the https://docs.radapp.io site. Please go there to consume Radius docs. This document will describe how to build Radius docs locally. ## Codespace diff --git a/docs/config.toml b/docs/config.toml index c5fb08957..ad8051c2e 100644 --- a/docs/config.toml +++ b/docs/config.toml @@ -1,4 +1,4 @@ -baseURL = "https://edge.docs.radapp.dev/" +baseURL = "https://edge.docs.radapp.io/" languageCode = "en-us" title = "Radius Docs" theme = "docsy" @@ -47,8 +47,13 @@ tag = "tags" [[menu.main]] name = "Home" weight = 10 - url = "https://radapp.dev" + url = "https://radapp.io" pre = "" +[[menu.main]] + name = "Blog" + weight = 20 + url = "https://blog.radapp.io" + pre = "" [[menu.main]] name = "GitHub" weight = 40 @@ -57,7 +62,7 @@ tag = "tags" [[menu.main]] name = "Discord" weight = 90 - url = "https://discord.gg/SRG3ePMKNy" + url = "https://aka.ms/Radius/Discord" pre = "" [params] @@ -65,7 +70,7 @@ copyright = "Radius" version = "edge" tag_version = "latest" -chart_version = "0.19.0" +chart_version = "0.26.0" # Algolia Search algolia_docsearch = true @@ -80,11 +85,11 @@ github_project_repo = "https://github.com/radius-project/radius" version_menu = "Releases" [[params.versions]] version = "edge (preview)" - url = "https://edge.docs.radapp.dev" + url = "https://edge.docs.radapp.io" [[params.versions]] version = "latest" - url = "https://docs.radapp.dev" + url = "https://docs.radapp.io" # Markdown Engine - Allow inline html [markup] diff --git a/docs/content/_index.md b/docs/content/_index.md index 799d0faa9..9c0f44944 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -1,6 +1,6 @@ --- type: docs -title: "Radius Cloud-Native Application Platform" +title: "Radius Documentation" linkTitle: "Home" description: "Radius enables developers and the platform engineers that support them to build cloud-native applications" weight: 1 @@ -10,10 +10,10 @@ no_list: true Welcome to the Radius documentation! Here you'll find everything you need to know about Radius, from getting started to advanced topics. {{% alert color="primary" %}} -Radius logo

+{{< image src="radius-logo.svg" alt="Radius logo" width="400px" >}}

Radius is a cloud native application platform. It enables developers and IT operators to collaborate on delivering and managing cloud-native applications. With Radius, teams can easily understand their applications and how applications are running environments including dev, cloud, edge, and on-prem. Plus, teams can ensure their application infrastructure meets cost, operations, and security requirements. Open-source and multi-cloud, Radius is the cloud-native application platform for delivering and managing applications anywhere. -[**Learn more**](https://radapp.dev/) +[**Learn more**](https://radapp.io/) {{% /alert %}} {{< button text="Get started with Radius πŸš€" page="getting-started" color="success" size="btn-lg" >}} diff --git a/docs/content/community/contributing/contributing-docs/index.md b/docs/content/community/contributing/contributing-docs/index.md index 07627de4a..15d481cd7 100644 --- a/docs/content/community/contributing/contributing-docs/index.md +++ b/docs/content/community/contributing/contributing-docs/index.md @@ -11,7 +11,7 @@ The Radius docs are built on [Hugo](https://gohugo.io) with the [Docsy](https:// Radius uses the [DiΓ‘taxis framework](https://diataxis.fr/) for its documentation: -Diagram showing the diataxis framework +{{< image src="diataxis.png" alt="Diagram showing the diataxis framework" width=800px >}} Follow the guidance on this page to learn how to get started, how to contribute, and how to use the DiΓ‘taxis framework to create new docs. @@ -204,8 +204,10 @@ Front-matter should be completed with all fields including type, title, linkTitl - `categories` should be one of the following: - Concept - Overview - - Reference application + - Tutorial - How-To + - Reference + - Schema - `tags` should be a comma-separated list of metadata tags. As per the [styling conventions](#styling-conventions), titles should only capitalize the first word and proper nouns, with the exception of "How-To:" @@ -354,7 +356,7 @@ Begin by placing images under `/daprdocs/static/images` with the naming conventi Then link to the image using: ```md -Description of image +{{}} ``` >Don't forget to set the alt attribute to keep the docs readable for our visually impaired users. @@ -364,7 +366,7 @@ Then link to the image using: This HTML will display the `radius-overview.png` image on the `overview.md` page: ```md -Overview diagram of Dapr and its building blocks +{{}} ``` ### Alerts @@ -532,10 +534,10 @@ You can also reference pages in your button as well: You can link to a GitHub repo and path with the `githubRepo` and `githubPath` parameters: ``` -{{}} +{{}} ``` -{{< button text="My Button" githubRepo="samples" githubPath="reference-apps" >}} +{{< button text="My Button" githubRepo="samples" githubPath="samples" >}} #### Button colors diff --git a/docs/content/community/overview.md b/docs/content/community/overview.md index 761370533..4bf144fb6 100644 --- a/docs/content/community/overview.md +++ b/docs/content/community/overview.md @@ -39,10 +39,11 @@ To present a specific topic on the next Radius community call start by filling o | Thursday July 13th 9:00am Pacific Time (PST) | v0.22 release | - | [Stream](https://microsoft.sharepoint.com/:v:/r/teams/radius/Shared%20Documents/General/Community%20Calls/2023-07-13%20Project%20Radius%20Community%20Call.mp4?csf=1&web=1&e=v30w8D) | | Thursday Aug 8th 9:00am Pacific Time (PST) | v0.23 release | - | [Stream](https://microsoft.sharepoint.com/:v:/r/teams/radius/Shared%20Documents/General/Community%20Calls/2023-08-08%20Project%20Radius%20Community%20Call.mp4?csf=1&web=1&e=6Lew1D&nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJTdHJlYW1XZWJBcHAiLCJyZWZlcnJhbFZpZXciOiJTaGFyZURpYWxvZyIsInJlZmVycmFsQXBwUGxhdGZvcm0iOiJXZWIiLCJyZWZlcnJhbE1vZGUiOiJ2aWV3In19) | | Thursday Aug 31st 9:00am Pacific Time (PST) | v0.24 release | - | [Stream](https://microsoft.sharepoint.com/:v:/r/teams/radius/Shared%20Documents/General/Community%20Calls/2023-08-31%20Radius%20Community%20Call.mp4?csf=1&web=1&e=YBjiMv&nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJTdHJlYW1XZWJBcHAiLCJyZWZlcnJhbFZpZXciOiJTaGFyZURpYWxvZyIsInJlZmVycmFsQXBwUGxhdGZvcm0iOiJXZWIiLCJyZWZlcnJhbE1vZGUiOiJ2aWV3In19) | +| Tuesday, Oct 2nd 9:00am Pacific Time (PST) | v0.25 release | - | [Stream](https://microsoft.sharepoint.com/:v:/r/teams/radius/Shared%20Documents/General/Community%20Calls/2023-10-03%20Radius%20Community%20Call.mp4?csf=1&web=1&e=9iXqbg) ## GitHub Issues & repositories -If you would like to file Issues, access the source code, or use Codespaces please visit the [Radius GitHub repo] (https://github.com/radius-project). +If you would like to file Issues, access the source code, or use Codespaces please visit the [Radius GitHub repo](https://github.com/radius-project). ## How can I get involved? diff --git a/docs/content/concepts/api-concept/index.md b/docs/content/concepts/api-concept/index.md index b2f34006a..27a43f918 100644 --- a/docs/content/concepts/api-concept/index.md +++ b/docs/content/concepts/api-concept/index.md @@ -84,7 +84,7 @@ The following tables shows some examples of resource ids from different resource #### Resource manager: Radius -This example shows a Radius application named `my-app` in the `my-group` resource group, running on the local cluster: +This example shows a Radius Application named `my-app` in the `my-group` resource group, running on the local cluster: | Key | Example | | ------------------ | ------------------------------------------------------------------------------------ | diff --git a/docs/content/concepts/application-graph/index.md b/docs/content/concepts/application-graph/index.md index f608df33f..7ceb8bd08 100644 --- a/docs/content/concepts/application-graph/index.md +++ b/docs/content/concepts/application-graph/index.md @@ -7,29 +7,29 @@ weight: 200 toc_hide: true --- -## Radius applications +## Radius Applications -Radius offers an [application resource]({{< ref "guides/author-apps/application" >}}) which teams can use to define and deploy their entire application, including all of the compute, relationships, and infrastructure that make up the application. Since the graph of relationships between deployed resources is much more descriptive than a basic list of resources, the Radius application graph can automate complex deployment tasks and enable rich visualization experiences. +Radius offers an [application resource]({{< ref "guides/author-apps/application" >}}) which teams can use to define and deploy their entire application, including all of the compute, relationships, and infrastructure that make up the application. Since the graph of relationships between deployed resources is much more descriptive than a basic list of resources, the Radius Application graph can automate complex deployment tasks and enable rich visualization experiences. -A diagram showing an application and all it's resources +{{< image src="application.png" alt="A diagram showing an application and all it's resources" width=400px >}} ## Graphs are better than lists -Within an application deployed with Radius, developers can express both the resources (_containers, databases, message queues, etc._), as well as all the relationships between them. This forms the Radius application graph. This graph is powerful because it allows Radius to understand the relationships between resources, simplifying the [deployment]({{< ref "/guides/deploy-apps" >}}) and [configuration]({{< ref "application" >}}) of your application. Plus, it allows you to visualize your application in a way that is more intuitive than a list of resources. +Within an application deployed with Radius, developers can express both the resources (_containers, databases, message queues, etc._), as well as all the relationships between them. This forms the Radius Application graph. This graph is powerful because it allows Radius to understand the relationships between resources, simplifying the [deployment]({{< ref "/guides/deploy-apps" >}}) and [configuration]({{< ref "application" >}}) of your application. Plus, it allows you to visualize your application in a way that is more intuitive than a list of resources. -A diagram showing the move from a set of infrastructure lists to a graph of resources +{{< image src="list-to-graph.png" alt="A diagram showing the move from a set of infrastructure lists to a graph of resources" width=600px >}} ## Self-documenting applications -The Radius application graph also allows your application to be self-documenting, where developers and operators can query and reason about the same application definition. Instead of multiple views of logs, infrastructure, and code, Radius provides a single source of truth for your application. +The Radius Application graph also allows your application to be self-documenting, where developers and operators can query and reason about the same application definition. Instead of multiple views of logs, infrastructure, and code, Radius provides a single source of truth for your application. -A mockup of a dashboard UI showing an application, its resources, and its connections +{{< image src="dashboard.png" alt="A mockup of a dashboard UI showing an application, its resources, and its connections" width=700px >}} > **Note:** A Radius dashboard is still on the roadmap, but in the meantime you can use the [Radius API]({{< ref api-concept >}}) to build your own visual experiences today. ## Mine the app graph API -The Radius application graph is also exposed as an API, allowing you to build your own visualizations, workflows, and more on top of Radius. Learn more in the [API docs]({{< ref api-concept >}}). +The Radius Application graph is also exposed as an API, allowing you to build your own visualizations, workflows, and more on top of Radius. Learn more in the [API docs]({{< ref api-concept >}}). For example, I can get the status of my `frontend` container, and get its definition and its connections to other resources: @@ -72,4 +72,4 @@ GET /planes/radius/local/resourceGroups/default/providers/Applications.Core/cont Now that you have an understanding of the Radius app graph, learn how you can deploy Radius applications to prepared landing zones with Radius Environments: -{{< button text="Radius Environments" page="environments-concept" color="success" >}} +{{< button text="Radius Environments" page="collaboration-concept" color="success" >}} diff --git a/docs/content/concepts/architecture-concept/index.md b/docs/content/concepts/architecture-concept/index.md index 9ba1cbfff..0f28f3bf7 100644 --- a/docs/content/concepts/architecture-concept/index.md +++ b/docs/content/concepts/architecture-concept/index.md @@ -134,12 +134,12 @@ When listing applications using the `rad` CLI: 3. UCP proxies the HTTP request to the `Applications.Core` resource provider. 4. The `Applications.Core` resource provider handles the request and responds with the list of applications. -Diagram of the API flow described above +{{< image src="flow-list-apps.png" alt="Diagram of the API flow described above" width="1000px" >}} {{% /codetab %}} {{% codetab %}} -When using Bicep to author and deploy Radius applications: +When using Bicep to author and deploy Radius Applications: 1. The client compiles the Bicep file to an ARM-JSON template and submits a request for processing as a `Bicep.Deployments/deployments` resource. 2. UCP receives the request for the `Bicep.Deployments/deployments` Create operation and looks up the internal address for the `Bicep.Deployments` resource provider. @@ -148,12 +148,12 @@ When using Bicep to author and deploy Radius applications: a. The `Bicep.Deployments` resource provider makes a request to UCP to Create/Update the resource. b. UCP routes the request to the appropriate resource provider to be handled. -Diagram of the API flow described above +{{< image src="flow-deploy.png" alt="Diagram of the API flow described above" width="1000px" >}} {{% /codetab %}} {{% codetab %}} -When using the `tf` CLI to deploy a Radius application using Terraform: +When using the `tf` CLI to deploy a Radius Application using Terraform: 1. Terraform reads the configuration, loads credentials, parses the file, and instantiates its providers. For each resource in the file: a. Terraform asks the appropriate provider to Create or Update the resource. @@ -161,7 +161,7 @@ When using the `tf` CLI to deploy a Radius application using Terraform: c. In the case of a Radius resource the Terraform provider makes a request the Radius API to Create/Update a resource. d. UCP routes the request to the appropriate resource provider to be handled. -Diagram of the API flow described above +{{< image src="flow-terraform.png" alt="Diagram of the API flow described above" width="1000px" >}} {{% /codetab %}} diff --git a/docs/content/concepts/collaboration-concept/index.md b/docs/content/concepts/collaboration-concept/index.md new file mode 100644 index 000000000..6516130ea --- /dev/null +++ b/docs/content/concepts/collaboration-concept/index.md @@ -0,0 +1,48 @@ +--- +type: docs +title: "Concept: Collaboration in Radius" +linkTitle: "Collaboration" +description: "Learn how Radius Environments and Recipes support collaboration between platform engineers, application developers, and IT operators." +weight: 300 +slug: collaboration +--- + +## What we heard + +As part of our research into cloud-native application management we talked to many enterprise application teams and IT operators about their desired approach. For some enterprises their current DevOps began to break down as they increased their adoption of the cloud. Every DevOps team was making different decisions about which cloud provider they'd use, how they'd store their code, how their build pipelines worked, what services they'd use for compute, how they'd maintain application state, how logging and observability worked, and more. Best practices for engineering and operations weren't effectively shared. Also, DevOps teams made different decisions about the scale of their resources, making it challenging or impossible for enterprises to optimize the cost of using the cloud. Finally, without consistent, verifiable security practices, security mistakes were getting made which, at their worst resulted in a loss of business and customer trust. These issues in operations, cost, and security needed to be addressed consistently across the enterprise. + +We learned that there weren't great tools for collaboration between IT organizations and the developers they were supporting. Collaboration between developers and operators required detailed coordination, resulting in back-and-forth manual processes that slow down development velocity. Most organizations resorted to building custom pipelines or ticketing systems for infrastructure deployments, but these only ease part of the pain without addressing the underlying manual processes. Teams needed a better way to collaborate with each other. + +An emerging group of enterprises have a created a *platform engineering* effort to define and build their internal developer platform. Platform engineering teams focus on streamlining the developer-experience for their organization by optimizing for developer productivity when following the enterprise's chosen practices. Platform engineers define the set of recommended practices for application teams based on DevOps principles, and then provide self-service capabilities for application teams to use. When an organization adopts a platform engineering mindset, the internal developer platform is the product, and the application developers are the customer. Platform engineering is a large effort and will encompass many topics outside of the scope of application management. + +A few common challenges emerged from our conversations. The platform engineering philosophy also aims to address these concerns: + +- Developers benefit from paved-paths for best-practices: enterprises gain operational efficiency by standardizing how applications are deployed, report diagnostics, and provision cloud resources. When this is done well, developers find and use the recommended technologies with ease. When this is done poorly, developers struggle with many templates, dependencies, and other assets to manage over time. +- Developer velocity is improved by self-service for the cloud: Platform engineering efforts optimize the developer workflow with self-service tools that provide guardrails to drive adherence to best-practices. These guardrails help manage costs and increase an organization's security posture by providing correctly configured tools and infrastructure. In addition, self-service minimizes inefficient manual workflows that add friction to the development process. + + +## Introducing the Environment + +Environments in Radius provide a landing-zone for Applications that is configured with the organization's chosen best-practices, settings, and Recipes. Environments encapsulate and store configuration for the compute platform, networking configuration, diagnostics systems, and other operational concerns. Environments enable a *separation of concerns* between developers and the IT organizations supporting those developers. Environments allow the configuration to vary across different types of deployments (like a staging deployment), deployment regions or even different clouds. + +Platform engineers and IT operators collaborate with application teams by managing the set of Environments developers can use. These Environments may be static and pre-configured, or may be created on-demand by infrastructure-as-code as part of an internal developer platform. Platform engineers can configure Environments to ease adoption of recommended practices, for example by configuring the recommended diagnostics systems. Application developers can deploy their Applications across multiple Environments and have assurance that the correct configuration is applied. Environments reduce the cognitive load for developers since the configuration was created by platform engineers and stored by Radius. + +When an Application is deployed, Radius will *bind* the Application to the configuration of the target Environment and apply the relevant settings. Storing the operational configuration in the Environment increases developer velocity because the Application does not need to change when it is deployed across Environments configured for different purposes or leveraging different infrastructure. + +{{< button text="Learn more about Environments" page="/guides/deploy-apps/environments/overview" newtab="true" >}} + +## Recipes as part of the Environment + +Recipes use infrastructure-as-code templates stored in the Environment to create cloud resources on-demand when an Application is deployed. Since the Recipes are stored in the Environment, the set of available cloud resources and the configuration used for provisioning can be tightly controlled. Recipes use the credentials stored in the Environment when provisioning cloud resources to limit those who need access to cloud accounts. The Recipes configured in an Environment are versioned, and can be updated in a granular way to lower the risk of unforeseen changes. When a Recipe is executed, it automatically catalogs the infrastructure used as part of the Radius Application Graph where it is visible to the whole organization. Because Recipes are part of the Environment, they can also vary across environments. For example, a cache might need to be bigger in one cloud region, like Europe, than it was in a different cloud region, like North America. For a multi-cloud Application, an enterprise could create an Environment for an AWS region and a different Environment for an Azure region. The recipe to create a Redis cache in the AWS Environment might deploy Amazon Elasticache for Redis and the recipe in the Azure Environment might deploy Azure Cache for Redis. The Application would just use the Redis cache recipe, unaware of what underlying infrastructure was deployed to provide the cache. Lastly, the infrastructure created by Recipes is stored by Radius, so it can be automatically cleaned up to help manage costs. + +Within an IT or platform engineering team, many organizations have defined specialized roles like SecOps, FinOps, and cloud centers-of-excellence to address their complex needs for using the cloud. Recipes are designed for these engineers to standardize and govern the organizations use of the cloud while still supporting self-service deployment. Since the Recipes are stored in the Environment they do not need to be shared directly with or understood and managed by application developers. By providing Recipes, platform engineers can streamline and simplify the interface to the cloud used by application developers. Since Recipes execute as part of Application deployment, the provisioning of cloud resources is part of an existing process rather than a manual step. + +Applications use Recipes to create cloud infrastructure during deployment without describing how that infrastructure will be provisioned. For example a developer, might include a Redis Cache as part of an Application. When the Application is deployed, the Redis Cache will be created according to the Recipe, ensuring that it uses a supported configuration. Recipes make it easy for the Application to connect to the cloud resources by automatically configuring access-policies, networking, and connection settings for the Application code. Since that Application can rely on the recipe to provision the correct infrastructure and deliver the correct configuration, it is easy to deploy the same Application to different Environments without code changes. + +{{< button text="Learn more about Recipes" page="/guides/recipes/overview" newtab="true" >}} + +## Part of platform engineering + +Platform engineering is a relatively new trend and so the exact set of tools and practices that will make organizations successful are still to be determined. We designed Radius to aid platform engineering efforts as part of the internal developer platform. Radius provides Environments and Recipes to help ensure that cloud resources meet enterprise requirements for operations, cost, and security. We also think that the Radius Application Graph, described elsewhere, will help everyone visualize and reason about their Applications. With these components we hope to help Platform Engineers build simple but powerful platforms for their developers to use while improving the collaboration between developers and the broader IT organization. + +The Environment and Recipe model also works for DevOps teams. When we spoke with DevOps teams we learned that there were usually a small group of people with stronger expertise in creating and managing cloud resources. We'd expect these people to be the people creating Environments and Recipes for use by their team. diff --git a/docs/content/concepts/environments-concept/env-with-apps-example.png b/docs/content/concepts/environments-concept/env-with-apps-example.png deleted file mode 100644 index 475040ba8..000000000 Binary files a/docs/content/concepts/environments-concept/env-with-apps-example.png and /dev/null differ diff --git a/docs/content/concepts/environments-concept/index.md b/docs/content/concepts/environments-concept/index.md deleted file mode 100644 index 4fb0daee9..000000000 --- a/docs/content/concepts/environments-concept/index.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -type: docs -title: "Radius environments" -linkTitle: "Environments" -description: "Learn about Radius Environments" -weight: 300 -slug: environment -toc_hide: true ---- - -## Introduction - -Radius environments are a prepared landing zone for applications. They contain a prepared pool of compute, networking, and shared resources. Radius applications deployed to that environment "bind" to that infrastructure. Configuration on the environment allow for operators to enforce organizational requirements and best practices for app teams. - -Environments provide a grouping structure for applications and the resources they share. For example, an org might choose to setup separate Radius environments for staging and production. When appropriate, multiple applications can be deployed into the same environment. - -Diagram of multiple Radius environments deployed to Azure. One environment contains 1 app, the other environment contains multiple apps. - -## Concerns that environments manage - -### Separation of concerns - -In many small to medium-sized organizations, a full stack developer might write application code, author the Radius app definition, and create the Radius environment. In larger orgs, there may be separate teams of central operations and developers, where the central teams build environment templates which development teams leverage and deploy to. The separation of an app from an environment makes a separation of concerns possible. - -With Radius environments, central operations and IT teams can define and share environments with development teams for them to deploy applications into. Ops teams can focus on configuring the compute, dependencies, networking, and other infrastructure concerns through [Recipes]({{< ref "guides/recipes/overview">}}), while developers focus on the business and application concerns. This allows each team to focus on what matters most to them, without needing to become experts in every aspect of the infrastructure and application. - -### Developer productivity - -Once an environment template is defined, developers can get up and running with a prepared development, pre-production, or production environment in minutes. No more waiting for manual provisioning, configuration or inter-team coordination. Simply use the [Recipes]({{< ref "guides/recipes/overview" >}}) linked to your Radius environment and deploy your application. - -### Replication and consistency - -When an application team needs to scale an application to additional regions or instances, environments can be "stamped out" in minutes and ready for app deployments. Integrations with CI/CD systems such as GitHub Actions allow this process to be automated and repeatable. - -### Organization best-practices - -Organizational best-practices such as cost-optimization, resource sharing, and logging can all be codified and enforced with a Radius environment. - -## Environment features - -| Feature | Description | -|---------|-------------| -| **Compute runtime** | Define compute runtimes such as a Kubernetes cluster or Azure serverless compute *(coming soon)* where your application's services run. | -| **Shared infrastructure** | Deploy shared resources that are available to all applications deployed into the environment. -| **Diagnostics** *(coming soon)* | Configure and manage diagnostic configuration such as collection policies, retention periods, and archival settings. -| **Networking** *(coming soon)* | Define networking requirements such that applications are automatically configured with network isolation best-practices. -| **Identity & access** *(coming soon)* | Limit access to deployments, resources and capabilities based on user roles and assignments. -| **Dependencies** *(coming soon)* | Define environment requirements such as policy, packages, or other organization requirements. -| **Infrastructure provisioning** | Automatically provision infrastructure at deployment time through [Recipes]({{< ref "guides/recipes/overview" >}}). -| **Dependency management** *(coming soon)* | Manage dependencies and environment capabilities such as packages, frameworks, and other configuration. - -## Example: Handoff between teams - -In this example there are two teams within an organization: a central operations team and a development team. The central ops team is responsible for managing the environment and the central infrastructure resources, and the development team is responsible for the application definition and deployment. - -A typical workflow for this team structure would look like: - -1. The ops team initializes a new environment, configured with a compute runtime setup with networking, identity, diagnostics, and other configuration that matches their org's requirements. -1. The developer authors a Radius application template, including containers for their services, portable resources for their infrastructure, and routes/gateways for their networking. -1. The developer deploys the app template to the Radius environment - - The app's containers automatically run on the container runtime - - The resource automatically configures security best practices and injects connection information into the consuming container - -When the developer deploys their application, these org-level concerns are automatically wired up based on the environment. Developers don't have to think about credentials or how networking is configured, enabling them to focus on their applications instead. - -## Next step - -Now that you have an understanding of Radius Environments, learn more about the Radius API: - -{{< button text="Radius API" page="api-concept" size="btn-lg" color="success" >}} \ No newline at end of file diff --git a/docs/content/concepts/multi-cloud-concept/index.md b/docs/content/concepts/multi-cloud-concept/index.md new file mode 100644 index 000000000..038d3a5af --- /dev/null +++ b/docs/content/concepts/multi-cloud-concept/index.md @@ -0,0 +1,51 @@ +--- +type: docs +title: "Concept: Open-source and multi-cloud" +linkTitle: Open-source and multi-cloud +description: For many enterprises, their cloud native computing strategy involves using multiple cloud providers. Open source projects, like Kubernetes, help ensure these enterprises achieve their strategy. As a result, Radius was designed to be open-source and multi-cloud from the start. +weight: 100 +categories: "Concept" +--- + +## Organizations are increasingly multi-cloud + +Radius is designed to meet developers, and the platform engineers that support them, where they are, integrating with existing best practices while providing new benefits through features like the Radius Application Graph and Radius Environments and Recipes. We talked to a lot of organizations about their cloud usage, and learned that they were either using multiple cloud providers or were going to use multiple cloud providers. In short, multi-cloud is a trend that is accelerating in popularity. + +What does multi-cloud really mean? Throughout the design phase of Radius, we've have many conversations with large enterprises about their usage of the cloud, and in particular about their usage of multiple clouds. We were curious about why enterprises use multiple clouds and what problems they need help solving. In talking with these enterprises and with cloud native software vendors we found three types of multi-cloud use: + +1. Multi-cloud enterprise: these enterprises deployed some applications to one cloud provider and other applications to another cloud provider. +1. Cloud-agnostic applications: these enterprises deploy the same application to different cloud providers. +1. Multi-cloud application: these enterprises have a single application that is distributed across multiple clouds. + +The third case, a single application that is running across multiple clouds, was incredibly rare. Enterprises that had experimented with multi-cloud applications cited almost insurmountable challenges with operations, security, and performance management. While Radius can help with these kinds of applications, supporting these kinds of applications was not a design goal for Radius. + +Radius is designed to meet the first two types of multi-cloud use. + +### Multi-cloud enterprise + +The multi-cloud enterprise case was the most common case we encountered. Some enterprises explained that they were multi-cloud due to decentralized decision making, acquisitions, or inertia. For example, some enterprises let individual engineering teams decide which cloud worked best for the type of application they were building. These teams would select a cloud provider for a variety of reasons, such as prior experience with a cloud provider, unique cloud provider features, or the way a particular cloud provider integrated with other tools or practices used by the team. + +Some enterprises explained that they were multi-cloud through acquisitions. Their new parent company might have selected a particular cloud provider that is different than their choice. For many customers we spoke with there was little to no requirement to migrate their existing applications from one cloud provider to another cloud provider. + +Finally, some enterprises explained that they were multi-cloud due to inertia. They had started with one cloud provider, but later, switched to using a different provider as their primary choice for new applications. Like the acquisition case above, there was no requirement to move existing applications to the new cloud provider. + +Radius was designed with these enterprises in mind. Enterprises can "radify" their applications regardless of cloud provider, enabling these enterprises to use Radius regardless of whether or not the application is using a particular public cloud provider or a private cloud operated by the enterprise itself. Radius applications can use cloud vendor specific technologies, like Amazon's DynamoDB or Azure's Cosmos DB, or they can use open source technologies like Redis. + +### Cloud-agnostic applications + +There were some enterprises that ran the same application in multiple clouds. Often these enterprises had business requirements that required them to use multiple cloud providers. For example, some financial services enterprises had to host their application and any data associated with the application in a particular country or geographic region. The enterprise would need their application to be deployable to whichever cloud provider was available in a specific country or region. + +Radius was designed to support this specific use case from the start. We wanted to make it possible for IT teams, platform engineering teams, or cloud center of excellence teams to make decisions about which cloud provider an application would use. We wanted them to be able to make that decision without having an impact on their developers and the application logic those developers were writing. + +Radius supports cloud-agnostic applications in two ways. First, enterprises can use open source technologies in their applications. For example, developers that need a cache might use a Redis cache in their application. The platform engineering team would build Radius Recipes that, depending on the cloud provider, would use a different underlying Redis compatible service. This might mean using Azure Cache for Redis when deploying to Azure or Amazon ElastiCache for Redis on AWS. The developer's application logic and deployment assets like Helm charts should be the same, regardless of which cloud they're using. + +The second way Radius supports cloud-agnostic applications is with [Dapr, the Distributed Application Runtime](https://dapr.io). Dapr provides developers with APIs that abstract away the complexity of common challenges developers encounter regularly when building cloud native applications. These API building blocks abstract away services that provide state management, secrets management, or publish and subscribe systems. Developers can write to Dapr and platform engineering teams can use Radius to provide the underlying infrastructure for these Dapr based applications. For example, a Dapr application that's persisting state could use Azure Blob Storage or Amazon DynamoDB as the underlying state store depending on which cloud provider was used to host the application. + +Radius was designed from the start to support enterprises in implementing their multi-cloud strategy. Enterprises can use cloud vendor technologies, like DynamoDB, or they can build on open source technologies like Redis and Dapr. + +## Open-source +Many enterprises use open-source technologies as a way of *achieving* their multi-cloud strategy. Kubernetes adoption is a great example of this trend. Customers building on Kubernetes can leverage their Kubernetes experience, tools, and practices with any cloud provider and they're confident Kubernetes, with it's broad community, will continue to be a multi-cloud technology. + +Radius was designed to be an open-source project from the start as part of the way Radius would support enterprise multi-cloud strategies. Open-source can mean different things to different people. For Radius, open-source means that our source code is publicly available under an OSI-approved permissive license. It also means that the Radius project uses an neutral and open governance model to continue the evolution of Radius as a multi-cloud technology going forward. Anyone should be able to contribute to Radius, extend the platform, self-host Radius for internal use, or use it to build a business hosting other people's applications. + +The Radius team has worked with the Cloud Native Computing Foundation (CNCF) to bring Radius into the CNCF as a new CNCF project. The Radius team is optimistic that Radius will be a success, both in helping enterprises achieve their multi-cloud strategies as well as in bringing powerful concepts, like Environments, Recipes, and the Application Graph, to the broader cloud native community. diff --git a/docs/content/concepts/overview/index.md b/docs/content/concepts/overview/index.md index caa134eb9..c4b5da2e3 100644 --- a/docs/content/concepts/overview/index.md +++ b/docs/content/concepts/overview/index.md @@ -13,7 +13,7 @@ App teams today struggle to model and deploy their applications. Complex archite Apps today are modeled and deployed with Dockerfiles, Kubernetes CRDs, Helm charts, and infrastructure-as-code templates, with scripts to glue it all together. Plus, the range of infrastructure types (cloud, on-premises, serverless) can double or triple the work as teams figure out how to move apps between platforms. -Diagram showing all of the technologies needed to model an application today +{{< image alt="Diagram showing all of the technologies needed to model an application today" src="cloud-apps-today.png" width="600px" >}} Once deployed, teams don't have a way to view and manage apps holistically. Instead, they're drowning in lists of disjointed resources. @@ -25,7 +25,7 @@ What's missing is a way to collapse the entire concept of an application into a At the heart of Radius is a new **application resource**, with an accompanying set of resources and abstractions to describe your app's requirements and capabilities. -Diagram showing modeling an app with Radius +{{< image alt="Diagram showing modeling an app with Radius" src="cloud-apps-radius.png" width="600px" >}} These new resources form the [**Radius app model**]({{< ref application-graph>}}), which allow you to: @@ -36,13 +36,13 @@ These new resources form the [**Radius app model**]({{< ref application-graph>}} The result is no longer just a flat list of resources - it's a fully codified abstraction of how the services and infrastructure relate to each other: -Diagram showing Radius application in the Azure portal
+{{< image alt="Diagram showing Radius Application in the Azure portal" src="ui-mockup-basic.png" width="700px" >}}
### Drastically reduce infra ops time -[App environments]({{< ref environments-concept >}}) are landing zones for applications. They are the place where you can deploy, manage, and scale your apps. +[App environments]({{< ref collaboration-concept >}}) are landing zones for applications. They are the place where you can deploy, manage, and scale your apps. -Diagram showing Radius environments +{{< image alt="Diagram showing Radius Environments" src="environments.png" width="600px" >}} Environments allow you to: @@ -74,7 +74,7 @@ Radius uses the [Bicep language]({{< ref bicep >}}) as its file-format and struc Radius aims to support all hosting platform types - from hyperscale cloud, to self-hosted Kubernetes on the edge, to IoT and edge devices. -Diagram showing Radius platforms +{{< image alt="Diagram showing Radius platforms" src="platforms.png" width="800px" >}} ### Application portability @@ -88,4 +88,4 @@ As teams onboard to Radius and begin deploying across platforms, the tooling and Now that you have an overview of Radius, learn more about the Radius app model: -{{< button text="Learn about the Radius application model" page="application-graph" size="btn-lg" color="success" >}} \ No newline at end of file +{{< button text="Learn about the Radius Application model" page="application-graph" size="btn-lg" color="success" >}} \ No newline at end of file diff --git a/docs/content/concepts/why-radius-concept/index.md b/docs/content/concepts/why-radius-concept/index.md new file mode 100644 index 000000000..aa5a2e25d --- /dev/null +++ b/docs/content/concepts/why-radius-concept/index.md @@ -0,0 +1,57 @@ +--- +type: docs +title: "Concept: Why Radius?" +linkTitle: "Why Radius?" +description: "Describes the motivations for creating Radius." +weight: 300 +categories: "Concept" +--- + +## Our starting point + +We started Radius to simplify and improve upon tools application developers use to deploy and manage applications. Our initial goal was just to create a platform for deployment that developers would love but, as we talked to more cloud customers, we realized almost every enterprise is creating a custom internal developer platform to standardize the way they deploy and manage cloud-native applications + +Most enterprises are not dev-tools experts and as a result they struggle with the cost and complexity of building a home-grown solution. If we could provide an open-source solution that solved these problems for enterprises we could have a big impact. + +A few common problems rose to the top: + +- **Applications are more than just Kubernetes:** standardizing on Kubernetes has been a successful strategy for most enterprises, but applications developers are tasked with managing applications on Kubernetes along with multiple resources in the cloud. Integrating Kubernetes with cloud services has added additional complexity while making compliance with best-practices almost a full-time job. +- **Developers, platform engineers, and IT operators need to collaborate:** to manage the complexity of the cloud, enterprises have specialized disciplines like sec-ops, fin-ops, and cloud centers of excellence. Application developers need to interface with all of these roles, and the tools they use should aid, not impede collaboration. +- **Applications lack an industry-wide definition:** the IT operators, SREs and other specialists that support an application usually lack context about the architecture. Application developers lack context about the underlying cloud infrastructure. As application developers and IT operators collaborate they need a common understanding and visualization of what an application **is**. + +So, we started Radius to address these concerns and provide **our** opinions about how application management should work in today's complex cloud-native landscape. Along the way we came up with the concept of **Appi-ness**: the feeling of satisfaction one has when the application is at the center of every workflow. + +## Applications are more than just Kubernetes + +The modern cloud-native application includes much more than Kubernetes. Applications use databases, message queues, identity systems, SaaS accounts, and observability platforms. However, most of the tools that are available for developers are focused on the Kubernetes basics of compute, storage, and networking. + +Our philosophy is to be inclusive when considering what is *part of the application*. Developers can use cloud resources directly or use Recipes configured by operators for on-demand provisioning of infrastructure. We automate best-practices like IAM/identity assignment, permissions management, diagnostics, and networking configuration based on the application architecture and developer intent. We hope that features like Connections feel like magic when its easy to wire up your dependencies. IT operators control the templates and credentials used to interact with the cloud ensuring that provisioning is done in a supported way. + +## Developers and platform engineers need to collaborate + +Enterprises are creating specialized roles and initiatives to improve their speed, efficiency, and security when adopting the cloud. Platform engineering is an emerging discipline that's combining a product mindset with learnings from DevOps and DevSecOps teams to create internal development platforms. When successful, platform engineers deliver a set of tools that provide sufficient automation, tracking, governance, and observability that guide development teams naturally fall β€œinto the pit of success.” Often these endeavors can come up a little short, looking like a set of repository templates, cloud resource templates, and a software catalog for application developers to use. Unfortunately, the tools and assets that are frequently used don't encourage collaboration between developers and the platform engineers supporting those developers. Platform engineering is new as a discipline, and the patterns that will make enterprises successful long-term are still emerging. + +Radius provides concepts like Environments and Recipes that support a separation of concerns. Platform engineers can create repository templates with CI/CD pipelines and starter code for deployment. IT operators can deploy and govern the Environments where those pipelines deploy applications. Cloud and security experts can provide the Recipes used to create and update cloud resources. Developers are only responsible for describing the requirements and architecture of the application, understanding which environments to use, and choosing dependencies from the supported set of Recipes. + +## Applications need an industry-standard definition + +The myriad of operational roles that support applications in production rarely have the full picture of how the application is architected or a complete picture of the infrastructure resources that are in use. It can be difficult for an organization to understand the impact of an outage or what is causing high consumption and high cost for a cloud resource without a holistic understanding of the application. Unless developers are creating the cloud resources themselves, its hard for them to understand the real infrastructure at work. Teams are adopting software catalogs to help address these problems but there is always drift between the catalog and the source of truth. + +We wanted to do better by building a flexible and customizable picture of what an application *is*. To do this we capture the developer's understanding of the application during deployment and combine that picture with the cloud resources and Recipes used to provision the infrastructure. This data is used to build the Application Graph, a new kind of software catalog that describes the application's architecture, communication patterns, and dependencies as a shared view for the whole organization. + +We hope that this holistic way of thinking about applications becomes the standard and that together with the rest of the cloud-native ecosystem we can build a set of tools that promote **Appi-ness**. + +## What we're not rethinking + +Many practices and technologies in cloud-native development are a success and don't need to be re-thought. + +- Radius makes is easy for application developers to adopt because it supports your existing containerized code, Dockerfiles, and Helm charts. +- We believe that [twelve-factor](https://12factor.net/) is still a great set of ideas and so any twelve-factor style application should be easy to use with Radius. +- We like infrastructure-as-code as for its repeatability and use it for both Recipes and application descriptions. +- There are plenty of great CI/CD systems, application delivery pipelines, and Gitops systems out there and Radius can work with any of them. + +## Open-source from the start + +We planned for Radius to be open-source from the start because we want to reach as many developers, organizations, and ecosystem partners as we can. Open-source can mean different things to different people. For Radius, open-source means that our source code is publicly available under an OSI-approved permissive license. It also means that the Radius project uses an neutral and open governance model to continue the evolution of Radius as a multi-cloud technology going forward. Anyone should be able to contribute to Radius, extend the platform, self-host Radius for internal use, or use it to build a business hosting other people's applications. + +We know from our conversations with enterprises that customization, extensibility, and a large ecosystem are key. Every organization is unique and will make different policy, workflow, and technology choices. Every large organization has critical internal technologies. Extensibility is the way to put those internal technologies on even-footing with the cloud. A large ecosystem of partners and integrations enables everyone to keep using the technologies they are already committed to. By participating in open-source, users have a direct channel to propose changes, give feedback, add features, or customize the version of Radius they use. Our commitment to open-source and neutral, open governance means any technology vendor can join the ecosystem and benefit from the level playing-field that's being created. diff --git a/docs/content/getting-started/index.md b/docs/content/getting-started/index.md index df61e6e65..e2425f0b7 100644 --- a/docs/content/getting-started/index.md +++ b/docs/content/getting-started/index.md @@ -14,7 +14,13 @@ This guide will show you how to quickly get started with Radius. You'll walk thr **Estimated time to complete: 10 min** -Diagram of the application and its resources +{{< image src="diagram.png" alt="Diagram of the application and its resources" width="500px" >}} + +{{< alert title="πŸš€ Run in a free GitHub Codespace" color="primary" >}} +The Radius getting-started guide can be [run **for free** in a GitHub Codespace](https://github.blog/changelog/2022-11-09-codespaces-for-free-and-pro-accounts/). Visit the following link to get started in seconds: + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/radius-project/samples) +{{< /alert >}} ## 1. Have your Kubernetes cluster handy @@ -67,7 +73,7 @@ In addition to starting Radius services in your Kubernetes cluster, this initial {{< rad file="snippets/app.bicep" embed=true markdownConfig="{linenos=table,linenostart=1}" >}} -> This file will run the `radius.azurecr.io/tutorial/webapp` image. This image is published by the Radius team to a public registry, you do not need to create it. +> This file will run the `ghcr.io/radius-project/samples/demo:latest` image. This image is published by the Radius team to a public registry, you do not need to create it. ## 4. Run the app @@ -85,7 +91,7 @@ This command: In your browser you should see the demo app: -Screenshot of the demo container +{{< image src="demo-screenshot.png" alt="Screenshot of the demo container" width=600px >}}

Congrats! You're running your first Radius app. When you're ready to move on to the next step, use CTRL+ C to exit the command. @@ -125,19 +131,19 @@ rad run app.bicep You should see the Radius Connections section with new environment variables added. The `demo` container now has connection information for Redis (`CONNECTION_REDIS_HOST`, `CONNECTION_REDIS_PORT`, etc.): -Screenshot of the demo container +{{< image src="demo-with-redis-screenshot.png" alt="Screenshot of the demo container" width=800px >}}

Navigate to the Todo List tab and test out the application. Using the Todo page will update the saved state in Redis: -Screenshot of the todolist +{{< image src="./images/demo-with-todolist.png" alt="Screenshot of the todolist" width=700px >}}

Press CTRL+ C when you are finished with the website. ## 7. View the application connections -Radius connections are more than just environment variables and configuration. You can also access the "application graph" and understand the connections within your application with the following command: +Radius Connections are more than just environment variables and configuration. You can also access the "application graph" and understand the connections within your application with the following command: ```bash rad app connections diff --git a/docs/content/getting-started/snippets/app-with-redis-snippets.bicep b/docs/content/getting-started/snippets/app-with-redis-snippets.bicep index b6625368c..bbc49d237 100644 --- a/docs/content/getting-started/snippets/app-with-redis-snippets.bicep +++ b/docs/content/getting-started/snippets/app-with-redis-snippets.bicep @@ -1,7 +1,7 @@ // Import the set of Radius resources (Applications.*) into Bicep import radius as radius -@description('The app ID of your Radius application. Set automatically by the rad CLI.') +@description('The app ID of your Radius Application. Set automatically by the rad CLI.') param application string //CONNECTION @@ -10,7 +10,7 @@ resource demo 'Applications.Core/containers@2023-10-01-preview' = { properties: { application: application container: { - image: 'radius.azurecr.io/tutorial/webapp:edge' + image: 'ghcr.io/radius-project/samples/demo:latest' ports: { web: { containerPort: 3000 @@ -27,7 +27,7 @@ resource demo 'Applications.Core/containers@2023-10-01-preview' = { //CONNECTION //REDIS -@description('The environment ID of your Radius application. Set automatically by the rad CLI.') +@description('The environment ID of your Radius Application. Set automatically by the rad CLI.') param environment string resource db 'Applications.Datastores/redisCaches@2023-10-01-preview' = { diff --git a/docs/content/getting-started/snippets/app-with-redis.bicep b/docs/content/getting-started/snippets/app-with-redis.bicep index 0fdf3f8d2..352ae5c22 100644 --- a/docs/content/getting-started/snippets/app-with-redis.bicep +++ b/docs/content/getting-started/snippets/app-with-redis.bicep @@ -1,7 +1,7 @@ // Import the set of Radius resources (Applications.*) into Bicep import radius as radius -@description('The app ID of your Radius application. Set automatically by the rad CLI.') +@description('The app ID of your Radius Application. Set automatically by the rad CLI.') param application string resource demo 'Applications.Core/containers@2023-10-01-preview' = { @@ -9,7 +9,7 @@ resource demo 'Applications.Core/containers@2023-10-01-preview' = { properties: { application: application container: { - image: 'radius.azurecr.io/tutorial/webapp:edge' + image: 'ghcr.io/radius-project/samples/demo:latest' ports: { web: { containerPort: 3000 diff --git a/docs/content/getting-started/snippets/app.bicep b/docs/content/getting-started/snippets/app.bicep index 95cd46417..5f976ec14 100644 --- a/docs/content/getting-started/snippets/app.bicep +++ b/docs/content/getting-started/snippets/app.bicep @@ -1,7 +1,7 @@ // Import the set of Radius resources (Applications.*) into Bicep import radius as radius -@description('The app ID of your Radius application. Set automatically by the rad CLI.') +@description('The app ID of your Radius Application. Set automatically by the rad CLI.') param application string resource demo 'Applications.Core/containers@2023-10-01-preview' = { @@ -9,7 +9,7 @@ resource demo 'Applications.Core/containers@2023-10-01-preview' = { properties: { application: application container: { - image: 'radius.azurecr.io/tutorial/webapp:edge' + image: 'ghcr.io/radius-project/samples/demo:latest' ports: { web: { containerPort: 3000 diff --git a/docs/content/guides/author-apps/_index.md b/docs/content/guides/author-apps/_index.md index 1a98f9892..e5bc51a70 100644 --- a/docs/content/guides/author-apps/_index.md +++ b/docs/content/guides/author-apps/_index.md @@ -2,6 +2,6 @@ type: docs title: "Authoring applications" linkTitle: "Authoring applications" -description: "Learn how to author a Radius application" +description: "Learn how to author a Radius Application" weight: 100 --- \ No newline at end of file diff --git a/docs/content/guides/author-apps/application/_index.md b/docs/content/guides/author-apps/application/_index.md index eb1f60cb3..66c8d4010 100644 --- a/docs/content/guides/author-apps/application/_index.md +++ b/docs/content/guides/author-apps/application/_index.md @@ -1,7 +1,7 @@ --- type: docs -title: "Radius applications" +title: "Radius Applications" linkTitle: "Applications" -description: "Learn about Radius applications" +description: "Learn about Radius Applications" weight: 100 --- \ No newline at end of file diff --git a/docs/content/guides/author-apps/application/overview/index.md b/docs/content/guides/author-apps/application/overview/index.md index f3cc83663..26d5edd71 100644 --- a/docs/content/guides/author-apps/application/overview/index.md +++ b/docs/content/guides/author-apps/application/overview/index.md @@ -1,22 +1,22 @@ --- type: docs -title: "Overview: Radius applications" +title: "Overview: Radius Applications" linkTitle: "Overview" -description: "Learn about Radius applications and how they bring all of your services, dependencies, and relationships together." +description: "Learn about Radius Applications and how they bring all of your services, dependencies, and relationships together." weight: 100 categories: "Overview" tags: ["applications"] --- -Diagram of an application +{{< image src="application.png" alt="Diagram of an application" width=350px >}} -A Radius application is the primary resource that brings all your "stuff" together. This can include services, dependencies, and relationships. Radius apps give you a single description and view into your entire application, and allow you to deploy and manage it easily. +A Radius Application is the primary resource that brings all your "stuff" together. This can include services, dependencies, and relationships. Radius apps give you a single description and view into your entire application, and allow you to deploy and manage it easily. ## Add portability to your application -Radius applications are designed to be cloud and platform agnostic. This means that you can define your application once, and deploy it to any cloud or platform that Radius supports. This allows you to easily move your application between clouds, or even between cloud and on-premises environments. Developers can define their requirements and dependencies (_Redis, SQL, Dapr, etc._) and operators can define the [environments]({{< ref "guides/deploy-apps/environments/overview" >}}) and [Recipes]({{< ref "guides/recipes/overview" >}}) that bind those requirements to the appropriate cloud resources. +Radius Applications are designed to be cloud and platform agnostic. This means that you can define your application once, and deploy it to any cloud or platform that Radius supports. This allows you to easily move your application between clouds, or even between cloud and on-premises environments. Developers can define their requirements and dependencies (_Redis, SQL, Dapr, etc._) and operators can define the [environments]({{< ref "guides/deploy-apps/environments/overview" >}}) and [Recipes]({{< ref "guides/recipes/overview" >}}) that bind those requirements to the appropriate cloud resources. -Diagram of portable resources binding to different clouds +{{< image src="portable-resources.png" alt="Diagram of portable resources binding to different clouds" width=600px >}} Learn more about portable resources in the [portable resources docs]({{< ref "guides/author-apps/portable-resources/overview" >}}) and [Dapr docs]({{< ref "guides/author-apps/dapr/overview" >}}) @@ -30,13 +30,13 @@ The Kubernetes namespace extension allows you to customize how all of the resour ### Kubernetes Metadata extension -The [Kubernetes Metadata extension]({{< ref "guides/operations/kubernetes/kubernetes-metadata">}}) enables you set and cascade Kubernetes metadata such as labels and Annotations on all the Kubernetes resources defined with in your Radius application. +The [Kubernetes Metadata extension]({{< ref "guides/operations/kubernetes/kubernetes-metadata">}}) enables you set and cascade Kubernetes metadata such as labels and Annotations on all the Kubernetes resources defined with in your Radius Application. ## Query and understand your application with the Radius Application Graph -Radius applications are more than just client-side configuration and automation, they also provide a server-side graph of your application. This graph can be queried and used to understand your application, and can be used to power other Radius features and custom tooling. Refer to the [API concept docs]({{< ref "api-concept" >}}) and [Postman How-To guide]({{< ref "guides/operations/control-plane/howto-postman" >}}) for more information on how to query the application graph. +Radius Applications are more than just client-side configuration and automation, they also provide a server-side graph of your application. This graph can be queried and used to understand your application, and can be used to power other Radius features and custom tooling. Refer to the [API concept docs]({{< ref "api-concept" >}}) and [Postman How-To guide]({{< ref "guides/operations/control-plane/howto-postman" >}}) for more information on how to query the application graph. -Diagram of the application graph +{{< image src="app-graph.png" alt="Diagram of the application graph" width=500px >}} ## Resource schema diff --git a/docs/content/guides/author-apps/application/overview/snippets/blank.bicep b/docs/content/guides/author-apps/application/overview/snippets/blank.bicep index d324ea9b9..bd50b2da0 100644 --- a/docs/content/guides/author-apps/application/overview/snippets/blank.bicep +++ b/docs/content/guides/author-apps/application/overview/snippets/blank.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The environment ID of your Radius application. Set automatically by the rad CLI.') +@description('The environment ID of your Radius Application. Set automatically by the rad CLI.') param environment string resource myapp 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/guides/author-apps/aws/howto-aws-resources/index.md b/docs/content/guides/author-apps/aws/howto-aws-resources/index.md index 7e4b93549..5aa3b5e4d 100644 --- a/docs/content/guides/author-apps/aws/howto-aws-resources/index.md +++ b/docs/content/guides/author-apps/aws/howto-aws-resources/index.md @@ -13,7 +13,7 @@ This how-to guide will show you: - How to model an AWS S3 resource in Bicep - How to use a sample application to interact with AWS S3 bucket - Screenshot of the sample application to interact with s3 bucket + {{< image src="s3appdiagram.png" alt="Screenshot of the sample application to interact with s3 bucket " width=400 >}} ## Prerequisites @@ -34,9 +34,9 @@ Create an EKS cluster by using the `eksctl` CLI. eksctl create cluster --name --region= ``` -## Step 2: Create a Radius environment with the AWS cloud provider +## Step 2: Create a Radius Environment with the AWS cloud provider -Create a [Radius environment]({{< ref "/guides/deploy-apps/environments/overview" >}}) where you will deploy your application. +Create a [Radius Environment]({{< ref "/guides/deploy-apps/environments/overview" >}}) where you will deploy your application. Run [`rad init --full`]({{< ref rad_init >}}) to initialize a new environment into your current kubectl context: @@ -92,13 +92,13 @@ This creates a container that will be deployed to your Kubernetes cluster. This 1. Visit [localhost:5234](http://localhost:5234/swagger/index.html) in your browser. This is a swagger doc for the sample application. You can use this to interact with the AWS S3 Bucket you created. For example, you can try to upload a file to the bucket via the `/upload` endpoint. - Screenshot of the sample application to interact with s3 bucket + {{< image src="s3app.png" alt="Screenshot of the sample application to interact with s3 bucket " width=900 >}} ## Step 6: Cleanup 1. When you're done with testing, you can use the rad CLI to [delete an environment]({{< ref rad_env_delete.md >}}) to delete all Radius resources running on the EKS Cluster. -2. Cleanup AWS Resources - AWS resources are not deleted when deleting a Radius environment, so make sure to delete all resources created in this reference app to prevent additional charges. You can delete these resources in the AWS Console or via the AWS CLI. Instructions to delete an AWS S3 Bucket are available [here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html). +2. Cleanup AWS Resources - AWS resources are not deleted when deleting a Radius Environment, so make sure to delete all resources created in this reference app to prevent additional charges. You can delete these resources in the AWS Console or via the AWS CLI. Instructions to delete an AWS S3 Bucket are available [here](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html). ## Troubleshooting diff --git a/docs/content/guides/author-apps/aws/howto-aws-resources/snippets/app.bicep b/docs/content/guides/author-apps/aws/howto-aws-resources/snippets/app.bicep index f298336a1..0673c98a5 100644 --- a/docs/content/guides/author-apps/aws/howto-aws-resources/snippets/app.bicep +++ b/docs/content/guides/author-apps/aws/howto-aws-resources/snippets/app.bicep @@ -12,7 +12,7 @@ resource s3 'AWS.S3/Bucket@default' = { } } -@description('The environment ID of your Radius application. Set automatically by the rad CLI.') +@description('The environment ID of your Radius Application. Set automatically by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { @@ -45,7 +45,7 @@ resource frontend 'Applications.Core/containers@2023-10-01-preview' = { AWS_SECRET_ACCESS_KEY: aws_secret_access_key AWS_DEFAULT_REGION: aws_region } - image: 'radius.azurecr.io/reference-apps/aws:edge' + image: 'ghcr.io/radius-project/samples/aws:latest' } } } diff --git a/docs/content/guides/author-apps/aws/howto-aws-resources/snippets/s3app.bicep b/docs/content/guides/author-apps/aws/howto-aws-resources/snippets/s3app.bicep index b091624fa..53f425470 100644 --- a/docs/content/guides/author-apps/aws/howto-aws-resources/snippets/s3app.bicep +++ b/docs/content/guides/author-apps/aws/howto-aws-resources/snippets/s3app.bicep @@ -13,7 +13,7 @@ resource s3 'AWS.S3/Bucket@default' = { } //S3APP -@description('The environment ID of your Radius application. Set automatically by the rad CLI.') +@description('The environment ID of your Radius Application. Set automatically by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { @@ -46,7 +46,7 @@ resource frontend 'Applications.Core/containers@2023-10-01-preview' = { AWS_SECRET_ACCESS_KEY: aws_secret_access_key AWS_DEFAULT_REGION: aws_region } - image: 'radius.azurecr.io/reference-apps/aws:edge' + image: 'ghcr.io/radius-project/samples/aws:latest' } } } diff --git a/docs/content/guides/author-apps/aws/overview/index.md b/docs/content/guides/author-apps/aws/overview/index.md index 705f30f3b..a00005157 100644 --- a/docs/content/guides/author-apps/aws/overview/index.md +++ b/docs/content/guides/author-apps/aws/overview/index.md @@ -8,13 +8,13 @@ categories: "Overview" tags: ["AWS"] --- -Radius applications are able to connect to and leverage AWS resource with Bicep. Simply model your AWS resources in Bicep and connect to them from Radius resources. +Radius Applications are able to connect to and leverage AWS resource with Bicep. Simply model your AWS resources in Bicep and connect to them from Radius resources. Radius uses the [AWS Cloud Control API](https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/what-is-cloudcontrolapi.html) to interact with AWS resources. This means that you can model your AWS resources in Bicep and Radius will be able to deploy and manage them. ## Configure an AWS Provider -The AWS provider allows you to deploy and connect to AWS resources from a Radius environment on an EKS cluster. To configure an AWS provider, you can follow the documentation [here]({{< ref "/guides/operations/providers/howto-aws-provider" >}}). +The AWS provider allows you to deploy and connect to AWS resources from a Radius Environment on an EKS cluster. To configure an AWS provider, you can follow the documentation [here]({{< ref "/guides/operations/providers/howto-aws-provider" >}}). ## Example diff --git a/docs/content/guides/author-apps/aws/overview/snippets/aws.bicep b/docs/content/guides/author-apps/aws/overview/snippets/aws.bicep index d2717c515..906c4fc52 100644 --- a/docs/content/guides/author-apps/aws/overview/snippets/aws.bicep +++ b/docs/content/guides/author-apps/aws/overview/snippets/aws.bicep @@ -41,7 +41,7 @@ resource frontend 'Applications.Core/containers@2023-10-01-preview' = { AWS_SECRET_ACCESS_KEY: aws_secret_access_key AWS_DEFAULT_REGION: aws_region } - image: 'radius.azurecr.io/reference-apps/aws:edge' + image: 'ghcr.io/radius-project/samples/aws:latest' } } } diff --git a/docs/content/guides/author-apps/azure/howto-azure-resources/index.md b/docs/content/guides/author-apps/azure/howto-azure-resources/index.md index 88ed0e843..a21fb0a73 100644 --- a/docs/content/guides/author-apps/azure/howto-azure-resources/index.md +++ b/docs/content/guides/author-apps/azure/howto-azure-resources/index.md @@ -11,7 +11,7 @@ tags: ["Azure","containers"] This how-to guide will provide an overview of how to: -- Setup a Radius environment with an identity provider +- Setup a Radius Environment with an identity provider - Define a connection to an Azure resource with Azure AD role-based access control (RBAC) assignments - Leverage Azure managed identities to connect to an Azure resource @@ -19,9 +19,10 @@ The steps below will showcase a "rad-ified" version of the existing [Azure AD wo ## Prerequisites -- [rad CLI]({{< ref getting-started >}}) installed on your machine -- [Supported Kubernetes cluster]({{< ref "guides/operations/kubernetes" >}}) -- [Azure AD Workload Identity](https://azure.github.io/azure-workload-identity/docs/installation.html) installed in your cluster +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Setup a supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) +- [Azure AD Workload Identity](https://azure.github.io/azure-workload-identity/docs/installation.html) installed in your cluster, including the [Mutating Admission Webhook](https://azure.github.io/azure-workload-identity/docs/installation/mutating-admission-webhook.html) ## Step 1: Initialize Radius @@ -31,15 +32,15 @@ Begin by running [`rad init --full`]({{< ref rad_init >}}). Make sure to configu rad init --full ``` -## Step 2: Define a Radius environment +## Step 2: Define a Radius Environment -Create a file named `app.bicep` and define a Radius environment with [identity property]({{< ref "/guides/deploy-apps/environments/overview" >}}) set. This configures your environment to use your Azure AD workload identity installation with your cluster's OIDC endpoint: +Create a file named `app.bicep` and define a Radius Environment with [identity property]({{< ref "/guides/deploy-apps/environments/overview" >}}) set. This configures your environment to use your Azure AD workload identity installation with your cluster's OIDC endpoint: {{< rad file="snippets/container-wi.bicep" embed=true marker="//ENVIRONMENT">}} ## Step 3: Define an app and a container -Add a Radius application, a Radius [container]({{< ref "guides/author-apps/containers" >}}), and an Azure Key Vault to your `app.bicep` file. Note the connection from the container to the Key Vault, with an iam property set for the Azure AD RBAC role: +Add a Radius Application, a Radius [container]({{< ref "guides/author-apps/containers" >}}), and an Azure Key Vault to your `app.bicep` file. Note the connection from the container to the Key Vault, with an iam property set for the Azure AD RBAC role: {{< rad file="snippets/container-wi.bicep" embed=true marker="//CONTAINER" >}} diff --git a/docs/content/guides/author-apps/azure/overview/index.md b/docs/content/guides/author-apps/azure/overview/index.md index 90aeb3100..1c944603b 100644 --- a/docs/content/guides/author-apps/azure/overview/index.md +++ b/docs/content/guides/author-apps/azure/overview/index.md @@ -8,11 +8,11 @@ categories: "Overview" tags: ["Azure"] --- -Radius applications are able to connect to and leverage every Azure resource with Bicep. Simply model your Azure resources in Bicep and add a connection from your Radius resources. +Radius Applications are able to connect to and leverage every Azure resource with Bicep. Simply model your Azure resources in Bicep and add a connection from your Radius resources. ## Configure an Azure Provider -The Azure provider allows you to deploy and connect to Azure resources from a Radius environment on any of the [supported clusters]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}). To configure an Azure provider, you can follow the documentation [here]({{< ref "/guides/operations/providers/howto-azure-provider" >}}). +The Azure provider allows you to deploy and connect to Azure resources from a Radius Environment on any of the [supported clusters]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}). To configure an Azure provider, you can follow the documentation [here]({{< ref "/guides/operations/providers/howto-azure-provider" >}}). ## Resource library diff --git a/docs/content/guides/author-apps/containers/_index.md b/docs/content/guides/author-apps/containers/_index.md index 8c99dea1f..89add960a 100644 --- a/docs/content/guides/author-apps/containers/_index.md +++ b/docs/content/guides/author-apps/containers/_index.md @@ -2,6 +2,6 @@ type: docs title: "Radius containers" linkTitle: "Containers" -description: "Learn how to model and run container workloads in your Radius application" +description: "Learn how to model and run container workloads in your Radius Application" weight: 200 --- diff --git a/docs/content/guides/author-apps/containers/howto-connect-dependencies/demo-with-redis-screenshot.png b/docs/content/guides/author-apps/containers/howto-connect-dependencies/demo-with-redis-screenshot.png new file mode 100644 index 000000000..9aa700ed3 Binary files /dev/null and b/docs/content/guides/author-apps/containers/howto-connect-dependencies/demo-with-redis-screenshot.png differ diff --git a/docs/content/guides/author-apps/containers/howto-connect-dependencies/index.md b/docs/content/guides/author-apps/containers/howto-connect-dependencies/index.md new file mode 100644 index 000000000..9cdf24527 --- /dev/null +++ b/docs/content/guides/author-apps/containers/howto-connect-dependencies/index.md @@ -0,0 +1,91 @@ +--- +type: docs +title: "How-To: Connect to dependencies" +linkTitle: "Connect to dependencies" +description: "Learn how to connect to dependencies in your application via connections" +weight: 200 +categories: "How-To" +tags: ["containers"] +--- + +This how-to guide will teach how to connect to your dependencies via [connections]({{< ref "guides/author-apps/containers#connections" >}}) + +## Prerequisites + +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Radius environment]({{< ref "installation#step-3-initialize-radius" >}}) + +## Step 1: View the container definition + +Open the `app.bicep` and view the [container]({{< ref "guides/author-apps/containers" >}}): + +{{< rad file="snippets/app.bicep" embed=true >}} + +## Step 2: Add a Redis cache as a dependency + +Next, add to `app.bicep` a [Redis cache]({{< ref "/guides/author-apps/portable-resources/overview" >}}), leveraging the default "local-dev" Recipe: + +{{< rad file="snippets/app-with-redis.bicep" embed=true marker="//DB" >}} + +## Step 3: Connect to the Redis cache + +Connections from a container to a resource result in environment variables for connection information automatically being set on the container. Update your container definition to add a connection to the new Redis cache: + +{{< rad file="snippets/app-with-redis.bicep" embed=true marker="//CONTAINER" markdownConfig="{linenos=table,hl_lines=[\"13-17\"],linenostart=7}" >}} + +## Step 4: Deploy your app + +1. Run your application in your environment: + + ```bash + rad run ./app.bicep -a demo + ``` +1. Visit [localhost:3000](http://localhost:3000) in your browser. You should see the following page, now showing injected environment variables: + + {{< image src="./demo-with-redis-screenshot.png" alt="Screenshot of the demo app with all environment variables" width=1000px >}} + +## Step 5: View the Application Connections + +Radius Connections are more than just environment variables and configuration. You can also access the "application graph" and understand the connections within your application with the following command: + +```bash +rad app connections -a demo +``` + +You should see the following output, detailing the connections between the `demo` container and the `db` Redis cache, along with information about the underlying Kubernetes resources running the app: + +``` +Displaying application: demo + +Name: demo (Applications.Core/containers) +Connections: + demo -> db (Applications.Datastores/redisCaches) +Resources: + demo (kubernetes: apps/Deployment) + demo (kubernetes: core/Secret) + demo (kubernetes: core/Service) + demo (kubernetes: core/ServiceAccount) + demo (kubernetes: rbac.authorization.k8s.io/Role) + demo (kubernetes: rbac.authorization.k8s.io/RoleBinding) + +Name: db (Applications.Datastores/redisCaches) +Connections: + demo (Applications.Core/containers) -> db +Resources: + redis-r5tcrra3d7uh6 (kubernetes: apps/Deployment) + redis-r5tcrra3d7uh6 (kubernetes: core/Service) +``` + +## Cleanup + +Run `rad app delete` to cleanup your Radius application, container, and Redis cache: + +```bash +rad app delete -a demo +``` + +## Further reading + +- [Connections]({{< ref "guides/author-apps/containers/overview#connections" >}}) +- [Container schema]({{< ref container-schema >}}) diff --git a/docs/content/guides/author-apps/containers/howto-connect-dependencies/snippets/app-with-redis.bicep b/docs/content/guides/author-apps/containers/howto-connect-dependencies/snippets/app-with-redis.bicep new file mode 100644 index 000000000..f1f91549d --- /dev/null +++ b/docs/content/guides/author-apps/containers/howto-connect-dependencies/snippets/app-with-redis.bicep @@ -0,0 +1,40 @@ +// Import the set of Radius resources (Applications.*) into Bicep +import radius as radius + +@description('The app ID of your Radius Application. Set automatically by the rad CLI.') +param application string + +//CONTAINER +resource demo 'Applications.Core/containers@2023-10-01-preview' = { + name: 'demo' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + connections: { + redis: { + source: db.id + } + } + } +} +//CONTAINER + +//DB +@description('The env ID of your Radius Environment. Set automatically by the rad CLI.') +param environment string + +resource db 'Applications.Datastores/redisCaches@2023-10-01-preview' = { + name: 'db' + properties: { + application: application + environment: environment + } +} +//DB diff --git a/docs/content/guides/author-apps/containers/howto-connect-dependencies/snippets/app.bicep b/docs/content/guides/author-apps/containers/howto-connect-dependencies/snippets/app.bicep new file mode 100644 index 000000000..82919de41 --- /dev/null +++ b/docs/content/guides/author-apps/containers/howto-connect-dependencies/snippets/app.bicep @@ -0,0 +1,19 @@ +import radius as rad + +@description('The app ID of your Radius application. Set automatically by the rad CLI.') +param application string + +resource demo 'Applications.Core/containers@2023-10-01-preview' = { + name: 'demo' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + } +} diff --git a/docs/content/guides/author-apps/containers/howto-environment-variables/icon.png b/docs/content/guides/author-apps/containers/howto-environment-variables/icon.png deleted file mode 100644 index b2fcdc82b..000000000 Binary files a/docs/content/guides/author-apps/containers/howto-environment-variables/icon.png and /dev/null differ diff --git a/docs/content/guides/author-apps/containers/howto-environment-variables/index.md b/docs/content/guides/author-apps/containers/howto-environment-variables/index.md deleted file mode 100644 index 03a06ce9b..000000000 --- a/docs/content/guides/author-apps/containers/howto-environment-variables/index.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -type: docs -title: "How-To: Set environment variables on a container" -linkTitle: "Set Env vars" -description: "Learn how to set environment variables manually and through connections" -weight: 400 -slug: "environment-variables" -categories: "How-To" -tags: ["containers"] ---- - -This how-to guide will teach you: - -1. How to set environment variables manually -1. How to set environment variables through connections - -## Prerequisites - -- [Radius CLI]({{< ref "getting-started" >}}) -- [Radius environment]({{< ref "/guides/deploy-apps/environments/overview" >}}) - -## Step 1: Model an app and container - -Create a new file named `app.bicep` and add an application and a [container]({{< ref "guides/author-apps/containers" >}}): - -{{< rad file="snippets/1-app.bicep" embed=true >}} - -The image `radius.azurecr.io/quickstarts/envvars` simply prints out the environment variables that are set on the container. - -## Step 2: Manually set environment variables - -Add an `env` property which will contain a list of environment variables to set. Within `env` set the `FOO` environment variable to the string `bar` and the `BAZ` environment variable to the value of `app.name`: - -{{< rad file="snippets/2-app.bicep" embed=true marker="//CONTAINER" >}} - -## Step 3: Deploy your app - -1. Deploy your application to your environment: - - ```bash - rad deploy ./app.bicep - ``` -1. Port-forward the container to your machine with [`rad resource expose`]({{< ref rad_resource_expose >}}): - - ```bash - rad resource expose containers mycontainer -a myapp --port 5000 - ``` -1. Visit [localhost:5000](http://localhost:5000) in your browser. You should see the following page: - - Screenshot of the app printing the environment variables - - Here you can see the environment variables `FOO` and `BAZ`, with their accompanying values. - -## Step 4: Add a Mongo database - -Next, add to `app.bicep` a [Mongo database]({{< ref portable-resources >}}), leveraging the default "dev" Recipe: - -{{< rad file="snippets/3-app.bicep" embed=true marker="//LINK" >}} - -## Step 5: Connect to the Mongo database - -Connections from a container to a resource result in environment variables for connection information automatically being set on the container. Update your container definition to add a connection to the new Mongo database: - -{{< rad file="snippets/3-app.bicep" embed=true marker="//CONTAINER" >}} - -## Step 6: Deploy your app - -1. Deploy your application to your environment: - - ```bash - rad deploy ./app.bicep - ``` -1. Port-forward the container to your machine: - - ```bash - rad resource expose containers mycontainer -a myapp --port 5000 - ``` -1. Visit [localhost:5000](http://localhost:5000) in your browser. You should see the following page, now showing injected environment variables: - - Screenshot of the app printing all the environment variables - -## Cleanup - -Run `rad app delete` to cleanup your Radius application, container, and link: - -```bash -rad app delete -a myapp -``` diff --git a/docs/content/guides/author-apps/containers/howto-environment-variables/screenshot-all.jpg b/docs/content/guides/author-apps/containers/howto-environment-variables/screenshot-all.jpg deleted file mode 100644 index c4b6b6b75..000000000 Binary files a/docs/content/guides/author-apps/containers/howto-environment-variables/screenshot-all.jpg and /dev/null differ diff --git a/docs/content/guides/author-apps/containers/howto-environment-variables/screenshot.jpg b/docs/content/guides/author-apps/containers/howto-environment-variables/screenshot.jpg deleted file mode 100644 index 3d2fff4fd..000000000 Binary files a/docs/content/guides/author-apps/containers/howto-environment-variables/screenshot.jpg and /dev/null differ diff --git a/docs/content/guides/author-apps/containers/howto-environment-variables/snippets/1-app.bicep b/docs/content/guides/author-apps/containers/howto-environment-variables/snippets/1-app.bicep deleted file mode 100644 index 1b2c4b40a..000000000 --- a/docs/content/guides/author-apps/containers/howto-environment-variables/snippets/1-app.bicep +++ /dev/null @@ -1,20 +0,0 @@ -import radius as rad - -param environment string - -resource app 'Applications.Core/applications@2023-10-01-preview' = { - name: 'myapp' - properties: { - environment: environment - } -} - -resource container 'Applications.Core/containers@2023-10-01-preview' = { - name: 'mycontainer' - properties: { - application: app.id - container: { - image: 'radius.azurecr.io/quickstarts/envvars:edge' - } - } -} diff --git a/docs/content/guides/author-apps/containers/howto-environment-variables/snippets/2-app.bicep b/docs/content/guides/author-apps/containers/howto-environment-variables/snippets/2-app.bicep deleted file mode 100644 index 769f2cbf4..000000000 --- a/docs/content/guides/author-apps/containers/howto-environment-variables/snippets/2-app.bicep +++ /dev/null @@ -1,26 +0,0 @@ -import radius as rad - -param environment string - -resource app 'Applications.Core/applications@2023-10-01-preview' = { - name: 'myapp' - properties: { - environment: environment - } -} - -//CONTAINER -resource container 'Applications.Core/containers@2023-10-01-preview' = { - name: 'mycontainer' - properties: { - application: app.id - container: { - image: 'radius.azurecr.io/quickstarts/envvars:edge' - env: { - FOO: 'BAR' - BAZ: app.name - } - } - } -} -//CONTAINER diff --git a/docs/content/guides/author-apps/containers/howto-environment-variables/snippets/3-app.bicep b/docs/content/guides/author-apps/containers/howto-environment-variables/snippets/3-app.bicep deleted file mode 100644 index 85a561da6..000000000 --- a/docs/content/guides/author-apps/containers/howto-environment-variables/snippets/3-app.bicep +++ /dev/null @@ -1,42 +0,0 @@ -import radius as rad - -param environment string - -resource app 'Applications.Core/applications@2023-10-01-preview' = { - name: 'myapp' - properties: { - environment: environment - } -} - -//CONTAINER -resource container 'Applications.Core/containers@2023-10-01-preview' = { - name: 'mycontainer' - properties: { - application: app.id - container: { - image: 'radius.azurecr.io/quickstarts/envvars:edge' - env: { - FOO: 'BAR' - BAZ: app.name - } - } - connections: { - myconnection: { - source: mongoDatabase.id - } - } - } -} -//CONTAINER - -//LINK -resource mongoDatabase 'Applications.Datastores/mongoDatabases@2023-10-01-preview' = { - name: 'mongo-db' - properties: { - environment: environment - application: app.id - // Use the "default" Recipe to provision the MongoDB - } -} -//LINK diff --git a/docs/content/guides/author-apps/containers/howto-keyvault-volume/index.md b/docs/content/guides/author-apps/containers/howto-keyvault-volume/index.md index 85dd76afd..97b054876 100644 --- a/docs/content/guides/author-apps/containers/howto-keyvault-volume/index.md +++ b/docs/content/guides/author-apps/containers/howto-keyvault-volume/index.md @@ -11,14 +11,15 @@ tags: ["Azure","containers"] This how-to guide will provide an overview of how to: -- Setup a Radius environment with an identity provider +- Setup a Radius Environment with an identity provider - Define a connection to an Azure resource with Azure AD role-based access control (RBAC) assignments - Leverage Azure managed identities to connect to an Azure resource - Mount a Key vault as a volume to a container ## Prerequisites -- [rad CLI]({{< ref getting-started >}}) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) - [Supported Kubernetes cluster]({{< ref "guides/operations/kubernetes" >}}) - [Azure AD Workload Identity](https://azure.github.io/azure-workload-identity/docs/installation.html) installed on your cluster - [Azure Keyvault Provider](https://azure.github.io/secrets-store-csi-driver-provider-azure/docs/getting-started/installation/) @@ -32,15 +33,15 @@ Begin by running [`rad init --full`]({{< ref rad_init >}}). Make sure to configu rad init --full ``` -## Step 2: Define a Radius environment +## Step 2: Define a Radius Environment -Create a file named `app.bicep` and define a Radius environment with the identity property set: +Create a file named `app.bicep` and define a Radius Environment with the identity property set: {{< rad file="snippets/keyvault-wi.bicep" embed=true marker="//ENVIRONMENT">}} ## Step 3: Define an app, Key Vault, and volume -Add a Radius application, an Azure Key Vault, and a Radius volume which uses the Key Vault to your `app.bicep` file: +Add a Radius Application, an Azure Key Vault, and a Radius volume which uses the Key Vault to your `app.bicep` file: {{< rad file="snippets/keyvault-wi.bicep" embed=true marker="//APP" >}} diff --git a/docs/content/guides/author-apps/containers/howto-volumes/index.md b/docs/content/guides/author-apps/containers/howto-volumes/index.md index 46ff231c8..0be989c3f 100644 --- a/docs/content/guides/author-apps/containers/howto-volumes/index.md +++ b/docs/content/guides/author-apps/containers/howto-volumes/index.md @@ -15,16 +15,17 @@ This how-to guide will provide an overview of how to: ## Prerequisites -- [rad CLI]({{< ref getting-started >}}) -- [Radius environment]({{< ref "/guides/deploy-apps/environments/overview" >}}) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Radius environment]({{< ref "installation#step-3-initialize-radius" >}}) ## Step 1: Define an app and a container -Begin by creating a file named `app.bicep` with a Radius application and [container]({{< ref "guides/author-apps/containers" >}}): +Begin by creating a file named `app.bicep` with a Radius Application and [container]({{< ref "guides/author-apps/containers" >}}): {{< rad file="snippets/1-app.bicep" embed=true >}} -The `quickstarts/volumes` container will display the status and contents of the `/tmpdir` directory within the container. +The `samples/volumes` container will display the status and contents of the `/tmpdir` directory within the container. ## Step 2: Deploy the app and container @@ -38,9 +39,9 @@ The `quickstarts/volumes` container will display the status and contents of the ```bash rad resource expose containers mycontainer -a myapp --port 5000 ``` -1. You should see a message warning that the directory `/tmpdir` does not exist: +1. Visit [localhost:5000](http://localhost:5000) in your browser. You should see a message warning that the directory `/tmpdir` does not exist: - Screeshot of container showing that the tmp directory does not exist + {{< image src="screenshot-error.jpg" width=500px alt="Screenshot of container showing that the tmp directory does not exist" >}} ## Step 3: Add an ephemeral volume @@ -64,10 +65,10 @@ Within the `container.volume` property, add a new volume named `temp` and config 1. Visit [localhost:5000](http://localhost:5000) in your browser. You should see the contents of `/tmpdir`, showing an empty directory. - Screeshot of container showing that the tmp directory has no items + {{< image src="screenshot-empty.jpg" width=500px alt="Screenshot of container showing that the tmp directory has no items" >}} 1. Press the `Create file` button to generate a new file in the directory, such as `test.txt`: - Screeshot of container showing files being created + {{< image src="screenshot.jpg" width=400px alt="Screenshot of container showing files being created" >}} 1. Done! You've now learned how to mount an ephemeral volume ## Cleanup diff --git a/docs/content/guides/author-apps/containers/howto-volumes/snippets/1-app.bicep b/docs/content/guides/author-apps/containers/howto-volumes/snippets/1-app.bicep index 97e9dd7a7..898371cb6 100644 --- a/docs/content/guides/author-apps/containers/howto-volumes/snippets/1-app.bicep +++ b/docs/content/guides/author-apps/containers/howto-volumes/snippets/1-app.bicep @@ -14,7 +14,7 @@ resource container 'Applications.Core/containers@2023-10-01-preview' = { properties: { application: app.id container: { - image: 'radius.azurecr.io/quickstarts/volumes:edge' + image: 'ghcr.io/radius-project/samples/volumes:latest' } } } diff --git a/docs/content/guides/author-apps/containers/howto-volumes/snippets/2-app.bicep b/docs/content/guides/author-apps/containers/howto-volumes/snippets/2-app.bicep index e470e0d02..5bb5398d3 100644 --- a/docs/content/guides/author-apps/containers/howto-volumes/snippets/2-app.bicep +++ b/docs/content/guides/author-apps/containers/howto-volumes/snippets/2-app.bicep @@ -15,7 +15,7 @@ resource container 'Applications.Core/containers@2023-10-01-preview' = { properties: { application: app.id container: { - image: 'radius.azurecr.io/quickstarts/volumes:edge' + image: 'ghcr.io/radius-project/samples/volumes:latest' volumes: { tmp: { kind: 'ephemeral' diff --git a/docs/content/guides/author-apps/containers/overview/index.md b/docs/content/guides/author-apps/containers/overview/index.md index 60821eb35..bbf5e125a 100644 --- a/docs/content/guides/author-apps/containers/overview/index.md +++ b/docs/content/guides/author-apps/containers/overview/index.md @@ -2,15 +2,15 @@ type: docs title: "Overview: Radius containers" linkTitle: "Overview" -description: "Learn how to model and run container workloads in your Radius application" +description: "Learn how to model and run container workloads in your Radius Application" weight: 100 categories: "Overview" tags: ["containers"] --- -A Radius container enables you to run a container workload as part of your application across different platforms and runtimes. Your container can be a frontend UI, a backend API, a database, or any other container you need to run as part of your app. Plus, with Radius connections, you can easily connect your container to other resources in your application, such as databases, message queues, and more and automatically configure your container with identity, secrets, and other configuration. +A Radius container enables you to run a container workload as part of your application across different platforms and runtimes. Your container can be a frontend UI, a backend API, a database, or any other container you need to run as part of your app. Plus, with Radius Connections, you can easily connect your container to other resources in your application, such as databases, message queues, and more and automatically configure your container with identity, secrets, and other configuration. -Container graphic +{{< image src="containers-splash.png" alt="Container graphic" width=300px >}} > Adding a container and want to jump to the reference docs? Check out the [container resource schema]({{< ref "container-schema" >}}). @@ -42,7 +42,7 @@ Radius currently supports the following Kubernetes resource types for the `base` ##### Pod patching -You can also "patch" the Kubernetes containers created and deployed by Radius using [PodSpec](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec) definitions. This allows for setting Kubernetes-specific configurations, as well as overriding Radius behaviors, which means that you may access all Kubernetes Pod features, even if they are not supported by Radius. +You can also "patch" the Kubernetes containers created and deployed by Radius using [PodSpec](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec) definitions. This allows for setting Kubernetes-specific configurations, as well as overriding Radius behaviors, which means that you may access all Kubernetes Pod features, even if they are not supported by Radius. For more information on how to patch Kubernetes pods, refer to the [Kubernetes pod patching guide]({{< ref "guides/author-apps/kubernetes/how-to-patch-pod" >}}). ## Container definition @@ -103,7 +103,9 @@ For example, adding a connection called `database` that connects to a MongoDB re | `CONNECTION_DATABASE_USERNAME` | Username of the target database | | `CONNECTION_DATABASE_PASSWORD` | Password of the target database | -Alternatively, if you already have another convention you would like to follow or if you just prefer to be explicit, you may ignore the values generated by a connection and instead override it by setting your own environment variable values. Refer to the [environment variables how-to guide]({{< ref howto-environment-variables >}}) for more details. +Alternatively, if you already have another convention you would like to follow or if you just prefer to be explicit, you may ignore the values generated by a connection and instead override it by setting your own environment variable values. + + ## Extensions diff --git a/docs/content/guides/author-apps/dapr/overview/index.md b/docs/content/guides/author-apps/dapr/overview/index.md index d81a23dfb..bdfad1fe4 100644 --- a/docs/content/guides/author-apps/dapr/overview/index.md +++ b/docs/content/guides/author-apps/dapr/overview/index.md @@ -20,7 +20,7 @@ Follow the [Dapr installation instructions](https://docs.dapr.io/operations/host A [Dapr sidecar](https://docs.dapr.io/concepts/dapr-services/sidecar/) allows your services to interact with Dapr building blocks. It is required if your service leverages Dapr. -Diagram of the Dapr sidecar
+{{< image src="dapr-sidecar.png" style="width:600px" alt="Diagram of the Dapr sidecar" >}}
You can easily add the Dapr sidecar to your [Containers]({{< ref "guides/author-apps/containers" >}}) using a Dapr sidecar extension: @@ -38,7 +38,7 @@ Your container can now interact with the sidecar using the Dapr [building block Dapr resources make it easy to model and configure [Dapr building block APIs](https://docs.dapr.io/developing-applications/building-blocks/). Simply specify the building block and the backing resource, and Radius will apply the accompanying Dapr component configuration. -Diagram of all the Dapr building blocks
+{{< image src="dapr-buildingblocks.png" style="width:1000px" alt="Diagram of all the Dapr building blocks" >}}
Model your building blocks as resources: diff --git a/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/demoapp-howtopatchpod.png b/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/demoapp-howtopatchpod.png new file mode 100644 index 000000000..4d3330752 Binary files /dev/null and b/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/demoapp-howtopatchpod.png differ diff --git a/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/index.md b/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/index.md new file mode 100644 index 000000000..5a4c58e32 --- /dev/null +++ b/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/index.md @@ -0,0 +1,137 @@ +--- +type: docs +title: "How-To: Patch Kubernetes resources using PodSpec" +linkTitle: "Patch using PodSpec" +description: "Learn how to patch Kubernetes resources using PodSpec definitions" +weight: 300 +slug: 'patch-podspec' +categories: "How-To" +tags: ["containers","Kubernetes"] +--- + +This how-to guide will provide an overview of how to: + +- Patch Radius-created Kubernetes resources using [PodSpec](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec) definitions + +## Prerequisites + +- [rad CLI]({{< ref getting-started >}}) +- [Radius initialized with `rad init`]({{< ref howto-environment >}}) +- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) + +## Step 1: Define a container + +Begin by creating a file named `app.bicep` with a Radius [container]({{< ref "guides/author-apps/containers" >}}): + +{{< rad file="snippets/patch-container.bicep" embed=true >}} + +## Step 2: Deploy the app and container + +1. Deploy and run your app: + + ```bash + rad run ./app.bicep -a demo + ``` + + Once the deployment completes successfully, you should see the following confirmation message along with some system logs: + + ``` + Deployment Complete + + Resources: + demo Applications.Core/applications + demo Applications.Core/containers + + Starting log stream... + + + demo-df76d886c-sngm8 β€Ί demo + demo-df76d886c-sngm8 demo Using in-memory store: no connection string found + demo-df76d886c-sngm8 demo Server is running at http://localhost:3000 + demo-df76d886c-sngm8 demo [port-forward] connected from localhost:3000 -> ::3000 + ``` + + Access the application by opening [http://localhost:3000](http://localhost:3000) in a browser, where you should see the demo app: + + Screenshot of Radius Demo app + +
When you're ready to move on to the next step, use `CTRL` + `C` to exit the command. + +2. Run the command below, which will list the pods in your Kubernetes cluster, using the `-o` flag to specify the relevant information to output: + + + ```bash + kubectl get pods -A -l app.kubernetes.io/name=demo -o custom-columns=POD:.metadata.name,STATUS:.status.phase,CONTAINER_NAMES:spec.containers[:].name,CONTAINER_IMAGES:spec.containers[:].image + ``` + + You should see output confirming that a single container named `demo` was deployed and is running in your pod, similar to the following: + + ``` + POD STATUS CONTAINER_NAMES CONTAINER_IMAGES + demo-df76d886c-9p4gv Running demo ghcr.io/radius-project/samples/demo:latest + ``` + +## Step 3: Add a PodSpec to the container definition + +Add the following [`runtimes`]({{< ref "reference/resource-schema/core-schema/container-schema#runtimes" >}}) configuration to the container definition in your `app.bicep` file. This allows you to punch through the Radius abstraction and directly apply any part of the Kubernetes PodSpec. In this example you're adding an additional sidecar container: + +{{< rad file="snippets/patch-runtime.bicep" embed=true markdownConfig="{linenos=table,hl_lines=[\"25-37\"]}" >}} + +> Remember to save your `app.bicep` file after you've made the above changes. + +## Step 4: Redeploy your app with the PodSpec added + +1. Deploy and run your app again: + + ```bash + rad run ./app.bicep -a demo + ``` + + Once the deployment completes successfully, you should see the same deployment completion confirmation message as before, but this time with some system logs from `log-collector` streaming to your console output: + + ``` + Starting log stream... + + + demo-547d7dc77f-nmqpk β€Ί log-collector + + demo-547d7dc77f-nmqpk β€Ί demo + demo-547d7dc77f-nmqpk log-collector Fluent Bit v2.1.8 + demo-547d7dc77f-nmqpk log-collector * Copyright (C) 2015-2022 The Fluent Bit Authors + demo-547d7dc77f-nmqpk log-collector * Fluent Bit is a CNCF sub-project under the umbrella of Fluentd + demo-547d7dc77f-nmqpk log-collector * https://fluentbit.io + demo-547d7dc77f-nmqpk log-collector + ``` + + Access the application by opening [http://localhost:3000](http://localhost:3000) in a browser, where you should see the demo app again unchanged from before: + + Screenshot of Radius Demo app + +
When you're ready to move on to the next step, use `CTRL` + `C` to exit the command. + +2. Run the command below, which will list the pods in your Kubernetes cluster, using the `-o` flag to specify the relevant information to output: + + ```bash + kubectl get pods -A -l app.kubernetes.io/name=demo -o custom-columns=POD:.metadata.name,STATUS:.status.phase,CONTAINER_NAMES:spec.containers[:].name,CONTAINER_IMAGES:spec.containers[:].image + ``` + + You should now see in the output the original `demo` app container as before, but also an additional `log-collector` container that is running in your pod, similar to the following: + + ``` + POD STATUS CONTAINER_NAMES CONTAINER_IMAGES + demo-547d7dc77f-nmqpk Running log-collector,demo ghcr.io/radius-project/fluent-bit:2.1.8,radius.azurecr.io/tutorial/webapp:latest + ``` + + Note that you might see old pods with a state of `Terminating` in the output - this is normal and you should see them disappear once the redeployment completes cleaning up the old resources. + + The `log-collector` container was deployed using the PodSpec definition you added to your `app.bicep` file in the `runtimes` property you added, and is now running alongside your original `demo` app container. + +## Cleanup + +Run the following command to [delete]({{< ref "guides/deploy-apps/howto-delete" >}}) your app and container: + + ```bash + rad app delete demo + ``` + +## Further reading + +- [Kubernetes in Radius containers]({{< ref "guides/author-apps/containers/overview#kubernetes" >}}) +- [PodSpec in Radius containers]({{< ref "reference/resource-schema/core-schema/container-schema#runtimes" >}}) \ No newline at end of file diff --git a/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/snippets/patch-container.bicep b/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/snippets/patch-container.bicep new file mode 100644 index 000000000..cf50f3d4b --- /dev/null +++ b/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/snippets/patch-container.bicep @@ -0,0 +1,26 @@ +import radius as radius + +@description('Specifies the environment for resources.') +param environment string + +resource app 'Applications.Core/applications@2023-10-01-preview' = { + name: 'demo' + properties: { + environment: environment + } +} + +resource demo 'Applications.Core/containers@2023-10-01-preview' = { + name: 'demo' + properties: { + application: app.id + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + } +} diff --git a/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/snippets/patch-runtime.bicep b/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/snippets/patch-runtime.bicep new file mode 100644 index 000000000..692541563 --- /dev/null +++ b/docs/content/guides/author-apps/kubernetes/how-to-patch-pod/snippets/patch-runtime.bicep @@ -0,0 +1,39 @@ +import radius as radius + +@description('Specifies the environment for resources.') +param environment string + +resource app 'Applications.Core/applications@2023-10-01-preview' = { + name: 'demo' + properties: { + environment: environment + } +} + +resource demo 'Applications.Core/containers@2023-10-01-preview' = { + name: 'demo' + properties: { + application: app.id + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + runtimes: { + kubernetes: { + pod: { + containers: [ + { + name: 'log-collector' + image: 'ghcr.io/radius-project/fluent-bit:2.1.8' + } + ] + hostNetwork: true + } + } + } + } +} diff --git a/docs/content/guides/author-apps/kubernetes/overview/index.md b/docs/content/guides/author-apps/kubernetes/overview/index.md index 31e43d7ab..13e5ab5d2 100644 --- a/docs/content/guides/author-apps/kubernetes/overview/index.md +++ b/docs/content/guides/author-apps/kubernetes/overview/index.md @@ -3,12 +3,12 @@ type: docs title: "Overview: Kubernetes resources" linkTitle: "Overview" description: "Deploy and connect to Kubernetes resources in your application" -weight: 1000 +weight: 100 categories: "Overview" tags: ["Kubernetes"] --- -Radius applications are able to connect to and leverage Kubernetes resources. +Radius Applications are able to connect to and leverage Kubernetes resources. ## Resource library diff --git a/docs/content/guides/author-apps/networking/_index.md b/docs/content/guides/author-apps/networking/_index.md index 8ed58fdf5..f0ed3df8b 100644 --- a/docs/content/guides/author-apps/networking/_index.md +++ b/docs/content/guides/author-apps/networking/_index.md @@ -2,6 +2,6 @@ type: docs title: "Application networking" linkTitle: "Networking" -description: "Learn how to add networking to your Radius application" +description: "Learn how to add networking to your Radius Application" weight: 300 --- diff --git a/docs/content/guides/author-apps/networking/howto-gateways/demo-screenshot.png b/docs/content/guides/author-apps/networking/howto-gateways/demo-screenshot.png new file mode 100644 index 000000000..81a3c1dcc Binary files /dev/null and b/docs/content/guides/author-apps/networking/howto-gateways/demo-screenshot.png differ diff --git a/docs/content/guides/author-apps/networking/howto-gateways/index.md b/docs/content/guides/author-apps/networking/howto-gateways/index.md new file mode 100644 index 000000000..82d2448cd --- /dev/null +++ b/docs/content/guides/author-apps/networking/howto-gateways/index.md @@ -0,0 +1,76 @@ +--- +type: docs +title: "How To: Configure a gateway for routing internet traffic" +linkTitle: "Gateways" +description: "Learn how to expose a service to the internet via a gateway" +weight: 300 +slug: 'gateways' +categories: "How-To" +--- + +This guide will walk you through how to setup a gateway for routing internet traffic to a service. + +## Prerequisites + +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Radius environment]({{< ref "installation#step-3-initialize-radius" >}}) + +## Step 1: Define a container + +Begin by defining the service you wish to expose to the internet in a new file named `app.bicep`. This example uses the Radius demo container: + +{{< rad file="snippets/app.bicep" embed=true marker="//FRONTEND" >}} + +## Step 2: Add a gateway + +Next, add a gateway to `app.bicep`, routing traffic to the root path ("/") to the frontend container. Note that when a hostname is not specified one is generated automatically. + +{{< rad file="snippets/app.bicep" embed=true marker="//GATEWAY" >}} + +## Step 3: Deploy the app + +Deploy the application with [`rad deploy`]({{< ref "rad_run" >}}): + +```bash +rad deploy app.bicep -a gatewaydemo +``` + +The gateway endpoint will be printed at the end of the deployment: + +``` +Building app.bicep... + Deploying template './app.bicep' for application 'gatewaydemo' and environment 'default' from workspace 'default'... + + Deployment In Progress... + + Completed gateway Applications.Core/gateways + Completed frontend Applications.Core/containers + + Deployment Complete + + Resources: + gateway Applications.Core/gateways + frontend Applications.Core/containers + + Public endpoint http://1.1.1.1.nip.io/ +``` + +## Step 4: Interact with the application + +Visit the endpoint to interact with the demo Radius container: + +{{< image src="demo-screenshot.png" alt="Screenshot of the demo application" width="500px" >}} + +## Done + +Cleanup the application with ['rad app delete']({{< ref rad_application_delete >}}): + +```bash +rad app delete gatewaydemo -y +``` + +## Further reading + +- [Networking overview]({{< ref "/guides/author-apps/networking/overview" >}}) +- [Gateway reference]({{< ref "/reference/resource-schema/core-schema/gateway" >}}) diff --git a/docs/content/guides/author-apps/networking/howto-gateways/snippets/app.bicep b/docs/content/guides/author-apps/networking/howto-gateways/snippets/app.bicep new file mode 100644 index 000000000..8b90d49c5 --- /dev/null +++ b/docs/content/guides/author-apps/networking/howto-gateways/snippets/app.bicep @@ -0,0 +1,36 @@ +//FRONTEND +import radius as rad + +@description('The application ID being deployed. Injected automtically by the rad CLI') +param application string + +resource frontend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'frontend' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + } +} +//FRONTEND + +//GATEWAY +resource gateway 'Applications.Core/gateways@2023-10-01-preview' = { + name: 'gateway' + properties: { + application: application + routes: [ + { + path: '/' + destination: 'http://${frontend.name}:3000' + } + ] + } +} +//GATEWAY diff --git a/docs/content/guides/author-apps/networking/howto-service-networking/backend-connection.png b/docs/content/guides/author-apps/networking/howto-service-networking/backend-connection.png new file mode 100644 index 000000000..65868c289 Binary files /dev/null and b/docs/content/guides/author-apps/networking/howto-service-networking/backend-connection.png differ diff --git a/docs/content/guides/author-apps/networking/howto-service-networking/index.md b/docs/content/guides/author-apps/networking/howto-service-networking/index.md new file mode 100644 index 000000000..ca2b9cf25 --- /dev/null +++ b/docs/content/guides/author-apps/networking/howto-service-networking/index.md @@ -0,0 +1,75 @@ +--- +type: docs +title: "How To: Service to service networking" +linkTitle: "Service networking" +description: "Learn how your Radius services can communicate with each other" +weight: 200 +slug: 'service-networking' +categories: "How-To" +--- + +This guide will show you how two services can communicate with each other. In this example, we will have a frontend container service that communicates with a backend container service. + +{{< image src="overview.png" alt="Diagram of the frontend talking to the backend over HTTP port 80" width="400px" >}} + +## Prerequisites + +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Radius environment]({{< ref "installation#step-3-initialize-radius" >}}) + +## Step 1: Define the services + +First, define the containers in a file named `app.bicep`. We will define two services: `frontend` and `backend`: + +{{< rad file="snippets/1-app.bicep" embed=true markdownConfig="{linenos=table}" >}} + +Note the frontend container doesn't yet have a connection to the backend container. We will add that in the next step. + +## Step 2: Add a connection + +With the services defined, we can now add the connection between them. Add a connection to `frontend`: + +{{< rad file="snippets/2-app.bicep" embed=true marker="//FRONTEND" markdownConfig="{linenos=table,hl_lines=[\"14-18\"],linenostart=5}" >}} + +## Step 3: Deploy the application + +Deploy the application using the `rad deploy` command: + +```bash +rad run app.bicep -a networking-demo +``` + +You should see the application deploy successfully and the log stream start: + +``` +Building app.bicep... +Deploying template 'app.bicep' for application 'networking-demo' and environment 'default' from workspace 'default'... + +Deployment In Progress... + +Completed backend Applications.Core/containers +Completed frontend Applications.Core/containers + +Deployment Complete + +Resources: + backend Applications.Core/containers + frontend Applications.Core/containers + +Starting log stream... +``` + +## Step 4: Test the connection + +Visit [http://localhost:3000](http://localhost:3000) in your browser. You should see a connection to the backend container, along with the environment variables that have automatically been set on the frontend container: + +{{< image src="backend-connection.png" alt="Screenshot of the demo container showing the backend connections" width="600px" >}} + +## Done + +You have successfully added a connection between two containers. Make sure to delete your application to clean up the containers: + +```bash +rad app delete networking-demo -y +``` diff --git a/docs/content/guides/author-apps/networking/howto-service-networking/overview.png b/docs/content/guides/author-apps/networking/howto-service-networking/overview.png new file mode 100644 index 000000000..0c840b052 Binary files /dev/null and b/docs/content/guides/author-apps/networking/howto-service-networking/overview.png differ diff --git a/docs/content/guides/author-apps/networking/howto-service-networking/snippets/1-app.bicep b/docs/content/guides/author-apps/networking/howto-service-networking/snippets/1-app.bicep new file mode 100644 index 000000000..9bbe002fd --- /dev/null +++ b/docs/content/guides/author-apps/networking/howto-service-networking/snippets/1-app.bicep @@ -0,0 +1,34 @@ +import radius as rad + +@description('The application ID of the Radius environment. Automatically set by the rad CLI.') +param application string + +resource frontend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'frontend' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + } +} + +resource backend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'backend' + properties: { + application: application + container: { + image: 'nginx:latest' + ports: { + web: { + containerPort: 80 + } + } + } + } +} diff --git a/docs/content/guides/author-apps/networking/howto-service-networking/snippets/2-app.bicep b/docs/content/guides/author-apps/networking/howto-service-networking/snippets/2-app.bicep new file mode 100644 index 000000000..4d9fe4353 --- /dev/null +++ b/docs/content/guides/author-apps/networking/howto-service-networking/snippets/2-app.bicep @@ -0,0 +1,41 @@ +import radius as rad + +@description('The application ID of the Radius environment. Automatically set by the rad CLI.') +param application string + +//FRONTEND +resource frontend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'frontend' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + connections: { + backend: { + source: 'http://backend:80' + } + } + } +} +//FRONTEND + +resource backend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'backend' + properties: { + application: application + container: { + image: 'nginx:latest' + ports: { + web: { + containerPort: 80 + } + } + } + } +} diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/certificate.png b/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/certificate.png deleted file mode 100644 index 3b902fbf1..000000000 Binary files a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/certificate.png and /dev/null differ diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/index.md b/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/index.md deleted file mode 100644 index 348212552..000000000 --- a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/index.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -type: docs -title: "How To: TLS termination with cert-manager and Let's Encrypt" -linkTitle: "How-To: TLS with cert-manager" -description: "Learn about how to use Radius to deploy HTTPS-enabled application with a TLS certificate" -weight: 900 -slug: 'tls-cert-manager' -categories: "How-To" -tags: ["https"] ---- - -This guide will show you how to integrate Radius with cert-manager and Let's Encrypt to enable HTTPS for your application. - -## Prerequisites - -- [rad CLI]({{< ref getting-started >}}) -- [kubectl CLI](https://kubernetes.io/docs/tasks/tools/) -- Domain name + DNS A-record: In order to setup TLS communication to Radius you will need to make sure you have a domain name and DNS A-record pointing to your Kubernetes cluster's IP address. This is required for Let's Encrypt to issue a certificate and for traffic to be routed to your application. - - If running Radius on an Azure Kubernetes Service (AKS) cluster you can optionally use a [DNS label](https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#dns-name-label) to create a DNS A-record pointing to your cluster. Refer to the [tips and tricks](#using-an-azure-dns-label) section for more information. - - If running Radius on an Elastic Kubernetes Service (EKS) cluster you can optionally leverage [Application Load Balancer](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html) for a hosted DNS name and record. - -## Step 1: Initialize a Radius environment - -Begin by running `rad init` to initialize the Radius environment. - -```sh -rad init -``` - -## Step 2: Set up domain - -You'll next need a DNS record to point to your Kubernetes cluster and service in order to issue the certificate and allow traffic to your application. - -1. Run the following command and copy the EXTERNAL-IP field: - ```sh - $ kubectl get svc -n radius-system contour-envoy - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE - contour-envoy LoadBalancer 10.0.10.1 80:31734/TCP,443:32517/TCP 67m - ``` - -1. Configure your DNS server with an A record for your domain name and external IP address. Refer to your DNS provider for instructions on how to configure this. - -## Step 3: Install cert-manager - -Next, run the following command to install [cert-manager](https://cert-manager.io/): - -```sh -kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml -``` - -> You can also use other supported installation methods, such as Helm, to install cert-manager. [Instructions here](https://cert-manager.io/docs/installation/#getting-started). - -## Step 4: Set up HTTP-01 Challenge - -To use Let's encrypt, you need to configure the [ACME Issuer](https://cert-manager.io/docs/configuration/acme/) using cert-manager. This how-to uses an [HTTP-01 Challenge](https://cert-manager.io/docs/configuration/acme/http01/) to verify that a client owns a domain. - -Here is what your HTTP-01 ACME ClusterIssuer resource should look like: - -{{< rad file="snippets/clusterissuer-http01.yaml" embed=true >}} - -> Note that this guide shows how to set up a certificate using Let's Encrypt prod. For testing purposes you can change this to the [staging endpoint](https://letsencrypt.org/docs/staging-environment/), but you may get validation errors in your browser. - -## Step 5: Create a Certificate resource - -1. Create a file `certificate.yaml` with the following data, replacing the placeholders as necessary: - - {{< rad file="snippets/certificate.yaml" embed=true >}} - -1. Then create `tls-delegation.yaml` with the following data. - - {{< rad file="snippets/delegation.yaml" embed=true >}} - -1. Run the following commands to create the certificate resource and authorize Radius to access the resource: - - ```sh - kubectl apply -f certificate.yaml - kubectl apply -f tls-delegation.yaml - ``` - - You may need to wait a minute or two for cert-manager to authorize with Let's Encrypt and create the secret on the cluster. Once this process completes, you should see a secret called `demo-secret` in the default namespace. This secret is managed by cert-manager. - -## Step 6: Define a Radius application and gateway - -Create a file named `app.bicep` with the following contents. Note that we reference the `demo-secret` and reference the Secret Store in the Gateway to enable TLS termination. - -{{< rad file="snippets/app.bicep" embed=true >}} - -## Step 7: Deploy the application - -Deploy the application to your environment with `rad deploy`: - -```sh -rad deploy app.bicep -``` - -Once the deployment is complete the public endpoint of your application will be printed. Navigate to this public endpoint to access the application via HTTPS. You can view the certificate to see it has a Let's Encrypt issuer: - -Screenshot of the certificate information showing a Lets Encrypt issuer - -## Tips and tricks - -### Using an Azure DNS label - -If you are running Radius on an Azure Kubernetes Service (AKS) cluster you can use a [DNS label](https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#dns-name-label) to create a DNS A-record pointing to your cluster. This is useful if you don't have a domain name or don't want to use a subdomain for your dev/test environments. - -To setup a DNS label for your AKS cluster: - -1. Open the Azure portal to the subscription where your AKS cluster is deployed. -1. Open the resource group, prefixed with `MC_`, that contains your AKS cluster. (_i.e. `MC_myrg-mycluster_westus3`_) -1. Select the Public IP address prefixed with `kubernetes-` (_i.e. `kubernetes-a6925d5f55dfa41419c3c93648dbb30a`_) -1. Select 'Configuration' and add a DNS name label. Click save to create the DNS A-record. -1. Update your Radius gateway to use the DNS label as the `fullyQualifiedHostname` value. diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/app.bicep b/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/app.bicep deleted file mode 100644 index f1eb7214d..000000000 --- a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/app.bicep +++ /dev/null @@ -1,71 +0,0 @@ -import radius as radius - -@description('ID of the Radius environment. Passed in automatically via the rad CLI') -param environment string - -resource demoApplication 'Applications.Core/applications@2023-10-01-preview' = { - name: 'demo-application' - properties: { - environment: environment - } -} - -resource demoSecretStore 'Applications.Core/secretStores@2023-10-01-preview' = { - name: 'demo-secretstore' - properties: { - application: demoApplication.id - type: 'certificate' - - // Reference the existing default/demo-secret Kubernetes secret - // Created automatically by cert-manager - resource: 'default/demo-secret' - data: { - // Make the tls.crt and tls.key secrets available to the application - 'tls.crt': {} - 'tls.key': {} - } - } -} - -resource demoGateway 'Applications.Core/gateways@2023-10-01-preview' = { - name: 'demo-gateway' - properties: { - application: demoApplication.id - hostname: { - fullyQualifiedHostname: 'YOUR_DOMAIN' // Replace with your domain name. - } - routes: [ - { - path: '/' - destination: demoRoute.id - } - ] - tls: { - certificateFrom: demoSecretStore.id - minimumProtocolVersion: '1.2' - } - } -} - -resource demoRoute 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'demo-route' - properties: { - application: demoApplication.id - } -} - -resource demoContainer 'Applications.Core/containers@2023-10-01-preview' = { - name: 'demo-container' - properties: { - application: demoApplication.id - container: { - image: 'radius.azurecr.io/tutorial/webapp:edge' - ports: { - web: { - containerPort: 3000 - provides: demoRoute.id - } - } - } - } -} diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/certificate.yaml b/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/certificate.yaml deleted file mode 100644 index e213577c2..000000000 --- a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/certificate.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: demo-certificate -spec: - commonName: YOUR_DOMAIN - dnsNames: - - YOUR_DOMAIN - issuerRef: - name: demo-issuer - kind: ClusterIssuer - secretName: demo-secret diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/clusterissuer-http01.yaml b/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/clusterissuer-http01.yaml deleted file mode 100644 index 4b143bbc8..000000000 --- a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/clusterissuer-http01.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: cert-manager.io/v1 -kind: ClusterIssuer -metadata: - name: demo-issuer -spec: - acme: - email: YOUR_EMAIL - privateKeySecretRef: - name: letsencrypt-prod - server: https://acme-v02.api.letsencrypt.org/directory - solvers: - - http01: - ingress: - class: contour diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/delegation.yaml b/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/delegation.yaml deleted file mode 100644 index d63969ddc..000000000 --- a/docs/content/guides/author-apps/networking/howto-tls-termination-cert-manager/snippets/delegation.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: projectcontour.io/v1 -kind: TLSCertificateDelegation -metadata: - name: demo-delegation - namespace: default -spec: - delegations: - - secretName: demo-secret - targetNamespaces: - - "*" diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination/index.md b/docs/content/guides/author-apps/networking/howto-tls-termination/index.md deleted file mode 100644 index 8044740f1..000000000 --- a/docs/content/guides/author-apps/networking/howto-tls-termination/index.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -type: docs -title: "How To: TLS termination with your own TLS certificate" -linkTitle: "How-To: TLS with a custom certificate" -description: "Learn about how to use Radius to deploy HTTPS-enabled application with a TLS certificate" -weight: 800 -slug: 'tls-termination' -categories: "How-To" -tags: ["https"] ---- - -This guide will show you: - -- How to model and use Secret Stores for a bring-your-own certificate scenario -- How to model and use Gateways for a Radius Gateway TLS termination scenario. - -## Prerequisites - -- [rad CLI]({{< ref getting-started >}}) -- [Supported Kubernetes cluster]({{< ref kubernetes-install >}}) - -## Step 1: Initialize a Radius environment - -Begin by running `rad init` to initialize Radius and create an environment: - -```sh -rad init -``` - -## Step 2: Define an Application, Secret Store, and Gateway - -Begin by creating a file named `app.bicep`. You can either provide the certificate data directly in the Bicep file, or reference an existing Kubernetes secret with your certificate data. - -{{< tabs "Certificate Data" "Kubernetes Secret" >}} - -{{% codetab %}} - -{{< rad file="snippets/tls-termination-data.bicep" embed=true >}} - -{{% /codetab %}} - -{{% codetab %}} - -{{< rad file="snippets/tls-termination-k8s-secret.bicep" embed=true >}} - -{{% /codetab %}} - -{{< /tabs >}} - -## Step 3: Deploy the application - -```sh -rad deploy app.bicep -p tlscrt= -p tlskey= -``` - -Once the deployment is complete, you should see a public endpoint displayed at the end. Navigating to this public endpoint should show you your application that is accessed via HTTPS, assuming that you have a valid TLS certificate. - -View TLS certificate diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination/snippets/tls-termination-data.bicep b/docs/content/guides/author-apps/networking/howto-tls-termination/snippets/tls-termination-data.bicep deleted file mode 100644 index f8d5abcaf..000000000 --- a/docs/content/guides/author-apps/networking/howto-tls-termination/snippets/tls-termination-data.bicep +++ /dev/null @@ -1,80 +0,0 @@ -import radius as radius - -@description('ID of your Radius environment. Passed in automatically by rad CLI') -param environment string - -@description('TLS certificate data') -@secure() -param tlscrt string - -@description('TLS certificate key') -@secure() -param tlskey string - -resource httpsApplication 'Applications.Core/applications@2023-10-01-preview' = { - name: 'https-application' - properties: { - environment: environment - } -} - -resource httpsSecretStore 'Applications.Core/secretStores@2023-10-01-preview' = { - name: 'https-secretstore' - properties: { - application: httpsApplication.id - type: 'certificate' - data: { - 'tls.crt': { - encoding: 'base64' - value: tlscrt - } - 'tls.key': { - encoding: 'base64' - value: tlskey - } - } - } -} - -resource httpsGateway 'Applications.Core/gateways@2023-10-01-preview' = { - name: 'https-gateway' - properties: { - application: httpsApplication.id - hostname: { - fullyQualifiedHostname: 'YOUR_DOMAIN' // Replace with your domain name. - } - routes: [ - { - path: '/' - destination: httpsRoute.id - } - ] - tls: { - certificateFrom: httpsSecretStore.id - minimumProtocolVersion: '1.2' - } - } -} - -resource httpsRoute 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'https-route' - properties: { - application: httpsApplication.id - } -} - -resource httpsContainer 'Applications.Core/containers@2023-10-01-preview' = { - name: 'https-container' - properties: { - application: httpsApplication.id - container: { - image: 'radius.azurecr.io/tutorial/webapp:edge' - ports: { - web: { - containerPort: 3000 - provides: httpsRoute.id - } - } - } - } -} diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination/snippets/tls-termination-k8s-secret.bicep b/docs/content/guides/author-apps/networking/howto-tls-termination/snippets/tls-termination-k8s-secret.bicep deleted file mode 100644 index 73888fb75..000000000 --- a/docs/content/guides/author-apps/networking/howto-tls-termination/snippets/tls-termination-k8s-secret.bicep +++ /dev/null @@ -1,69 +0,0 @@ -import radius as radius - -@description('ID of your Radius environment. Passed in automatically by rad CLI') -param environment string - -resource httpsApplication 'Applications.Core/applications@2023-10-01-preview' = { - name: 'https-application' - properties: { - environment: environment - } -} - -resource httpsSecretStore 'Applications.Core/secretStores@2023-10-01-preview' = { - name: 'https-secretstore' - properties: { - application: httpsApplication.id - type: 'certificate' - // Reference the existing default/tls-certificate Kubernetes secret - resource: 'default/tls-certificate' - data: { - // Make the tls.crt and tls.key secrets available to the application - 'tls.crt': {} - 'tls.key': {} - } - } -} - -resource httpsGateway 'Applications.Core/gateways@2023-10-01-preview' = { - name: 'https-gateway' - properties: { - application: httpsApplication.id - hostname: { - fullyQualifiedHostname: 'YOUR_DOMAIN' // Replace with your domain name. - } - routes: [ - { - path: '/' - destination: httpsRoute.id - } - ] - tls: { - certificateFrom: httpsSecretStore.id - minimumProtocolVersion: '1.2' - } - } -} - -resource httpsRoute 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'https-route' - properties: { - application: httpsApplication.id - } -} - -resource httpsContainer 'Applications.Core/containers@2023-10-01-preview' = { - name: 'https-container' - properties: { - application: httpsApplication.id - container: { - image: 'radius.azurecr.io/tutorial/webapp:edge' - ports: { - web: { - containerPort: 3000 - provides: httpsRoute.id - } - } - } - } -} diff --git a/docs/content/guides/author-apps/networking/howto-tls-termination/https-app.png b/docs/content/guides/author-apps/networking/howto-tls/https-app.png similarity index 100% rename from docs/content/guides/author-apps/networking/howto-tls-termination/https-app.png rename to docs/content/guides/author-apps/networking/howto-tls/https-app.png diff --git a/docs/content/guides/author-apps/networking/howto-tls/index.md b/docs/content/guides/author-apps/networking/howto-tls/index.md new file mode 100644 index 000000000..fd8718a4c --- /dev/null +++ b/docs/content/guides/author-apps/networking/howto-tls/index.md @@ -0,0 +1,118 @@ +--- +type: docs +title: "How To: Add TLS termination to a gateway" +linkTitle: "HTTPS/TLS" +description: "Learn how to deploy HTTPS-enabled application with a TLS certificate" +weight: 400 +slug: 'tls' +categories: "How-To" +--- + +This guide will show you how to add TLS and HTTPS to an application with a gateway. + +## Prerequisites + +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Radius environment]({{< ref "installation#step-3-initialize-radius" >}}) +- Domain name + DNS A-record pointing to your Kubernetes cluster + - If running Radius on an Azure Kubernetes Service (AKS) cluster you can optionally use a [DNS label](https://learn.microsoft.com/azure/virtual-network/ip-services/public-ip-addresses#dns-name-label) to create a DNS A-record pointing to your cluster. + - If running Radius on an Elastic Kubernetes Service (EKS) cluster you can optionally leverage an [Application Load Balancer](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html) for a hosted DNS name and record. + +## Step 1: Define a container + +Begin by creating a file named `app.bicep`. Add a container which will be exposed to the internet: + +{{< rad file="snippets/app-existing.bicep" marker="//FRONTEND" embed=true >}} + +## Step 2: Add a secret store + +TLS certificates need to be referenced via a Radius [secret store]({{< ref "/guides/author-apps/secrets" >}}). You can either reference an existing secret, or define a new one with certificate data. + +{{< tabs "Reference existing secrets" "Define new secrets" >}} + +{{< codetab >}} + +{{< alert title="Managing certificates in Kubernetes" color="info" >}} +[cert-manager](https://cert-manager.io/docs/) is a great way to manage certificates in Kubernetes and make them available as a Kubernetes secret. This example uses a Kubernetes secret that was setup by cert-manager +{{< /alert >}} + + +{{< rad file="snippets/app-existing.bicep" marker="//SECRETS" embed=true >}} + +{{< /codetab >}} + +{{% codetab %}} + +{{< rad file="snippets/app-new.bicep" marker="//SECRETS" embed=true >}} + +{{% /codetab %}} + +{{< /tabs >}} + +## Step 3: Add a gateway + +Now that your certificate data is ready add a gateway and reference the secret store: + +{{< rad file="snippets/app-new.bicep" marker="//GATEWAY" embed=true >}} + +## Step 4: Deploy the application + +{{< tabs "Reference existing secrets" "Define new secrets" >}} + +{{% codetab %}} + +```sh +rad deploy app.bicep -a tlsdemo +``` +{{% /codetab %}} + +{{% codetab %}} + +```sh +rad deploy app.bicep -a tlsdemo -p tlscrt= -p tlskey= +``` +{{% /codetab %}} + +{{< /tabs >}} + +You should see the application deploy successfully, with the public endpoint printed automatically: + +``` +Building app.bicep... + Deploying template './app.bicep' for application 'tlsdemo' and environment 'default' from workspace 'default'... + + Deployment In Progress... + + Completed gateway Applications.Core/gateways + Completed frontend Applications.Core/containers + Completed secretstore Applications.Core/secretstores + + Deployment Complete + + Resources: + gateway Applications.Core/gateways + secretstore Applications.Core/secretstores + frontend Applications.Core/containers + + Public endpoint https://MYDOMAIN/ +``` + +## Step 5: Access HTTPS endpoint + +Once the deployment is complete you should see a public endpoint displayed at the end. Navigating to this public endpoint should show you your application that is accessed via HTTPS, assuming that you have a valid TLS certificate: + +{{< image src="https-app.png" alt="View TLS certificate" width="400px" >}} + +## Done + +You've successfully deployed an application with TLS termination. Make sure to cleanup your resources: + +```bash +rad app delete tlsdemo -y +``` + +## Further reading + +- [Networking overview]({{< ref "/guides/author-apps/networking/overview" >}}) +- [Gateway reference]({{< ref "/reference/resource-schema/core-schema/gateway" >}}) diff --git a/docs/content/guides/author-apps/networking/howto-tls/snippets/app-existing.bicep b/docs/content/guides/author-apps/networking/howto-tls/snippets/app-existing.bicep new file mode 100644 index 000000000..e848fde02 --- /dev/null +++ b/docs/content/guides/author-apps/networking/howto-tls/snippets/app-existing.bicep @@ -0,0 +1,62 @@ +//FRONTEND +import radius as rad + +@description('The application ID being deployed. Injected automtically by the rad CLI') +param application string + +resource frontend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'frontend' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + } +} +//FRONTEND + +//SECRETS +resource secretstore 'Applications.Core/secretStores@2023-10-01-preview' = { + name: 'secretstore' + properties: { + application: application + type: 'certificate' + // Reference the existing tls-certificate Kubernetes secret in the default namespace + // Change this if your Kubernetes secret is in a different namespace or is named differently + resource: 'default/tls-certificate' + data: { + // Make the tls.crt and tls.key secrets available to the application + // Change these if your secrets are named differently + 'tls.crt': {} + 'tls.key': {} + } + } +} +//SECRETS + +//GATEWAY +resource gateway 'Applications.Core/gateways@2023-10-01-preview' = { + name: 'gateway' + properties: { + application: application + hostname: { + fullyQualifiedHostname: 'YOUR_DOMAIN' // Replace with your domain name. + } + tls: { + certificateFrom: secretstore.id + minimumProtocolVersion: '1.2' + } + routes: [ + { + path: '/' + destination: 'http://${frontend.name}:3000' + } + ] + } +} +//GATEWAY diff --git a/docs/content/guides/author-apps/networking/howto-tls/snippets/app-new.bicep b/docs/content/guides/author-apps/networking/howto-tls/snippets/app-new.bicep new file mode 100644 index 000000000..e01e5aa17 --- /dev/null +++ b/docs/content/guides/author-apps/networking/howto-tls/snippets/app-new.bicep @@ -0,0 +1,71 @@ +//FRONTEND +import radius as rad + +@description('The application ID being deployed. Injected automtically by the rad CLI') +param application string + +resource frontend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'frontend' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + } +} +//FRONTEND + +//SECRETS +@description('TLS certificate data') +@secure() +param tlscrt string + +@description('TLS certificate key') +@secure() +param tlskey string + +resource secretstore 'Applications.Core/secretStores@2023-10-01-preview' = { + name: 'secretstore' + properties: { + application: application + type: 'certificate' + data: { + 'tls.crt': { + encoding: 'base64' + value: tlscrt + } + 'tls.key': { + encoding: 'base64' + value: tlskey + } + } + } +} +//SECRETS + +//GATEWAY +resource gateway 'Applications.Core/gateways@2023-10-01-preview' = { + name: 'gateway' + properties: { + application: application + hostname: { + fullyQualifiedHostname: 'YOUR_DOMAIN' // Replace with your domain name. + } + tls: { + certificateFrom: secretstore.id + minimumProtocolVersion: '1.2' + } + routes: [ + { + path: '/' + destination: 'http://${frontend.name}:3000' + } + ] + } +} +//GATEWAY diff --git a/docs/content/guides/author-apps/networking/overview/index.md b/docs/content/guides/author-apps/networking/overview/index.md index 240ee3ac6..afa687476 100644 --- a/docs/content/guides/author-apps/networking/overview/index.md +++ b/docs/content/guides/author-apps/networking/overview/index.md @@ -2,34 +2,39 @@ type: docs title: "Overview: Application networking" linkTitle: "Overview" -description: "Learn how to add networking to your Radius application" +description: "Learn how to add networking to your Radius Application" weight: 100 categories: "Overview" -tags: ["routes","gateways"] --- Radius networking resources allow you to model: -- Communication between a user and a service - Communication between services +- Communication between a user and a service -## HTTP Routes +{{< image src="networking.png" alt="Diagram of a gateway with traffic going to a frontend container, which in turn sends traffic to the basket and catalog containers" width="400px" >}} -An `HttpRoute` resources defines HTTP communication between two [services]({{< ref "guides/author-apps/containers" >}}). They can be used to define both one-way communication, as well as cycles of communication between services. +## Service to service communication -Diagram of Radius service-to-service networking with cycles
+Radius containers can define connections to other containers, just like they can define connections to dependencies. -Refer to the [HTTP Route schema]({{< ref httproute >}}) for more information on how to model HTTP routes. +Network connections are defined as strings containing: -A gateway can optionally be added for external users to access the Route. +- The **scheme** (protocol) of the connection _(http, https, tcp, etc.)_ +- The **target** container/service to connect to _(basket, catalog, etc.)_ +- The **port** to connect to _(80, 443, etc.)_ -## Gateways +For example, a frontend container may need to connect to a basket container. The frontend container would define a connection to the basket container, with the scheme `http`, the target `basket`, and the port `3000`. The connection would look like this: `http://basket:3000`. -`Gateway` defines how requests are routed to different resources, and also provides the ability to expose traffic to the internet. Conceptually, gateways allow you to have a single point of entry for traffic in your application, whether it be internal or external traffic. +{{< image src="network-connection.png" alt="Diagram showing the components of a network connection" width="400px" >}} -`Gateway` in Radius are split into two main pieces; the `Gateway` resource itself, which defines which port and protocol to listen on, and Route(s) which define the rules for routing traffic to different resources. +For more information on how to do service to service networking, visit the [service networking how-to guide]({{< ref howto-service-networking >}}): + +{{< button text="How-To: Service to service networking" page="howto-service-networking" >}} + +## Gateways -Diagram of Radius gateways
+A `gateway` defines how requests are routed to different resources, and also provides the ability to expose traffic to the internet. Conceptually, gateways allow you to have a single point of entry for traffic in your application, whether it be internal or external. Refer to the [Gateway schema]({{< ref gateway >}}) for more information on how to model gateways. diff --git a/docs/content/guides/author-apps/networking/overview/network-connection.png b/docs/content/guides/author-apps/networking/overview/network-connection.png new file mode 100644 index 000000000..7575f6cfc Binary files /dev/null and b/docs/content/guides/author-apps/networking/overview/network-connection.png differ diff --git a/docs/content/guides/author-apps/networking/overview/networking-cycles.png b/docs/content/guides/author-apps/networking/overview/networking-cycles.png deleted file mode 100644 index 917190575..000000000 Binary files a/docs/content/guides/author-apps/networking/overview/networking-cycles.png and /dev/null differ diff --git a/docs/content/guides/author-apps/networking/overview/networking-gateways.png b/docs/content/guides/author-apps/networking/overview/networking-gateways.png deleted file mode 100644 index 31381e694..000000000 Binary files a/docs/content/guides/author-apps/networking/overview/networking-gateways.png and /dev/null differ diff --git a/docs/content/guides/author-apps/networking/overview/networking.png b/docs/content/guides/author-apps/networking/overview/networking.png new file mode 100644 index 000000000..b458d4fe5 Binary files /dev/null and b/docs/content/guides/author-apps/networking/overview/networking.png differ diff --git a/docs/content/guides/author-apps/networking/overview/snippets/networking-sslpassthrough.bicep b/docs/content/guides/author-apps/networking/overview/snippets/networking-sslpassthrough.bicep deleted file mode 100644 index d7aac2b0d..000000000 --- a/docs/content/guides/author-apps/networking/overview/snippets/networking-sslpassthrough.bicep +++ /dev/null @@ -1,34 +0,0 @@ -import radius as radius - -param environment string - -resource app 'Applications.Core/applications@2023-10-01-preview' = { - name: 'myapp' - properties: { - environment: environment - } -} - -resource httpRoute 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'http-route' - properties: { - application: app.id - } -} - -//GATEWAY -resource internetGateway 'Applications.Core/gateways@2023-10-01-preview' = { - name: 'internet-gateway' - properties: { - application: app.id - tls: { - sslPassthrough: true - } - routes: [ - { - destination: httpRoute.id - } - ] - } -} -//GATEWAY diff --git a/docs/content/guides/author-apps/networking/overview/snippets/networking-tlstermination.bicep b/docs/content/guides/author-apps/networking/overview/snippets/networking-tlstermination.bicep deleted file mode 100644 index 3d342c005..000000000 --- a/docs/content/guides/author-apps/networking/overview/snippets/networking-tlstermination.bicep +++ /dev/null @@ -1,68 +0,0 @@ -import radius as radius - -@description('The ID of your Radius environment. Set automatically by the rad CLI.') -param environment string - -resource app 'Applications.Core/applications@2023-10-01-preview' = { - name: 'myapp' - properties: { - environment: environment - } -} - -resource httpRoute 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'http-route' - properties: { - application: app.id - } -} - -//GATEWAY -resource internetGateway 'Applications.Core/gateways@2023-10-01-preview' = { - name: 'internet-gateway' - properties: { - application: app.id - hostname: { - // Specify your hostname used with the TLS certificate - fullyQualifiedHostname: 'www.radapp.dev' - } - tls: { - // Specify TLS Termination for your app. Mutually exclusive with SSL Passthrough. - - // The Radius Secret Store holding TLS certificate data - certificateFrom: wwwRadiusTLS.id - // The minimum TLS protocol version to support. Defaults to 1.2 - minimumProtocolVersion: '1.2' - } - routes: [ - { - destination: httpRoute.id - } - ] - } -} - -// secretstore resource to reference the TLS certficate and key. -resource wwwRadiusTLS 'Applications.Core/secretStores@2023-10-01-preview' = { - name: 'tls-wwwradius' - properties: { - application: app.id - type: 'certificate' - - // Reference to an existing Kubernetes namespace and secret. - // Here, it is the 'wwwradiustls' TLS secret in the 'default' namespace. - resource: 'default/wwwradiustls' - - // The secrets to make available to other Radius resources via this secret store. - // To enable TLS termination in Applications.Core/gateways, both 'tls.crt' and 'tls.key' secrets must exist - // in the referenced secret store and also be listed here. - data: { - // Specify the secret keys to be made available, with no additional configuration. - // These secrets must already exist in the referenced Kubernetes secret, 'default/wwwradiustls'. - // If they do not exist, an error will be thrown. - 'tls.crt': {} - 'tls.key': {} - } - } -} -//GATEWAY diff --git a/docs/content/guides/author-apps/networking/overview/snippets/networking.bicep b/docs/content/guides/author-apps/networking/overview/snippets/networking.bicep deleted file mode 100644 index c32062342..000000000 --- a/docs/content/guides/author-apps/networking/overview/snippets/networking.bicep +++ /dev/null @@ -1,90 +0,0 @@ -import radius as radius - -param environment string - -resource app 'Applications.Core/applications@2023-10-01-preview' = { - name: 'myapp' - properties: { - environment: environment - } -} - -resource serviceA 'Applications.Core/containers@2023-10-01-preview' = { - name: 'service-a' - properties: { - application: app.id - container: { - image: 'servicea' - ports: { - web: { - containerPort: 80 - provides: routeAWeb.id - } - api: { - containerPort: 3000 - provides: routeAApi.id - } - } - } - connections: { - serviceB: { - source: routeB.id - } - } - } -} - -resource routeAWeb 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'route-a-web' - properties: { - application: app.id - } -} - -resource routeAApi 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'route-a-api' - properties: { - application: app.id - } -} - -resource serviceB 'Applications.Core/containers@2023-10-01-preview' = { - name: 'service-b' - properties: { - application: app.id - container: { - image: 'serviceb' - ports: { - api: { - containerPort: 3000 - provides: routeB.id - } - } - } - connections: { - serviceA: { - source: routeAApi.id - } - } - } -} - -resource routeB 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'route-b' - properties: { - application: app.id - } -} - -resource internetGateway 'Applications.Core/gateways@2023-10-01-preview' = { - name: 'internet-gateway' - properties: { - application: app.id - routes: [ - { - path: '/' - destination: routeAWeb.id - } - ] - } -} diff --git a/docs/content/guides/author-apps/portable-resources/overview/index.md b/docs/content/guides/author-apps/portable-resources/overview/index.md index a206743ac..9b61da5d9 100644 --- a/docs/content/guides/author-apps/portable-resources/overview/index.md +++ b/docs/content/guides/author-apps/portable-resources/overview/index.md @@ -2,7 +2,7 @@ type: docs title: "Overview: Portable Resources" linkTitle: "Overview" -description: "Add portable resources to your Radius application for infrastructure portability" +description: "Add portable resources to your Radius Application for infrastructure portability" weight: 600 categories: "Overview" tags: ["portability"] @@ -10,9 +10,9 @@ tags: ["portability"] ## Overview -Portable resources provide **abstraction** and **portability** to Radius applications. This allows development teams to depend on high level resource types and APIs, and let infra teams swap out the underlying resource and configuration. +Portable resources provide **abstraction** and **portability** to Radius Applications. This allows development teams to depend on high level resource types and APIs, and let infra teams swap out the underlying resource and configuration. -Diagram of portable resources connecting to Azure CosmosDB, AWS MongoDB, and a MongoDB Docker container +{{< image src="portable-resources.png" alt="Diagram of portable resources connecting to Azure CosmosDB, AWS MongoDB, and a MongoDB Docker container" width=700px >}} ## Available resources diff --git a/docs/content/guides/author-apps/secrets/_index.md b/docs/content/guides/author-apps/secrets/_index.md index 1c11dc59f..defcb445d 100644 --- a/docs/content/guides/author-apps/secrets/_index.md +++ b/docs/content/guides/author-apps/secrets/_index.md @@ -2,6 +2,6 @@ type: docs title: "Secrets management" linkTitle: "Secrets" -description: "Learn how to create and reference secrets in your Radius application" +description: "Learn how to create and reference secrets in your Radius Application" weight: 500 --- diff --git a/docs/content/guides/author-apps/secrets/howto-new-secretstore/index.md b/docs/content/guides/author-apps/secrets/howto-new-secretstore/index.md new file mode 100644 index 000000000..5f9e0c67c --- /dev/null +++ b/docs/content/guides/author-apps/secrets/howto-new-secretstore/index.md @@ -0,0 +1,51 @@ +--- +type: docs +title: "How To: Create new Secret Store" +linkTitle: "New Secret Store" +description: "Learn how to create new secrets in your Radius Application" +weight: 200 +categories: "How-To" +tags: ["secrets"] +--- + +Radius secret stores securely manage secrets for your Environment and Application. + +By default, Radius leverages the hosting platform's secrets management solution to create and store the secret. For example, if you are deploying to Kubernetes, the secret store will be created as a Kubernetes Secret. + +## Pre-requisites + +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [kubectl CLI](https://kubernetes.io/docs/tasks/tools/install-kubectl/) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-radius-bicep-vs-code-extension" >}}) +- [Radius environment]({{< ref "installation#step-3-initialize-the-radius-control-plane-and-the-radius-environment" >}}) + +## Step 1: Add a Secret Store + +Open the `app.bicep` from the current working directory and add a new Secret Store resource + +{{< rad file="snippets/secretstore.bicep" embed=true marker="//SECRET_STORE_NEW" >}} + +In this example a new secret store resource is created for storing a TLS certificate in it. + +## Step 2: Deploy the application + +Deploy the application with [`rad deploy`]({{< ref "rad_deploy" >}}): + +```bash +rad deploy app.bicep -a secretdemo +``` + +## Step 3: Verify the secrets are deployed + +Use the below command to verify if the secret got deployed + +```bash +kubectl get secret -n default-secretdemo +``` + +You will find `appCert` of type kubernetes.io/tls automatically created. + +## Further reading + +- [Secret store schema]({{< ref secretstore >}}) +- [How To: gateway TLS termination]({{< ref howto-tls >}}) diff --git a/docs/content/guides/author-apps/secrets/howto-new-secretstore/snippets/secretstore.bicep b/docs/content/guides/author-apps/secrets/howto-new-secretstore/snippets/secretstore.bicep new file mode 100644 index 000000000..274580b63 --- /dev/null +++ b/docs/content/guides/author-apps/secrets/howto-new-secretstore/snippets/secretstore.bicep @@ -0,0 +1,30 @@ +import radius as radius + +@description('The app ID of your Radius Application. Set automatically by the rad CLI.') +param application string + +//SECRET_STORE_NEW +@description('The data for your TLS certificate') +@secure() +param tlscrt string + +@description('The key for your TLS certificate') +@secure() +param tlskey string + +resource appCert 'Applications.Core/secretStores@2023-10-01-preview' = { + name: 'appcert' + properties:{ + application: application + type: 'certificate' + data: { + 'tls.key': { + value: tlskey + } + 'tls.crt': { + value: tlscrt + } + } + } +} +//SECRET_STORE_NEW diff --git a/docs/content/guides/author-apps/secrets/overview/index.md b/docs/content/guides/author-apps/secrets/overview/index.md index 6344490b5..fba40d2c3 100644 --- a/docs/content/guides/author-apps/secrets/overview/index.md +++ b/docs/content/guides/author-apps/secrets/overview/index.md @@ -2,8 +2,8 @@ type: docs title: "Overview: Secrets management" linkTitle: "Overview" -description: "Learn how to create and reference secrets in your Radius application" -weight: 500 +description: "Learn how to create and reference secrets in your Radius Application" +weight: 100 categories: "Overview" tags: ["secrets"] --- @@ -14,17 +14,14 @@ Sensitive data, such as TLS certificates, tokens, passwords, and keys that serve An independent resource with its own lifecycle, a Radius Secret Store ensures that data is persisted across container restarts or mounts and can interact directly with the Radius Application Model. For instance, an Applications.Core/gateways resource can use this resource to store a TLS certificate and reference it. -## Create a new Secret Store +## Create a new Secret Store -Here is an example for creating a new Secret Store resource and storing a TLS certificate in it. Radius leverages the secrets management solution available on the hosting platform to create and store the secret. For example, if you are deploying to Kubernetes, the secret will be created in Kubernetes Secrets. - -{{< rad file="snippets/secretstore.bicep" embed=true marker="//SECRET_STORE_NEW" >}} +Radius leverages the secrets management solution available on the hosting platform to create and store the secret. For example, if you are deploying to Kubernetes, the secret will be created in Kubernetes Secrets. +Follow the [how-to guide on creating new secret store]({{< ref "/guides/author-apps/secrets/howto-new-secretstore" >}}) to learn more about creating a new secret store resource and storing a TLS certificate in it. ## Reference an existing Secret Store -Here is an example of using a Secret Store to reference secrets stores in an existing secrets management solution that is external to the Radius application stack. Note that only references to Kubernetes Secrets is currently supported, with more to come in the future. - -{{< rad file="snippets/secretstore.bicep" embed=true marker="//SECRET_STORE_REF" >}} +You can also reference an existing secrets management solution that is external to the Radius Application stack. Note that only references to Kubernetes Secrets is currently supported, with more to come in the future. ## Using Secret Stores @@ -34,5 +31,4 @@ Additional use-cases will be added in upcoming releases. ## Further reading -- [How To: TLS termination with your own TLS certificate]({{< ref howto-tls-termination >}}) -- [How To: TLS termination with a certificate from Let's Encrypt]({{< ref howto-tls-termination-cert-manager >}}) +- [How To: gateway TLS termination]({{< ref howto-tls >}}) diff --git a/docs/content/guides/author-apps/secrets/overview/snippets/secretstore.bicep b/docs/content/guides/author-apps/secrets/overview/snippets/secretstore.bicep index c618801a4..728b04cf1 100644 --- a/docs/content/guides/author-apps/secrets/overview/snippets/secretstore.bicep +++ b/docs/content/guides/author-apps/secrets/overview/snippets/secretstore.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Injected automatically by the rad CLI.') +@description('The ID of your Radius Environment. Injected automatically by the rad CLI.') param environment string @description('The data for your TLS certificate') diff --git a/docs/content/guides/deploy-apps/_index.md b/docs/content/guides/deploy-apps/_index.md index f94f2a451..644ee0238 100644 --- a/docs/content/guides/deploy-apps/_index.md +++ b/docs/content/guides/deploy-apps/_index.md @@ -2,6 +2,6 @@ type: docs title: "Deploying applications" linkTitle: "Deploying applications" -description: "Learn how to deploy a Radius application to an environment" +description: "Learn how to deploy a Radius Application to an environment" weight: 200 --- \ No newline at end of file diff --git a/docs/content/guides/deploy-apps/environments/howto-environment/index.md b/docs/content/guides/deploy-apps/environments/howto-environment/index.md index 3348f6bb6..bf1241797 100644 --- a/docs/content/guides/deploy-apps/environments/howto-environment/index.md +++ b/docs/content/guides/deploy-apps/environments/howto-environment/index.md @@ -2,24 +2,25 @@ type: docs title: "How-To: Initialize Radius Environments" linkTitle: "Initialize Environments" -description: "Learn how to create Radius environments" +description: "Learn how to create Radius Environments" weight: 200 categories: "How-To" tags: ["environments"] --- -Radius environments are prepared landing zones for applications that contain configuration and Recipes. To learn more visit the [environments overview]({{< ref "/guides/deploy-apps/environments/overview" >}}) page. +Radius Environments are prepared landing zones for applications that contain configuration and Recipes. To learn more visit the [environments overview]({{< ref "/guides/deploy-apps/environments/overview" >}}) page. -Radius environments can be setup with the rad CLI via two paths: interactive or manual. +Radius Environments can be setup with the rad CLI via two paths: interactive or manual. ## Pre-requisites -- Install the [rad CLI]({{< ref getting-started >}}) -- Setup a supported [Kubernetes cluster]({{< ref "guides/operations/kubernetes" >}}) +- [Setup a supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) ## Create a development environment -1. Initialize a new [Radius environment]({{< ref "/guides/deploy-apps/environments/overview">}}) with [`rad init`]({{< ref rad_init >}}): +1. Initialize a new [Radius Environment]({{< ref "/guides/deploy-apps/environments/overview">}}) with [`rad init`]({{< ref rad_init >}}): ```bash rad init ``` @@ -59,16 +60,16 @@ Radius environments can be setup with the rad CLI via two paths: interactive or ```bash rad env list ``` -3. Use `rad recipe list` to see the list of available recipes: +3. Use `rad recipe list` to see the list of available Recipes: ```bash rad recipe list ``` ``` NAME TYPE TEMPLATE KIND TEMPLATE - default Applications.Datastores/mongoDatabases bicep radius.azurecr.io/recipes/dev/mongodatabases:latest - default Applications.Datastores/redisCaches bicep radius.azurecr.io/recipes/dev/rediscaches:latest + default Applications.Datastores/mongoDatabases bicep ghcr.io/radius-project/recipes/local-dev/mongodatabases:latest + default Applications.Datastores/redisCaches bicep ghcr.io/radius-project/recipes/local-dev/rediscaches:latest ``` - You can follow the [recipes]({{< ref "/guides/recipes/overview" >}}) documentation to learn more about the recipes and how to use them in your application. + You can follow the [Recipes]({{< ref "/guides/recipes/overview" >}}) documentation to learn more about the Recipes and how to use them in your application. ## Create an environment interactively @@ -179,7 +180,7 @@ Radius can also be installed and an environment created with manual rad CLI comm ``` -1. Create your Radius environment: +1. Create your Radius Environment: Run [`rad env create`]({{< ref rad_env_create >}}) to create a new environment in your resource group. Specify the `--namespace` flag to select the Kubernetes namespace to deploy resources into: @@ -187,7 +188,7 @@ Radius can also be installed and an environment created with manual rad CLI comm rad env create myEnvironment --group myGroup --namespace my-namespace ``` - You should see your Radius environment being created and linked to your resource group: + You should see your Radius Environment being created and linked to your resource group: ``` Creating Environment... diff --git a/docs/content/guides/deploy-apps/environments/overview/index.md b/docs/content/guides/deploy-apps/environments/overview/index.md index de1bb45d3..02f056e5e 100644 --- a/docs/content/guides/deploy-apps/environments/overview/index.md +++ b/docs/content/guides/deploy-apps/environments/overview/index.md @@ -1,14 +1,14 @@ --- type: docs -title: "Overview: Radius environments" +title: "Overview: Radius Environments" linkTitle: "Overview" -description: "Learn about Radius environments and how to interact with them" +description: "Learn about Radius Environments and how to interact with them" weight: 100 categories: "Overview" tags: ["environments"] --- -Radius environments are prepared "landing zones" for Radius applications. Applications deployed to an environment will inherit the container runtime, configuration, and other settings from the environment. Stay tuned for additional environment capabilities coming soon. +Radius Environments are prepared "landing zones" for Radius Applications. Applications deployed to an environment will inherit the container runtime, configuration, and other settings from the environment. Stay tuned for additional environment capabilities coming soon. ## Configuration @@ -16,11 +16,11 @@ The following configuration options are available for environments: ### Container runtime -Radius environments can be configured with a container runtime, where Radius [containers]({{< ref "guides/author-apps/containers" >}}) will be run, along with [gateways and routes]({{< ref networking >}}). +Radius Environments can be configured with a container runtime, where Radius [containers]({{< ref "guides/author-apps/containers" >}}) will be run, along with [gateways and routes]({{< ref networking >}}). A Kubernetes namespace is specified on the environment to tell Radius where to render application resources at deploy time. -Diagram showing a Radius environment mapping to a Kubernetes cluster and namespace +{{< image src=environments.png alt="Diagram showing a Radius Environment mapping to a Kubernetes cluster and namespace" width=800px >}} ### Cloud Provider @@ -43,7 +43,7 @@ Supported identity providers: ## CLI commands -The following commands let you interact with Radius environments: +The following commands let you interact with Radius Environments: {{< tabs init list show delete switch >}} diff --git a/docs/content/guides/deploy-apps/howto-delete/index.md b/docs/content/guides/deploy-apps/howto-delete/index.md index cc656edf8..ff1275a3b 100644 --- a/docs/content/guides/deploy-apps/howto-delete/index.md +++ b/docs/content/guides/deploy-apps/howto-delete/index.md @@ -1,8 +1,8 @@ --- type: docs -title: "How-To: Delete an application from a Radius environment" +title: "How-To: Delete an application from a Radius Environment" linkTitle: "Delete apps" -description: "Learn how to delete a Radius application" +description: "Learn how to delete a Radius Application" weight: 400 categories: "How-To" tags: ["delete"] @@ -10,24 +10,24 @@ tags: ["delete"] ## Pre-requisites -- A [deployed application]({{< ref deploy-apps >}}) in a Radius environment. +- A [deployed application]({{< ref deploy-apps >}}) in a Radius Environment. -## Step 1: Delete the Radius application from the environment +## Step 1: Delete the Radius Application from the environment -You can delete the Radius application using the [`rad app delete`]({{< ref rad_application_delete >}}) command: +You can delete the Radius Application using the [`rad app delete`]({{< ref rad_application_delete >}}) command: ```bash rad app delete ``` -This will delete the following resources from the Radius environment +This will delete the following resources from the Radius Environment 1. All the resources created by Radius on the Kubernetes cluster under the `-` namespace 2. All the resources provisioned by Recipes ## Step 2: Delete any cloud/platform resources -AWS, Azure, Kubernetes, and any other cloud/platform resources that were deployed alongside your Radius application and not as part of a Recipe need to be deleted as a separate step. +AWS, Azure, Kubernetes, and any other cloud/platform resources that were deployed alongside your Radius Application and not as part of a Recipe need to be deleted as a separate step. {{< tabs Azure AWS Kubernetes >}} diff --git a/docs/content/guides/deploy-apps/howto-deploy/_index.md b/docs/content/guides/deploy-apps/howto-deploy/_index.md index 388ee9f54..91afa66c7 100644 --- a/docs/content/guides/deploy-apps/howto-deploy/_index.md +++ b/docs/content/guides/deploy-apps/howto-deploy/_index.md @@ -2,6 +2,6 @@ type: docs title: "Deploying applications" linkTitle: "Deploy apps" -description: "Learn how to deploy a Radius application to an environment" +description: "Learn how to deploy a Radius Application to an environment" weight: 300 --- \ No newline at end of file diff --git a/docs/content/guides/deploy-apps/howto-deploy/howto-deploy-cicd/index.md b/docs/content/guides/deploy-apps/howto-deploy/howto-deploy-cicd/index.md index d34332308..1cedabc3d 100644 --- a/docs/content/guides/deploy-apps/howto-deploy/howto-deploy-cicd/index.md +++ b/docs/content/guides/deploy-apps/howto-deploy/howto-deploy-cicd/index.md @@ -12,7 +12,7 @@ It's easy to get Radius added to your GitHub Actions deployment pipelines. By le ## Prerequisites -- Kubernetes cluster (AKS, EKS, GKE, etc.) +- [Setup a supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) - Radius control plane [installed in your cluster]({{< ref kubernetes-install >}}) - GitHub repo with Actions enabled @@ -97,10 +97,10 @@ Next, download the latest `rad` CLI release and setup your workspace: ```yml - name: Download rad CLI and rad-bicep run: | - wget -q "https://get.radapp.dev/tools/rad/install.sh" -O - | /bin/bash + wget -q "https://raw.githubusercontent.com/radius-project/radius/main/deploy/install.sh" -O - | /bin/bash ./rad bicep download ./rad --version - - name: Initialize Radius environment + - name: Initialize Radius Environment run: | ./rad group create default ./rad workspace create kubernetes default --group default diff --git a/docs/content/guides/deploy-apps/howto-deploy/howto-deploy-rad-cli/index.md b/docs/content/guides/deploy-apps/howto-deploy/howto-deploy-rad-cli/index.md index 330bdd74a..407f39bf4 100644 --- a/docs/content/guides/deploy-apps/howto-deploy/howto-deploy-rad-cli/index.md +++ b/docs/content/guides/deploy-apps/howto-deploy/howto-deploy-rad-cli/index.md @@ -1,17 +1,17 @@ --- type: docs -title: "How-To: Deploying applications into a Radius environment" +title: "How-To: Deploying applications into a Radius Environment" linkTitle: "Deploy via CLI" -description: "Learn how to deploy a Radius application" +description: "Learn how to deploy a Radius Application" weight: 200 categories: "How-To" tags: ["deployments"] --- ## Pre-requisites -- [An authored Radius application]({{< ref author-apps >}}) +- [An authored Radius Application]({{< ref author-apps >}}) -## Step 1 : Deploy an application into a Radius environment +## Step 1 : Deploy an application into a Radius Environment {{< tabs Deploy-app Deploy-app-with-parameters >}} @@ -21,7 +21,7 @@ An application can be deployed to an environment with [`rad deploy`]({{< ref rad ```bash rad deploy app.bicep ``` - This will deploy the application to the created Radius environment. + This will deploy the application to the created Radius Environment. {{% /codetab %}} {{% codetab %}} @@ -31,12 +31,12 @@ Parameters can be included as part of `rad deploy` via the `-p/--parameters` fla rad deploy app.bicep -p param1=value1 -p param2=value2 ``` - This will deploy the application to the created Radius environment injecting the parameters into the application. + This will deploy the application to the created Radius Environment injecting the parameters into the application. You can find more examples of deploying applications with parameters [here]({{< ref "rad_deploy#examples" >}}). {{% /codetab %}} {{< /tabs >}} - > Follow the [how-to guide]({{< ref howto-troubleshootapps >}}) for guidance on troubleshooting your Radius application + > Follow the [how-to guide]({{< ref howto-troubleshootapps >}}) for guidance on troubleshooting your Radius Application diff --git a/docs/content/guides/deploy-apps/howto-deploy/howto-run-app/index.md b/docs/content/guides/deploy-apps/howto-deploy/howto-run-app/index.md index 3fb95d385..baf03af94 100644 --- a/docs/content/guides/deploy-apps/howto-deploy/howto-run-app/index.md +++ b/docs/content/guides/deploy-apps/howto-deploy/howto-run-app/index.md @@ -9,7 +9,7 @@ tags: ["deployments"] --- ## Pre-requisites -- [An authored Radius application]({{< ref author-apps >}}) +- [An authored Radius Application]({{< ref author-apps >}}) ## Step 1: Run an application @@ -32,7 +32,7 @@ Parameters can be included as part of `rad run` via the `-p/--parameters` flag: rad run app.bicep -p param1=value1 -p param2=value2 ``` -This will deploy the application to the created Radius environment injecting the parameters into the application. +This will deploy the application to the created Radius Environment injecting the parameters into the application. You can find more examples of deploying applications with parameters [here]({{< ref "rad_run#examples" >}}). {{% /codetab %}} diff --git a/docs/content/guides/deploy-apps/howto-troubleshootapps/index.md b/docs/content/guides/deploy-apps/howto-troubleshootapps/index.md index 73a7737a0..f22ef1fb4 100644 --- a/docs/content/guides/deploy-apps/howto-troubleshootapps/index.md +++ b/docs/content/guides/deploy-apps/howto-troubleshootapps/index.md @@ -2,7 +2,7 @@ type: docs title: "How-To: Troubleshoot applications" linkTitle: "Troubleshoot apps" -description: "Learn how to troubleshoot issues with the Radius application" +description: "Learn how to troubleshoot issues with the Radius Application" weight: 900 categories: "How-To" tags: ["troubleshooting"] @@ -10,7 +10,7 @@ tags: ["troubleshooting"] ## Pre-requisites -- A [deployed application]({{< ref deploy-apps >}}) in a Radius environment. +- A [deployed application]({{< ref deploy-apps >}}) in a Radius Environment. ## Step 1: Port-forward container to your local machine @@ -23,10 +23,10 @@ Refer to [`rad resource expose`]({{< ref rad_resource_expose >}}) for more detai ## Step 2: Inspect container logs -If your Radius application is unresponsive or does not connect to its dependencies, Use the below command to inspect logs from container: +If your Radius Application is unresponsive or does not connect to its dependencies, Use the below command to inspect logs from container: ```bash -rad resource logs containers frontend -a +rad resource logs containers -a ``` > Also refer to the [connections section]({{< ref "guides/author-apps/containers/overview#connections" >}}) to know about the naming convention of the environment variables and inspect if your application uses the right variables. diff --git a/docs/content/guides/operations/_index.md b/docs/content/guides/operations/_index.md index d0eb2d045..8356acae6 100644 --- a/docs/content/guides/operations/_index.md +++ b/docs/content/guides/operations/_index.md @@ -2,6 +2,6 @@ type: docs title: "Environment operations guides" linkTitle: "Operations" -description: "Learn how to deploy and operate Radius environments" +description: "Learn how to deploy and operate Radius Environments" weight: 400 --- diff --git a/docs/content/guides/operations/control-plane/howto-postman/index.md b/docs/content/guides/operations/control-plane/howto-postman/index.md index 76563a31e..1597b4b5b 100644 --- a/docs/content/guides/operations/control-plane/howto-postman/index.md +++ b/docs/content/guides/operations/control-plane/howto-postman/index.md @@ -16,7 +16,7 @@ Before you get started, you'll need to make sure you have the following tools an - [Postman](https://www.postman.com/) - [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) -- [Radius initialized with `rad init`](https://docs.radapp.dev/getting-started/) +- [Radius environment]({{< ref "installation#step-3-initialize-radius" >}}) ### Step 1: Create Kubernetes objects @@ -100,14 +100,14 @@ Next, you'll need to get the control plane API endpoint and use Postman to inter 1. Set the URL to the following, which will [retrieve all your resource groups]({{< ref api-ucp >}}): ``` - /apis/api.ucp.dev/v1alpha3/planes/radius/local/resourcegroups?api-version=2022-09-01-privatepreview + /apis/api.ucp.dev/v1alpha3/planes/radius/local/resourcegroups?api-version=2023-10-01-preview ``` - Screenshot of Postman with filled out URL + {{< image src="postman-url.png" width=900px alt="Screenshot of Postman with filled out URL" >}} 1. Open the `Authorization` tab and select `Bearer Token` from the `Type` dropdown. Paste the token you generated in step 2 into the `Token` field: - Screenshot of Postman with filled out auth token + {{< image src="postman-auth.png" width=900px alt="Screenshot of Postman with filled out auth token" >}} 1. Click the `Send` button to send the request. You will now see your resource groups: @@ -124,13 +124,13 @@ Next, you'll need to get the control plane API endpoint and use Postman to inter ] } ``` -1. Update your request URL to [list all the Radius environments]({{< ref api-environments >}}) in your resource group (_make sure to update the name of your resource group in the URL. In this example the resource group name is default_): +1. Update your request URL to [list all the Radius Environments]({{< ref api-environments >}}) in your resource group (_make sure to update the name of your resource group in the URL. In this example the resource group name is default_): ``` /apis/api.ucp.dev/v1alpha3/planes/radius/local/resourcegroups/default/providers/Applications.Core/environments?api-version=2023-10-01-preview ``` - You should now see your Radius environment(s): + You should now see your Radius Environment(s): ``` { diff --git a/docs/content/guides/operations/control-plane/logs/fluentd/index.md b/docs/content/guides/operations/control-plane/logs/fluentd/index.md index 8babf8e80..59c6e3e1d 100644 --- a/docs/content/guides/operations/control-plane/logs/fluentd/index.md +++ b/docs/content/guides/operations/control-plane/logs/fluentd/index.md @@ -10,7 +10,7 @@ tags: ["logs","observability"] ## Prerequisites -- [Supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) +- [Setup a supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) - [kubectl](https://kubernetes.io/docs/tasks/tools/) - [Helm 3](https://helm.sh/) @@ -52,7 +52,12 @@ tags: ["logs","observability"] 5. Ensure that Elastic Search and Kibana are running in your Kubernetes cluster ```bash - $ kubectl get pods -n radius-monitoring + kubectl get pods -n radius-monitoring + ``` + + You should see: + + ``` NAME READY STATUS RESTARTS AGE elasticsearch-master-0 1/1 Running 0 6m58s kibana-kibana-95bc54b89-zqdrk 1/1 Running 0 4m21s @@ -78,7 +83,12 @@ tags: ["logs","observability"] 2. Ensure that Fluentd is running as a daemonset. The number of Fluentd instances should be the same as the number of cluster nodes. In the example below, there is only one node in the cluster: ```bash - $ kubectl get pods -n kube-system -w + kubectl get pods -n kube-system -w + ``` + + You should see: + + ``` NAME READY STATUS RESTARTS AGE coredns-6955765f44-cxjxk 1/1 Running 0 4m41s coredns-6955765f44-jlskv 1/1 Running 0 4m41s @@ -105,46 +115,51 @@ _Note: There is a small delay for Elastic Search to index the logs that Fluentd 1. Port-forward from localhost to `svc/kibana-kibana` ```bash - $ kubectl port-forward svc/kibana-kibana 5601 -n radius-monitoring + kubectl port-forward svc/kibana-kibana 5601 -n radius-monitoring + ``` + + You should see: + + ``` Forwarding from 127.0.0.1:5601 -> 5601 Forwarding from [::1]:5601 -> 5601 Handling connection for 5601 Handling connection for 5601 ``` -2. Browse to `http://localhost:5601` +1. Browse to `http://localhost:5601` -3. Expand the drop-down menu and click **Management β†’ Stack Management** +2. Expand the drop-down menu and click **Management β†’ Stack Management** ![Stack Management item under Kibana Management menu options](kibana-1.png) -4. On the Stack Management page, select **Data β†’ Index Management** and wait until `radius-*` is indexed. +3. On the Stack Management page, select **Data β†’ Index Management** and wait until `radius-*` is indexed. ![Index Management view on Kibana Stack Management page](kibana-2.png) -5. Once `radius-*` is indexed, click on **Kibana β†’ Index Patterns** and then the **Create index pattern** button. +4. Once `radius-*` is indexed, click on **Kibana β†’ Index Patterns** and then the **Create index pattern** button. ![Kibana create index pattern button](kibana-3.png) -6. Define a new index pattern by typing `radius*` into the **Index Pattern name** field, then click the **Next step** button to continue. +5. Define a new index pattern by typing `radius*` into the **Index Pattern name** field, then click the **Next step** button to continue. ![Kibana define an index pattern page](kibana-4.png) -7. Configure the primary time field to use with the new index pattern by selecting the `@timestamp` option from the **Time field** drop-down. Click the **Create index pattern** button to complete creation of the index pattern. +6. Configure the primary time field to use with the new index pattern by selecting the `@timestamp` option from the **Time field** drop-down. Click the **Create index pattern** button to complete creation of the index pattern. ![Kibana configure settings page for creating an index pattern](kibana-5.png) -8. The newly created index pattern should be shown. Confirm that the fields of interest such as `scope`, `type`, `app_id`, `level`, etc. are being indexed by using the search box in the **Fields** tab. +7. The newly created index pattern should be shown. Confirm that the fields of interest such as `scope`, `type`, `app_id`, `level`, etc. are being indexed by using the search box in the **Fields** tab. _Note: If you cannot find the indexed field, please wait. The time it takes to search across all indexed fields depends on the volume of data and size of the resource that the elastic search is running on._ ![View of created Kibana index pattern](kibana-6.png) -9. To explore the indexed data, expand the drop-down menu and click **Analytics β†’ Discover**. +8. To explore the indexed data, expand the drop-down menu and click **Analytics β†’ Discover**. ![Discover item under Kibana Analytics menu options](kibana-7.png) -10. In the search box, type in a query string such as `scope:*` and click the **Refresh** button to view the results. +9. In the search box, type in a query string such as `scope:*` and click the **Refresh** button to view the results. _Note: This can take a long time. The time it takes to return all results depends on the volume of data and size of the resource that the elastic search is running on._ diff --git a/docs/content/guides/operations/control-plane/metrics/grafana/index.md b/docs/content/guides/operations/control-plane/metrics/grafana/index.md index 8fb41126d..61ced907d 100644 --- a/docs/content/guides/operations/control-plane/metrics/grafana/index.md +++ b/docs/content/guides/operations/control-plane/metrics/grafana/index.md @@ -16,25 +16,27 @@ There are two example dashboards that you can import into Grafana to quickly get ### Control plane overview -The [radius-overview-dashboard.json](https://get.radapp.dev/tools/grafana/radius-overview-dashboard.json) template shows Radius and Deployment Engine statuses, including runtime, and server-side health: +The [radius-overview-dashboard.json](https://raw.githubusercontent.com/radius-project/radius/main/grafana/radius-overview-dashboard.json) template shows Radius and Deployment Engine statuses, including runtime, and server-side health: -1st screenshot of the Radius Overview Dashboard
+{{< image src="radius-overview-1.png" alt="1st screenshot of the Radius Overview Dashboard" width=1200 >}}
-2nd screenshot of the Radius Overview Dashboard
+{{< image src="radius-overview-2.png" alt="2nd screenshot of the Radius Overview Dashboard" width=1200 >}}
### Resource provider overview -The [radius-resource-provider-dashboard.json](https://get.radapp.dev/tools/grafana/radius-resource-provider-dashboard.json) template shows Radius Resource Provider status, including runtime, server-side, and operations health: +The [radius-resource-provider-dashboard.json](https://raw.githubusercontent.com/radius-project/radius/main/grafana/radius-resource-provider-dashboard.json) template shows Radius Resource Provider status, including runtime, server-side, and operations health: -1st screenshot of the Radius Resource Provider Dashboard
+{{< image src="radius-resource-provider-1.png" alt="1st screenshot of the Radius Resource Provider Dashboard" width=1200 >}}
-2nd screenshot of the Radius Resource Provider Dashboard
+{{< image src="radius-resource-provider-2.png" alt="2nd screenshot of the Radius Resource Provider Dashboard" width=1200 >}}
## Setup on Kubernetes ### Pre-requisites - [Setup Prometheus]({{}}) on your Kubernetes cluster +- [Helm 3](https://helm.sh/) + ### Install Grafana @@ -133,8 +135,8 @@ Now that Grafana is installed, you need to configure it to use Prometheus as a d ### Import dashboards in Grafana 1. Download the Grafana dashboard templates: - - [radius-overview-dashboard.json](https://get.radapp.dev/tools/grafana/radius-overview-dashboard.json) - - [radius-resource-provider-dashboard.json](https://get.radapp.dev/tools/grafana/radius-resource-provider-dashboard.json) + - [radius-overview-dashboard.json](https://raw.githubusercontent.com/radius-project/radius/main/grafana/radius-overview-dashboard.json) + - [radius-resource-provider-dashboard.json](https://raw.githubusercontent.com/radius-project/radius/main/grafana/radius-resource-provider-dashboard.json) 1. In the upper left corner of the Grafana home screen, click the "+" option, then "Import", and select your templates. 1. Select the dashboard that you imported and enjoy! diff --git a/docs/content/guides/operations/control-plane/traces/jaeger/index.md b/docs/content/guides/operations/control-plane/traces/jaeger/index.md index 6c4ebb6ec..68329e2c3 100644 --- a/docs/content/guides/operations/control-plane/traces/jaeger/index.md +++ b/docs/content/guides/operations/control-plane/traces/jaeger/index.md @@ -12,6 +12,10 @@ tags: ["tracing", "observability"] The following steps show you how to configure the Radius control plane to send distributed tracing data to Jaeger running as a container in your Kubernetes cluster and how to view the data. +## Pre-requisites + +- [kubectl CLI](https://kubernetes.io/docs/tasks/tools/) + ## Step 1: Install Jaeger on Kubernetes 1. Create the namespace `radius-monitoring`: @@ -56,7 +60,7 @@ The following steps show you how to configure the Radius control plane to send d 2. In your browser, go to [http://localhost:16686](http://localhost:16686) to see the Jaeger UI: - + {{< image src="jaeger_ui.png" alt="" style="width:100%" >}} ## References diff --git a/docs/content/guides/operations/control-plane/traces/zipkin/index.md b/docs/content/guides/operations/control-plane/traces/zipkin/index.md index 625364d35..498b2543b 100644 --- a/docs/content/guides/operations/control-plane/traces/zipkin/index.md +++ b/docs/content/guides/operations/control-plane/traces/zipkin/index.md @@ -12,6 +12,10 @@ tags: ["tracing", "observability"] The following steps show you how to configure the [Radius control plane]({{< ref architecture-concept >}}) components to send distributed tracing data to Zipkin running as a container in your Kubernetes cluster and how to view the data. +## Pre-requisites + +- [kubectl CLI](https://kubernetes.io/docs/tasks/tools/) + ## Step 1: Install Zipkin on Kubernetes 1. Create the namespace `radius-monitoring`: @@ -50,7 +54,7 @@ The following steps show you how to configure the [Radius control plane]({{< ref 2. In your browser, go to [http://localhost:9411](http://localhost:9411) to see the Zipkin UI and run a query: - + {{< image src="zipkin_ui.png" alt="" style="width:100%" >}} 3. Done! You can now use the Zipkin UI to view tracing data for your Radius control plane. diff --git a/docs/content/guides/operations/groups/howto-resourcegroups/index.md b/docs/content/guides/operations/groups/howto-resourcegroups/index.md index 5ab4a4681..2f870c40c 100644 --- a/docs/content/guides/operations/groups/howto-resourcegroups/index.md +++ b/docs/content/guides/operations/groups/howto-resourcegroups/index.md @@ -4,6 +4,7 @@ title: "How-To: Manage resource groups" linkTitle: "Manage groups" description: "Learn how to manage resource groups in Radius" weight: 200 +categories: "How-To" --- This guide will walk you through the process of managing resource groups in Radius. For more information on resource groups, see [Resource groups]({{< ref groups >}}). @@ -11,7 +12,7 @@ This guide will walk you through the process of managing resource groups in Radi ## Pre-requisites - [Supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) -- [Radius CLI]({{< ref howto-rad-cli >}}) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) ## Step 1: Ensure Radius is installed diff --git a/docs/content/guides/operations/groups/overview/index.md b/docs/content/guides/operations/groups/overview/index.md index 675f90e3a..65735be2f 100644 --- a/docs/content/guides/operations/groups/overview/index.md +++ b/docs/content/guides/operations/groups/overview/index.md @@ -6,9 +6,9 @@ description: "Learn how to manage collections of resources with resource groups" weight: 100 --- -Resource groups are collections of resources that you can manage as a single unit. You can use resource groups to organize your resources when deploying Radius applications. +Resource groups are collections of resources that you can manage as a single unit. You can use resource groups to organize your resources when deploying Radius Applications. -Diagram showing Radius resources inside of a Radius resource group +{{< image src="group-diagram.png" alt="Diagram showing Radius resources inside of a Radius resource group" width=600px >}} {{% alert title="Radius vs. Azure Resource Groups" color="primary" %}} Note that resource groups in Radius are not the same as [Azure resource groups](https://learn.microsoft.com/azure/azure-resource-manager/management/manage-resource-groups-portal). Azure resource groups are used to organize Azure resources, while Radius resource groups are used to organize Radius resources, such as applications, environments, portable resources, and routes. When you deploy a template that contains both, Radius resources route to the Radius resource group defined in your workspace, and Azure resources route to the Azure resource group defined in your [cloud provider]({{< ref providers >}}). diff --git a/docs/content/guides/operations/kubernetes/kubernetes-install/index.md b/docs/content/guides/operations/kubernetes/kubernetes-install/index.md index 3306323ba..917d46f15 100644 --- a/docs/content/guides/operations/kubernetes/kubernetes-install/index.md +++ b/docs/content/guides/operations/kubernetes/kubernetes-install/index.md @@ -20,7 +20,7 @@ Use the [`rad install kubernetes` command]({{< ref rad_install_kubernetes >}}) t rad install kubernetes # Install Radius with tracing and public endpoint override -rad install kubernetes --set global.zipkin.url=http://jaeger-collector.radius-monitoring.svc.cluster.local:9411/api/v2/spans,rp.publicEndpointOverride=localhost:8081` +rad install kubernetes --set global.zipkin.url=http://jaeger-collector.radius-monitoring.svc.cluster.local:9411/api/v2/spans,rp.publicEndpointOverride=localhost:8081 ``` ## Install with Helm @@ -47,10 +47,10 @@ rad install kubernetes --set global.zipkin.url=http://jaeger-collector.radius-mo | `global.prometheus.enabled` | `true` | Enables Prometheus metrics. Defaults to `true` | `global.prometheus.path` | `"/metrics"` | Metrics endpoint | `global.prometheus.port` | `9090` | Metrics port -| `rp.image` | `radius.azurecr.io/appcore-rp` | Location of the Radius resource provider (RP) image +| `rp.image` | `ghcr.io/radius-project/applications-rp:latest` //TODO | Location of the Radius resource provider (RP) image | `rp.tag` | `latest` | Tag of the Radius resource provider (RP) image |`rp.publicEndpointOverride` | `""` | Public endpoint of the Kubernetes cluster. Overrides the default behavior of automatically detecting the public endpoint. -| `de.image` | `radius.azurecr.io/deployment-engine` | Location of the Bicep deployment engine (DE) image +| `de.image` | `ghcr.io/radius-project/deployment-engine` | Location of the Bicep deployment engine (DE) image | `de.tag` | `latest` | Tag of the Bicep deployment engine (DE) image -| `ucp.image` | `radius.azurecr.io/ucpd` | Location of universal control plane (UCP) image +| `ucp.image` | `ghcr.io/radius-project/ucpd` | Location of universal control plane (UCP) image | `ucp.tag` | `latest` | Tag of the universal control plane (UCP) image diff --git a/docs/content/guides/operations/kubernetes/kubernetes-metadata/index.md b/docs/content/guides/operations/kubernetes/kubernetes-metadata/index.md index 10b3434f7..f4f3c8310 100644 --- a/docs/content/guides/operations/kubernetes/kubernetes-metadata/index.md +++ b/docs/content/guides/operations/kubernetes/kubernetes-metadata/index.md @@ -41,7 +41,6 @@ You can set labels and annotations on an environment, application, or container Kubernetes metadata can be applied at the environment, application, or container layers. Metadata cascades down from the environment to the application to the containers, gateway and route resources. For example, you can set labels and annotations at an environment level and all containers within the environment will gain these labels and annotation, without the need for an explicit extension on the containers. The following resources will gain the Kubernetes metadata for their [output resources]({{< ref "/guides/operations/kubernetes/overview#resource-mapping" >}}) from labels, annotations set at Environment, Application levels: - Applications.Core/containers -- Applications.Core/httpRoutes - Applications.Core/gateways ### Metadata processing order @@ -58,7 +57,7 @@ In the case where layers have conflicting keys (_i.e. Application and Container ## Reserved keys -Certain labels/annotations have special uses to Radius internally and are not allowed to be overridden by user. Labels/Annotations with keys that have a prefix : `radius.dev/` will be ignored during processing. +Certain labels/annotations have special uses to Radius internally and are not allowed to be overridden by user. Labels/Annotations with keys that have a prefix : `radapp.io/` will be ignored during processing. ## Extension processing order @@ -94,9 +93,9 @@ Labels: key1=appValue1 key2=containerValue2 team.contact.name=Frontend team.contact.alias=frontend-eng - radius.dev/application=myapp - radius.dev/resource=frontend - radius.dev/resource-type=applications.core-containers + radapp.io/application=myapp + radapp.io/resource=frontend + radapp.io/resource-type=applications.core-containers ... Annotations: prometheus.io/port: 9090 prometheus.io/scrape: true @@ -112,9 +111,9 @@ The labels & annotations were set based on the following: | `team.key2` | `containerValue2` | Container value overrides application value | `team.contact.name` | `Frontend` | Container value overrides application value | `team.contact.alias` | `frontend-eng` | Container value overrides application value -| `radius.dev/application` | `myapp` | Radius-injected label -| `radius.dev/resource` | `frontend` | Radius-injected label -| `radius.dev/resource-type` | `applications.core-containers` | Radius-injected label +| `radapp.io/application` | `myapp` | Radius-injected label +| `radapp.io/resource` | `frontend` | Radius-injected label +| `radapp.io/resource-type` | `applications.core-containers` | Radius-injected label | **Annotations** | `prometheus.io/port` | `9090` | Application annotation is applied | `prometheus.io/scrape` | `true `| Application annotation is applied diff --git a/docs/content/guides/operations/kubernetes/kubernetes-upgrade/index.md b/docs/content/guides/operations/kubernetes/kubernetes-upgrade/index.md index 463ef49a5..600eb76d6 100644 --- a/docs/content/guides/operations/kubernetes/kubernetes-upgrade/index.md +++ b/docs/content/guides/operations/kubernetes/kubernetes-upgrade/index.md @@ -9,9 +9,9 @@ categories: "How-To" Radius does not offer backward compatibility with previous releases. Breaking changes may happen between releases and we recommend doing a fresh installation of the latest version of Radius after every release. -## Step 1 : Delete any existing Radius environments +## Step 1 : Delete any existing Radius Environments -To delete any existing Radius environments, run the following command: +To delete any existing Radius Environments, run the following command: ```bash rad env delete @@ -33,6 +33,6 @@ rad uninstall kubernetes {{< read file= "/shared-content/installation/vscode-bicep/install-vscode-bicep.md" >}} -## Step 5: Initialize the Radius control-plane and the Radius environment +## Step 5: Initialize the Radius control-plane and the Radius Environment {{< read file= "/shared-content/installation/install-radius/initialize-radius.md" >}} diff --git a/docs/content/guides/operations/kubernetes/overview/index.md b/docs/content/guides/operations/kubernetes/overview/index.md index 740ec5447..91c584b3d 100644 --- a/docs/content/guides/operations/kubernetes/overview/index.md +++ b/docs/content/guides/operations/kubernetes/overview/index.md @@ -8,9 +8,9 @@ categories: ["Overview"] tags: ["Kubernetes"] --- -Radius offers a Kubernetes-based platform for hosting the [Radius control plane]({{< ref "/guides/operations/control-plane" >}}) and [Radius environments]({{< ref "/guides/deploy-apps/environments/overview" >}}). +Radius offers a Kubernetes-based platform for hosting the [Radius control plane]({{< ref "/guides/operations/control-plane" >}}) and [Radius Environments]({{< ref "/guides/deploy-apps/environments/overview" >}}). -Diagram showing Radius resources being mapped to Kubernetes objects +{{< image src="kubernetes-mapping.png" alt="Diagram showing Radius resources being mapped to Kubernetes objects" width=600px >}} ## Supported Kubernetes versions @@ -22,8 +22,7 @@ Radius resources, when deployed to a Kubernetes environment, are mapped to one o | Radius resource | Kubernetes object | |----------------------------------|-------------------| -| [`Applications.Core/containers`]({{< ref container-schema >}}) | `apps/Deployment@v1` | -| [`Applications.Core/httpRoutes`]({{< ref httproute >}}) | `core/Service@v1` | +| [`Applications.Core/containers`]({{< ref container-schema >}}) | `apps/Deployment@v1`
`core/Service@v1` _(if ports defined)_ | | [`Applications.Core/gateways`]({{< ref gateway >}}) | `projectcontour.io/HTTPProxy@v1` | | [`Applications.Dapr/pubSubBrokers`]({{< ref dapr-pubsub >}}) | `dapr.io/Component@v1alpha1` | | [`Applications.Dapr/secretStores`]({{< ref dapr-secretstore >}}) | `dapr.io/Component@v1alpha1` | @@ -45,7 +44,7 @@ For multiple Radius resources that map to a single Kubernetes resource (_e.g. da ## Kubernetes metadata -Radius environments, applications, and resources can be annotated/labeled with Kubernetes metadata. Refer to the Kubernetes metadata page for more information: +Radius Environments, applications, and resources can be annotated/labeled with Kubernetes metadata. Refer to the Kubernetes metadata page for more information: {{< button text="Kubernetes metadata" page="kubernetes-metadata" >}} @@ -56,7 +55,7 @@ The following clusters have been tested and validated to ensure they support all {{< tabs AKS k3d kind EKS >}} {{% codetab %}} -Azure Kubernetes Service (AKS) clusters are the easiest way to get up and running quickly with a Radius environment. To learn how to setup a cluster visit the [Azure docs](https://docs.microsoft.com/azure/aks/learn/quick-kubernetes-deploy-portal?tabs=azure-cli). +Azure Kubernetes Service (AKS) clusters are the easiest way to get up and running quickly with a Radius Environment. To learn how to setup a cluster visit the [Azure docs](https://docs.microsoft.com/azure/aks/learn/quick-kubernetes-deploy-portal?tabs=azure-cli). Note that [AKS-managed AAD](https://docs.microsoft.com/en-us/azure/aks/managed-aad) is not supported currently. @@ -67,7 +66,7 @@ az aks create --subscription mySubscription --resource-group myResourceGroup --n az aks get-credentials --subscription mySubscription --resource-group myResourceGroup --name myAKSCluster ``` -Once deployed and your kubectl context has been set as your default, you can run the following to create a Radius environment and install the control plane: +Once deployed and your kubectl context has been set as your default, you can run the following to create a Radius Environment and install the control plane: ```bash rad init @@ -118,7 +117,7 @@ nodes: listenAddress: "0.0.0.0" ``` -Then, create a kind cluster with this config and initialize your Radius environment: +Then, create a kind cluster with this config and initialize your Radius Environment: ```bash # Create the kind cluster kind create cluster --config kind-config.yaml @@ -140,7 +139,7 @@ Amazon Elastic Kubernetes Service (Amazon EKS) is a managed service that you can eksctl create cluster --name my-cluster --region region-code ``` -Once deployed and your kubectl context has been set as your default, you can run the following to create a Radius environment and install the control plane: +Once deployed and your kubectl context has been set as your default, you can run the following to create a Radius Environment and install the control plane: ```bash rad init diff --git a/docs/content/guides/operations/providers/howto-aws-provider/index.md b/docs/content/guides/operations/providers/howto-aws-provider/index.md index f273d3bf3..341138bc8 100644 --- a/docs/content/guides/operations/providers/howto-aws-provider/index.md +++ b/docs/content/guides/operations/providers/howto-aws-provider/index.md @@ -2,21 +2,20 @@ type: docs title: "How-To: Configure the AWS cloud provider" linkTitle: "Configure AWS provider" -description: "Learn how to configure the AWS provider for your Radius environment" +description: "Learn how to configure the AWS provider for your Radius Environment" weight: 300 categories: "How-To" tags: ["AWS"] --- -The AWS provider allows you to deploy and connect to AWS resources from a Radius environment on an EKS cluster. It can be configured: +The AWS provider allows you to deploy and connect to AWS resources from a Radius Environment on an EKS cluster. It can be configured: - [Interactively via `rad init`](#interactive-configuration) - [Manually via `rad env update` and `rad credential register`](#manual-configuration) ## Prerequisites -- [EKS cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) - [AWS account](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account) and an [IAM user](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html) -- [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) ## Interactive configuration @@ -26,9 +25,9 @@ The AWS provider allows you to deploy and connect to AWS resources from a Radius ``` 1. Follow the prompts, specifying: - - **Namespace** - The Kubernetes namespace where your application containers and networking resources will be deployed (different than the Radius control-plane namespace, `radius-system`) - - **Add an AWS provider** - Enter your IAM credentials and pick a region to deploy your AWS resources to - - **Environment name** - The name of the environment to create + - **Namespace** - The Kubernetes namespace where your application containers and networking resources will be deployed (different than the Radius control-plane namespace, `radius-system`). + - **Add an AWS provider** - Enter your IAM access key and secret key and pick a region to deploy your AWS resources to. + - **Environment name** - The name of the environment to create. You should see the following output: @@ -60,4 +59,4 @@ The AWS provider allows you to deploy and connect to AWS resources from a Radius ```bash rad credential register aws --access-key-id myAccessKeyId --secret-access-key mySecretAccessKey ``` - For more information on the command arguments visit [`rad credential register aws`]({{< ref rad_credential_register_aws >}}) \ No newline at end of file + For more information on the command arguments visit [`rad credential register aws`]({{< ref rad_credential_register_aws >}}) diff --git a/docs/content/guides/operations/providers/howto-azure-provider/index.md b/docs/content/guides/operations/providers/howto-azure-provider/index.md index 22e1335d3..e1a62e13f 100644 --- a/docs/content/guides/operations/providers/howto-azure-provider/index.md +++ b/docs/content/guides/operations/providers/howto-azure-provider/index.md @@ -2,13 +2,13 @@ type: docs title: "How-To: Configure the Azure cloud provider" linkTitle: "Configure Azure provider" -description: "Learn how to configure the Azure provider for your Radius environment" +description: "Learn how to configure the Azure provider for your Radius Environment" weight: 200 categories: "How-To" tags: ["Azure"] --- -The Azure provider allows you to deploy and connect to Azure resources from a self-hosted Radius environment. It can be configured: +The Azure provider allows you to deploy and connect to Azure resources from a self-hosted Radius Environment. It can be configured: - [Interactively via `rad init`](#interactive-configuration) - [Manually via `rad env update` and `rad credential register`](#manual-configuration) @@ -16,6 +16,7 @@ The Azure provider allows you to deploy and connect to Azure resources from a se - [Azure subscription](https://azure.com) - [az CLI](https://aka.ms/azcli) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) ## Interactive configuration diff --git a/docs/content/guides/operations/providers/overview/index.md b/docs/content/guides/operations/providers/overview/index.md index 5bd4cb25c..db27875e2 100644 --- a/docs/content/guides/operations/providers/overview/index.md +++ b/docs/content/guides/operations/providers/overview/index.md @@ -10,7 +10,7 @@ tags: ["AWS","Azure"] Radius cloud providers allow you to deploy and connect to cloud resources across various cloud platforms. For example, you can use the Radius Azure provider to run your application's services in your Kubernetes cluster, while deploying Azure resources to a specified Azure subscription and resource group. -Diagram of cloud resources getting forwarded to cloud platforms upon deployment +{{< image src="providers-overview.png" alt="Diagram of cloud resources getting forwarded to cloud platforms upon deployment" width="800px" >}} ## Supported cloud providers diff --git a/docs/content/guides/operations/versioning.md b/docs/content/guides/operations/versioning.md index c0e360fe5..32f6255b4 100644 --- a/docs/content/guides/operations/versioning.md +++ b/docs/content/guides/operations/versioning.md @@ -9,6 +9,6 @@ category: "Overview" ## Overview -Radius is currently in an early alpha preview and does not offer backward compatibility with previous releases. Breaking changes may happen between releases and we recommend doing a fresh installation of the latest version of Radius after every release. +Radius does not currently offer backward compatibility with previous releases. Breaking changes may happen between releases and we recommend doing a fresh installation of the latest version of Radius after every release. We are working on the versioning strategy and will be introducing a versioning policy in the future. diff --git a/docs/content/guides/operations/workspaces/howto-workspaces/index.md b/docs/content/guides/operations/workspaces/howto-workspaces/index.md index 4b37c9e6d..ebc6802e8 100644 --- a/docs/content/guides/operations/workspaces/howto-workspaces/index.md +++ b/docs/content/guides/operations/workspaces/howto-workspaces/index.md @@ -7,6 +7,11 @@ weight: 300 categories: "How-To" --- +## Pre-requisites + +- [Setup a supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) + ## How-to: Use workspaces to switch between environments When you have multiple environments initialized for different purposes workspaces enable you to switch between different environments easily. You can create separate workspaces and switch between them as you are working through your deployment lifecycle. diff --git a/docs/content/guides/operations/workspaces/overview/index.md b/docs/content/guides/operations/workspaces/overview/index.md index e6ff96d64..5400e10a3 100644 --- a/docs/content/guides/operations/workspaces/overview/index.md +++ b/docs/content/guides/operations/workspaces/overview/index.md @@ -9,11 +9,11 @@ categories: "Overview" Workspaces allow you to manage multiple Radius platforms and environments using a local configuration file. You can easily define and switch between workspaces to deploy and manage applications across separate environments. -Diagram showing a Radius configuration file mapping workspaces to Kubernetes clusters +{{< image src=workspaces.png alt="Diagram showing a Radius configuration file mapping workspaces to Kubernetes clusters" width=800px >}} ## CLI commands -The following commands let you interact with Radius environments: +The following commands let you interact with Radius Environments: {{< tabs create list show delete switch >}} diff --git a/docs/content/guides/recipes/_index.md b/docs/content/guides/recipes/_index.md index 4af065e94..cf593bf01 100644 --- a/docs/content/guides/recipes/_index.md +++ b/docs/content/guides/recipes/_index.md @@ -2,6 +2,6 @@ type: docs title: "Radius Recipes" linkTitle: "Recipes" -description: "Learn how to automate infrastructure deployment for your resources with Radius recipes" +description: "Learn how to automate infrastructure deployment for your resources with Radius Recipes" weight: 300 --- diff --git a/docs/content/guides/recipes/howto-author-recipes/index.md b/docs/content/guides/recipes/howto-author-recipes/index.md index 5599d81a6..228b58799 100644 --- a/docs/content/guides/recipes/howto-author-recipes/index.md +++ b/docs/content/guides/recipes/howto-author-recipes/index.md @@ -12,8 +12,10 @@ tags: ["recipes"] Before you get started, you'll need to make sure you have the following tools and resources: +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Radius environment]({{< ref "installation#step-3-initialize-radius" >}}) - [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) -- [Radius initialized with `rad init`]({{< ref getting-started >}}) ### Step 1: Author a Recipe template @@ -105,7 +107,7 @@ Resources are populated automatically for Bicep Recipes for any new Azure or AWS Recipes leverage [Bicep registries](https://learn.microsoft.com/azure/azure-resource-manager/bicep/private-module-registry) for template storage. Once you've authored a Recipe, you can publish it to your preferred OCI-compliant registry with [`rad bicep publish`]({{< ref rad_bicep_publish >}}): ```bash -rad bicep publish --file myrecipe.bicep --target br:myregistry.azurecr.io/recipes/myrecipe:1.1.0 +rad bicep publish --file myrecipe.bicep --target br:ghcr.io/USERNAME/recipes/myrecipe:1.1.0 ``` {{% /codetab %}} @@ -120,14 +122,14 @@ Follow the [Terraform module publishing docs](https://developer.hashicorp.com/te ### Step 5: Register your Recipe with your environment -Now that your Recipe template has been stored, you can add it your Radius environment to be used by developers. This allows you to mix-and-match templates for each of your environments such as dev, canary, and prod. +Now that your Recipe template has been stored, you can add it your Radius Environment to be used by developers. This allows you to mix-and-match templates for each of your environments such as dev, canary, and prod. {{< tabs "rad CLI - Bicep" "rad CLI - Terraform" "Bicep environment" >}} {{% codetab %}} ```bash -rad recipe register myrecipe --environment myenv --resource-type Applications.Datastores/redisCaches --template-kind bicep --template-path myregistry.azurecr.io/recipes/myrecipe:1.1.0 +rad recipe register myrecipe --environment myenv --resource-type Applications.Datastores/redisCaches --template-kind bicep --template-path ghcr.io/USERNAME/recipes/myrecipe:1.1.0 ``` {{% /codetab %}} diff --git a/docs/content/guides/recipes/howto-author-recipes/snippets/environment.bicep b/docs/content/guides/recipes/howto-author-recipes/snippets/environment.bicep index 0f9307deb..8413972d3 100644 --- a/docs/content/guides/recipes/howto-author-recipes/snippets/environment.bicep +++ b/docs/content/guides/recipes/howto-author-recipes/snippets/environment.bicep @@ -12,7 +12,7 @@ resource env 'Applications.Core/environments@2023-10-01-preview' = { 'Applications.Datastores/redisCaches':{ 'redis-bicep': { templateKind: 'bicep' - templatePath: 'https://myregistry.azurecr.io/recipes/myrecipe:1.1.0' + templatePath: 'https://ghcr.io/USERNAME/recipes/myrecipe:1.1.0' // Optionally set parameters for all resources calling this Recipe parameters: { port: 3000 diff --git a/docs/content/guides/recipes/howto-dev-recipes/index.md b/docs/content/guides/recipes/howto-dev-recipes/index.md new file mode 100644 index 000000000..053adf59a --- /dev/null +++ b/docs/content/guides/recipes/howto-dev-recipes/index.md @@ -0,0 +1,112 @@ +--- +type: docs +title: "How-To: Use local-dev Recipes" +linkTitle: "local-dev Recipes" +description: "Learn how to use the pre-defined Recipes that makes it easy to run dependencies in your application." +weight: 200 +categories: "How-To" +tags: ["recipes"] +--- + +Local development environments created by the rad init command include a set of pre-defined Recipes called [`local-dev` Recipes]({{< ref "guides/recipes/overview##use-lightweight-local-dev-recipes" >}}), to get lightweight containerized infrastructure up and running quickly. This guide teaches how to use a local dev recipe to deploy a Redis container to a Kubernetes cluster. + +## Prerequisites + +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Setup a supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) + +## Step 1: Initialize a Radius environment + +1. Begin in a new directory for your application: + + ```bash + mkdir recipes + cd recipes + ``` +2. Initialize a new dev environment: + + ```bash + rad init + ``` + + **Select 'No' when prompted to create an application.** + +3. Use [`rad recipe list`]({{< ref rad_recipe_list >}}) to view the Recipes in your environment: + + ```bash + rad recipe list + ``` + + You should see a table of available Recipes: + + ``` + NAME TYPE TEMPLATE KIND TEMPLATE VERSION TEMPLATE + default Applications.Datastores/sqlDatabases bicep ghcr.io/radius-project/recipes/local-dev/sqldatabases:latest + default Applications.Messaging/rabbitMQQueues bicep ghcr.io/radius-project/recipes/local-dev/rabbitmqqueues:latest + default Applications.Dapr/pubSubBrokers bicep ghcr.io/radius-project/recipes/local-dev/pubsubbrokers:latest + default Applications.Dapr/secretStores bicep ghcr.io/radius-project/recipes/local-dev/secretstores:latest + default Applications.Dapr/stateStores bicep ghcr.io/radius-project/recipes/local-dev/statestores:latest + default Applications.Datastores/mongoDatabases bicep ghcr.io/radius-project/recipes/local-dev/mongodatabases:latest + default Applications.Datastores/redisCaches bicep ghcr.io/radius-project/recipes/local-dev/rediscaches:latest + ``` + > Visit the [Recipes repo](https://github.com/radius-project/recipes) to learn more about the definition of these `local-dev` recipe templates. + + When a Recipe is named "default" it will be used automatically when a resource doesn't specify a Recipe name. This makes it easy for applications to fully defer to the Environment for how to manage infrastructure. + +## Step 2: Define your application + +Create a file named `app.bicep` with the following set of resources: + +{{< rad file="snippets/app.bicep" embed=true >}} + +Note that no Recipe name is specified within 'db', so it will be using the default Recipe for Redis in your environment. + +## Step 3: Deploy your application + +1. Run [`rad run`]({{< ref rad_run >}}) to deploy your application: + + ```bash + rad run ./app.bicep -a local-dev-app + ``` + + You should see the following output: + ``` + Building app.bicep... + Deploying template './app.bicep' for application 'local-dev-app' and environment 'default' from workspace 'default'... + + Deployment In Progress... + + Completed db Applications.Datastores/redisCaches + Completed frontend Applications.Core/containers + + Deployment Complete + + Resources: + frontend Applications.Core/containers + db Applications.Datastores/redisCaches + + Starting log stream... + ``` + + Your application is now deployed and running in your Kubernetes cluster. + +## Step 4: Verify Redis containers are deployed + +1. Visit [`http://localhost:3000`](http://localhost:3000) in your browser. + + You can now see both the environment variables of your container under Radius Connections as well as interact with the `Todo App` and add/remove items in it as wanted: + +1. List your Kubernetes Pods to see the infrastructure containers deployed by the Recipe: + + ```bash + kubectl get pods -n default-local-dev-app + ``` + + You will see your 'frontend' container, along with the Redis cache that was automatically created by the default local-dev Recipe: + + ``` + NAME READY STATUS RESTARTS AGE + frontend-6d447f5994-pnmzv 1/1 Running 0 13m + redis-ymbjcqyjzwkpg-66fdbf8bb6-brb6q 2/2 Running 0 13m + ``` diff --git a/docs/content/guides/recipes/howto-dev-recipes/snippets/app.bicep b/docs/content/guides/recipes/howto-dev-recipes/snippets/app.bicep new file mode 100644 index 000000000..9cc09ef03 --- /dev/null +++ b/docs/content/guides/recipes/howto-dev-recipes/snippets/app.bicep @@ -0,0 +1,33 @@ +import radius as radius + +@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +param environment string + +@description('The ID of your Radius application. Automatically injected by the rad CLI.') +param application string + +resource frontend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'frontend' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + } + connections: { + // Define a connection to the redis container + // Automatically injects conneciton information into the container + redis: { + source: db.id + } + } + } +} + +resource db 'Applications.Datastores/redisCaches@2023-10-01-preview' = { + name: 'db' + properties: { + environment: environment + application: application + // recipe is not specified, so it uses 'default' if present + } +} diff --git a/docs/content/guides/recipes/overview/index.md b/docs/content/guides/recipes/overview/index.md index dddcd64ca..14f7e1b02 100644 --- a/docs/content/guides/recipes/overview/index.md +++ b/docs/content/guides/recipes/overview/index.md @@ -2,7 +2,7 @@ type: docs title: "Overview: Radius Recipes" linkTitle: "Overview" -description: "Learn how to automate infrastructure deployment for your resources with Radius recipes" +description: "Learn how to automate infrastructure deployment for your resources with Radius Recipes" weight: 100 categories: "Overview" tags: ["recipes"] @@ -10,7 +10,7 @@ tags: ["recipes"] Recipes enable a **separation of concerns** between infrastructure operators and developers by **automating infrastructure deployment**. Developers select the resource they want in their app (_Mongo Database, Redis Cache, Dapr State Store, etc._), and infrastructure operators codify in their environment how these resources should be deployed and configured (_lightweight containers, Azure resources, AWS resources, etc._). When a developer deploys their application and its resources, Recipes automatically deploy the backing infrastructure and bind it to the developer's resources. -Diagram showing developers adding Redis to their app and operators adding a Recipe that Redis should deploy an Azure Cache for Redis +{{< image src="recipes.png" alt="Diagram showing developers adding Redis to their app and operators adding a Recipe that Redis should deploy an Azure Cache for Redis" width=700px >}} ## Capabilities @@ -35,7 +35,7 @@ Use [**rad recipe list**]({{< ref rad_recipe_list >}}) to view the Recipes avail ### Use lightweight "local-dev" Recipes -Radius environments make it easy to get up and running with Recipes instantly. When you run [`rad init`]({{< ref rad_init >}}) you get a set of containerized local-dev Recipes pre-registered in your environment. These Recipes are designed to help you get started quickly with Recipes using lightweight containers. You can use these Recipes to test your app locally, or deploy them to a dev environment. +Radius Environments make it easy to get up and running with Recipes instantly. When you run [`rad init`]({{< ref rad_init >}}) you get a set of containerized local-dev Recipes pre-registered in your environment. These Recipes are designed to help you get started quickly with Recipes using lightweight containers. You can use these Recipes to test your app locally, or deploy them to a dev environment. ### Customize with parameters @@ -57,7 +57,7 @@ Recipes currently support the following resources. Support for additional resour |---------------------| | [`Applications.Datastores/redisCaches`]({{< ref redis >}}) | | [`Applications.Datastores/mongoDatabases`]({{< ref mongodb >}}) | -| [`Applications.Datastores/sqlDatabases]({{< ref microsoft-sql >}}) | +| [`Applications.Datastores/sqlDatabases`]({{< ref microsoft-sql >}}) | | [`Applications.Messaging/rabbitmqQueues`]({{< ref rabbitmq >}}) | | [`Applications.Dapr/stateStores`]({{< ref dapr-statestore >}}) | | [`Applications.Dapr/pubSubBrokers`]({{< ref dapr-pubsub >}}) | diff --git a/docs/content/guides/tooling/rad-cli/overview/index.md b/docs/content/guides/tooling/rad-cli/overview/index.md index d47de94f3..6cfd8f96d 100644 --- a/docs/content/guides/tooling/rad-cli/overview/index.md +++ b/docs/content/guides/tooling/rad-cli/overview/index.md @@ -18,13 +18,13 @@ Usage: rad [command] Available Commands: - application Manage Radius applications + application Manage Radius Applications bicep Manage bicep compiler completion Generates shell completion scripts credential Manage cloud provider credential for a Radius installation. debug-logs Capture logs from Radius control plane for debugging and diagnostics. deploy Deploy a template - env Manage Radius environments + env Manage Radius Environments group Manage resource groups help Help about any command init Initialize Radius diff --git a/docs/content/guides/tooling/vscode/overview/index.md b/docs/content/guides/tooling/vscode/overview/index.md index 3eea5d1b1..d30af41b8 100644 --- a/docs/content/guides/tooling/vscode/overview/index.md +++ b/docs/content/guides/tooling/vscode/overview/index.md @@ -8,13 +8,13 @@ categories: "Overview" tags: ["VSCode"] --- -When using Visual Studio Code with Radius there are a set of extensions you can install to help author, validate, and manage your Radius applications and environments. +When using Visual Studio Code with Radius there are a set of extensions you can install to help author, validate, and manage your Radius Applications and environments. ## Radius Bicep extension The Radius Bicep extension provides formatting, intellisense, and validation for Bicep templates. -Screenshot of the Radius Bicep extension showing available Radius resource types +{{< image src="vscode-bicep.png" alt="Screenshot of the Radius Bicep extension showing available Radius resource types" width=600px >}}

{{< button text="Radius Bicep guide" page="howto-vscode-bicep" >}} diff --git a/docs/content/installation/index.md b/docs/content/installation/index.md index ed79a0d7a..c5a23fa3f 100644 --- a/docs/content/installation/index.md +++ b/docs/content/installation/index.md @@ -8,17 +8,17 @@ weight: 25 Radius consists of a set of tools and services that together form the Radius platform. -Diagram showing rad CLI and VSCode extension on local machine plus the Radius control plane on a Kubernetes cluster +{{< image src="radius.png" alt="Diagram showing rad CLI and VSCode extension on local machine plus the Radius control plane on a Kubernetes cluster" width="600px" >}} ## Step 1: Install the rad CLI {{< read file= "/shared-content/installation/rad-cli/install-rad-cli.md" >}} -## Step 2: Install the Radius-Bicep VS Code extension +## Step 2: Install the VS Code extension {{< read file= "/shared-content/installation/vscode-bicep/install-vscode-bicep.md" >}} -## Step 3: Initialize the Radius control-plane and the Radius environment +## Step 3: Initialize Radius {{< read file= "/shared-content/installation/install-radius/initialize-radius.md" >}} diff --git a/docs/content/reference/api/api-ucp.md b/docs/content/reference/api/api-ucp.md index 5a19e6e59..8608c9a30 100644 --- a/docs/content/reference/api/api-ucp.md +++ b/docs/content/reference/api/api-ucp.md @@ -5,4 +5,4 @@ linkTitle: "UCP" description: "Detailed reference documentation on the UCP API" --- -{{< redoc "swagger/specification/ucp/resource-manager/UCP/preview/2022-09-01-privatepreview/openapi.json" >}} +{{< redoc "swagger/specification/ucp/resource-manager/UCP/preview/2023-10-01-preview/openapi.json" >}} diff --git a/docs/content/reference/api/applications.core/api-httproutes.md b/docs/content/reference/api/applications.core/api-httproutes.md deleted file mode 100644 index 4bddf57b8..000000000 --- a/docs/content/reference/api/applications.core/api-httproutes.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: api -title: "Applications.Core/httpRoutes API reference" -linkTitle: "httpRoutes" -description: "Detailed reference documentation on the Applications.Core/httpRoutes API" -slug: "http-routes" ---- - -{{< redoc "swagger/specification/applications/resource-manager/Applications.Core/preview/2023-10-01-preview/openapi.json" >}} diff --git a/docs/content/reference/api/resource-policies/_index.md b/docs/content/reference/api/resource-policies/_index.md index df2a08aab..bcceebe1f 100644 --- a/docs/content/reference/api/resource-policies/_index.md +++ b/docs/content/reference/api/resource-policies/_index.md @@ -45,8 +45,6 @@ Each resource type controller decides whether it will retry to process the opera | Applications.Core/containers | PUT/PATCH/DELETE | Asynchronous | 300 | default | | Applications.Core/gateways | LIST/GET | Synchronous | default | | | Applications.Core/gateways | PUT/PATCH/DELETE | Asynchronous | default | default | -| Applications.Core/httpRoutes | LIST/GET | Synchronous | default | | -| Applications.Core/httpRoutes | PUT/PATCH/DELETE | Asynchronous | default | default | | Applications.Core/extenders | LIST/GET/PUT/PATCH/DELETE | Synchronous | default | | | Applications.Core/extenders | POST ListSecret | Synchronous | default | | diff --git a/docs/content/reference/cli/rad.md b/docs/content/reference/cli/rad.md index 3ade4ad09..3d109460d 100644 --- a/docs/content/reference/cli/rad.md +++ b/docs/content/reference/cli/rad.md @@ -24,13 +24,13 @@ Radius CLI ### SEE ALSO -* [rad application]({{< ref rad_application.md >}}) - Manage Radius applications +* [rad application]({{< ref rad_application.md >}}) - Manage Radius Applications * [rad bicep]({{< ref rad_bicep.md >}}) - Manage bicep compiler * [rad completion]({{< ref rad_completion.md >}}) - Generates shell completion scripts * [rad credential]({{< ref rad_credential.md >}}) - Manage cloud provider credential for a Radius installation. * [rad debug-logs]({{< ref rad_debug-logs.md >}}) - Capture logs from Radius control plane for debugging and diagnostics. * [rad deploy]({{< ref rad_deploy.md >}}) - Deploy a template -* [rad env]({{< ref rad_env.md >}}) - Manage Radius environments +* [rad env]({{< ref rad_env.md >}}) - Manage Radius Environments * [rad group]({{< ref rad_group.md >}}) - Manage resource groups * [rad init]({{< ref rad_init.md >}}) - Initialize Radius * [rad install]({{< ref rad_install.md >}}) - Installs Radius for a given platform diff --git a/docs/content/reference/cli/rad_application.md b/docs/content/reference/cli/rad_application.md index 22a869113..b0e43281c 100644 --- a/docs/content/reference/cli/rad_application.md +++ b/docs/content/reference/cli/rad_application.md @@ -8,11 +8,11 @@ description: "Details on the rad application Radius CLI command" --- ## rad application -Manage Radius applications +Manage Radius Applications ### Synopsis -Manage Radius applications +Manage Radius Applications ### Options @@ -31,9 +31,9 @@ Manage Radius applications * [rad]({{< ref rad.md >}}) - Radius CLI * [rad application connections]({{< ref rad_application_connections.md >}}) - Shows the connections for an application. -* [rad application delete]({{< ref rad_application_delete.md >}}) - Delete Radius application -* [rad application list]({{< ref rad_application_list.md >}}) - List Radius applications -* [rad application show]({{< ref rad_application_show.md >}}) - Show Radius application details -* [rad application status]({{< ref rad_application_status.md >}}) - Show Radius application status -* [rad application switch]({{< ref rad_application_switch.md >}}) - Switch the default Radius application +* [rad application delete]({{< ref rad_application_delete.md >}}) - Delete Radius Application +* [rad application list]({{< ref rad_application_list.md >}}) - List Radius Applications +* [rad application show]({{< ref rad_application_show.md >}}) - Show Radius Application details +* [rad application status]({{< ref rad_application_status.md >}}) - Show Radius Application status +* [rad application switch]({{< ref rad_application_switch.md >}}) - Switch the default Radius Application diff --git a/docs/content/reference/cli/rad_application_connections.md b/docs/content/reference/cli/rad_application_connections.md index cb305822d..8c1c81811 100644 --- a/docs/content/reference/cli/rad_application_connections.md +++ b/docs/content/reference/cli/rad_application_connections.md @@ -48,5 +48,5 @@ rad app connections my-application ### SEE ALSO -* [rad application]({{< ref rad_application.md >}}) - Manage Radius applications +* [rad application]({{< ref rad_application.md >}}) - Manage Radius Applications diff --git a/docs/content/reference/cli/rad_application_delete.md b/docs/content/reference/cli/rad_application_delete.md index 0be61c85c..294d5d970 100644 --- a/docs/content/reference/cli/rad_application_delete.md +++ b/docs/content/reference/cli/rad_application_delete.md @@ -8,11 +8,11 @@ description: "Details on the rad application delete Radius CLI command" --- ## rad application delete -Delete Radius application +Delete Radius Application ### Synopsis -Delete the specified Radius application deployed in the default environment +Delete the specified Radius Application deployed in the default environment ``` rad application delete [flags] @@ -55,5 +55,5 @@ rad app delete my-app --group my-group ### SEE ALSO -* [rad application]({{< ref rad_application.md >}}) - Manage Radius applications +* [rad application]({{< ref rad_application.md >}}) - Manage Radius Applications diff --git a/docs/content/reference/cli/rad_application_list.md b/docs/content/reference/cli/rad_application_list.md index ee2f76ab0..f9544eef2 100644 --- a/docs/content/reference/cli/rad_application_list.md +++ b/docs/content/reference/cli/rad_application_list.md @@ -8,11 +8,11 @@ description: "Details on the rad application list Radius CLI command" --- ## rad application list -List Radius applications +List Radius Applications ### Synopsis -Lists Radius applications deployed in the resource group associated with the default environment +Lists Radius Applications deployed in the resource group associated with the default environment ``` rad application list [flags] @@ -47,5 +47,5 @@ rad app list --group my-group ### SEE ALSO -* [rad application]({{< ref rad_application.md >}}) - Manage Radius applications +* [rad application]({{< ref rad_application.md >}}) - Manage Radius Applications diff --git a/docs/content/reference/cli/rad_application_show.md b/docs/content/reference/cli/rad_application_show.md index 7cbb3887e..a8dcc10c6 100644 --- a/docs/content/reference/cli/rad_application_show.md +++ b/docs/content/reference/cli/rad_application_show.md @@ -8,11 +8,11 @@ description: "Details on the rad application show Radius CLI command" --- ## rad application show -Show Radius application details +Show Radius Application details ### Synopsis -Show Radius application details. Shows the user's default application (if configured) by default. +Show Radius Application details. Shows the user's default application (if configured) by default. ``` rad application show [flags] @@ -51,5 +51,5 @@ rad app show my-app --group my-group ### SEE ALSO -* [rad application]({{< ref rad_application.md >}}) - Manage Radius applications +* [rad application]({{< ref rad_application.md >}}) - Manage Radius Applications diff --git a/docs/content/reference/cli/rad_application_status.md b/docs/content/reference/cli/rad_application_status.md index 842a19daa..48ae31e34 100644 --- a/docs/content/reference/cli/rad_application_status.md +++ b/docs/content/reference/cli/rad_application_status.md @@ -8,11 +8,11 @@ description: "Details on the rad application status Radius CLI command" --- ## rad application status -Show Radius application status +Show Radius Application status ### Synopsis -Show Radius application status, such as public endpoints and resource count. Shows details for the user's default application (if configured) by default. +Show Radius Application status, such as public endpoints and resource count. Shows details for the user's default application (if configured) by default. ``` rad application status [flags] @@ -51,5 +51,5 @@ rad app status my-app --group my-group ### SEE ALSO -* [rad application]({{< ref rad_application.md >}}) - Manage Radius applications +* [rad application]({{< ref rad_application.md >}}) - Manage Radius Applications diff --git a/docs/content/reference/cli/rad_application_switch.md b/docs/content/reference/cli/rad_application_switch.md index 0f2e649a5..ba7152a8c 100644 --- a/docs/content/reference/cli/rad_application_switch.md +++ b/docs/content/reference/cli/rad_application_switch.md @@ -8,11 +8,11 @@ description: "Details on the rad application switch Radius CLI command" --- ## rad application switch -Switch the default Radius application +Switch the default Radius Application ### Synopsis -Switches the default Radius application +Switches the default Radius Application ``` rad application switch [flags] @@ -41,5 +41,5 @@ rad app switch newApplication ### SEE ALSO -* [rad application]({{< ref rad_application.md >}}) - Manage Radius applications +* [rad application]({{< ref rad_application.md >}}) - Manage Radius Applications diff --git a/docs/content/reference/cli/rad_bicep_publish.md b/docs/content/reference/cli/rad_bicep_publish.md index e781d4bdd..db2a3c5ac 100644 --- a/docs/content/reference/cli/rad_bicep_publish.md +++ b/docs/content/reference/cli/rad_bicep_publish.md @@ -26,8 +26,8 @@ rad bicep publish [flags] ``` -# Publish a Bicep file to an Azure container registry -rad bicep publish --file ./redis-test.bicep --target br:myregistry.azurecr.io/redis-test:v1 +# Publish a Bicep file to a container registry +rad bicep publish --file ./redis-test.bicep --target br:ghcr.io/myregistry/redis-test:v1 ``` diff --git a/docs/content/reference/cli/rad_credential.md b/docs/content/reference/cli/rad_credential.md index 0fa97f78d..853ecf1f5 100644 --- a/docs/content/reference/cli/rad_credential.md +++ b/docs/content/reference/cli/rad_credential.md @@ -14,12 +14,12 @@ Manage cloud provider credential for a Radius installation. Manage cloud provider credential for a Radius installation. -Radius cloud providers enable Radius environments to deploy and integrate with cloud resources (Azure, AWS). +Radius cloud providers enable Radius Environments to deploy and integrate with cloud resources (Azure, AWS). The Radius control-plane stores credentials for use when accessing cloud resources. Cloud providers are configured per-Radius-installation. Configuration commands will use the current workspace or the workspace specified by '--workspace' to configure Radius. Modifications to cloud provider configuration -or credentials will affect all Radius environments and applications of the affected installation. +or credentials will affect all Radius Environments and applications of the affected installation. ### Examples diff --git a/docs/content/reference/cli/rad_credential_list.md b/docs/content/reference/cli/rad_credential_list.md index 19b865a57..403eaf155 100644 --- a/docs/content/reference/cli/rad_credential_list.md +++ b/docs/content/reference/cli/rad_credential_list.md @@ -14,12 +14,12 @@ List configured cloud provider credentials List configured cloud providers credentials. -Radius cloud providers enable Radius environments to deploy and integrate with cloud resources (Azure, AWS). +Radius cloud providers enable Radius Environments to deploy and integrate with cloud resources (Azure, AWS). The Radius control-plane stores credentials for use when accessing cloud resources. Cloud providers are configured per-Radius-installation. Configuration commands will use the current workspace or the workspace specified by '--workspace' to configure Radius. Modifications to cloud provider configuration -or credentials will affect all Radius environments and applications of the affected installation. +or credentials will affect all Radius Environments and applications of the affected installation. ``` rad credential list [flags] diff --git a/docs/content/reference/cli/rad_credential_register.md b/docs/content/reference/cli/rad_credential_register.md index b0d018855..4935ee014 100644 --- a/docs/content/reference/cli/rad_credential_register.md +++ b/docs/content/reference/cli/rad_credential_register.md @@ -14,12 +14,12 @@ Register(Add or update) cloud provider credential for a Radius installation. Register (Add or update) cloud provider configuration for a Radius installation. -Radius cloud providers enable Radius environments to deploy and integrate with cloud resources (Azure, AWS). +Radius cloud providers enable Radius Environments to deploy and integrate with cloud resources (Azure, AWS). The Radius control-plane stores credentials for use when accessing cloud resources. Cloud providers are configured per-Radius-installation. Configuration commands will use the current workspace or the workspace specified by '--workspace' to configure Radius. Modifications to cloud provider configuration -or credentials will affect all Radius environments and applications of the affected installation. +or credentials will affect all Radius Environments and applications of the affected installation. ### Examples diff --git a/docs/content/reference/cli/rad_credential_register_aws.md b/docs/content/reference/cli/rad_credential_register_aws.md index 780c6c8e5..813cea694 100644 --- a/docs/content/reference/cli/rad_credential_register_aws.md +++ b/docs/content/reference/cli/rad_credential_register_aws.md @@ -20,12 +20,12 @@ to configure these settings. Radius will use the provided IAM credential for all interactions with AWS. -Radius cloud providers enable Radius environments to deploy and integrate with cloud resources (Azure, AWS). +Radius cloud providers enable Radius Environments to deploy and integrate with cloud resources (Azure, AWS). The Radius control-plane stores credentials for use when accessing cloud resources. Cloud providers are configured per-Radius-installation. Configuration commands will use the current workspace or the workspace specified by '--workspace' to configure Radius. Modifications to cloud provider configuration -or credentials will affect all Radius environments and applications of the affected installation. +or credentials will affect all Radius Environments and applications of the affected installation. ``` rad credential register aws [flags] diff --git a/docs/content/reference/cli/rad_credential_register_azure.md b/docs/content/reference/cli/rad_credential_register_azure.md index 7e476fa6b..941c180d2 100644 --- a/docs/content/reference/cli/rad_credential_register_azure.md +++ b/docs/content/reference/cli/rad_credential_register_azure.md @@ -18,7 +18,7 @@ This command is intended for scripting or advanced use-cases. See 'rad init' for to configure these settings. Radius will use the provided service principal for all interactions with Azure, including Bicep deployment, -Radius environments, and Radius portable resources. +Radius Environments, and Radius portable resources. Radius will use the provided subscription and resource group as the default target scope for Bicep deployment. The provided service principal must have the Contributor or Owner role assigned for the provided resource group @@ -26,12 +26,12 @@ in order to create or manage resources contained in the group. The resource grou calling 'rad credential register azure'. -Radius cloud providers enable Radius environments to deploy and integrate with cloud resources (Azure, AWS). +Radius cloud providers enable Radius Environments to deploy and integrate with cloud resources (Azure, AWS). The Radius control-plane stores credentials for use when accessing cloud resources. Cloud providers are configured per-Radius-installation. Configuration commands will use the current workspace or the workspace specified by '--workspace' to configure Radius. Modifications to cloud provider configuration -or credentials will affect all Radius environments and applications of the affected installation. +or credentials will affect all Radius Environments and applications of the affected installation. ``` rad credential register azure [flags] diff --git a/docs/content/reference/cli/rad_credential_show.md b/docs/content/reference/cli/rad_credential_show.md index 1bb5bae4b..7bb782d8c 100644 --- a/docs/content/reference/cli/rad_credential_show.md +++ b/docs/content/reference/cli/rad_credential_show.md @@ -14,12 +14,12 @@ Show details of a configured cloud provider credential Show details of a configured cloud provider credential. -Radius cloud providers enable Radius environments to deploy and integrate with cloud resources (Azure, AWS). +Radius cloud providers enable Radius Environments to deploy and integrate with cloud resources (Azure, AWS). The Radius control-plane stores credentials for use when accessing cloud resources. Cloud providers are configured per-Radius-installation. Configuration commands will use the current workspace or the workspace specified by '--workspace' to configure Radius. Modifications to cloud provider configuration -or credentials will affect all Radius environments and applications of the affected installation. +or credentials will affect all Radius Environments and applications of the affected installation. ``` rad credential show [name] [flags] diff --git a/docs/content/reference/cli/rad_credential_unregister.md b/docs/content/reference/cli/rad_credential_unregister.md index 90f98d053..4d366e021 100644 --- a/docs/content/reference/cli/rad_credential_unregister.md +++ b/docs/content/reference/cli/rad_credential_unregister.md @@ -14,12 +14,12 @@ Unregisters a configured cloud provider credential from the Radius installation Unregisters a configured cloud provider credential from the Radius installation. -Radius cloud providers enable Radius environments to deploy and integrate with cloud resources (Azure, AWS). +Radius cloud providers enable Radius Environments to deploy and integrate with cloud resources (Azure, AWS). The Radius control-plane stores credentials for use when accessing cloud resources. Cloud providers are configured per-Radius-installation. Configuration commands will use the current workspace or the workspace specified by '--workspace' to configure Radius. Modifications to cloud provider configuration -or credentials will affect all Radius environments and applications of the affected installation. +or credentials will affect all Radius Environments and applications of the affected installation. ``` rad credential unregister [flags] diff --git a/docs/content/reference/cli/rad_env.md b/docs/content/reference/cli/rad_env.md index 22b8a8774..359aa5e6c 100644 --- a/docs/content/reference/cli/rad_env.md +++ b/docs/content/reference/cli/rad_env.md @@ -8,12 +8,12 @@ description: "Details on the rad env Radius CLI command" --- ## rad env -Manage Radius environments +Manage Radius Environments ### Synopsis -Manage Radius environments -Radius environments are prepared β€œlanding zones” for Radius applications. Applications deployed to an environment will inherit the container runtime, configuration, and other settings from the environment. +Manage Radius Environments +Radius Environments are prepared β€œlanding zones” for Radius Applications. Applications deployed to an environment will inherit the container runtime, configuration, and other settings from the environment. ### Options @@ -33,7 +33,7 @@ Radius environments are prepared β€œlanding zones” for Radius applications. Ap ### SEE ALSO * [rad]({{< ref rad.md >}}) - Radius CLI -* [rad env create]({{< ref rad_env_create.md >}}) - Create a new Radius environment +* [rad env create]({{< ref rad_env_create.md >}}) - Create a new Radius Environment * [rad env delete]({{< ref rad_env_delete.md >}}) - Delete environment * [rad env list]({{< ref rad_env_list.md >}}) - List environments * [rad env show]({{< ref rad_env_show.md >}}) - Show environment details diff --git a/docs/content/reference/cli/rad_env_create.md b/docs/content/reference/cli/rad_env_create.md index 35bc115c1..51bdf1e29 100644 --- a/docs/content/reference/cli/rad_env_create.md +++ b/docs/content/reference/cli/rad_env_create.md @@ -8,12 +8,12 @@ description: "Details on the rad env create Radius CLI command" --- ## rad env create -Create a new Radius environment +Create a new Radius Environment ### Synopsis -Create a new Radius environment -Radius environments are prepared "landing zones" for Radius applications. +Create a new Radius Environment +Radius Environments are prepared "landing zones" for Radius Applications. Applications deployed to an environment will inherit the container runtime, configuration, and other settings from the environment. ``` @@ -45,5 +45,5 @@ rad env create myenv ### SEE ALSO -* [rad env]({{< ref rad_env.md >}}) - Manage Radius environments +* [rad env]({{< ref rad_env.md >}}) - Manage Radius Environments diff --git a/docs/content/reference/cli/rad_env_delete.md b/docs/content/reference/cli/rad_env_delete.md index 74aafcb5f..04b170eaa 100644 --- a/docs/content/reference/cli/rad_env_delete.md +++ b/docs/content/reference/cli/rad_env_delete.md @@ -55,5 +55,5 @@ rad env delete my-env --group my-env ### SEE ALSO -* [rad env]({{< ref rad_env.md >}}) - Manage Radius environments +* [rad env]({{< ref rad_env.md >}}) - Manage Radius Environments diff --git a/docs/content/reference/cli/rad_env_list.md b/docs/content/reference/cli/rad_env_list.md index 4a57c9fcc..0d611390c 100644 --- a/docs/content/reference/cli/rad_env_list.md +++ b/docs/content/reference/cli/rad_env_list.md @@ -45,5 +45,5 @@ rad env list ### SEE ALSO -* [rad env]({{< ref rad_env.md >}}) - Manage Radius environments +* [rad env]({{< ref rad_env.md >}}) - Manage Radius Environments diff --git a/docs/content/reference/cli/rad_env_show.md b/docs/content/reference/cli/rad_env_show.md index 390611b72..2da835a0f 100644 --- a/docs/content/reference/cli/rad_env_show.md +++ b/docs/content/reference/cli/rad_env_show.md @@ -51,5 +51,5 @@ rad env show my-env --group my-env ### SEE ALSO -* [rad env]({{< ref rad_env.md >}}) - Manage Radius environments +* [rad env]({{< ref rad_env.md >}}) - Manage Radius Environments diff --git a/docs/content/reference/cli/rad_env_switch.md b/docs/content/reference/cli/rad_env_switch.md index 4e9b5525a..995e21b8f 100644 --- a/docs/content/reference/cli/rad_env_switch.md +++ b/docs/content/reference/cli/rad_env_switch.md @@ -41,5 +41,5 @@ rad env switch newEnvironment ### SEE ALSO -* [rad env]({{< ref rad_env.md >}}) - Manage Radius environments +* [rad env]({{< ref rad_env.md >}}) - Manage Radius Environments diff --git a/docs/content/reference/cli/rad_env_update.md b/docs/content/reference/cli/rad_env_update.md index 56920276b..f6ca94c69 100644 --- a/docs/content/reference/cli/rad_env_update.md +++ b/docs/content/reference/cli/rad_env_update.md @@ -68,5 +68,5 @@ rad env update myenv --clear-aws ### SEE ALSO -* [rad env]({{< ref rad_env.md >}}) - Manage Radius environments +* [rad env]({{< ref rad_env.md >}}) - Manage Radius Environments diff --git a/docs/content/reference/cli/rad_group.md b/docs/content/reference/cli/rad_group.md index a4bddd89b..bb7f03c05 100644 --- a/docs/content/reference/cli/rad_group.md +++ b/docs/content/reference/cli/rad_group.md @@ -16,7 +16,7 @@ Manage resource groups Resource groups are used to organize and manage Radius resources. They often contain resources that share a common lifecycle or unit of deployment. -A Radius application and its resources can span one or more resource groups, and do not have to be in the same resource group as the Radius environment into which it's being deployed into. +A Radius Application and its resources can span one or more resource groups, and do not have to be in the same resource group as the Radius Environment into which it's being deployed into. Note that these resource groups are separate from the Azure cloud provider and Azure resource groups configured with the cloud provider. diff --git a/docs/content/reference/cli/rad_group_create.md b/docs/content/reference/cli/rad_group_create.md index d2236dba5..a4e22082b 100644 --- a/docs/content/reference/cli/rad_group_create.md +++ b/docs/content/reference/cli/rad_group_create.md @@ -16,7 +16,7 @@ Create a new resource group Resource groups are used to organize and manage Radius resources. They often contain resources that share a common lifecycle or unit of deployment. -A Radius application and its resources can span one or more resource groups, and do not have to be in the same resource group as the Radius environment into which it's being deployed into. +A Radius Application and its resources can span one or more resource groups, and do not have to be in the same resource group as the Radius Environment into which it's being deployed into. Note that these resource groups are separate from the Azure cloud provider and Azure resource groups configured with the cloud provider. diff --git a/docs/content/reference/cli/rad_group_list.md b/docs/content/reference/cli/rad_group_list.md index 9c33271fb..534d9d3ed 100644 --- a/docs/content/reference/cli/rad_group_list.md +++ b/docs/content/reference/cli/rad_group_list.md @@ -16,7 +16,7 @@ List resource groups within current/specified workspace Resource groups are used to organize and manage Radius resources. They often contain resources that share a common lifecycle or unit of deployment. - A Radius application and its resources can span one or more resource groups, and do not have to be in the same resource group as the Radius environment into which it's being deployed into. + A Radius Application and its resources can span one or more resource groups, and do not have to be in the same resource group as the Radius Environment into which it's being deployed into. Note that these resource groups are separate from the Azure cloud provider and Azure resource groups configured with the cloud provider. diff --git a/docs/content/reference/cli/rad_group_show.md b/docs/content/reference/cli/rad_group_show.md index f0f0d265e..8b2865751 100644 --- a/docs/content/reference/cli/rad_group_show.md +++ b/docs/content/reference/cli/rad_group_show.md @@ -16,7 +16,7 @@ Show the details of a resource group Resource groups are used to organize and manage Radius resources. They often contain resources that share a common lifecycle or unit of deployment. -A Radius application and its resources can span one or more resource groups, and do not have to be in the same resource group as the Radius environment into which it's being deployed into. +A Radius Application and its resources can span one or more resource groups, and do not have to be in the same resource group as the Radius Environment into which it's being deployed into. Note that these resource groups are separate from the Azure cloud provider and Azure resource groups configured with the cloud provider. diff --git a/docs/content/reference/cli/rad_group_switch.md b/docs/content/reference/cli/rad_group_switch.md index 0054f2d18..94d8fb7f7 100644 --- a/docs/content/reference/cli/rad_group_switch.md +++ b/docs/content/reference/cli/rad_group_switch.md @@ -14,7 +14,7 @@ Switch default resource group scope Switch default resource group scope - Radius workspaces contain a resource group scope, where Radius applications and resources are deployed by default. The switch command changes the default scope of the workspace to the specified resource group name. + Radius workspaces contain a resource group scope, where Radius Applications and resources are deployed by default. The switch command changes the default scope of the workspace to the specified resource group name. Resource groups are used to organize and manage Radius resources. They often contain resources that share a common lifecycle or unit of deployment. diff --git a/docs/content/reference/cli/rad_install_kubernetes.md b/docs/content/reference/cli/rad_install_kubernetes.md index c310b9bb3..cfd2502fb 100644 --- a/docs/content/reference/cli/rad_install_kubernetes.md +++ b/docs/content/reference/cli/rad_install_kubernetes.md @@ -15,9 +15,9 @@ Installs Radius onto a kubernetes cluster Install Radius in a Kubernetes cluster using the Radius Helm chart. By default 'rad install kubernetes' will install Radius with the version matching the rad CLI version. -Radius will be installed in the 'radius-system' namespace. For more information visit https://docs.radapp.dev/concepts/architecture/ +Radius will be installed in the 'radius-system' namespace. For more information visit https://docs.radapp.io/concepts/architecture/ -Overrides can be set by specifying Helm chart values with the '--set' flag. For more information visit https://docs.radapp.dev/operations/platforms/kubernetes/install/. +Overrides can be set by specifying Helm chart values with the '--set' flag. For more information visit https://docs.radapp.io/operations/platforms/kubernetes/install/. ``` diff --git a/docs/content/reference/cli/rad_recipe_show.md b/docs/content/reference/cli/rad_recipe_show.md index 39aa99da6..39efe420c 100644 --- a/docs/content/reference/cli/rad_recipe_show.md +++ b/docs/content/reference/cli/rad_recipe_show.md @@ -29,13 +29,13 @@ rad recipe show [recipe-name] [flags] ``` # show the details of a recipe -rad recipe show redis-prod +rad recipe show redis-prod --resource-type Applications.Datastores/redisCaches # show the details of a recipe, with a JSON output -rad recipe show redis-prod --output json +rad recipe show redis-prod --resource-type Applications.Datastores/redisCaches --output json # show the details of a recipe, with a specified environment and group -rad recipe show redis-dev --group dev --environment dev +rad recipe show redis-dev --resource-type Applications.Datastores/redisCaches --group dev --environment dev ``` ### Options diff --git a/docs/content/reference/config.md b/docs/content/reference/config.md index d14735201..fd8faea45 100644 --- a/docs/content/reference/config.md +++ b/docs/content/reference/config.md @@ -63,7 +63,7 @@ workspaces: | Key | Description | Example | |-----|-------------|---------| | **context** | The name of the Kubernetes context to use | `DevCluster` | -| **namespace** | The name of the Kubernetes namespace to use when deploying Radius applications | `default` | +| **namespace** | The name of the Kubernetes namespace to use when deploying Radius Applications | `default` | #### providerConfig diff --git a/docs/content/reference/faq.md b/docs/content/reference/faq.md index a67d30320..e24d471d6 100644 --- a/docs/content/reference/faq.md +++ b/docs/content/reference/faq.md @@ -14,7 +14,7 @@ Currently yes. Today Kubernetes is the only hosting platform for Radius. We are ### Can I incrementally adopt, or "try out" Radius? -Yes. Teams can incrementally adopt the Radius platform as they write new applications or add existing applications. Direct connections allow apps with existing platform dependencies (such as Azure and AWS) move to Radius without any code rewrites. Dapr support allows existing Dapr apps to be brought to Radius without any code rewrites as well. Portability and automation can be layered on with Radius portable resources and Recipes. In the future we will add Kubernetes YAML support which enables developers to wrap their existing Kubernetes YAML objects in a Radius container so that they may bring their existing deployments and pods as-is into a Radius application. +Yes. Teams can incrementally adopt the Radius platform as they write new applications or add existing applications. Direct connections allow apps with existing platform dependencies (such as Azure and AWS) move to Radius without any code rewrites. Dapr support allows existing Dapr apps to be brought to Radius without any code rewrites as well. Portability and automation can be layered on with Radius portable resources and Recipes. In the future we will add Kubernetes YAML support which enables developers to wrap their existing Kubernetes YAML objects in a Radius container so that they may bring their existing deployments and pods as-is into a Radius Application. ### Do I have to self-host Radius? Is there a managed service for Radius? @@ -53,7 +53,7 @@ Recipes currently support the set of Radius portable resources: Redis, Mongo, Ra ### Do developers need contributor or owner access to a cloud provider (Azure subscription, AWS account, etc.) to leverage Radius Recipes? -No. Recipes are deployed on-behalf-of the Radius environment so developers do not need any write access to an Azure subscription, resource group, or AWS account. This allows a least-privilege access model to cloud resources and for IT operators to only allow approved IaC templates to be deployed to their cloud environments. +No. Recipes are deployed on-behalf-of the Radius Environment so developers do not need any write access to an Azure subscription, resource group, or AWS account. This allows a least-privilege access model to cloud resources and for IT operators to only allow approved IaC templates to be deployed to their cloud environments. ### Why do I need to manually output a Kubernetes UCP ID as part of my Bicep Recipe? @@ -98,11 +98,11 @@ Yes. You will need to modify the resource definition in your .bicep file's appli ### What AWS services does Radius support -Radius applications can include AWS services that are also supported by the AWS cloud control API. See the [AWS resource library]({{< ref "/guides/author-apps/aws/overview#resource-library" >}}) for the complete list of supported AWS resources. Radius does not currently support direct connections to AWS resources, but it is on the backlog. Stay tuned for updates. +Radius Applications can include AWS services that are also supported by the AWS cloud control API. See the [AWS resource library]({{< ref "/guides/author-apps/aws/overview#resource-library" >}}) for the complete list of supported AWS resources. Radius does not currently support direct connections to AWS resources, but it is on the backlog. Stay tuned for updates. ### What Azure services does Radius support? -Radius applications can include any non-compute Azure service, with support for direct connections and managed identities. Compute services (Web Apps, Container Apps, App Service, Functions, Logic Apps, and others) will be added in a future release. +Radius Applications can include any non-compute Azure service, with support for direct connections and managed identities. Compute services (Web Apps, Container Apps, App Service, Functions, Logic Apps, and others) will be added in a future release. ### Does Radius support Google Cloud Platform (GCP)? diff --git a/docs/content/reference/limitations.md b/docs/content/reference/limitations.md index 8bde0ee26..3b7d0ddd9 100644 --- a/docs/content/reference/limitations.md +++ b/docs/content/reference/limitations.md @@ -24,7 +24,7 @@ This will be addressed further in a future release. ### Changing the Kubernetes namespace of an environment or application requires the app to be deleted and redeployed -A Radius environment allows you to specify Kubernetes as your compute platform, as well as specify the Kubernetes namespace in which Kubernetes objects are deployed. Additionally, you can override the namespace for a specific application using the [kubernetesNamespace extension.]({{< ref "application-schema#kubernetesNamespace" >}}). Currently, changing the namespace of an environment or application requires the application to be deleted and redeployed. If you need to change the namespace of an application, you can do so by deleting the application and/or environment and redeploying it with the new namespace. +A Radius Environment allows you to specify Kubernetes as your compute platform, as well as specify the Kubernetes namespace in which Kubernetes objects are deployed. Additionally, you can override the namespace for a specific application using the [kubernetesNamespace extension.]({{< ref "application-schema#kubernetesNamespace" >}}). Currently, changing the namespace of an environment or application requires the application to be deleted and redeployed. If you need to change the namespace of an application, you can do so by deleting the application and/or environment and redeploying it with the new namespace. ### Resource names cannot contain underscores (_) @@ -90,6 +90,6 @@ Some of the [AWS resource types](/resource-schema/aws) are 'non-idempotent', thi We are currently building support for non-idempotent resources in Radius. Please like and comment on this [this issue](https://github.com/radius-project/radius/issues/6227) if you are interested in the same. -As a workaround, you can try using [terraform recipes](https://docs.radapp.dev/guides/recipes/overview/) to deploy and manage those non-idempotent resource types. +As a workaround, you can try using [Terraform Recipes]({{< ref "/guides/recipes/overview" >}}) to deploy and manage those non-idempotent resource types. diff --git a/docs/content/reference/resource-schema/_index.md b/docs/content/reference/resource-schema/_index.md index 5aa2d9ed9..c4c19f48e 100644 --- a/docs/content/reference/resource-schema/_index.md +++ b/docs/content/reference/resource-schema/_index.md @@ -2,7 +2,7 @@ type: docs title: "Resource schemas" linkTitle: "Resource schemas" -description: "Schema docs for the resources that can comprise a Radius application" +description: "Schema docs for the resources that can comprise a Radius Application" weight: 300 --- diff --git a/docs/content/reference/resource-schema/cache/redis/snippets/redis-manual.bicep b/docs/content/reference/resource-schema/cache/redis/snippets/redis-manual.bicep index f7407d3b6..ace56121b 100644 --- a/docs/content/reference/resource-schema/cache/redis/snippets/redis-manual.bicep +++ b/docs/content/reference/resource-schema/cache/redis/snippets/redis-manual.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/reference/resource-schema/cache/redis/snippets/redis-recipe.bicep b/docs/content/reference/resource-schema/cache/redis/snippets/redis-recipe.bicep index 4a2138d5d..c41b30c84 100644 --- a/docs/content/reference/resource-schema/cache/redis/snippets/redis-recipe.bicep +++ b/docs/content/reference/resource-schema/cache/redis/snippets/redis-recipe.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/reference/resource-schema/core-schema/application-schema/_index.md b/docs/content/reference/resource-schema/core-schema/application-schema/_index.md index d6855ed02..f6ab3ad1d 100644 --- a/docs/content/reference/resource-schema/core-schema/application-schema/_index.md +++ b/docs/content/reference/resource-schema/core-schema/application-schema/_index.md @@ -40,7 +40,7 @@ The Kubernetes namespace extension allows you to customize how all of the resour ##### kubernetesMetadata -The [Kubernetes Metadata extension]({{< ref "guides/operations/kubernetes/kubernetes-metadata">}}) enables you set and cascade Kubernetes metadata such as labels and Annotations on all the Kubernetes resources defined with in your Radius application. For examples, please refer to the extension overview page. +The [Kubernetes Metadata extension]({{< ref "guides/operations/kubernetes/kubernetes-metadata">}}) enables you set and cascade Kubernetes metadata such as labels and Annotations on all the Kubernetes resources defined with in your Radius Application. For examples, please refer to the extension overview page. ###### Properties diff --git a/docs/content/reference/resource-schema/core-schema/container-schema/_index.md b/docs/content/reference/resource-schema/core-schema/container-schema/_index.md index 2d99baf88..4c74dc6b7 100644 --- a/docs/content/reference/resource-schema/core-schema/container-schema/_index.md +++ b/docs/content/reference/resource-schema/core-schema/container-schema/_index.md @@ -2,7 +2,7 @@ type: docs title: "Container service" linkTitle: "Container" -description: "Learn how to add a container to your Radius application" +description: "Learn how to add a container to your Radius Application" weight: 300 --- @@ -34,7 +34,7 @@ weight: 300 | Key | Required | Description | Example | |------|:--------:|-------------|---------| -| image | y | The registry and image to download and run in your container. Follows the format `:/:` where registry hostname is optional and defaults to the Docker public registry, port is optional and defaults to 443, tag is optional and defaults to `latest`.| `myregistry.azurecr.io/myimage:latest` +| image | y | The registry and image to download and run in your container. Follows the format `:/:` where registry hostname is optional and defaults to the Docker public registry, port is optional and defaults to 443, tag is optional and defaults to `latest`.| `ghcr.io/USERNAME/myimage:latest` | env | n | A list of environment variables to be set for the container. | `'ENV_VAR': 'value'` | command | n | Entrypoint array. Overrides the container image's ENTRYPOINT. | `['/bin/sh']` | args | n | Arguments to the entrypoint. Overrides the container image's CMD. | `['-c', 'while true; do echo hello; sleep 10;done']` @@ -54,7 +54,6 @@ The ports offered by the container are defined in the `ports` section. | name | y | A name key for the port. | `http` | containerPort | y | The port the container exposes. | `80` | protocol | n | The protocol the container exposes. Options are 'TCP' and 'UCP'. | `'TCP'` -| provides | n | The id of the [Route]({{< ref networking >}}) the container provides. | `http.id` #### Volumes @@ -96,7 +95,7 @@ The ports offered by the container are defined in the `ports` section. | Key | Required | Description | Example | |------|:--------:|-------------|---------| | name | y | A name key for the port. | `inventory` -| source | y | The id of the resource the container is connecting to. | `db.id` +| source | y | The id of the resource the container is connecting to. For network connections to other services this is in the form `'[scheme]://[serviceName]:[port]'` | `db.id`, `'http://inventory:8080'` | [iam](#iam) | n | Identity and access management (IAM) roles to set on the target resource. | [See below](#iam) #### IAM @@ -120,7 +119,7 @@ Additional properties are available and required depending on the 'kind' of the #### kubernetesMetadata -The [Kubernetes Metadata extension]({{< ref "guides/operations/kubernetes/kubernetes-metadata">}}) enables you set and cascade Kubernetes metadata such as labels and Annotations on all the Kubernetes resources defined with in your Radius application. For examples refer to the extension overview page. +The [Kubernetes Metadata extension]({{< ref "guides/operations/kubernetes/kubernetes-metadata">}}) enables you set and cascade Kubernetes metadata such as labels and Annotations on all the Kubernetes resources defined with in your Radius Application. For examples refer to the extension overview page. ##### Properties diff --git a/docs/content/reference/resource-schema/core-schema/container-schema/snippets/base-container.yaml b/docs/content/reference/resource-schema/core-schema/container-schema/snippets/base-container.yaml index ce9084c94..a0c37ba77 100644 --- a/docs/content/reference/resource-schema/core-schema/container-schema/snippets/base-container.yaml +++ b/docs/content/reference/resource-schema/core-schema/container-schema/snippets/base-container.yaml @@ -16,4 +16,4 @@ spec: spec: containers: - name: frontend - image: radiusdev.azurecr.io/magpie:latest \ No newline at end of file + image: ghcr.io/radius-project/magpiego:latest \ No newline at end of file diff --git a/docs/content/reference/resource-schema/core-schema/container-schema/snippets/container.bicep b/docs/content/reference/resource-schema/core-schema/container-schema/snippets/container.bicep index d1a101667..291167f14 100644 --- a/docs/content/reference/resource-schema/core-schema/container-schema/snippets/container.bicep +++ b/docs/content/reference/resource-schema/core-schema/container-schema/snippets/container.bicep @@ -30,7 +30,6 @@ resource frontend 'Applications.Core/containers@2023-10-01-preview' = { http: { containerPort: 80 protocol: 'TCP' - provides: http.id } } volumes: { @@ -102,7 +101,7 @@ resource frontend 'Applications.Core/containers@2023-10-01-preview' = { containers: [ { name: 'log-collector' - image: 'radiusdev.azurecr.io/fluent/fluent-bit:2.1.8' + image: 'ghcr.io/radius-project/fluent-bit:2.1.8' } ] hostNetwork: true @@ -113,13 +112,6 @@ resource frontend 'Applications.Core/containers@2023-10-01-preview' = { } //CONTAINER -resource http 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'http' - properties: { - application: app.id - } -} - resource db 'Applications.Datastores/mongoDatabases@2023-10-01-preview' = { name: 'database' properties: { diff --git a/docs/content/reference/resource-schema/core-schema/environment-schema/index.md b/docs/content/reference/resource-schema/core-schema/environment-schema/index.md index 924ef1333..2e9f8bcf6 100644 --- a/docs/content/reference/resource-schema/core-schema/environment-schema/index.md +++ b/docs/content/reference/resource-schema/core-schema/environment-schema/index.md @@ -56,7 +56,7 @@ Details on what to run and how to run it are defined in the `container` property |------|:--------:|-------------|---------| | \ | y | The name of the Recipe. Must be unique within the resource-type. | `myrecipe` | templateKind | y | Format of the template provided by the recipe. Allowed values: bicep | `'bicep'` -| templatePath | y | The path to the Recipe contents. For Bicep Recipes this is a Bicep module registry address. | `'mycr.azurecr.io/recipes/myrecipe:1.0'` +| templatePath | y | The path to the Recipe contents. For Bicep Recipes this is a Bicep module registry address. | `'ghcr.io/USERNAME/recipes/myrecipe:1.0'` | parameters | n | A list of parameters to set on the Recipe for every Recipe usage and deployment. Can be overridden by the resource calling the Recipe. | `capacity: 1` ### extensions @@ -65,7 +65,7 @@ Extensions allow you to customize how resources are generated or customized as p #### kubernetesMetadata -The [Kubernetes Metadata extension]({{< ref "guides/operations/kubernetes/kubernetes-metadata">}}) enables you set and cascade Kubernetes metadata such as labels and Annotations on all the Kubernetes resources defined with in your Radius application. For examples, please refer to the extension overview page. +The [Kubernetes Metadata extension]({{< ref "guides/operations/kubernetes/kubernetes-metadata">}}) enables you set and cascade Kubernetes metadata such as labels and Annotations on all the Kubernetes resources defined with in your Radius Application. For examples, please refer to the extension overview page. ##### Properties @@ -89,4 +89,4 @@ The [Kubernetes Metadata extension]({{< ref "guides/operations/kubernetes/kubern ## Further reading -- [Radius environments]({{< ref "/guides/deploy-apps/environments/overview" >}}) +- [Radius Environments]({{< ref "/guides/deploy-apps/environments/overview" >}}) diff --git a/docs/content/reference/resource-schema/core-schema/extender/snippets/extender-manual.bicep b/docs/content/reference/resource-schema/core-schema/extender/snippets/extender-manual.bicep index 7c8013c0e..9a3c03b78 100644 --- a/docs/content/reference/resource-schema/core-schema/extender/snippets/extender-manual.bicep +++ b/docs/content/reference/resource-schema/core-schema/extender/snippets/extender-manual.bicep @@ -30,7 +30,7 @@ resource publisher 'Applications.Core/containers@2023-10-01-preview' = { properties: { application: app.id container: { - image: 'radius.azurecr.io/magpie:latest' + image: 'ghcr.io/radius-project/magpiego:latest' env: { TWILIO_NUMBER: twilio.properties.fromNumber TWILIO_SID: twilio.secrets('accountSid') diff --git a/docs/content/reference/resource-schema/core-schema/extender/snippets/extender-recipe.bicep b/docs/content/reference/resource-schema/core-schema/extender/snippets/extender-recipe.bicep index e1cc28979..9723169f8 100644 --- a/docs/content/reference/resource-schema/core-schema/extender/snippets/extender-recipe.bicep +++ b/docs/content/reference/resource-schema/core-schema/extender/snippets/extender-recipe.bicep @@ -21,7 +21,7 @@ resource publisher 'Applications.Core/containers@2023-10-01-preview' = { properties: { application: application container: { - image: 'radius.azurecr.io/magpie:latest' + image: 'ghcr.io/radius-project/magpiego:latest' env: { TWILIO_NUMBER: twilio.properties.fromNumber TWILIO_SID: twilio.secrets('accountSid') diff --git a/docs/content/reference/resource-schema/core-schema/gateway/index.md b/docs/content/reference/resource-schema/core-schema/gateway/index.md index b345ee682..dee04bf88 100644 --- a/docs/content/reference/resource-schema/core-schema/gateway/index.md +++ b/docs/content/reference/resource-schema/core-schema/gateway/index.md @@ -29,12 +29,10 @@ weight: 401 #### Routes -You can define a list of routes, each representing a connection to a service. Specifying a route opens the destination [HTTP Route]({{< ref httproute >}}) to the internet. - | Key | Required | Description | Example | |------|:--------:|-------------|---------| | path | y* | The path to match the incoming request path on. Not required when `tls.sslPassthrough` is set to `'true'`. | `'/service'` -| destination | y | The [HttpRoute]({{< ref httproute >}}) to direct traffic to when the path is matched. | `route.id` +| destination | y | The service to route traffic to, in the form `'[scheme]://[serviceName]:[port]'` | `'http://backend:80'` | replacePrefix | n | The prefix to replace in the incoming request path that is sent to the destination route. | `'/'` #### Hostname @@ -51,7 +49,7 @@ You can define hostname information for how to access your application. See [bel | Key | Required | Description | Example | |------|:--------:|-------------|---------| | sslPassthrough | n | Configures the gateway to passthrough encrypted SSL traffic to an HTTP route and container. Requires a single route to be set with no 'path' defined (just destination). With sslPassthrough set to `true`, the gateway can only support SNI routing. Path based routing cannot be supported. Defaults to 'false'. | `true` -| hostname | n | The hostname for TLS termination. | `'hostname.radapp.dev'` +| hostname | n | The hostname for TLS termination. | `'hostname.radapp.io'` | certificateFrom | n | The Radius Secret Store resource ID that holds the TLS certificate data for TLS termination. | `secretstore.id` | minimumProtocolVersion | n | The minimum TLS protocol to support for TLS termination. | `'1.2'` diff --git a/docs/content/reference/resource-schema/core-schema/gateway/snippets/gateway.bicep b/docs/content/reference/resource-schema/core-schema/gateway/snippets/gateway.bicep index c0cab72fb..eefc5fa15 100644 --- a/docs/content/reference/resource-schema/core-schema/gateway/snippets/gateway.bicep +++ b/docs/content/reference/resource-schema/core-schema/gateway/snippets/gateway.bicep @@ -20,16 +20,16 @@ resource gateway 'Applications.Core/gateways@2023-10-01-preview' = { // Results in prefix.appname.PUBLIC_HOSTNAME_OR_IP.nip.io prefix: 'prefix' // Alternately you can specify your own hostname that you've configured externally - fullyQualifiedHostname: 'hostname.radapp.dev' + fullyQualifiedHostname: 'hostname.radapp.io' } routes: [ { path: '/frontend' - destination: frontendroute.id + destination: 'http://${frontend.name}:3000' } { path: '/backend' - destination: backendroute.id + destination: 'http://${backend.name}:8080' } ] tls: { @@ -54,24 +54,6 @@ resource secretstore 'Applications.Core/secretStores@2023-10-01-preview' = { } } -//FRONTENDROUTE -resource frontendroute 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'frontendroute' - properties: { - application: app.id - } -} -//FRONTENDROUTE - -//BACKENDROUTE -resource backendroute 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'backendroute' - properties: { - application: app.id - } -} -//BACKENDROUTE - //FRONTEND resource frontend 'Applications.Core/containers@2023-10-01-preview' = { name: 'frontend' @@ -82,16 +64,12 @@ resource frontend 'Applications.Core/containers@2023-10-01-preview' = { ports: { http: { containerPort: 3000 - provides: frontendroute.id } } - env: { - BACKEND_URL: backendroute.properties.url - } } connections: { backend: { - source: backendroute.id + source: 'http://backend:8080' } } } @@ -108,7 +86,6 @@ resource backend 'Applications.Core/containers@2023-10-01-preview' = { ports: { http: { containerPort: 8080 - provides: backendroute.id } } } diff --git a/docs/content/reference/resource-schema/core-schema/httproute/index.md b/docs/content/reference/resource-schema/core-schema/httproute/index.md deleted file mode 100644 index e81188b25..000000000 --- a/docs/content/reference/resource-schema/core-schema/httproute/index.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -type: docs -title: "HTTP Route" -linkTitle: "HTTP Route" -description: "Learn how to define HTTP communication with an HTTP Route" -weight: 400 ---- - -## Resource format - -{{< rad file="snippets/httproute.bicep" embed=true marker="//HTTPROUTE" >}} - -### Top-level - -| Key | Required | Description | Example | -|------|:--------:|-------------|---------| -| name | y | The name of your HttpRoute. Used to provide status and visualize the resource. | `'web'` -| location | y | The location of your resource. See [common values]({{< ref "resource-schema.md#common-values" >}}) for more information. | `global` -| [properties](#properties) | y | Properties of the resource. | [See below](#properties) - -### Properties - -| Property | Description | Example | -|----------|-------------|-------------| -| application | The ID of the application resource this resource belongs to. | `app.id` -| hostname | The internal hostname accepting traffic for the HTTP Route. Read only. | `example.com` | -| port | The port number for the HTTP Route. Defaults to 80. Read only. | `80` | -| scheme | The scheme used for traffic. Read only. | `http` | -| url | A stable URL that that can be used to route traffic to a resource. Read only. | `http://example.com:80` | - -## Example - -The following example shows two containers, one providing an HttpRoute and the other consuming it: - -### Providing container - -Once an HttpRoute is defined, you can provide it from a [container]({{< ref "guides/author-apps/containers" >}}) by using the `provides` property: - -{{< rad file="snippets/httproute.bicep" embed=true marker="//BACKEND" >}} - -### Consuming container - -To consume an HttpRoute, you can use the `connections` property: - -{{< rad file="snippets/httproute.bicep" embed=true marker="//FRONTEND" >}} diff --git a/docs/content/reference/resource-schema/core-schema/httproute/snippets/httproute.bicep b/docs/content/reference/resource-schema/core-schema/httproute/snippets/httproute.bicep deleted file mode 100644 index 44cbfbf88..000000000 --- a/docs/content/reference/resource-schema/core-schema/httproute/snippets/httproute.bicep +++ /dev/null @@ -1,57 +0,0 @@ -import radius as radius - -param environment string - -resource app 'Applications.Core/applications@2023-10-01-preview' = { - name: 'myapp' - properties: { - environment: environment - } -} - -//HTTPROUTE -resource httproute 'Applications.Core/httpRoutes@2023-10-01-preview' = { - name: 'httproute' - properties: { - application: app.id - } -} -//HTTPROUTE - -//FRONTEND -resource frontend 'Applications.Core/containers@2023-10-01-preview' = { - name: 'frontend' - properties: { - application: app.id - container: { - image: 'registry/container:tag' - env: { - BACKEND_URL: httproute.properties.url - } - } - connections: { - http: { - source: httproute.id - } - } - } -} -//FRONTEND - -//BACKEND -resource backend 'Applications.Core/containers@2023-10-01-preview' = { - name: 'backend' - properties: { - application: app.id - container: { - image: 'registry/container:tag' - ports: { - http: { - containerPort: 80 - provides: httproute.id - } - } - } - } -} -//BACKEND diff --git a/docs/content/reference/resource-schema/dapr-schema/dapr-extension/snippets/dapr.bicep b/docs/content/reference/resource-schema/dapr-schema/dapr-extension/snippets/dapr.bicep index 7f9f4ee36..ee9035afa 100644 --- a/docs/content/reference/resource-schema/dapr-schema/dapr-extension/snippets/dapr.bicep +++ b/docs/content/reference/resource-schema/dapr-schema/dapr-extension/snippets/dapr.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/reference/resource-schema/dapr-schema/dapr-pubsub/snippets/dapr-pubsub-manual.bicep b/docs/content/reference/resource-schema/dapr-schema/dapr-pubsub/snippets/dapr-pubsub-manual.bicep index 04697d1be..203d26d5a 100644 --- a/docs/content/reference/resource-schema/dapr-schema/dapr-pubsub/snippets/dapr-pubsub-manual.bicep +++ b/docs/content/reference/resource-schema/dapr-schema/dapr-pubsub/snippets/dapr-pubsub-manual.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { @@ -20,15 +20,11 @@ resource publisher 'Applications.Core/containers@2023-10-01-preview' = { } } container: { - image: 'radius.azurecr.io/magpie:latest' + image: 'ghcr.io/radius-project/magpiego:latest' } } } -resource kafkaRoute 'Applications.Core/httpRoutes@2023-10-01-preview' existing = { - name: 'kafka-route' -} - //SAMPLE resource pubsub 'Applications.Dapr/pubSubBrokers@2023-10-01-preview' = { name: 'pubsub' @@ -36,12 +32,9 @@ resource pubsub 'Applications.Dapr/pubSubBrokers@2023-10-01-preview' = { environment: environment application: app.id resourceProvisioning: 'manual' - resources: [ - { id: kafkaRoute.id } - ] type: 'pubsub.kafka' metadata: { - brokers: kafkaRoute.properties.url + brokers: '' authRequired: false consumeRetryInternal: 1024 } diff --git a/docs/content/reference/resource-schema/dapr-schema/dapr-pubsub/snippets/dapr-pubsub-recipe.bicep b/docs/content/reference/resource-schema/dapr-schema/dapr-pubsub/snippets/dapr-pubsub-recipe.bicep index fd76666f9..0b7131a55 100644 --- a/docs/content/reference/resource-schema/dapr-schema/dapr-pubsub/snippets/dapr-pubsub-recipe.bicep +++ b/docs/content/reference/resource-schema/dapr-schema/dapr-pubsub/snippets/dapr-pubsub-recipe.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/reference/resource-schema/dapr-schema/dapr-secretstore/snippets/dapr-secretstore-manual.bicep b/docs/content/reference/resource-schema/dapr-schema/dapr-secretstore/snippets/dapr-secretstore-manual.bicep index 9623150f0..9aeefc246 100644 --- a/docs/content/reference/resource-schema/dapr-schema/dapr-secretstore/snippets/dapr-secretstore-manual.bicep +++ b/docs/content/reference/resource-schema/dapr-schema/dapr-secretstore/snippets/dapr-secretstore-manual.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/reference/resource-schema/dapr-schema/dapr-secretstore/snippets/dapr-secretstore-recipe.bicep b/docs/content/reference/resource-schema/dapr-schema/dapr-secretstore/snippets/dapr-secretstore-recipe.bicep index 9b2a15ae6..73168cca9 100644 --- a/docs/content/reference/resource-schema/dapr-schema/dapr-secretstore/snippets/dapr-secretstore-recipe.bicep +++ b/docs/content/reference/resource-schema/dapr-schema/dapr-secretstore/snippets/dapr-secretstore-recipe.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/reference/resource-schema/dapr-schema/dapr-statestore/snippets/dapr-statestore-manual.bicep b/docs/content/reference/resource-schema/dapr-schema/dapr-statestore/snippets/dapr-statestore-manual.bicep index 1009cf597..eab0d2522 100644 --- a/docs/content/reference/resource-schema/dapr-schema/dapr-statestore/snippets/dapr-statestore-manual.bicep +++ b/docs/content/reference/resource-schema/dapr-schema/dapr-statestore/snippets/dapr-statestore-manual.bicep @@ -1,9 +1,9 @@ import radius as radius -@description('The app ID of your Radius application. Set automatically by the rad CLI.') +@description('The app ID of your Radius Application. Set automatically by the rad CLI.') param application string -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string //SAMPLE diff --git a/docs/content/reference/resource-schema/dapr-schema/dapr-statestore/snippets/dapr-statestore-recipe.bicep b/docs/content/reference/resource-schema/dapr-schema/dapr-statestore/snippets/dapr-statestore-recipe.bicep index 0fab757ca..d19dfc521 100644 --- a/docs/content/reference/resource-schema/dapr-schema/dapr-statestore/snippets/dapr-statestore-recipe.bicep +++ b/docs/content/reference/resource-schema/dapr-schema/dapr-statestore/snippets/dapr-statestore-recipe.bicep @@ -1,9 +1,9 @@ import radius as radius -@description('The app ID of your Radius application. Set automatically by the rad CLI.') +@description('The app ID of your Radius Application. Set automatically by the rad CLI.') param application string -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource myapp 'Applications.Core/containers@2023-10-01-preview' = { @@ -11,7 +11,7 @@ resource myapp 'Applications.Core/containers@2023-10-01-preview' = { properties: { application: application container: { - image: 'radius.azurecr.io/magpie:latest' + image: 'ghcr.io/radius-project/magpiego:latest' } connections: { statestore: { diff --git a/docs/content/reference/resource-schema/databases/microsoft-sql/snippets/sql-manual.bicep b/docs/content/reference/resource-schema/databases/microsoft-sql/snippets/sql-manual.bicep index 0dca7d2ca..e9e4ec3a4 100644 --- a/docs/content/reference/resource-schema/databases/microsoft-sql/snippets/sql-manual.bicep +++ b/docs/content/reference/resource-schema/databases/microsoft-sql/snippets/sql-manual.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string param username string param port int diff --git a/docs/content/reference/resource-schema/databases/microsoft-sql/snippets/sql-recipe.bicep b/docs/content/reference/resource-schema/databases/microsoft-sql/snippets/sql-recipe.bicep index 005d293bc..d21031988 100644 --- a/docs/content/reference/resource-schema/databases/microsoft-sql/snippets/sql-recipe.bicep +++ b/docs/content/reference/resource-schema/databases/microsoft-sql/snippets/sql-recipe.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/reference/resource-schema/databases/mongodb/snippets/mongo-manual.bicep b/docs/content/reference/resource-schema/databases/mongodb/snippets/mongo-manual.bicep index eff6c2c33..5aec98987 100644 --- a/docs/content/reference/resource-schema/databases/mongodb/snippets/mongo-manual.bicep +++ b/docs/content/reference/resource-schema/databases/mongodb/snippets/mongo-manual.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource cosmosAccount 'Microsoft.DocumentDB/databaseAccounts@2022-08-15' existing = { diff --git a/docs/content/reference/resource-schema/databases/mongodb/snippets/mongo-recipe.bicep b/docs/content/reference/resource-schema/databases/mongodb/snippets/mongo-recipe.bicep index 10d683222..0ac2b6129 100644 --- a/docs/content/reference/resource-schema/databases/mongodb/snippets/mongo-recipe.bicep +++ b/docs/content/reference/resource-schema/databases/mongodb/snippets/mongo-recipe.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/reference/resource-schema/messaging/rabbitmq/snippets/rabbitmq-manual.bicep b/docs/content/reference/resource-schema/messaging/rabbitmq/snippets/rabbitmq-manual.bicep index 7484a58ea..34047afaa 100644 --- a/docs/content/reference/resource-schema/messaging/rabbitmq/snippets/rabbitmq-manual.bicep +++ b/docs/content/reference/resource-schema/messaging/rabbitmq/snippets/rabbitmq-manual.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/reference/resource-schema/messaging/rabbitmq/snippets/rabbitmq-recipe.bicep b/docs/content/reference/resource-schema/messaging/rabbitmq/snippets/rabbitmq-recipe.bicep index edb8bed3a..523469033 100644 --- a/docs/content/reference/resource-schema/messaging/rabbitmq/snippets/rabbitmq-recipe.bicep +++ b/docs/content/reference/resource-schema/messaging/rabbitmq/snippets/rabbitmq-recipe.bicep @@ -1,6 +1,6 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { diff --git a/docs/content/tutorials/eshop/_index.md b/docs/content/tutorials/eshop/_index.md index 93b8577e8..8d62f42d1 100644 --- a/docs/content/tutorials/eshop/_index.md +++ b/docs/content/tutorials/eshop/_index.md @@ -18,7 +18,7 @@ The [eShop on Containers](https://github.com/dotnet-architecture/eShopOnContaine ### Architecture -Architecture diagram of eShop on containers
+{{< image src="architecture.png" alt="Architecture diagram of eShop on containers" width=900 >}}
eShop on Containers uses a microservice oriented architecture implementation with multiple autonomous microservices (each one owning its own data/db) and implementing different approaches within each microservice (simple CRUD vs. DDD/CQRS patterns). The application uses HTTP as the communication protocol between the client apps and the microservices and supports asynchronous communication for data updates propagation across multiple services based on Integration Events and an Event Bus. @@ -38,6 +38,6 @@ Adding Radius to the eShop on containers application allows teams to: - Easily manage configuration and credentials between infrastructure and services, all within the app model - Simplify deployment with Bicep and Azure Resource Manager (ARM) -{{< button text="View eShop reference app in samples" githubRepo="samples" githubPath="reference-apps/eshop" color="success" size="btn-lg" >}} +{{< button text="View eShop sample" githubRepo="samples" githubPath="samples/eshop" color="success" size="btn-lg" >}} *Visit the [GitHub docs]({{< ref github >}}) if you need access to the organization* \ No newline at end of file diff --git a/docs/content/tutorials/new-app/demo-landing-backend.png b/docs/content/tutorials/new-app/demo-landing-backend.png new file mode 100644 index 000000000..7eb7c6a55 Binary files /dev/null and b/docs/content/tutorials/new-app/demo-landing-backend.png differ diff --git a/docs/content/tutorials/new-app/demo-landing-connection.png b/docs/content/tutorials/new-app/demo-landing-connection.png new file mode 100644 index 000000000..621a8e1b0 Binary files /dev/null and b/docs/content/tutorials/new-app/demo-landing-connection.png differ diff --git a/docs/content/tutorials/new-app/demo-landing.png b/docs/content/tutorials/new-app/demo-landing.png new file mode 100644 index 000000000..81a3c1dcc Binary files /dev/null and b/docs/content/tutorials/new-app/demo-landing.png differ diff --git a/docs/content/tutorials/new-app/diagram.png b/docs/content/tutorials/new-app/diagram.png new file mode 100644 index 000000000..66416e46c Binary files /dev/null and b/docs/content/tutorials/new-app/diagram.png differ diff --git a/docs/content/tutorials/new-app/index.md b/docs/content/tutorials/new-app/index.md new file mode 100644 index 000000000..4d08874d5 --- /dev/null +++ b/docs/content/tutorials/new-app/index.md @@ -0,0 +1,378 @@ +--- +type: docs +title: "Tutorial: Create a Radius Application" +linkTitle: "Create a new application" +description: "Learn how to define, deploy, and manage a new Radius Application" +weight: 100 +categories: "Tutorial" +--- + +This tutorial will teach you the basics of creating a new Radius Application. You will learn how to: + +1. Define and deploy a Radius Environment and Application +1. Add a container to your application and customize that container +1. Add a Mongo database to your application and connect it to your container +1. Add a second container and connect it to your first container +1. Securely expose your application to the internet through a gateway + +By the end of the tutorial, you will have created and deployed a new Radius Application. + +{{< image src="diagram.png" alt="Diagram of the application resources and their connections" width=600px >}} + +## Prerequisites + +- [Supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview" >}}) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-radius-bicep-vs-code-extension" >}}) + +## Step 1: Initialize a Radius Environment and Application + +[Radius Environments]({{< ref "/guides/deploy-apps/environments/overview" >}}) are where applications are deployed. Environments determine how an application runs on a particular platform (_like AWS or Azure_). + +1. Begin by creating a new directory for your application: + + ```bash + mkdir myapp + cd myapp + ``` + +1. Initialize a new Radius Environment with [`rad init`]({{< ref rad_init >}}): + + ```bash + rad init + ``` + + When asked if you want to create a new application select "Yes". This will create a new file named `app.bicep` in your directory where your application will be defined. + + {{< alert title="πŸ’‘ Development Environments" color="info" >}} + By default `rad init` gets you up and running with a local, development-focused environment where most of the environment configuration is handled for you, including Recipes (_more on that soon_). If you would like to fully customize your environment, you can run `rad init --full` + {{< /alert >}} + +## Step 2: Inspect your Application + +Radius Applications are where all your app's resources and relationships come together. Let's take a look at this Radius Application to learn more about it. + +1. View the full Application definition by running [`rad app show -o json`]({{< ref rad_application_show >}}): + + ```bash + rad app show myapp -o json + ``` + + You will see the full App definition in its raw JSON format: + + ``` + { + "id": "/planes/radius/local/resourcegroups/default/providers/Applications.Core/applications/myapp", + "location": "global", + "name": "myapp", + "properties": { + "environment": "/planes/radius/local/resourceGroups/default/providers/Applications.Core/environments/default", + "provisioningState": "Succeeded", + "status": { + "compute": { + "kind": "kubernetes", + "namespace": "default-myapp" + } + } + }, + "systemData": {}, + "tags": {}, + "type": "Applications.Core/applications" + } + ``` + + There are a few important things to note about the application definition: + + - **`id`** is the fully-qualified UCP resource ID of the application. This value is used to uniquely identify the application in the Radius system. + - **`location`** is the _where_ your Application resides. For now, all applications are deployed to the `global` location, which corresponds to the cluster where Radius is running. + - **`environment`** specifies the Radius Environment which the Applications "binds" to at deployment. This is what determines where containers should run (_Kubernetes_) and which namespace to deploy into (_prefixed with "default"_). In this case, the application will be deployed into the `default` Environment that was created by `rad init`. + - **`compute`** specifies the hosting platform where running services in the Application will run. In this case, the services will be deployed into the `default-myapp` Kubernetes namespace within the same cluster where Radius is installed. + +1. Let's take a look inside the Application to see what's deployed. Run [`rad app connections`]({{< ref rad_application_connections >}}) to print the Application's resources and relationships: + + ```bash + rad app connections + ``` + + You'll see that nothing has been deployed yet and the app is empty: + + ``` + Displaying application: myapp + + (empty) + ``` + + Let's deploy some resources to start building out the application. + +## Step 3: Inspect and deploy `app.bicep` + +`app.bicep` will define all the resources (containers, gateways, cloud services, etc) that make up your application, including how those resources are connected to each other. Given this explicit and comprehensive application definition, Radius Application files make it simple to consistently deploy and manage your application. + +1. Open `app.bicep` and see the scaffolded application created by `rad init`: + + {{% rad file="snippets/1-app.bicep" embed=true %}} + +1. Deploy `app.bicep` with [`rad deploy`]({{< ref rad_deploy >}}): + + ```bash + rad deploy app.bicep + ``` + + You should see your container deployed: + + ``` + Building .\app.bicep... + Deploying template '.\app.bicep' for application 'myapp' and environment 'default' from workspace 'default'... + + Deployment In Progress... + + + Deployment Complete + + Resources: + demo Applications.Core/containers + ``` + +1. Run `rad app connections` again to see the container you just deployed: + + ```bash + rad app connections + ``` + + You should see the container you just deployed, along with the underlying Kubernetes resources that were created to run it: + + ``` + Displaying application: myapp + + Name: demo (Applications.Core/containers) + Connections: (none) + Resources: + demo (kubernetes: apps/Deployment) + demo (kubernetes: core/Service) + demo (kubernetes: core/ServiceAccount) + demo (kubernetes: rbac.authorization.k8s.io/Role) + demo (kubernetes: rbac.authorization.k8s.io/RoleBinding) + ``` + + {{< alert title="πŸ’‘ Kubernetes mapping" color="info" >}} + Radius Environments map how Applications "bind" to a particular platform. Earlier we saw the Application compute was set to `kubernetes` and the namespace was set to `default-myapp`. This means the container resources were deployed to the `default-myapp` namespace in the Kubernetes cluster where Radius is installed. Visit the [Kubernetes mapping docs]({{< ref "/guides/operations/kubernetes/overview#resource-mapping" >}}) to learn more. + {{< /alert >}} + +## Step 4: Run your application + +When working with Radius Applications you will probably want to access container endpoints and view logs. [`rad run`]({{< ref rad_run >}}) makes it simple to deploy your application and automatically set up port-forwarding and log streaming: + +```bash +rad run app.bicep +``` + +You should see the container deployed and the port-forward and log stream started: + +``` +Building .\app.bicep... +Deploying template '.\app.bicep' for application 'myapp' and environment 'default' from workspace 'default'... + +Deployment In Progress... + +.. demo Applications.Core/containers + +Deployment Complete + +Resources: + demo Applications.Core/containers + +Starting log stream... + +demo-bb9df8798-b68rc β€Ί demo +demo-bb9df8798-b68rc demo Using in-memory store: no connection string found +demo-bb9df8798-b68rc demo Server is running at http://localhost:3000 +demo-bb9df8798-b68rc demo [port-forward] connected from localhost:3000 -> ::3000 +``` + +Open [http://localhost:3000](http://localhost:3000) to view the Radius demo container: + +{{< image src="demo-landing.png" alt="Screenshot of the Radius demo container" width=500px >}} + +When you're done press `CTRL + c` to terminate the port-forward and log stream. + +## Step 5: Add a database and a connection + +In addition to containers, you can add dependencies like Redis caches, Dapr State Stores, Mongo databases, and more. + +1. Add a Mongo database and an environment parameter to your `app.bicep` file: + + {{% rad file="snippets/2-app-mongo.bicep" embed=true marker="//MONGO" %}} + + {{< alert title="πŸ’‘ Radius Recipes" color="info" >}} + Note that when you added the Mongo database to your application you didn't need to specify _how or where_ to run the underlying infrastructure. The Radius Environment and its Recipes take care of that for you. Just like how the Radius Environment bound your container to a Kubernetes cluster, it also deploys and binds your Mongo database to underlying infrastructure using [Recipes]({{< ref "/guides/recipes/overview" >}}). + {{< /alert >}} + +1. To learn about the underlying Recipe that will deploy and manage the Mongo infrastructure run [`rad recipe show`]({{< ref rad_recipe_show >}}): + + ```bash + rad recipe show default --resource-type Applications.Datastores/mongoDatabases + ``` + + You'll see details on the Recipe, including available parameters and defaults: + + ``` + NAME TYPE TEMPLATE KIND TEMPLATE VERSION TEMPLATE + default Applications.Datastores/mongoDatabases bicep ghcr.io/radius-project/recipes/local-dev/mongodatabases:latest + + PARAMETER NAME TYPE DEFAULT VALUE MIN MAX + username string admin - - + password secureString Password1234== - - + database string - - + ``` + + If you want to learn more about the Recipe template it's in the [Recipes repo](https://github.com/radius-project/recipes/blob/main/local-dev/mongodatabases.bicep). + +1. Add a connection from your container to the Mongo database, which indicates to Radius that your container needs to communicate with the Mongo database: + + {{% rad file="snippets/2-app-mongo.bicep" embed=true marker="//CONTAINER" markdownConfig="{hl_lines=[\"16-20\"]}" %}} + + {{< alert title="πŸ’‘ Radius Connections" color="info" >}} + Radius Connections are more than just bookkeeping. They are used to automatically configure access for your containers. Learn more in the [containers documentation]({{< ref "/guides/author-apps/containers/overview" >}}). + {{< /alert >}} + +1. Re-run your app with [`rad run`]({{< ref rad_run >}}) to deploy the Mongo database and container and start the port-forward and log stream: + + ```bash + rad run app.bicep + ``` + + ``` + Building .\app.bicep... + Deploying template '.\app.bicep' for application 'myapp' and environment 'default' from workspace 'default'... + + Deployment In Progress... + + + Deployment Complete + + Resources: + myapp Applications.Core/applications + frontend Applications.Core/containers + mongodb Applications.Datastores/mongoDatabases + + Starting log stream... + ``` + +1. Open [localhost:3000](http://localhost:3000) to interact with the frontend container. You should see the container's connections and metadata, this time with a connection to the Mongo database and new environment variables set: + + {{< image src="demo-landing-connection.png" alt="Screenshot of the Radius demo container" width=500px >}} + +1. Press CTRL+C to terminate the port-forward and log stream. + +1. Run `rad app connections` again to see the new dependency: + + ```bash + rad app connections + ``` + + You should see the container and Mongo database you just deployed, along with the underlying Kubernetes resources that were created to run them: + + ``` + Displaying application: myapp + + Name: frontend (Applications.Core/containers) + Connections: + frontend -> mongodb (Applications.Datastores/mongoDatabases) + Resources: + frontend (kubernetes: apps/Deployment) + frontend (kubernetes: core/Secret) + frontend (kubernetes: core/Service) + frontend (kubernetes: core/ServiceAccount) + frontend (kubernetes: rbac.authorization.k8s.io/Role) + frontend (kubernetes: rbac.authorization.k8s.io/RoleBinding) + + Name: mongodb (Applications.Datastores/mongoDatabases) + Connections: + frontend (Applications.Core/containers) -> mongodb + Resources: + mongo-bzmp2btdgzez6 (kubernetes: apps/Deployment) + mongo-bzmp2btdgzez6 (kubernetes: core/Service) + ``` + +## Step 6: Add a backend container + +In addition to dependencies, you can add more containers to make your application code more modular. Containers can be configured to interact with each other as needed. + +1. Add a second container named `backend` to your `app.bicep` file, specifying the image and port to open to other containers: + + {{% rad file="snippets/3-app-backend.bicep" embed=true marker="//BACKEND" %}} + +1. Add a new connection from your `frontend` container to the `backend` container: + + {{% rad file="snippets/3-app-backend.bicep" embed=true marker="//CONTAINER" markdownConfig="{hl_lines=[\"20-22\"]}" %}} + +1. Re-run your app with [`rad run`]({{< ref rad_run >}}): + + ```bash + rad run app.bicep + ``` + + ``` + Building .\app.bicep... + Deploying template '.\app.bicep' for application 'myapp' and environment 'default' from workspace 'default'... + + Deployment In Progress... + + + Deployment Complete + + Resources: + frontend Applications.Core/containers + backend Applications.Core/containers + mongodb Applications.Datastores/mongoDatabases + + Starting log stream... + ``` + +1. Open [localhost:3000](http://localhost:3000) to interact with the frontend container. You should see the container's connections and metadata, this time with a connection to the backend container and new environment variables set: + + {{< image src="demo-landing-backend.png" alt="Screenshot of the demo container with a connection to the backend container" width=600px >}} + + Note the environment variables that are set with connection information for the backend container. + +## Step 7: Add a gateway + +Finally, you can add a gateway to your application. Gateways are used to expose your application to the internet. They can expose a single container or multiple containers. + +1. Add a gateway to your `app.bicep` file: + + {{% rad file="snippets/4-app-gateway.bicep" embed=true marker="//GATEWAY" %}} + +1. Deploy your app with [`rad deploy`]({{< ref rad_deploy >}}): + + ```bash + rad deploy app.bicep + ``` + + ``` + Building .\app.bicep... + Deploying template '.\app.bicep' for application 'myapp' and environment 'default' from workspace 'default'... + + Deployment In Progress... + + + Deployment Complete + + Resources: + frontend Applications.Core/containers + backend Applications.Core/containers + gateway Applications.Core/gateways + mongodb Applications.Datastores/mongoDatabases + + Public Endpoints: + gateway Applications.Core/gateways http://localhost + ``` + +1. Open the gateway URL in your browser. Unlike before, you are connecting to the gateway instead of directly to the container. You will see the same container connections and metadata as before. + +1. Done! You've successfully created your first Radius application. + +## Next steps + +Now that you've created your first application, try out more [tutorials]({{< ref tutorials >}}) or jump into the [user guides]({{< ref guides >}}) to learn more about Radius. + diff --git a/docs/content/tutorials/new-app/snippets/1-app.bicep b/docs/content/tutorials/new-app/snippets/1-app.bicep new file mode 100644 index 000000000..4ea1ff698 --- /dev/null +++ b/docs/content/tutorials/new-app/snippets/1-app.bicep @@ -0,0 +1,20 @@ +// Import the set of Radius resources (Applications.*) into Bicep +import radius as radius + +@description('The ID of your Radius Application. Set automatically by the rad CLI.') +param application string + +resource demo 'Applications.Core/containers@2023-10-01-preview' = { + name: 'demo' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/demo:latest' + ports: { + web: { + containerPort: 3000 + } + } + } + } +} diff --git a/docs/content/tutorials/new-app/snippets/2-app-mongo.bicep b/docs/content/tutorials/new-app/snippets/2-app-mongo.bicep new file mode 100644 index 000000000..141268a39 --- /dev/null +++ b/docs/content/tutorials/new-app/snippets/2-app-mongo.bicep @@ -0,0 +1,43 @@ +// Import the set of Radius resources (Applications.*) into Bicep +import radius as radius + +@description('The ID of your Radius Application. Set automatically by the rad CLI.') +param application string + +//CONTAINER +resource demo 'Applications.Core/containers@2023-10-01-preview' = { + name: 'demo' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/tutorial/demo:edge' + env: { + FOO: 'bar' + } + ports: { + web: { + containerPort: 3000 + } + } + } + connections: { + mongodb: { + source: mongodb.id + } + } + } +} +//CONTAINER + +//MONGO +@description('The ID of your Radius Environment. Set automatically by the rad CLI.') +param environment string + +resource mongodb 'Applications.Datastores/mongoDatabases@2023-10-01-preview' = { + name: 'mongodb' + properties: { + environment: environment + application: application + } +} +//MONGO diff --git a/docs/content/tutorials/new-app/snippets/3-app-backend.bicep b/docs/content/tutorials/new-app/snippets/3-app-backend.bicep new file mode 100644 index 000000000..9f4e76db7 --- /dev/null +++ b/docs/content/tutorials/new-app/snippets/3-app-backend.bicep @@ -0,0 +1,63 @@ +// Import the set of Radius resources (Applications.*) into Bicep +import radius as radius + +@description('The ID of your Radius Application. Set automatically by the rad CLI.') +param application string + +@description('The environment ID of your Radius application. Set automatically by the rad CLI.') +param environment string + +//CONTAINER +resource frontend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'frontend' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/tutorial/demo:edge' + env: { + FOO: 'bar' + } + ports: { + web: { + containerPort: 3000 + } + } + } + connections: { + mongodb: { + source: mongodb.id + } + backend: { + source: 'http://backend:3000' + } + } + } +} +//CONTAINER + +//MONGO +resource mongodb 'Applications.Datastores/mongoDatabases@2023-10-01-preview' = { + name: 'mongodb' + properties: { + environment: environment + application: application + } +} +//MONGO + +//BACKEND +resource backend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'backend' + properties: { + application: application + container: { + image: 'nginx:latest' + ports: { + api: { + containerPort: 80 + } + } + } + } +} +//BACKEND diff --git a/docs/content/tutorials/new-app/snippets/4-app-gateway.bicep b/docs/content/tutorials/new-app/snippets/4-app-gateway.bicep new file mode 100644 index 000000000..e551086b6 --- /dev/null +++ b/docs/content/tutorials/new-app/snippets/4-app-gateway.bicep @@ -0,0 +1,79 @@ +// Import the set of Radius resources (Applications.*) into Bicep +import radius as radius + +@description('The ID of your Radius Application. Set automatically by the rad CLI.') +param application string + +@description('The environment ID of your Radius application. Set automatically by the rad CLI.') +param environment string + +//CONTAINER +resource frontend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'frontend' + properties: { + application: application + container: { + image: 'ghcr.io/radius-project/samples/tutorial/demo:edge' + env: { + FOO: 'bar' + } + ports: { + web: { + containerPort: 3000 + } + } + } + connections: { + mongodb: { + source: mongodb.id + } + backend: { + source: 'http://backend:3000' + } + } + } +} +//CONTAINER + +//MONGO +resource mongodb 'Applications.Datastores/mongoDatabases@2023-10-01-preview' = { + name: 'mongodb' + properties: { + environment: environment + application: application + } +} +//MONGO + +//BACKEND +resource backend 'Applications.Core/containers@2023-10-01-preview' = { + name: 'backend' + properties: { + application: application + container: { + image: 'nginx:latest' + ports: { + api: { + containerPort: 80 + } + } + } + } +} +//BACKEND + +//GATEWAY +resource gateway 'Applications.Core/gateways@2023-10-01-preview' = { + name: 'gateway' + properties: { + application: application + routes: [ + { + path: '/' + destination: 'http://frontend:3000' + } + ] + } +} + +//GATEWAY diff --git a/docs/content/tutorials/tutorial-add-radius/guestbook-app.png b/docs/content/tutorials/tutorial-add-radius/guestbook-app.png new file mode 100644 index 000000000..f3c5c3938 Binary files /dev/null and b/docs/content/tutorials/tutorial-add-radius/guestbook-app.png differ diff --git a/docs/content/tutorials/tutorial-add-radius/guestbook-ui.png b/docs/content/tutorials/tutorial-add-radius/guestbook-ui.png new file mode 100644 index 000000000..c88e644cf Binary files /dev/null and b/docs/content/tutorials/tutorial-add-radius/guestbook-ui.png differ diff --git a/docs/content/tutorials/tutorial-add-radius/index.md b/docs/content/tutorials/tutorial-add-radius/index.md new file mode 100644 index 000000000..01d2ee96d --- /dev/null +++ b/docs/content/tutorials/tutorial-add-radius/index.md @@ -0,0 +1,322 @@ +--- +type: docs +title: "Tutorial: Add Radius to an existing application" +linkTitle: "Existing application" +description: "Learn how to incrementally add Radius to an existing application" +weight: 600 +slug: "add-radius" +categories: "Tutorial" +tags : ["kubernetes","kubectl"] +--- + +This tutorial will teach you about adding Radius to an existing application using the built-in Kubernetes integration functionality. You will learn how to: + +1. Deploy an existing Kubernetes application +1. Run and test the application +1. Add Radius to the deployed application +1. Confirm that Radius was added and can detect the application + +By the end of this tutorial, you will have deployed an existing Kubernetes application and then updated it to add Radius functionality without changing the application or its original Kubernetes configurations. + +## Prerequisites + +- [Kubernetes cluster]({{< ref "guides/operations/kubernetes/overview#supported-kubernetes-clusters" >}}) +- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) +- [rad CLI]({{< ref howto-rad-cli >}}) + +## Overview + +As a part of this tutorial you will deploy an existing containerized Guestbook application originally authored by the Kubernetes community for use in their own tutorials. You will then add Radius to the deployed application. To incrementally add Radius to an existing application, you will leverage the built-in Kubernetes integration functionality by adding an annotation to the application's Kubernetes deployment manifest. This approach is particularly useful for adding Radius capabilities to applications that are already deployed. + +The Guestbook application consists of a web front end along with primary and secondary Redis containers for storage, all deployed with Kubernetes. For more information about the application and access its source code, see the [Kubernetes tutorial](https://kubernetes.io/docs/tutorials/stateless-application/guestbook/) and their [examples repo](https://github.com/kubernetes/examples/tree/master/guestbook). + +Guestbook application architecture diagram + +## Step 1: Set up your environment + +1. Clone the Radius samples repo to your local machine: + + ```bash + git clone https://github.com/radius-project/samples.git + ``` + +2. Navigate to the `samples/kubernetes/guestbook` directory: + + ```bash + cd samples/kubernetes/guestbook + ``` + + > The `kubernetes/guestbook` directory contains the Kubernetes YAML manifest files for their Guestbook sample application, copied directly from the [Kubernetes examples repo](https://github.com/kubernetes/examples/tree/master/guestbook). + +3. Initialize Radius + + Run this command to initialize Radius. For this example, answer **NO** when asked whether to set up an application: + + ```bash + rad init + ``` + + You should see output similar to: + + ``` + Initializing Radius... + βœ… Install Radius {{< param version >}} + - Kubernetes cluster: k3d-k3s-default + - Kubernetes namespace: radius-system + βœ… Create new environment default + - Kubernetes namespace: default + - Recipe pack: local-dev + βœ… Update local configuration + Initialization complete! Have a RAD time 😎 + ``` + +Step 2: Deploy and test the existing Guestbook application using `kubectl` + +1. Create a Kubernetes namespace called `demo`: + + ```bash + kubectl create namespace demo + ``` + +2. Create and deploy the Guestbook application to the `demo` namespace: + + ```bash + kubectl apply -n demo -f ./deploy + ``` + +3. Verify that the application successfully deployed: + + ```bash + kubectl get all -n demo + ``` + + You should see output similar to below, with 5 pods and 3 services successfully deployed as expected: + + ``` + NAME READY STATUS RESTARTS AGE + pod/redis-replica-787cd488b4-n7b4p 1/1 Running 0 10s + pod/redis-replica-787cd488b4-vf6fh 1/1 Running 0 10s + pod/frontend-77dfc58d7c-8zht6 1/1 Running 0 10s + pod/redis-master-7597b47b98-ddgq9 1/1 Running 0 10s + pod/frontend-77dfc58d7c-2gs2p 1/1 Running 0 10s + pod/frontend-77dfc58d7c-2qd22 1/1 Running 0 10s + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + service/frontend NodePort 10.43.49.106 80:30972/TCP 10s + service/redis-master ClusterIP 10.43.233.148 6379/TCP 10s + service/redis-replica ClusterIP 10.43.118.183 6379/TCP 10s + + NAME READY UP-TO-DATE AVAILABLE AGE + deployment.apps/redis-replica 2/2 2 2 10s + deployment.apps/redis-master 1/1 1 1 10s + deployment.apps/frontend 3/3 3 3 10s + + NAME DESIRED CURRENT READY AGE + replicaset.apps/redis-replica-787cd488b4 2 2 2 10s + replicaset.apps/redis-master-7597b47b98 1 1 1 10s + replicaset.apps/frontend-77dfc58d7c 3 3 3 10s + ``` + +4. Validate that the application is running as expected: + + Run this command to port forward the Guestbook application to port `8080` on your local machine: + + ```bash + kubectl port-forward -n demo svc/frontend 8080:80 + ``` + + Open a browser and navigate to [`http://localhost:8080`](http://localhost:8080). You should see the Guestbook application running: + + Guestbook application + + Terminate the port forwarding process by pressing `CTRL+C` in your terminal. + +5. Confirm that Radius has not yet been added: + + Run this command to view the state of your application using Radius: + + ```bash + rad app connections -a demo + ``` + + Since you have not yet added Radius to the application, the `rad` CLI will not recognize your `demo` application and you should see a message in the output similar to: + + ``` + Application "demo" does not exist or has been deleted. + ``` + +## Step 3: Add Radius to the Guestbook application + +You will now add Radius to the Guestbook application's Kubernetes deployment manifests by making edits to the YAML files in the `deploy` directory. + +1. In each of the YAML files that contain a manifest for `Kind: Deployment`, add the `annotations` property to `metadata`, and then add the `rad.app/enabled: 'true'` annotation. Note that the `'true'` must be surrounded in quotes. + + ```yaml + ... + metadata: + ... + annotations: + radapp.io/enabled: 'true' + ... + spec: + ... + ``` + + You should add the annotation to the following files: + - `deploy/frontend-deployment.yaml` + - `deploy/redis-master-deployment.yaml` + - `deploy/redis-replica-deployment.yaml`

+ + > Note: Since Radius does not model Kubernetes Services, you do not need to add the annotation to the YAML files that contain a manifest for `Kind: Service` (e.g. `deploy/frontend-service.yaml`). + +
As an example, your `deploy/frontend-deployment.yaml` file should look like this: + + ```yaml + apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1 + kind: Deployment + metadata: + name: frontend + annotations: + rad.app/enabled: 'true' + spec: + selector: + matchLabels: + app: guestbook + tier: frontend + replicas: 3 + template: + metadata: + labels: + app: guestbook + tier: frontend + spec: + containers: + - name: php-redis + image: gcr.io/google-samples/gb-frontend:v4 + resources: + requests: + cpu: 100m + memory: 100Mi + env: + - name: GET_HOSTS_FROM + value: dns + # If your cluster config does not include a dns service, then to + # instead access environment variables to find service host + # info, comment out the 'value: dns' line above, and uncomment the + # line below: + # value: env + ports: + - containerPort: 80 + ``` + +2. Save your changes to the YAML files. + +## Step 4: Deploy and test the updated Guestbook application using `kubectl` + +1. Run this command to deploy the updated Guestbook application to the `demo` namespace: + + ```bash + kubectl apply -n demo -f ./deploy + ``` + +2. Verify that the application successfully deployed: + + ```bash + kubectl get deployments -n demo; + kubectl get services -n demo + ``` + + You should see output similar to below, with the same 3 deployments and 3 services running as expected. Notice that the AGE of each resource reflects the time of your first deployment. Enabling Radius for an application does not change any of its behaviors, so Kubernetes did not need to restart the containers. + + ``` + NAME READY UP-TO-DATE AVAILABLE AGE + redis-master 1/1 1 1 10m + redis-replica 2/2 2 2 10m + frontend 3/3 3 3 10m + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + frontend NodePort 10.43.49.106 80:30972/TCP 10m + redis-master ClusterIP 10.43.233.148 6379/TCP 10m + redis-replica ClusterIP 10.43.118.183 6379/TCP 10m + ``` + +3. Validate that the application is running as expected: + + Once again, run this command to port forward the Guestbook application to port `8080` on your local machine: + + ```bash + kubectl port-forward -n demo svc/frontend 8080:80 + ``` + + Open a browser and navigate to [`http://localhost:8080`](http://localhost:8080). You should see the Guestbook application running: + + Guestbook application + + Terminate the port forwarding process by pressing `CTRL+C` in your terminal. + +## Step 5: Use Radius to display the state of your application + +Now that Radius has been enabled for your application, run this command again: + +```bash +rad app connections -a demo +``` + +You should see output containing information and status of your newly "radified" application, similar to: + +``` +Displaying application: demo + +Name: frontend (Applications.Core/containers) +Connections: (none) +Resources: + frontend (kubernetes: apps/Deployment) + +Name: redis-master (Applications.Core/containers) +Connections: (none) +Resources: + redis-master (kubernetes: apps/Deployment) + +Name: redis-replica (Applications.Core/containers) +Connections: (none) +Resources: + redis-replica (kubernetes: apps/Deployment) +``` + +This output shows that Radius has detected the three container resources in the Kubernetes application that you have just deployed. Note that since you have not used Radius to define any connections between the resources, the `Connections` field is empty. However, your application is now ready to be further modified using the Radius features that are now available to you, , such as [Connections]({{< ref "guides/author-apps/containers/overview#connections" >}}), [Recipes]({{< ref "guides/recipes/overview" >}}), and more. + +## Step 6: Clean up + +1. Run the following command to delete all Pods, Deployments, and Services in the `demo` namespace: + + ```bash + kubectl delete -n demo -f ./deploy + ``` + + The output should look similar to: + + ``` + deployment.apps "frontend" deleted + service "frontend" deleted + deployment.apps "redis-master" deleted + service "redis-master" deleted + deployment.apps "redis-replica" deleted + service "redis-replica" deleted + ``` + +2. Run the following command to delete the `demo` namespace: + + ```bash + kubectl delete namespace demo + ``` + + The output should look similar to: + + ``` + namespace "demo" deleted + ``` + +## Next steps + +- To learn more about authoring Radius applications, visit the [Authoring applications guide]({{< ref "guides/author-apps" >}}) +- To learn more about deploying applications using Radius, visit the [Deploying applications guide]({{< ref "guides/deploy-apps" >}}) +- To learn more about Radius Recipes, visit the [Recipes guide]({{< ref "guides/recipes" >}}) \ No newline at end of file diff --git a/docs/content/tutorials/tutorial-dapr/index.md b/docs/content/tutorials/tutorial-dapr/index.md index 35f7720f4..de6f08801 100644 --- a/docs/content/tutorials/tutorial-dapr/index.md +++ b/docs/content/tutorials/tutorial-dapr/index.md @@ -18,17 +18,14 @@ For more details on the app and access to the source code, visit the `tutorials/ ## Prerequisites -- [Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) -- [Radius CLI]({{< ref "getting-started" >}}) -- [Radius environment]({{< ref "/guides/deploy-apps/environments/overview" >}}) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Radius environment]({{< ref "installation#step-3-initialize-radius" >}}) - [Dapr installed on your Kubernetes cluster](https://docs.dapr.io/operations/hosting/kubernetes/kubernetes-deploy/) -- [Visual Studio Code](https://code.visualstudio.com/) (recommended) - - The [Radius VSCode extension]({{< ref "getting-started" >}}) is highly recommended to provide syntax highlighting, completion, and linting - - Although not recommended, you can also complete This how-to guide with any basic text editor ## Step 1: Define the application, `backend` container, and Dapr state store -Begin by creating a new file named `dapr.bicep` with a Radius application that consists of a `backend` container and Dapr state store with Redis: +Begin by creating a new file named `dapr.bicep` with a Radius Application that consists of a `backend` container and Dapr state store with Redis: {{< rad file="snippets/dapr.bicep" embed=true marker="//BACKEND" >}} @@ -101,13 +98,13 @@ Add a `frontend` [container]({{< ref "guides/author-apps/containers" >}}) which In your browser, navigate to the endpoint (e.g. [http://localhost:8080](http://localhost:8080)) to view and interact with your application: - Screenshot of frontend application + {{< image src="frontend.png" alt="Screenshot of frontend application" width=500 >}} ## Cleanup 1. Press CTRL+C to terminate the `rad run` log console -1. Run `rad app delete` to cleanup your Radius application, containers, and Dapr statestore. The Recipe resources (_Redis container and Dapr component_) are also automatically cleaned up. +1. Run `rad app delete` to cleanup your Radius Application, containers, and Dapr statestore. The Recipe resources (_Redis container and Dapr component_) are also automatically cleaned up. ```bash rad app delete -a dapr diff --git a/docs/content/tutorials/tutorial-dapr/snippets/dapr.bicep b/docs/content/tutorials/tutorial-dapr/snippets/dapr.bicep index 3102a6925..62bd724d2 100644 --- a/docs/content/tutorials/tutorial-dapr/snippets/dapr.bicep +++ b/docs/content/tutorials/tutorial-dapr/snippets/dapr.bicep @@ -18,7 +18,7 @@ resource backend 'Applications.Core/containers@2023-10-01-preview' = { application: app.id container: { // This image is where the app's backend code lives - image: 'radius.azurecr.io/quickstarts/dapr-backend:edge' + image: 'ghcr.io/radius-project/samples/dapr-backend:latest' ports: { orders: { containerPort: 3000 @@ -59,7 +59,7 @@ resource frontend 'Applications.Core/containers@2023-10-01-preview' = { application: app.id container: { // This image is where the app's frontend code lives - image: 'radius.azurecr.io/quickstarts/dapr-frontend:edge' + image: 'ghcr.io/radius-project/samples/dapr-frontend:latest' env: { // An environment variable to tell the frontend container where to find the backend CONNECTION_BACKEND_APPID: 'backend' diff --git a/docs/content/tutorials/tutorial-recipe/index.md b/docs/content/tutorials/tutorial-recipe/index.md index 1b46bb3bf..03c835f23 100644 --- a/docs/content/tutorials/tutorial-recipe/index.md +++ b/docs/content/tutorials/tutorial-recipe/index.md @@ -9,7 +9,7 @@ categories: "Tutorial" tags : ["recipes"] --- -This tutorial will teach you the following about recipes +This tutorial will teach you the following about Recipes * How to use β€œdev” Recipes in your Radius Environment to quickly run with containerized infrastructure. * How to deploy your own Recipes in your Radius Environment to leverage Azure/AWS resources. @@ -24,7 +24,7 @@ This tutorial will teach you the following about recipes This application is a simple to-do list which stores and visualizes to-do items. It consists of a frontend [container]({{< ref "guides/author-apps/containers" >}}) and a backend [Redis Cache]({{< ref redis >}}). -Screenshot of the todoapp with Kubernetes, Azure and AWS Redis Cache options +{{< image src="recipe-tutorial-diagram.png" alt="Screenshot of the todoapp with Kubernetes, Azure and AWS Redis Cache options" style="width:500px" >}} {{< alert title="πŸ’‘ Portable resources" color="info" >}} Developers don't need to specify what cloud resources they're using in their application. Instead, they choose the portable Redis API which can be provided by any cloud provider (or a Docker container). When deployed, a Recipe will select what infrastructure to deploy and run. @@ -32,10 +32,11 @@ Developers don't need to specify what cloud resources they're using in their app ## Prerequisites -- Install the [rad CLI]({{< ref getting-started >}}) -- Setup a supported [Kubernetes cluster]({{< ref "guides/operations/kubernetes" >}}) +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Radius Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [Setup a supported Kubernetes cluster]({{< ref "/guides/operations/kubernetes/overview#supported-clusters" >}}) -## Step 1: Initialize a Radius environment +## Step 1: Initialize a Radius Environment 1. Begin in a new directory for your application: @@ -61,17 +62,17 @@ Developers don't need to specify what cloud resources they're using in their app ``` NAME TYPE TEMPLATE KIND TEMPLATE VERSION TEMPLATE - default Applications.Datastores/sqlDatabases bicep radius.azurecr.io/recipes/local-dev/sqldatabases:latest - default Applications.Messaging/rabbitMQQueues bicep radius.azurecr.io/recipes/local-dev/rabbitmqqueues:latest - default Applications.Dapr/pubSubBrokers bicep radius.azurecr.io/recipes/local-dev/pubsubbrokers:latest - default Applications.Dapr/secretStores bicep radius.azurecr.io/recipes/local-dev/secretstores:latest - default Applications.Dapr/stateStores bicep radius.azurecr.io/recipes/local-dev/statestores:latest - default Applications.Datastores/mongoDatabases bicep radius.azurecr.io/recipes/local-dev/mongodatabases:latest - default Applications.Datastores/redisCaches bicep radius.azurecr.io/recipes/local-dev/rediscaches:latest + default Applications.Datastores/sqlDatabases bicep ghcr.io/radius-project/recipes/local-dev/sqldatabases:latest + default Applications.Messaging/rabbitMQQueues bicep ghcr.io/radius-project/recipes/local-dev/rabbitmqqueues:latest + default Applications.Dapr/pubSubBrokers bicep ghcr.io/radius-project/recipes/local-dev/pubsubbrokers:latest + default Applications.Dapr/secretStores bicep ghcr.io/radius-project/recipes/local-dev/secretstores:latest + default Applications.Dapr/stateStores bicep ghcr.io/radius-project/recipes/local-dev/statestores:latest + default Applications.Datastores/mongoDatabases bicep ghcr.io/radius-project/recipes/local-dev/mongodatabases:latest + default Applications.Datastores/redisCaches bicep ghcr.io/radius-project/recipes/local-dev/rediscaches:latest ``` -{{< alert title="πŸ’‘ Dev Recipes" color="info" >}} -Dev environments are preloaded with [`dev` Recipes]({{< ref "guides/recipes/overview#use-community-dev-recipes" >}}), a set of Recipes that allow you to quickly get up and running with lightweight containerized infrastructure. In This how-to guide, the dev Redis Recipe deploys a lightweight Redis container into your Kubernetes cluster. +{{< alert title="πŸ’‘ local-dev Recipes" color="info" >}} +Development environments are preloaded with [local-dev Recipes]({{< ref "guides/recipes/overview#use-community-dev-recipes" >}}), a set of Recipes that allow you to quickly get up and running with lightweight containerized infrastructure. In this how-to guide, the local-dev Recipe for Redis deploys a lightweight Redis container into your Kubernetes cluster. When a Recipe is named "default" it will be used by default when deploying resources when a Recipe is not specified. {{< /alert >}} @@ -121,7 +122,7 @@ Note that no Recipe name is specified with 'db', so it will be using the default kubectl get pods -n default-recipes ``` - You will see your 'frontend' container, along with the Redis cache that was automatically created by the default dev Recipe: + You will see your 'frontend' container, along with the Redis cache that was automatically created by the default local-dev Recipe: ``` NAME READY STATUS RESTARTS AGE @@ -139,7 +140,7 @@ Note that no Recipe name is specified with 'db', so it will be using the default You can now see both the environment variables of your container under Radius Connections as well as interact with the `Todo App` and add/remove items in it as wanted: - screenshot of the todo application + {{< image src="todoapp.png" width="700px" alt="screenshot of the todo application" >}} ## Step 4: Use Azure/AWS recipes in your application @@ -153,14 +154,14 @@ This step requires an Azure subscription or an AWS account to deploy cloud resou ```bash rad resource delete rediscaches db ``` -1. Manually add the Azure cloud provider to your Radius environment +1. Manually add the Azure cloud provider to your Radius Environment Follow the steps [here]({{< ref "howto-azure-provider#manual-configuration" >}}) to add the Azure cloud provider to your existing environment. 2. Register the Recipe to your Radius Environment: ```bash - rad recipe register azure --environment default --template-kind bicep --template-path radius.azurecr.io/recipes/azure/rediscaches:{{< param tag_version >}} --resource-type Applications.Datastores/redisCaches + rad recipe register azure --environment default --template-kind bicep --template-path ghcr.io/radius-project/recipes/azure/rediscaches:{{< param tag_version >}} --resource-type Applications.Datastores/redisCaches ``` 3. Update your db resource to use the `azure` Recipe, instead of the default Recipe: @@ -216,7 +217,7 @@ This step requires an Azure subscription or an AWS account to deploy cloud resou You can now see environment variables of your container under Radius Connections updated with the details of the Azure Cache for Redis and the Todo app now uses the Azure cache for Redis as the data store - screenshot of the todo application + {{< image src="todoapp.png" width="700px" alt="screenshot of the todo application" >}} {{% /codetab %}} @@ -230,14 +231,14 @@ This step requires an Azure subscription or an AWS account to deploy cloud resou rad resource delete rediscaches db ``` -1. Manually add the AWS cloud provider to your Radius environment +1. Manually add the AWS cloud provider to your Radius Environment Follow the steps [here]({{< ref "howto-aws-provider#manual-configuration" >}}) to add the AWS cloud provider to your existing environment 1. Register the Recipe to your Radius Environment: ```bash - rad recipe register aws --environment default --template-kind bicep --template-path radius.azurecr.io/recipes/aws/rediscaches:latest --resource-type Applications.Datastores/redisCaches --parameters eksClusterName= + rad recipe register aws --environment default --template-kind bicep --template-path ghcr.io/radius-project/recipes/aws/rediscaches:latest --resource-type Applications.Datastores/redisCaches --parameters eksClusterName= ``` > *Note: Passing the `eksClusterName` during the registration of the Recipe is a temporary additional step as Radius builds up AWS support.* @@ -283,7 +284,7 @@ This step requires an Azure subscription or an AWS account to deploy cloud resou You can now see environment variables of your container under Radius Connections updated with the details of the Amazon Memory Db for Redis and the Todo app now uses the Amazon Memory Db for Redis as the data store - screenshot of the todo application + {{< image src="todoapp.png" width="700px" alt="screenshot of the todo application" >}} {{% /codetab %}} diff --git a/docs/content/tutorials/tutorial-recipe/snippets/app-aws.bicep b/docs/content/tutorials/tutorial-recipe/snippets/app-aws.bicep index 5091ac9db..f2df05dbf 100644 --- a/docs/content/tutorials/tutorial-recipe/snippets/app-aws.bicep +++ b/docs/content/tutorials/tutorial-recipe/snippets/app-aws.bicep @@ -1,9 +1,9 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string -@description('The ID of your Radius application. Automatically injected by the rad CLI.') +@description('The ID of your Radius Application. Automatically injected by the rad CLI.') param application string //DB diff --git a/docs/content/tutorials/tutorial-recipe/snippets/app-azure.bicep b/docs/content/tutorials/tutorial-recipe/snippets/app-azure.bicep index 4b0d79142..5fa999d14 100644 --- a/docs/content/tutorials/tutorial-recipe/snippets/app-azure.bicep +++ b/docs/content/tutorials/tutorial-recipe/snippets/app-azure.bicep @@ -1,9 +1,9 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string -@description('The ID of your Radius application. Automatically injected by the rad CLI.') +@description('The ID of your Radius Application. Automatically injected by the rad CLI.') param application string //DB diff --git a/docs/content/tutorials/tutorial-recipe/snippets/app.bicep b/docs/content/tutorials/tutorial-recipe/snippets/app.bicep index 63ec11ae3..7901b942c 100644 --- a/docs/content/tutorials/tutorial-recipe/snippets/app.bicep +++ b/docs/content/tutorials/tutorial-recipe/snippets/app.bicep @@ -1,9 +1,9 @@ import radius as radius -@description('The ID of your Radius environment. Automatically injected by the rad CLI.') +@description('The ID of your Radius Environment. Automatically injected by the rad CLI.') param environment string -@description('The ID of your Radius application. Automatically injected by the rad CLI.') +@description('The ID of your Radius Application. Automatically injected by the rad CLI.') param application string resource frontend 'Applications.Core/containers@2023-10-01-preview' = { @@ -11,7 +11,7 @@ resource frontend 'Applications.Core/containers@2023-10-01-preview' = { properties: { application: application container: { - image: 'radius.azurecr.io/tutorial/webapp:edge' + image: 'ghcr.io/radius-project/samples/demo:latest' } connections: { // Define a connection to the redis container diff --git a/docs/content/web.config b/docs/content/web.config index 836346e05..1d405b3eb 100644 --- a/docs/content/web.config +++ b/docs/content/web.config @@ -1,13 +1,23 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/docs/layouts/_default/_markup/render-link.html b/docs/layouts/_default/_markup/render-link.html new file mode 100644 index 000000000..e2f11e19e --- /dev/null +++ b/docs/layouts/_default/_markup/render-link.html @@ -0,0 +1 @@ +{{ .Text | safeHTML }} \ No newline at end of file diff --git a/docs/layouts/shortcodes/edge.html b/docs/layouts/shortcodes/edge.html index f6ee2fc31..02274f265 100644 --- a/docs/layouts/shortcodes/edge.html +++ b/docs/layouts/shortcodes/edge.html @@ -2,7 +2,7 @@ {{ $content := .Inner }} {{ if eq $version "edge" }} -{{ $content }} +{{ (print "\n" $content "\n") | markdownify }} {{ else }} -To try out an unstable release visit the [edge docs](https://edge.radapp.dev). +{{ (print "\n" "To try out an unstable release visit the [edge docs](https://edge.docs.radapp.io)." "\n") | markdownify }} {{ end }} diff --git a/docs/layouts/shortcodes/image.html b/docs/layouts/shortcodes/image.html new file mode 100644 index 000000000..7300cadf9 --- /dev/null +++ b/docs/layouts/shortcodes/image.html @@ -0,0 +1,9 @@ +{{ $imagePath := .Get "src" }} +{{ $altText := .Get "alt" }} +{{ $width := .Get "width" | default "600px" }} + +{{ $image := .Page.Resources.GetMatch $imagePath }} + +{{ with $image }} + +{{ end }} diff --git a/docs/layouts/shortcodes/latest.html b/docs/layouts/shortcodes/latest.html index fe301a68a..463144285 100644 --- a/docs/layouts/shortcodes/latest.html +++ b/docs/layouts/shortcodes/latest.html @@ -2,7 +2,7 @@ {{ $content := .Inner }} {{ if ne $version "edge" }} -{{ $content }} +{{ (print "\n" $content "\n") | markdownify }} {{ else }} -To try out a stable release visit the [latest docs](https://radapp.dev). +{{ (print "\n" "To try out a stable release visit the [latest docs](https://docs.radapp.io)." "\n") | markdownify }} {{ end }} \ No newline at end of file diff --git a/docs/shared-content/installation/install-radius/initialize-radius.md b/docs/shared-content/installation/install-radius/initialize-radius.md index f09f7b7f5..da2c78385 100644 --- a/docs/shared-content/installation/install-radius/initialize-radius.md +++ b/docs/shared-content/installation/install-radius/initialize-radius.md @@ -1,26 +1,39 @@ -The Radius control-plane is a set of services that provide the core functionality of Radius. It is deployed as a set of containers in a Kubernetes cluster. +Initializing Radius installs the Radius control-plane and creates a Radius Environment. The control-plane is a set of services that provide the core functionality of Radius, running in the `radius-system` namespace. + +1. Create a Kubernetes cluster + + Radius runs inside [Kubernetes]({{< ref "guides/operations/kubernetes" >}}). Create one from the [supported k8s clusters]({{< ref "/guides/operations/kubernetes/overview#supported-kubernetes-clusters" >}}) + > *If you don't have a preferred way to create Kubernetes clusters, you could try using [k3d](https://k3d.io/), which runs a minimal Kubernetes distribution in Docker.* + + Ensure your cluster is set as your current context: + + ```bash + kubectl config current-context + ``` + +1. Initialize a new [Radius Environment]({{< ref "/guides/deploy-apps/environments/overview">}}) with [`rad init`]({{< ref rad_init >}}): -1. Initialize a new [Radius environment]({{< ref "/guides/deploy-apps/environments/overview">}}) with [`rad init`]({{< ref rad_init >}}): ```bash rad init ``` - + Select `Yes` to setup the app.bicep in the current directory ``` - Initializing Radius... - - πŸ•” Install Radius {{< param version >}} + Initializing Radius... + + πŸ•” Install Radius {{< param version >}} - Kubernetes cluster: kind - - Kubernetes namespace: radius-system - ⏳ Create new environment default - - Kubernetes namespace: default - - Recipe pack: local-dev - ⏳ Scaffold application - ⏳ Update local configuration - ``` - -2. Verify the initialization by running: + - Kubernetes namespace: radius-system + ⏳ Create new environment default + - Kubernetes namespace: default + - Recipe pack: local-dev + ⏳ Scaffold application + ⏳ Update local configuration + ``` + +1. Verify the initialization by running: + ```bash kubectl get deployments -n radius-system ``` @@ -29,14 +42,15 @@ The Radius control-plane is a set of services that provide the core functionalit ``` NAME READY UP-TO-DATE AVAILABLE AGE - ucp 1/1 1 1 53s - appcore-rp 1/1 1 1 53s + applications-rp 1/1 1 1 53s bicep-de 1/1 1 1 53s + controller 1/1 1 1 53s + ucp 1/1 1 1 53s contour-contour 1/1 1 1 46s ``` You can also use [`rad env list`]({{< ref rad_env_list.md >}}) to view your environment: - + ```bash rad env list - ``` \ No newline at end of file + ``` diff --git a/docs/shared-content/installation/rad-cli/install-rad-cli.md b/docs/shared-content/installation/rad-cli/install-rad-cli.md index 4fd7fdcee..130c111cf 100644 --- a/docs/shared-content/installation/rad-cli/install-rad-cli.md +++ b/docs/shared-content/installation/rad-cli/install-rad-cli.md @@ -1,34 +1,36 @@ The `rad` CLI manages your applications, resources, and environments. You can install it on your local machine with the following installation scripts: -{{< tabs MacOS "Linux/WSL" "Windows PowerShell" "Cloud Shell" Binaries >}} +{{< tabs "Linux/WSL" MacOS "Windows PowerShell" "GitHub Codespace" "Azure Cloud Shell" Binaries >}} {{% codetab %}} {{< latest >}} ```bash -curl -fsSL "https://get.radapp.dev/tools/rad/install.sh" | /bin/bash +wget -q "https://raw.githubusercontent.com/radius-project/radius/main/deploy/install.sh" -O - | /bin/bash ``` {{< /latest >}} {{< edge >}} -To install the latest edge version: -```bash -curl -fsSL "https://radiuspublic.blob.core.windows.net/tools/rad/install.sh" | /bin/bash -s edge -``` +1. Visit the [GitHub Actions runs](https://github.com/radius-project/radius/actions/workflows/build.yaml?query=branch%3Amain+event%3Apush) +1. Click on the latest successful run +1. Scroll down to Artifacts and download `rad_cli_release` +1. Extract the archive and run the rad binary applicable for your machine + {{< /edge >}} {{% /codetab %}} {{% codetab %}} {{< latest >}} ```bash -wget -q "https://get.radapp.dev/tools/rad/install.sh" -O - | /bin/bash +curl -fsSL "https://raw.githubusercontent.com/radius-project/radius/main/deploy/install.sh" | /bin/bash ``` {{< /latest >}} {{< edge >}} -To install the latest edge version: -```bash -wget -q "https://radiuspublic.blob.core.windows.net/tools/rad/install.sh" -O - | /bin/bash -s edge -``` +1. Visit the [GitHub Actions runs](https://github.com/radius-project/radius/actions/workflows/build.yaml?query=branch%3Amain+event%3Apush) +1. Click on the latest successful run +1. Scroll down to Artifacts and download `rad_cli_release` +1. Extract the archive and run the rad binary applicable for your machine + {{< /edge >}} {{% /codetab %}} @@ -37,7 +39,7 @@ wget -q "https://radiuspublic.blob.core.windows.net/tools/rad/install.sh" -O - | Run the following in a PowerShell window: ```powershell -iwr -useb "https://get.radapp.dev/tools/rad/install.ps1" | iex +iwr -useb "https://raw.githubusercontent.com/radius-project/radius/main/deploy/install.ps1" | iex ``` You may need to refresh your $PATH environment variable to access `rad`: @@ -46,14 +48,22 @@ $Env:Path = [System.Environment]::GetEnvironmentVariable("Path","User") ``` {{< /latest >}} {{< edge >}} -To install the latest edge version: -```powershell -$script=iwr -useb https://radiuspublic.blob.core.windows.net/tools/rad/install.ps1; $block=[ScriptBlock]::Create($script); invoke-command -ScriptBlock $block -ArgumentList edge -``` +1. Visit the [GitHub Actions runs](https://github.com/radius-project/radius/actions/workflows/build.yaml?query=branch%3Amain+event%3Apush) +1. Click on the latest successful run +1. Scroll down to Artifacts and download `rad_cli_release` +1. Extract the archive and run the rad binary applicable for your machine + {{< /edge >}} {{% /codetab %}} +{{% codetab %}} +Radius offers a **free** Codespace option for getting up and running with a Radius environment in seconds: + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/radius-project/samples) + +{{% /codetab %}} + {{% codetab %}} [Azure Cloud Shell](https://docs.microsoft.com/en-us/azure/cloud-shell/overview) is an interactive, authenticated, browser-accessible shell for managing Azure resources. @@ -61,7 +71,7 @@ Azure Cloud Shell for bash doesn't have a sudo command, so users are unable to i ```bash export RADIUS_INSTALL_DIR=./ -wget -q "https://get.radapp.dev/tools/rad/install.sh" -O - | /bin/bash +wget -q "https://raw.githubusercontent.com/radius-project/radius/main/deploy/install.sh" -O - | /bin/bash ``` You can now run the rad CLI with `./rad`. @@ -70,12 +80,8 @@ PowerShell for Cloud Shell is currently not supported. {{% /codetab %}} {{% codetab %}} -1. Download the `rad` CLI from one of these URLs: - - MacOS x64: https://get.radapp.dev/tools/rad/{{< param version >}}/macos-x64/rad - - MacOS arm64: https://get.radapp.dev/tools/rad/{{< param version >}}/macos-arm64/rad - - Linux x64: https://get.radapp.dev/tools/rad/{{< param version >}}/linux-x64/rad - - Windows x64: https://get.radapp.dev/tools/rad/{{< param version >}}/windows-x64/rad.exe -1. Ensure the user has permission to execute the binary and place it somewhere on your PATH so it can be invoked easily. +Visit [Radius GitHub releases](https://github.com/radius-project/radius/releases) to select and download a specific version of the rad CLI. + {{% /codetab %}} {{< /tabs >}} diff --git a/docs/shared-content/installation/vscode-bicep/images/radius-bicep.png b/docs/shared-content/installation/vscode-bicep/images/radius-bicep.png new file mode 100644 index 000000000..2e3776cf1 Binary files /dev/null and b/docs/shared-content/installation/vscode-bicep/images/radius-bicep.png differ diff --git a/docs/shared-content/installation/vscode-bicep/install-vscode-bicep.md b/docs/shared-content/installation/vscode-bicep/install-vscode-bicep.md index 6ace1412d..e74e1b9db 100644 --- a/docs/shared-content/installation/vscode-bicep/install-vscode-bicep.md +++ b/docs/shared-content/installation/vscode-bicep/install-vscode-bicep.md @@ -1,62 +1,33 @@ Visual Studio Code offers the best authoring experience for Radius and Bicep. Download and install the Radius Bicep extension to easily author and validate Bicep templates: -1. Download the latest extensions - - {{< tabs Links Terminal >}} - - {{% codetab %}} - {{< button link="https://get.radapp.dev/tools/vscode-extensibility/stable/rad-vscode-bicep.vsix" text="Download Bicep extension" >}} - - {{< edge >}} - {{< button link="https://get.radapp.dev/tools/vscode-extensibility/edge/rad-vscode-bicep.vsix" text="Download Bicep extension (edge)" >}} - {{< /edge >}} - {{% /codetab %}} - - {{% codetab %}} - - Stable Version - - ```bash - curl https://get.radapp.dev/tools/vscode-extensibility/stable/rad-vscode-bicep.vsix --output rad-vscode-bicep.vsix - ``` - - Edge Version - - ```bash - curl https://get.radapp.dev/tools/vscode-extensibility/edge/rad-vscode-bicep.vsix --output rad-vscode-bicep.vsix - ``` - - {{% /codetab %}} - - {{< /tabs >}} - -2. Install the `.vsix` file: - - {{< tabs UI Terminal >}} - - {{% codetab %}} +{{< alert title="Disable the official Bicep extension" color="warning" >}} +You can only have one VSCode Bicep extension installed at a time. To build on Radius, you will need to uninstall the official Bicep and use only the Radius Bicep extension. +{{< /alert >}} +{{< latest >}} +1. To install the Radius Bicep extension, search for Radius Bicep in the Extensions tab in VSCode or in the [Visual Studio marketplace](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.rad-vscode-bicep&ssr=false#overview) + + Screenshot of Radius Bicep extension in VSCode Marketplace

+ +2. Select Install + +To verify you've installed the extension, open any file with the .bicep file extension and start [authoring Radius application]({{< ref author-apps >}}) to verify the auto-complete and other validation features. +{{< /latest >}} +{{< edge >}} +1. Visit the [GitHub Actions runs](https://github.com/radius-project/bicep/actions/workflows/radius-build.yml?query=event%3Apush+branch%3Abicep-extensibility) +2. Click on the latest successful run +3. Scroll down to Artifacts and download `release` +4. Extract the archive and Install the `rad-vscode-bicep.vsix` file: In VSCode, manually install the extension using the *Install from VSIX* command in the Extensions view command drop-down. - Screenshot of installing a vsix extension - - - {{% /codetab %}} - - {{% codetab %}} + Screenshot of installing a vsix extension
+ You can also import this extension on the [command-line](https://code.visualstudio.com/docs/editor/extension-gallery#_install-from-a-vsix) with: ```bash code --install-extension rad-vscode-bicep.vsix ``` - If you're on macOS, make sure to [setup the `code` alias](https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line). - {{% /codetab %}} - - {{< /tabs >}} - -3. **Disable the official Bicep extension** if you have it installed. Do not install it if prompted, our custom extension needs to be responsible for handling `.bicep` files and you cannot have both extensions enabled at once. - -4. If running on Windows Subsystem for Linux (WSL), make sure to install the extension in WSL as well: - - Screenshot of installing a vsix extension in WSL +5. If running on Windows Subsystem for Linux (WSL), make sure to install the extension in WSL as well:
+ Screenshot of installing a vsix extension in WSL +{{< /edge >}} diff --git a/docs/static/js/clarity.js b/docs/static/js/clarity.js deleted file mode 100644 index 907712b98..000000000 --- a/docs/static/js/clarity.js +++ /dev/null @@ -1,20 +0,0 @@ -$(document).ready(function() { - $.ajax({ - type: "GET", - url: "/.auth/me", - success: function(data) { - if (data[0] && data[0].user_id) { - // Set identifier as hashed user id - window.clarity("identify", data[0].user_id); - - // If user_id contains microsoft.com, set internal to true - if (data[0].user_id.includes("microsoft.com")) { - window.clarity("set", "internal", "true"); - } - else { - window.clarity("set", "internal", "false"); - } - } - } - }); -}); diff --git a/docs/static/js/copy-code-button.js b/docs/static/js/copy-code-button.js index ca5d0e26e..eb42c3d80 100644 --- a/docs/static/js/copy-code-button.js +++ b/docs/static/js/copy-code-button.js @@ -19,12 +19,15 @@ highlightClass.forEach(element => { copyIcon.addEventListener('click', async () => { const selection = window.getSelection(); const range = document.createRange(); - range.selectNodeContents(element); + const codeElements = element.querySelectorAll('code'); + const codeElement = codeElements.length > 1 ? codeElements[1] : codeElements[0]; + range.selectNodeContents(codeElement); selection.removeAllRanges(); selection.addRange(range); + const text = selection.toString(); try { - await navigator.clipboard.writeText(selection.toString()); + await navigator.clipboard.writeText(text); console.log('Text copied to clipboard'); copyIcon.classList.replace('fa-copy', 'fa-check'); selection.removeAllRanges(); diff --git a/holding-pen/reference-apps/aws-sqs/snippets/app.bicep b/holding-pen/reference-apps/aws-sqs/snippets/app.bicep index f588fd3b3..9b6bc7a8e 100644 --- a/holding-pen/reference-apps/aws-sqs/snippets/app.bicep +++ b/holding-pen/reference-apps/aws-sqs/snippets/app.bicep @@ -44,7 +44,7 @@ resource producer 'Applications.Core/containers@2023-10-01-preview' = { }, aws_credential ) - image: 'radius.azurecr.io/reference-apps/aws-sqs-sample:edge' + image: 'ghcr.io/radius-project/samples/aws-sqs:latest' } } } @@ -61,7 +61,7 @@ resource consumer 'Applications.Core/containers@2023-10-01-preview' = { }, aws_credential ) - image: 'radius.azurecr.io/reference-apps/aws-sqs-sample:edge' + image: 'ghcr.io/radius-project/samples/aws-sqs:latest' } } } diff --git a/holding-pen/reference-apps/eshop-dapr/_index.md b/holding-pen/reference-apps/eshop-dapr/_index.md index 8010f6e10..65de3e5a8 100644 --- a/holding-pen/reference-apps/eshop-dapr/_index.md +++ b/holding-pen/reference-apps/eshop-dapr/_index.md @@ -40,6 +40,6 @@ Radius allows the eShop on Dapr application to: - Simplify deployment with Bicep and Azure Resource Manager (ARM). No more custom deployment scripts or workflows. - Automatically generate and apply the backing Dapr component configurations from the resources or values provided within the Dapr building block resource definitions. -{{< button text="View eShop reference app in samples" githubRepo="samples" githubPath="reference-apps/eshop-dapr" color="success" size="btn-lg" >}} +{{< button text="View eShop reference app in samples" githubRepo="samples" githubPath="samples/eshop-dapr" color="success" size="btn-lg" >}} *Visit the [GitHub docs]({{< ref github >}}) if you need access to the organization* \ No newline at end of file