跳到主要内容
知仓学习社ZHICANG

kubesphere-devops-overview

Use when working with KubeSphere DevOps extension, CI/CD pipelines, Jenkins integration, or pipeline troubleshooting

不碰外部(只输出文字)无严重或高危命中kubesphere/kubesphere

它会碰到什么

扫了多少1 个文本文件,12 KB
它会碰到什么不碰外部(只输出文字)
命中总数0 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

KubeSphere DevOps Overview

Overview

KubeSphere DevOps provides CI/CD capabilities through Jenkins integration, supporting both graphical pipeline editing and Jenkinsfile-based pipelines. It enables automated builds, testing, and deployments across multi-cluster environments with ArgoCD integration for GitOps continuous deployment.

When to Use

  • Setting up CI/CD pipelines in KubeSphere
  • Configuring Jenkins integration
  • Managing DevOps projects and pipelines
  • Troubleshooting pipeline execution issues
  • Integrating with GitHub, GitLab, or SVN repositories
  • Configuring SonarQube for code quality

Core Concepts

Resource Mapping

KubeSphere DevOps maps resources across three layers:

KubeSphere          Kubernetes                    Jenkins
─────────────────────────────────────────────────────────────
Workspace           Workspace CR                  (authorization)
└── DevOpsProject   ├── DevOpsProject CR          └── Folder
    (Namespace)     └── Namespace (with label)
    └── Pipeline    ├── Pipeline CR               └── WorkflowJob
        └── Run     ├── PipelineRun CR            └── Build #N

Key Concept: A "DevOps Project" in KubeSphere is fundamentally a Kubernetes namespace with the devops.kubesphere.io/managed=true label. The DevOpsProject CR exists as a wrapper resource, but when querying for accessible DevOps projects, you interact with namespaces, not the DevOpsProject CRs directly.

For tenants: Use the /kapis/devops.kubesphere.io/v1alpha3/workspaces/{workspace}/namespaces endpoint to list accessible DevOps projects (returns namespace resources). The /apis/devops.kubesphere.io/v1alpha3/devopsprojects endpoint requires cluster-scoped permissions and returns 403 for tenants.

DevOps Project Naming Convention

DevOps projects have two forms of names:

| Name Type | Example | Source | Usage |

|-----------|---------|--------|-------|

| Shortname | devopstest | .metadata.generateName in DevOpsProject CR | Display/user-friendly name |

| Fullname | devopstestc2nj7 | .metadata.name in DevOpsProject CR and Namespace | Actual resource identifier |

Important:

  • The fullname is the actual Kubernetes namespace name (e.g., devopstestc2nj7)
  • When creating a DevOps project with shortname devopstest, KubeSphere generates a unique fullname by appending random characters
  • All API operations use the fullname (namespace name), not the shortname
  • When a user refers to a project by shortname and multiple projects match, ask for confirmation before proceeding

Workspace Association

DevOpsProjects belong to a Workspace via label:

apiVersion: devops.kubesphere.io/v1alpha3
kind: DevOpsProject
metadata:
  name: my-project
  labels:
    kubesphere.io/workspace: demo   # Associates with Workspace 'demo'

To create and associate:

# 1. Create Workspace
kubectl apply -f - <<EOF
apiVersion: tenant.kubesphere.io/v1beta1
kind: Workspace
metadata:
  name: demo
EOF

# 2. Create DevOpsProject with label
kubectl apply -f - <<EOF
apiVersion: devops.kubesphere.io/v1alpha3
kind: DevOpsProject
metadata:
  name: my-project
  labels:
    kubesphere.io/workspace: demo
EOF

Project Components

┌──────────────────────────────────────────────────────────────┐
│                     DevOps Project                            │
│  (Namespace with devops.kubesphere.io/managed=true label)    │
└──────────────────────┬───────────────────────────────────────┘
                       │
        ┌──────────────┼──────────────┐
        │              │              │
┌───────▼──────┐ ┌─────▼─────┐ ┌──────▼──────┐
│  Pipelines   │ │Credentials│ │   Webhooks  │
│              │ │           │ │             │
│ - Graphical  │ │ - SSH     │ │ - GitHub    │
│ - Jenkinsfile│ │ - Basic   │ │ - GitLab    │
│ - Multi-branch│ │ - Token  │ │ - Generic   │
└──────────────┘ └───────────┘ └─────────────┘

Installation

Using InstallPlan (Recommended for Production)

Minimal Installation (Default Config) - RECOMMENDED:

apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
  name: devops
  namespace: kubesphere-system
spec:
  extension:
    name: devops
    version: 1.2.4
  enabled: true
  upgradeStrategy: Manual   # Required for production
  # Note: spec.config is omitted to use extension default values

When to use minimal installation:

  • First-time installation to test default configuration
  • Standard deployments without special resource requirements
  • When you want to use the extension's tested defaults

Custom Configuration (Only When Needed):

apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
  name: devops
  namespace: kubesphere-system
spec:
  extension:
    name: devops
    version: 1.2.4
  enabled: true
  upgradeStrategy: Manual   # Required for production
  # config: leave empty to use default values

Custom Configuration (Override Defaults):

apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
  name: devops
  namespace: kubesphere-system
spec:
  extension:
    name: devops
    version: 1.2.4
  enabled: true
  upgradeStrategy: Manual   # Required for production
  config: |
    # Overrides values from DevOps chart's values.yaml
    agent:
      jenkins:
        Master:
          NodeSelector: {}
          resources:
            requests:
              cpu: "500m"
              memory: "4Gi"
            limits:
              cpu: "2000m"
              memory: "8Gi"
        Agent:
          Image: "jenkins/inbound-agent"
          Tag: "3309.v27b_9314fd1a_4-1-jdk21"
          Privileged: false

Important:

  • Always use upgradeStrategy: Manual for production
  • config is optional - omit or leave empty to use extension defaults
  • Config values override the extension's values.yaml settings
  • DevOps is a critical infrastructure component - plan upgrades carefully

Multi-Cluster Installation

To install DevOps agent on member clusters, add clusterScheduling:

apiVersion: kubesphere.io/v1alpha1
kind: InstallPlan
metadata:
  name: devops
  namespace: kubesphere-system
spec:
  extension:
    name: devops
    version: 1.2.4
  enabled: true
  upgradeStrategy: Manual
  config: |
    # Base config for all clusters
    agent:
      jenkins:
        Master:
          resources:
            requests:
              cpu: "500m"
              memory: "4Gi"
  clusterScheduling:
    placement:
      clusters:
        - host      # Install on host cluster
        - member1   # Install on member1
        - member2   # Install on member2
    # Optional: per-cluster overrides
    overrides:
      member1: |
        agent:
          jenkins:
            Master:
              resources:
                limits:
                  memory: "8Gi"   # Larger master for member1
      member2: |
        agent:
          jenkins:
            Agent:
              NodeSelector:
                zone: west

Key Points:

  • clusterScheduling.placement.clusters: List clusters where DevOps agent runs
  • clusterScheduling.overrides: Cluster-specific config overrides
  • Without clusterScheduling, DevOps only runs on the host cluster
  • Overrides merge with base config, override values take precedence

Using Helm (Alternative)

helm upgrade --install devops kse-extensions/devops \
  -n kubesphere-devops-system \
  --create-namespace

Post-Installation Verification

Verify the DevOps installation:

# Check DevOps pods
kubectl get pods -n kubesphere-devops-system

# Check InstallPlan status
kubectl get installplan devops -n kubesphere-system

# For multi-cluster: check agent status on each cluster
kubectl get installplan devops -n kubesphere-system -o jsonpath='{.status.clusterSchedulingStatuses}'

Architecture

| Component | Purpose | Namespace |

|-----------|---------|-----------|

| devops-jenkins | Jenkins master | kubesphere-devops-system |

| devops-apiserver | DevOps API service | kubesphere-devops-system |

| devops-controller | Resource controllers | kubesphere-devops-system |

| devops-argocd-* | ArgoCD (GitOps) | argocd |

| Jenkins Agent | Pipeline executors | Dynamic (per pipeline) |

|-----------|---------|-----------|

| devops-jenkins | Jenkins master | kubesphere-devops-system |

| devops-apiserver | DevOps API service | kubesphere-devops-system |

| devops-controller | Resource controllers | kubesphere-devops-system |

| Jenkins Agent | Pipeline executors | Dynamic (per pipeline) |

Jenkins Integration

KubeSphere DevOps integrates with Jenkins for CI/CD execution. The secret devops-jenkins contains the admin token for direct Jenkins access:

# Get Jenkins admin token
TOKEN=$(kubectl -n kubesphere-devops-system get secret devops-jenkins -o jsonpath='{.data.jenkins-admin-token}' | base64 -d)

# Access Jenkins API
kubectl run curl-jenkins --rm -i --restart=Never --image=curlimages/curl \
  -- "http://admin:${TOKEN}@devops-jenkins.kubesphere-devops-system:80/api/json"

Jenkins NodePort:

kubectl get svc devops-jenkins -n kubesphere-devops-system
# Default: 30180

Access Jenkins Console:

  • URL: http://<node-ip>:30180
  • Username: admin
  • Password: Get from secret above

ArgoCD Integration

KubeSphere DevOps includes ArgoCD v2.11.7 for GitOps continuous deployment:

ArgoCD Components:

| Component | Purpose |

|-----------|---------|

| application-controller | Manages Application state |

| applicationset-controller | Manages ApplicationSet resources |

| dex-server | SSO authentication |

| notifications-controller | Event notifications |

| repo-server | Repository operations |

| argocd-server | API/UI server |

| redis | Cache layer |

Access ArgoCD:

# Get ArgoCD server URL
kubectl get svc devops-agent-argocd-server -n argocd

# Get admin password
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d

Key Features:

  • Declarative GitOps deployment
  • Multi-source application support
  • Automated sync policies
  • SSO integration via Dex
  • Notification webhooks

Key Resources

Key Resources

| Resource | API Version | Purpose |

|----------|-------------|---------|

| Pipeline | devops.kubesphere.io/v1alpha3 | CI/CD pipeline definition |

| DevOpsProject | devops.kubesphere.io/v1alpha3 | DevOps project (namespace wrapper) |

| Credential | v1/Secret | Repository and deployment credentials |

Quick Commands

# List DevOps projects
kubectl get devopsprojects

# List pipelines in a project
kubectl get pipelines -n <devops-project-namespace>

# Get pipeline runs
kubectl get pipelineruns -n <devops-project-namespace>

# Check Jenkins status
kubectl -n kubesphere-devops-system get pods -l app=devops-jenkins

# View Jenkins logs
kubectl -n kubesphere-devops-system logs -l app=devops-jenkins

# Get Jenkins admin password
kubectl -n kubesphere-devops-system get secret devops-jenkins -o jsonpath='{.data.jenkins-admin-password}' | base64 -d

Pipeline Types

| Type | Description | Use Case |

|------|-------------|----------|

| Graphical | Visual pipeline editor | Simple pipelines, no code |

| Jenkinsfile (SCM) | Pipeline defined in repository | Version-controlled pipelines |

| Jenkinsfile (Inline) | Pipeline defined in KubeSphere | Quick testing |

| Multi-branch | Auto-discovers branches | GitFlow, feature branches |

Common Mistakes

| Mistake | Fix |

|---------|-----|

| Pipeline fails with "No agent" | Check Jenkins agent configuration |

| Cannot access Git repository | Verify credentials and webhook setup |

| kubeconfig credentials fail | Use string type instead of kubeconfigContent (v1.2+) |

| Jenkins out of memory | Increase Jenkins master resources |

| Pipeline hangs | Check agent pod status and resource limits |

Version Compatibility

| DevOps | Jenkins | Notes |

|--------|---------|-------|

| v1.2.x | 2.504.1 LTS | kubernetes-cd plugin removed |

| v1.1.x | 2.346.3 LTS | Legacy kubeconfigContent supported |

References

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。