Rancher
DevOps Tool
Rancher
Overview
Rancher is a multi-cluster Kubernetes management platform that provides centralized management of multiple Kubernetes clusters with enterprise-level operations, security, and governance.
Details
Rancher is a multi-cluster Kubernetes management platform developed by Rancher Labs (now SUSE). Started in 2014 as a container orchestration platform supporting Docker Swarm and Apache Mesos, it now specializes in Kubernetes. Its key feature is unified management of multiple Kubernetes clusters (on-premises, public cloud, edge) from a single Web UI. It integrates cluster provisioning, application catalog, monitoring, log management, backup, and security policy management, with powerful multi-tenant environment permission management. Built-in features include GitOps workflows, Helm Chart management, Prometheus/Grafana integration, and disaster recovery. Following SUSE acquisition (2020), it maintains its open-source status and remains positioned as a core project in the CNCF landscape. Growing due to complex multi-cluster environment management demand, it contributes to Kubernetes governance enhancement in finance, manufacturing, and government sectors.
Advantages and Disadvantages
Advantages
- Multi-cluster management: Unified operations across multiple environments
- Intuitive Web UI: Visual management without command line requirements
- Cluster provisioning: One-click Kubernetes cluster creation
- Integrated monitoring: Built-in Prometheus, Grafana, Alertmanager
- Application catalog: Helm Chart management and app store
- Security management: RBAC, Pod Security Policy, network policies
- Disaster recovery: Automatic backup and cluster recovery features
- Multi-tenancy: Project-based permission management
Disadvantages
- Complexity: High learning cost due to extensive features
- Resource consumption: Management plane overhead
- Vendor dependency: Some dependency on SUSE ecosystem
- Updates: Complex management of Rancher and cluster versions
- Customization: Risk of deviation from standard Kubernetes
- Performance: Response performance when managing many clusters
- Migration cost: Migration work from existing Kubernetes environments
- Troubleshooting: Difficulty resolving Rancher-specific issues
Key Links
- Rancher Official Website
- Rancher Official Documentation
- Rancher GitHub Repository
- SUSE Rancher
- Rancher Desktop
- Rancher Academy
Code Examples
Rancher Server Installation
# Using Docker (single node)
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
--privileged \
--name rancher-server \
rancher/rancher:latest
# Using Helm (Kubernetes cluster)
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
kubectl create namespace cattle-system
# SSL certificate setup (Let's Encrypt)
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.11.0/cert-manager.yaml
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.example.com \
--set ingress.tls.source=letsEncrypt \
--set [email protected]
Cluster Creation (Custom)
# Rancher agent execution command (run on each node)
sudo docker run -d --privileged --restart=unless-stopped \
--net=host -v /etc/kubernetes:/etc/kubernetes \
-v /var/run:/var/run rancher/rancher-agent:v2.7.0 \
--server https://rancher.example.com \
--token <cluster-token> \
--ca-checksum <ca-checksum> \
--etcd --controlplane --worker
Project and Namespace Management
# project.yaml
apiVersion: management.cattle.io/v3
kind: Project
metadata:
name: development-project
namespace: cluster-id
spec:
clusterId: cluster-id
displayName: "Development Environment"
description: "Development team workspace"
---
# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev-apps
annotations:
field.cattle.io/projectId: "cluster-id:development-project"
labels:
field.cattle.io/projectId: "development-project"
App Catalog Deployment
# mysql-app.yaml
apiVersion: catalog.cattle.io/v1
kind: App
metadata:
name: mysql-database
namespace: dev-apps
spec:
projectName: development-project
targetNamespace: dev-apps
externalId: catalog://?catalog=library&template=mysql&version=1.6.9
values:
mysqlRootPassword: "root-password"
mysqlUser: "app-user"
mysqlPassword: "app-password"
mysqlDatabase: "application-db"
persistence:
enabled: true
size: "10Gi"
storageClass: "default"
Global DNS Configuration
# global-dns.yaml
apiVersion: management.cattle.io/v3
kind: GlobalDns
metadata:
name: example-dns
spec:
fqdn: "app.example.com"
providerId: "cloudflare-provider"
projectIds:
- "cluster-id:development-project"
- "cluster-id:production-project"
multiClusterAppId: "multi-cluster-app"
Monitoring Configuration
# monitoring-config.yaml
apiVersion: management.cattle.io/v3
kind: MonitorMetric
metadata:
name: cpu-usage-alert
namespace: cattle-monitoring-system
spec:
clusterId: cluster-id
expression: |
(1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))) * 100
description: "CPU usage percentage"
threshold: 80
comparison: "greater-than"
duration: "5m"
severity: "warning"
Pipeline Configuration (GitOps)
# pipeline.yaml
apiVersion: project.cattle.io/v3
kind: Pipeline
metadata:
name: web-app-pipeline
namespace: dev-apps
spec:
projectId: "cluster-id:development-project"
sourceCodeConfig:
sourceCodeCredentialName: "github-credential"
sourceCodeCredentialNamespace: "dev-apps"
stages:
- name: "Build"
steps:
- sourceCodeConfig:
branchCondition: "only"
branch: "main"
runScriptConfig:
image: "node:16"
shellScript: |
npm ci
npm run build
docker build -t myapp:${CICD_BUILD_NUMBER} .
- name: "Deploy"
steps:
- applyYamlConfig:
path: "./k8s/deployment.yaml"
sourceCodeConfig:
branchCondition: "only"
branch: "main"
RBAC Configuration
# rbac.yaml
apiVersion: management.cattle.io/v3
kind: GlobalRole
metadata:
name: developer-role
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]
resources: ["deployments", "replicasets"]
verbs: ["get", "list", "create", "update", "patch", "delete"]
---
apiVersion: management.cattle.io/v3
kind: GlobalRoleBinding
metadata:
name: developer-binding
subjects:
- kind: User
name: "[email protected]"
globalRoleName: "developer-role"
Backup Configuration
# backup-config.yaml
apiVersion: resources.cattle.io/v1
kind: Backup
metadata:
name: daily-backup
namespace: cattle-resources-system
spec:
resourceSetName: "rancher-resource-set"
schedule: "0 2 * * *" # Daily at 2 AM
retentionCount: 7
storageLocation:
s3:
credentialSecretName: "s3-credentials"
credentialSecretNamespace: "cattle-resources-system"
bucketName: "rancher-backups"
region: "us-west-2"
folder: "cluster-backups"
CLI Operations
# Install Rancher CLI
curl -sL "https://github.com/rancher/cli/releases/download/v2.7.0/rancher-linux-amd64-v2.7.0.tar.gz" | tar xz
sudo mv rancher-v2.7.0/rancher /usr/local/bin/
# Login
rancher login https://rancher.example.com --token <api-token>
# Cluster operations
rancher clusters ls
rancher context switch <cluster-name>
rancher kubectl get nodes
# Project operations
rancher projects ls
rancher projects create development-env
# App management
rancher apps ls
rancher apps install cattle-global-data:library-mysql mysql-app \
--answers mysqlRootPassword=password \
--namespace dev-apps
# Monitoring
rancher kubectl top nodes
rancher kubectl top pods --all-namespaces