mirror of
https://github.com/kubesphere/website.git
synced 2025-12-30 17:52:56 +00:00
138 lines
4.9 KiB
Markdown
138 lines
4.9 KiB
Markdown
---
|
||
title: "How to deloy applications cross multiple clusters"
|
||
keywords: 'kubernetes, docker, devops, jenkins, multiple cluster'
|
||
description: ''
|
||
linkTitle: "Deloy applications cross multiple clusters"
|
||
weight: 300
|
||
|
||
|
||
---
|
||
|
||
## Prerequisites
|
||
|
||
- You need to [enable multi-cluster](../../../../docs/multicluster-management/).
|
||
- You need to [enable KubeSphere DevOps System](../../../../docs/pluggable-components/devops/) on your host cluster.
|
||
- You need to create a workspace with multiple clusters, a DevOps project on your **host** cluster, a multi-cluster project(in this tutorial, your are assumed to add host and only one member cluster to the multi-cluster project), and a **project-regular** user account, and this account needs to be invited into the DevOps project and the multi-cluster project. See [multi-cluster](../../../multicluster-management) and [project-administration](../../../project-administration/project-and-multicluster-project.)
|
||
|
||
## Get Dockerhub Credential
|
||
|
||
Vist [dockerhub](https://dockerhub.com), log into the site, click **account settings**.
|
||
|
||

|
||
|
||
Click **Security** and **New Access Token**.
|
||
|
||

|
||
|
||
Enter the name of the access token, then save it.
|
||
|
||

|
||
|
||
Click **Copy and Close** and remember to save the access token.
|
||
|
||

|
||
|
||
### Create Credentials
|
||
|
||
Log into KubeSphere, enter into the created DevOps project on your **host** cluster and create the following credential under **Project Management → Credentials**:
|
||
|
||

|
||
|
||
The **Username** is your dockerhub username. **Password** is the access token you just copied.
|
||
|
||
After you have created your dockerhub credential, you still need create a **kubeconfig** type credential.
|
||
|
||

|
||
|
||
## Create a pipeline
|
||
|
||

|
||
|
||
Fill in the pipeline's basic information in the pop-up window, enter the name of pipeline and set the others as default value.
|
||
|
||

|
||
|
||

|
||
|
||
## Edit jenkins file
|
||
|
||
Click **Edit Jenkins File** button under your pipeline and paste the following text into the pop-up window. You need to replace **DOCKERHUB_USERNAME**, **DOCKERHUB_CREDENTIAL**, **KUBECONFIG_CREDENTIAL_ID**, **PROJECT_NAME** as yours.
|
||
|
||
```pipeline {
|
||
pipeline {
|
||
agent {
|
||
node {
|
||
label 'maven'
|
||
}
|
||
|
||
}
|
||
|
||
environment {
|
||
REGISTRY = 'docker.io'
|
||
// username of dockerhub
|
||
DOCKERHUB_USERNAME = 'yuswift'
|
||
APP_NAME = 'devops-go-sample'
|
||
// ‘dockerhubid’ is the dockerhub credential id you created on ks console
|
||
DOCKERHUB_CREDENTIAL = credentials('dockerhubid')
|
||
// the kubeconfig credential id you created on ks console
|
||
KUBECONFIG_CREDENTIAL_ID = 'multi-cluster'
|
||
// mutli-cluster project name under your own workspace
|
||
MULTI_CLUSTER_PROJECT_NAME = 'devops-with-go'
|
||
// the member cluster name you want to deploy app on
|
||
// in this tutorial, you are assumed to deploy app on host and only one member cluster
|
||
// for more member clusters, please manifest/multi-cluster-deploy.yaml
|
||
MEMBER_CLUSTER_NAME = 'c9'
|
||
}
|
||
|
||
stages {
|
||
stage('docker login') {
|
||
steps {
|
||
container('maven') {
|
||
sh 'echo $DOCKERHUB_CREDENTIAL_PSW | docker login -u $DOCKERHUB_CREDENTIAL_USR --password-stdin'
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
stage('build & push') {
|
||
steps {
|
||
container('maven') {
|
||
sh 'git clone https://github.com/yuswift/devops-go-sample.git'
|
||
sh 'cd devops-go-sample && docker build -t $REGISTRY/$DOCKERHUB_USERNAME/$APP_NAME .'
|
||
sh 'docker push $REGISTRY/$DOCKERHUB_USERNAME/$APP_NAME'
|
||
}
|
||
}
|
||
}
|
||
|
||
stage('deploy app to multi cluster') {
|
||
steps {
|
||
container('maven') {
|
||
script {
|
||
withCredentials([
|
||
kubeconfigFile(
|
||
credentialsId: 'multi-cluster',
|
||
variable: 'KUBECONFIG')
|
||
]) {
|
||
sh 'envsubst < devops-go-sample/manifest/multi-cluster-deploy.yaml | kubectl apply -f -'
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
> Note:
|
||
>
|
||
> - You are assumed to push images into dockehub. If you are using Harbor robot account, you can not pass the parameter to `docker login -u ` via jenkins credential with environment variable. Because every harbor-robot-account username contains a "\$" character, which will be converted into "\$$" by jenkins when used by environment varibles. See more about [this](https://number1.co.za/rancher-cannot-use-harbor-robot-account-imagepullbackoff-pull-access-denied/).
|
||
|
||

|
||
|
||
## Run the pipline
|
||
|
||
After you have saved the jenkins file, click the **Run** button. If everything goes well, you will see two deployment workload under your multi-cluster project.
|
||
|
||

|
||
|
||
 |