diff --git a/public/docs/getting-started/first-kubernetes-deployment/add-k8s-target.png b/public/docs/getting-started/first-kubernetes-deployment/add-k8s-target.png new file mode 100644 index 0000000000..b538deaa5d Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/add-k8s-target.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/completed-git-credential.png b/public/docs/getting-started/first-kubernetes-deployment/completed-git-credential.png new file mode 100644 index 0000000000..aff8448e1a Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/completed-git-credential.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/container-image-docker.png b/public/docs/getting-started/first-kubernetes-deployment/container-image-docker.png new file mode 100644 index 0000000000..84c25770e9 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/container-image-docker.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/container-image.png b/public/docs/getting-started/first-kubernetes-deployment/container-image.png new file mode 100644 index 0000000000..7d70e12fa3 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/container-image.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/create-account.png b/public/docs/getting-started/first-kubernetes-deployment/create-account.png new file mode 100644 index 0000000000..8d2d95f25a Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/create-account.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/create-docker-feed.png b/public/docs/getting-started/first-kubernetes-deployment/create-docker-feed.png new file mode 100644 index 0000000000..073c160ff1 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/create-docker-feed.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/create-k8s-cluster.png b/public/docs/getting-started/first-kubernetes-deployment/create-k8s-cluster.png new file mode 100644 index 0000000000..01784bc6fc Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/create-k8s-cluster.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/create-process.png b/public/docs/getting-started/first-kubernetes-deployment/create-process.png new file mode 100644 index 0000000000..aeb05bf4db Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/create-process.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/deployment-overview.png b/public/docs/getting-started/first-kubernetes-deployment/deployment-overview.png new file mode 100644 index 0000000000..aee4b08d41 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/deployment-overview.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/deployment-success.png b/public/docs/getting-started/first-kubernetes-deployment/deployment-success.png new file mode 100644 index 0000000000..d32607a9bb Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/deployment-success.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/deployment-targets.png b/public/docs/getting-started/first-kubernetes-deployment/deployment-targets.png new file mode 100644 index 0000000000..a4ff69fbf2 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/deployment-targets.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/external-feeds.png b/public/docs/getting-started/first-kubernetes-deployment/external-feeds.png new file mode 100644 index 0000000000..bd720174d7 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/external-feeds.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/generate-token.png b/public/docs/getting-started/first-kubernetes-deployment/generate-token.png new file mode 100644 index 0000000000..036253fe6e Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/generate-token.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/get-started.png b/public/docs/getting-started/first-kubernetes-deployment/get-started.png new file mode 100644 index 0000000000..759130252e Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/get-started.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/git-credential.png b/public/docs/getting-started/first-kubernetes-deployment/git-credential.png new file mode 100644 index 0000000000..6bd8bce667 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/git-credential.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/git-repository.png b/public/docs/getting-started/first-kubernetes-deployment/git-repository.png new file mode 100644 index 0000000000..d1be549a75 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/git-repository.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/health-check-connectivity.png b/public/docs/getting-started/first-kubernetes-deployment/health-check-connectivity.png new file mode 100644 index 0000000000..be4a34aab8 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/health-check-connectivity.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/health-check-container-image.png b/public/docs/getting-started/first-kubernetes-deployment/health-check-container-image.png new file mode 100644 index 0000000000..12237f2d86 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/health-check-container-image.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/healthy-target.png b/public/docs/getting-started/first-kubernetes-deployment/healthy-target.png new file mode 100644 index 0000000000..adcf32abc3 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/healthy-target.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/k8s-object-status-check.png b/public/docs/getting-started/first-kubernetes-deployment/k8s-object-status-check.png new file mode 100644 index 0000000000..414e10066a Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/k8s-object-status-check.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/kubernetes-step.png b/public/docs/getting-started/first-kubernetes-deployment/kubernetes-step.png new file mode 100644 index 0000000000..dddb1792e4 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/kubernetes-step.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/new-project.png b/public/docs/getting-started/first-kubernetes-deployment/new-project.png new file mode 100644 index 0000000000..3f4807c7df Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/new-project.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/octopetshop-repo.png b/public/docs/getting-started/first-kubernetes-deployment/octopetshop-repo.png new file mode 100644 index 0000000000..a254d03745 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/octopetshop-repo.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/on-behalf-of.png b/public/docs/getting-started/first-kubernetes-deployment/on-behalf-of.png new file mode 100644 index 0000000000..69cb815c47 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/on-behalf-of.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/paths.png b/public/docs/getting-started/first-kubernetes-deployment/paths.png new file mode 100644 index 0000000000..3ffade43db Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/paths.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/placeholder b/public/docs/getting-started/first-kubernetes-deployment/placeholder new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/public/docs/getting-started/first-kubernetes-deployment/placeholder @@ -0,0 +1 @@ + diff --git a/public/docs/getting-started/first-kubernetes-deployment/release-summary.png b/public/docs/getting-started/first-kubernetes-deployment/release-summary.png new file mode 100644 index 0000000000..cd7a2727e4 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/release-summary.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/repository-url.png b/public/docs/getting-started/first-kubernetes-deployment/repository-url.png new file mode 100644 index 0000000000..6450952053 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/repository-url.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/select-environments.png b/public/docs/getting-started/first-kubernetes-deployment/select-environments.png new file mode 100644 index 0000000000..1e8591917f Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/select-environments.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/survey.png b/public/docs/getting-started/first-kubernetes-deployment/survey.png new file mode 100644 index 0000000000..1f7e5b01bd Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/survey.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/target-authentication-methods.png b/public/docs/getting-started/first-kubernetes-deployment/target-authentication-methods.png new file mode 100644 index 0000000000..ed93fa9f80 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/target-authentication-methods.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/target-authentication.png b/public/docs/getting-started/first-kubernetes-deployment/target-authentication.png new file mode 100644 index 0000000000..052e67c28a Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/target-authentication.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/test-docker-feed.png b/public/docs/getting-started/first-kubernetes-deployment/test-docker-feed.png new file mode 100644 index 0000000000..3338015b83 Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/test-docker-feed.png differ diff --git a/public/docs/getting-started/first-kubernetes-deployment/worker-pool.png b/public/docs/getting-started/first-kubernetes-deployment/worker-pool.png new file mode 100644 index 0000000000..ade1b9515d Binary files /dev/null and b/public/docs/getting-started/first-kubernetes-deployment/worker-pool.png differ diff --git a/src/pages/docs/getting-started/first-kubernetes-deployment.md b/src/pages/docs/getting-started/first-kubernetes-deployment.md new file mode 100644 index 0000000000..14634253ec --- /dev/null +++ b/src/pages/docs/getting-started/first-kubernetes-deployment.md @@ -0,0 +1,423 @@ +--- +layout: src/layouts/Default.astro +pubDate: 2023-10-26 +modDate: 2023-10-26 +title: First Kubernetes deployment +description: This guide will walk you through how to configure your first deployment to Kubernetes in Octopus Deploy. +navOrder: 10 +--- + +👋 Welcome to Octopus Deploy! + +This tutorial will help you complete your first deployment to Kubernetes with Octopus Deploy. We’ll walk you through the steps to deploy YAML files to your Kubernetes cluster. + +## Before you start + +To follow this tutorial, you need: + +* [Octopus Cloud instance](https://octopus.com/start) +* Kubernetes cluster +* [Docker Hub account](https://hub.docker.com/) +* [GitHub account](https://github.com/) + +#### GitHub repository + +To start quickly, you can fork our sample GitHub repository, which includes pre-created YAML files. Follow the steps below to fork the repository: + +1. Navigate to the **[OctoPetShop](https://github.com/OctopusSamples/OctoPetShop.git)** repository. + +:::figure +![Sample OctoPetShop GitHub repository](/docs/getting-started/first-kubernetes-deployment/octopetshop-repo.png) +::: + +2. In the top-right corner of the page, click **FORK**. +3. Provide an **Owner and repository name**, for example `OctoPetShop`. +4. Keep the **Copy the master branch only** checkbox selected. +5. Click **CREATE FORK**. +6. Wait for the process to complete (this should only take a few seconds). + +Now you're ready, let’s begin deploying your first application to Kubernetes. + +## Log in to Octopus + +1. Log in to your Octopus instance and click **GET STARTED**. + +:::figure +![Get started welcome screen](/docs/getting-started/first-kubernetes-deployment/get-started.png) +::: + +## Add project + +Projects let you manage software applications and services, each with its deployment process. + +2. Give your project a descriptive name and click **SAVE**. + +:::figure +![Octopus Deploy 'Add New Project' form with fields for project details.](/docs/getting-started/first-kubernetes-deployment/new-project.png) +::: + +## Add environments + +You will need an environment to deploy to. + +Environments are how you organize your infrastructure into groups representing the different stages of your deployment pipeline. For example, Dev, Test, and Production. + +3. Select the environments you’d like to create and click **SAVE**. + +:::figure +![Environment selection options and deployment lifecycle visuals](/docs/getting-started/first-kubernetes-deployment/select-environments.png) +::: + +## Project questionnaire (optional) + +You have the option to fill out a short survey. This helps our team learn about the technologies our customers are using, which guides the future direction of Octopus. It should only take about 30 seconds to complete. + +4. Click **SUBMIT**, and you'll be taken to your project. + +:::figure +![Octopus Deploy interface displaying a questionnaire](/docs/getting-started/first-kubernetes-deployment/survey.png) +::: + +## Create deployment process +The next step is creating your deployment process. This is where you define the steps that Octopus uses to deploy your software. + +1. Click **CREATE PROCESS** to see the available deployment steps. + +:::figure +![Deployment process page with a button to create the process.](/docs/getting-started/first-kubernetes-deployment/create-process.png) +::: + +### Configure Deploy raw Kubernetes YAML step + +2. Select the **Kubernetes** filter and then click the **Deploy raw Kubernetes YAML** card. + +:::figure +![Kubernetes steps in the Octopus Deploy process editor.](/docs/getting-started/first-kubernetes-deployment/kubernetes-step.png) +::: + +#### Step name +You can leave this as the *default Deploy raw Kubernetes YAML*. + +#### Execution location +This step will run once on a worker on behalf of each deployment target. + +Workers are machines that can execute tasks that don’t need to be run on the Octopus Server or individual deployment targets. + +You’ll learn more about deployment targets later in this tutorial. + +#### Worker Pool +Worker Pools are groups of Workers. When a task is assigned to a Worker, the task will be executed by one of the Workers in the pools you’ve configured. + +3. Select **Runs on a worker from a specific pool**. +4. Select **Hosted Ubuntu** from the dropdown menu. + +:::figure +![Worker Pool expander with 'Hosted Ubuntu' selected.](/docs/getting-started/first-kubernetes-deployment/worker-pool.png) +::: + +#### On behalf of +Target roles select specific deployment targets in an environment. This step will run on all deployment targets with the roles you specify in this field. + +5. Add a new target role by typing it into the field. For this example, we'll use `k8s`. + +:::figure +![Role selection expander with 'k8s' role currently added.](/docs/getting-started/first-kubernetes-deployment/on-behalf-of.png) +::: + +After configuring your deployment process, you’ll assign deployment targets to this target role. + +#### Container image +Next, you configure this step to run inside an execution container. + +6. Select **Runs inside a container, on a worker**. + +:::figure +![Container image expander with 'Runs inside a container, on a worker selected'.](/docs/getting-started/first-kubernetes-deployment/container-image.png) +::: + +### Add container image registry feed +For a step running on a worker, you can select a Docker image to execute the step inside of. + +Since you don’t have a Docker Container Registry available yet, you need to add one following the steps below: +1. Click the **External Feeds** link (this will open a new window). +1. Click the **ADD FEED** button and select **Docker Container Registry** from the **Feed Type** dropdown. + +:::figure +![Library section in Octopus with options to add external feeds.](/docs/getting-started/first-kubernetes-deployment/external-feeds.png) +::: + +1. Provide a name for your feed, for example `Docker Hub`. +1. Enter the feed URL to the public Docker Hub registry, for example `https://index.docker.io`. +1. You can leave the registry path blank for this example. + +:::figure +![Form to create a Docker container registry external feed.](/docs/getting-started/first-kubernetes-deployment/create-docker-feed.png) +::: + +1. Provide your credentials for Docker Hub. +1. Click **SAVE AND TEST**, and then type `nginx` into the package name field to test your external feed. + +:::figure +![A search interface in Octopus to test the Docker Hub repository.](/docs/getting-started/first-kubernetes-deployment/test-docker-feed.png) +::: + +Close the window and return to configuring the **Deploy raw Kubernetes YAML** step. + +#### Container image +7. Click **REFRESH** and select **Docker Hub** as your Container Registry. +1. Copy the latest **Ubuntu-based image** from the help text and paste it into the container image field. + +:::figure +![Container image expander using the latest Ubuntu-based image.](/docs/getting-started/first-kubernetes-deployment/container-image-docker.png) +::: + +#### YAML source +This step lets you get your YAML from 3 different sources: + +* Git repository (default) +* Package +* Inline script + +Sourcing from a Git Repository can streamline your deployment process by reducing the steps required to get your YAML into Octopus. + +9. Select **Git Repository** as your YAML source. + +:::figure +![YAML source expander with Git repository selected](/docs/getting-started/first-kubernetes-deployment/git-repository.png) +::: + +#### Git repository details +10. Select **Library** and add a new Git credential by clicking the **+** icon. +1. Click the **ADD GIT CREDENTIAL** button. +1. Enter a name for your Git credential. +1. Provide your GitHub username. + +:::figure +![A section in the library interface that lets users create and manage Git credentials.](/docs/getting-started/first-kubernetes-deployment/git-credential.png) +::: + +### Generate GitHub personal access token +Github.com now requires token-based authentication (this excludes GitHub Enterprise Server). Create a personal access token following the steps below or learn more in the [GitHub documentation](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). + +1. Navigate to [github.com](https://github.com) and log in to your account. +1. Click your profile picture in the top right corner. +1. Click **SETTINGS**. +1. Scroll down to the bottom of the page and click **DEVELOPER SETTINGS**. +1. Under Personal access tokens, click **FINE-GRAINED TOKENS**. +1. Click **GENERATE NEW TOKEN**. +1. Under **Token name**, enter a name for the token. +1. Under **Expiration**, provide an expiration for the token. +1. Select a Resource Owner. +1. Under **Repository Access**, choose **Only select repositories** and select the **OctoPetShop** repository from the dropdown. +1. Click **REPOSITORY PERMISSIONS**, scroll down to **Contents** and select **Read-only**. +1. Scroll down to the **Overview**, and you should have 2 permissions for 1 of your repositories (contents and metadata). +1. Click **Generate token** and copy the token. + +:::figure +![A GitHub settings page where users can manage permissions for fine-grained tokens.](/docs/getting-started/first-kubernetes-deployment/generate-token.png) +::: + +#### Git repository details +14. Paste the token into Octopus's personal access token field. +1. **Save** your Git credential and return to the **Deploy raw Kubernetes YAML** step. +1. Click the refresh icon next to the **Select Git credential** dropdown. +1. Select the Git credential you created earlier. + +:::figure +![Authentication expander with a Git repository selected from the library.](/docs/getting-started/first-kubernetes-deployment/completed-git-credential.png) +::: + +#### Repository URL +18. Enter the full URL to the Git repository where you store the YAML files you want to deploy, for example, `https://github.com/your-user/OctoPetShop.git`. + +:::figure +![Repository URL expander where the user's YAML files are stored.](/docs/getting-started/first-kubernetes-deployment/repository-url.png) +::: + +#### Branch settings +19. Provide the default branch you want to use, for example **master** if you’re using the sample repo. + +#### Paths +20. Enter the relative path(s) to the YAML files you want to deploy to your cluster. If you’re using the sample repo, the path will be `k8s/*.yaml`. + +:::figure +![The Paths expander that lets users specify the paths to their YAML files using glob patterns.](/docs/getting-started/first-kubernetes-deployment/paths.png) +::: + +#### Kubernetes object status check +This feature gives you live status updates during deployment for all the Kubernetes objects you're deploying. + +21. Keep the default **Check that Kubernetes objects are running successfully** option selected with the default timeout of **180** seconds. + +:::figure +![Kubernetes object status check expander with the default option and timeout selected.](/docs/getting-started/first-kubernetes-deployment/k8s-object-status-check.png) +::: + +#### Structured configuration variables +This is an advanced feature that you can skip for this tutorial. Learn more about [structured configuration variables in our docs](https://octopus.com/docs/projects/steps/configuration-features/structured-configuration-variables-feature). + +#### Referenced packages +This is an advanced feature that you can skip for this tutorial. Learn more about [references packages in our docs](https://octopus.com/docs/deployments/custom-scripts/run-a-script-step#referencing-packages). + +#### Namespace +22. Specify the namespace in the cluster where you want to deploy your YAML files, for example, `demo-namespace`. + +If the namespace doesn’t exist yet, Octopus will create it during the deployment. + +#### Conditions +You can set [conditions](https://octopus.com/docs/projects/steps/conditions) for greater control over how each step in your deployment process gets executed. + +You can skip all the fields under this section for your first deployment. + +**Save** your step and then move on to the next section to add your Kubernetes deployment target. + +## Add a deployment target +With Octopus Deploy, you can deploy software to: + +* Kubernetes clusters +* Microsoft Azure +* AWS +* Cloud regions +* Windows servers +* Linux servers +* Offline package drops + +Wherever you’re deploying your software, these machines and services are known as your deployment targets. + +1. Navigate to **Infrastructure** ➜ **Deployment Targets**, and click **ADD DEPLOYMENT TARGET**. + +:::figure +![Deployment targets page with no targets added.](/docs/getting-started/first-kubernetes-deployment/deployment-targets.png) +::: + +2. Select **KUBERNETES CLUSTER** and click **ADD** on the Kubernetes Cluster card. + +:::figure +![A list of deployment target types with the Kubernetes cluster selected.](/docs/getting-started/first-kubernetes-deployment/add-k8s-target.png) +::: + +#### Display name +3. Enter `k8s-demo` in the Display Name field. + +#### Environments +4. Select **Development**, **Staging**, and **Production** from the dropdown list. + +#### Target roles +5. Type in the same target role you provided while configuring the **Deploy raw Kubernetes YAML** step, for example, `k8s`. + +The target role won’t be available to select from the dropdown list yet, because it gets created during this step. + +:::figure +![User interface for setting up a Kubernetes Cluster deployment target.](/docs/getting-started/first-kubernetes-deployment/create-k8s-cluster.png) +::: + +#### Authentication +Octopus provides multiple methods for authenticating your Kubernetes cluster depending on your setup, including: + +| **Service** | **Octopus Authentication Method** | **Notes** | +|-------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| AKS | [Azure Service Principal](https://octopus.com/docs/infrastructure/accounts/azure) | The Azure Service Principal is only used with AKS clusters. To log into ACS or ACS-Engine clusters, standard Kubernetes credentials like certificates or service account tokens must be used.

Learn more in the [Azure docs](https://learn.microsoft.com/en-us/azure/aks/operator-best-practices-identity). | +| GKE | [Google Cloud Account](https://octopus.com/docs/infrastructure/accounts/google-cloud) | When using a GKE cluster, Google Cloud accounts allow you to authenticate using a Google Cloud IAM service account.

Learn more in the [GKE docs](https://cloud.google.com/kubernetes-engine/docs/how-to/api-server-authentication). | +| EKS | [AWS Account](https://octopus.com/docs/infrastructure/accounts/aws) | When using an EKS cluster, AWS accounts allow IAM accounts and roles to be used.

Learn more in the [AWS docs](https://docs.aws.amazon.com/eks/latest/userguide/cluster-auth.html). | +| Other | [Tokens](https://octopus.com/docs/infrastructure/accounts/tokens)
[Username and password](https://octopus.com/docs/infrastructure/accounts/username-and-password)
[Client certificate](https://octopus.com/docs/infrastructure/deployment-targets/kubernetes-target#add-a-kubernetes-target) | Learn more in the [Kubernetes cluster docs](https://octopus.com/docs/infrastructure/deployment-targets/kubernetes-target#add-a-kubernetes-target). | + + +Here are brief instructions on how to configure your cluster authentication in Octopus, since it will depend on your specific situation: + +1. Select the appropriate authentication method from the list. + +:::figure +![Authentication methods for a Kubernetes Cluster deployment with various account options.](/docs/getting-started/first-kubernetes-deployment/target-authentication-methods.png) +::: + +2. Add a new account with the authentication details needed to access your cluster (more detailed instructions are linked in the table above). + +:::figure +![Create Account page with form in Octopus Deploy.](/docs/getting-started/first-kubernetes-deployment/create-account.png) +::: + +3. Complete the target authentication configuration fields like cluster name, resource group, etc. + +:::figure +![Kubernetes authentication details, including Azure Service Principal and cluster information.](/docs/getting-started/first-kubernetes-deployment/target-authentication.png) +::: + +Need more details on how to configure various authentication methods? Read the [Kubernetes cluster docs](https://octopus.com/docs/infrastructure/deployment-targets/kubernetes-target#add-a-kubernetes-target). + +#### Kubernetes namespace +6. Specify the namespace for this deployment target, for example, `default`. + +#### Worker Pool +7. Select **Hosted Ubuntu** as the default Worker Pool. + +#### Health check container image +8. Select **Runs inside a container, on a Worker**. +1. Select **Docker Hub** as the container registry. +1. Copy the **Ubuntu-based image** and paste it into the container image field. +1. **SAVE** your deployment target. + +:::figure +![Health check container image expander with the latest Ubuntu-based image.](/docs/getting-started/first-kubernetes-deployment/health-check-container-image.png) +::: + +#### Health check +Octopus runs health checks on deployment targets and Workers to ensure they're available and running the latest version of Calamari. + +This process may take a few minutes since it’s acquiring the Worker and it needs to download the Worker Tools image. + +1. After saving, navigate to **Connectivity** in the left sidebar menu. +1. Click the **CHECK HEALTH** button. + +:::figure +![Deployment target connectivity status page with unknown state.](/docs/getting-started/first-kubernetes-deployment/health-check-connectivity.png) +::: + +You can create and deploy a release now that you have a healthy deployment target. + +:::figure +![Logs indicating a healthy deployment target.](/docs/getting-started/first-kubernetes-deployment/healthy-target.png) +::: + +## Release and deploy + +### Create release +A release is a snapshot of the deployment process and the associated assets (Git resources, variables, etc.) as they exist when the release is created. + +1. Navigate to **Projects** in the top navigation and select your **First K8s deployment** project. +1. Click the **CREATE RELEASE** button. + +:::figure +![Deployment overview page with no deployments.](/docs/getting-started/first-kubernetes-deployment/deployment-overview.png) +::: + +You’ll see a summary of the Git resources you provided in the **Deploy raw YAML** step. + +:::figure +![Release summary showing Git resources](/docs/getting-started/first-kubernetes-deployment/release-summary.png) +::: + +3. Click **SAVE**. + +### Execute deployment +When you created this project, you selected the default lifecycle (Development ➜ Staging ➜ Production). Lifecycles determine which environments the project can be deployed to, and the promotion rules between those environments. + +1. Click **DEPLOY TO DEVELOPMENT** to deploy to the development environment associated with your cluster. +1. Review the preview summary and when you’re ready, click **DEPLOY**. + +Your first deployment may take slightly longer because your Docker image won’t be cached yet. + +3. Navigate to the **KUBERNETES OBJECT STATUS** tab to see the live status of your Kubernetes objects as the deployment progresses. + +:::figure +![Kubernetes Object Status dashboard showing a successful deployment.](/docs/getting-started/first-kubernetes-deployment/deployment-success.png) +::: + +You’ve successfully completed your first deployment to Kubernetes! 🎉 + +As you continue to explore Octopus Deploy, consider diving deeper into powerful features like [variables](https://octopus.com/docs/projects/variables), joining our [Slack community](http://octopususergroup.slack.com), or checking out our other tutorials to expand your knowledge. + +## More Kubernetes resources + +* [Deploy with the Kustomize step](https://octopus.com/docs/deployments/kubernetes/kustomize) +* [Deploy a Helm chart](https://octopus.com/docs/deployments/kubernetes/helm-update) +* [Using variables for Kubernetes without breaking YAML](https://octopus.com/blog/structured-variables-raw-kubernetes-yaml)