Rancher集群管理
大约 6 分钟容器化技术Rancher集群管理
Rancher集群管理
Rancher集群管理概述
Rancher作为企业级Kubernetes管理平台,提供了完整的集群生命周期管理功能,包括集群的创建、配置、监控、升级和删除等操作。通过Rancher的统一界面,可以轻松管理运行在不同环境中的多个Kubernetes集群。
集群创建
1. 创建Rancher管理的集群
通过Rancher UI创建由Rancher直接管理的Kubernetes集群。
创建步骤:
- 登录Rancher UI
- 点击"集群"菜单
- 点击"添加集群"按钮
- 选择集群类型(自定义、托管、导入等)
- 配置集群参数
- 执行集群创建
自定义集群创建:
# 1. 在Rancher UI中选择"自定义"集群类型
# 2. 配置集群名称和参数
# 3. 获取集群注册命令
# 4. 在目标节点上执行注册命令
# Master节点注册命令示例
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 abcdefghijklmnopqrstuvwxyz \
--ca-checksum 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef \
--etcd --controlplane --worker
2. 导入现有集群
将已存在的Kubernetes集群导入到Rancher中进行管理。
导入步骤:
- 在Rancher UI中选择"导入"集群类型
- 配置集群名称
- 获取导入命令
- 在目标集群中执行导入命令
# 导入命令示例
kubectl apply -f https://rancher.example.com/v3/import/abcdefghijklmnopqrstuvwxyz.yaml
3. 云厂商托管集群
Rancher支持创建和管理各大云厂商的托管Kubernetes集群。
支持的云厂商:
- Amazon EKS
- Google GKE
- Azure AKS
- 阿里云ACK
- 腾讯云TKE
集群配置管理
1. 节点管理
添加节点:
# 添加Worker节点
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 abcdefghijklmnopqrstuvwxyz \
--ca-checksum 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef \
--worker
删除节点:
通过Rancher UI或API删除节点:
# 通过API删除节点
curl -u "${CATTLE_ACCESS_KEY}:${CATTLE_SECRET_KEY}" \
-X DELETE \
'https://rancher.example.com/v3/nodes/<cluster-id>:<node-id>'
2. 集群参数配置
集群配置选项:
# 集群配置示例
cluster_config:
name: "my-cluster"
kubernetes_version: "v1.24.10+rke2r1"
network:
plugin: "calico"
options:
calico_network_provider:
cloud_provider: ""
services:
etcd:
backup_config:
enabled: true
interval_hours: 12
retention: 6
kube_api:
pod_security_policy: false
service_node_port_range: "30000-32767"
3. 存储配置
配置默认存储类:
# 存储类配置
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: default
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- debug
volumeBindingMode: Immediate
集群监控与告警
1. 启用监控
Rancher集成了Prometheus监控系统,可以监控集群和应用的状态。
启用步骤:
- 进入集群管理页面
- 点击"工具"菜单
- 选择"监控"选项
- 配置监控参数
- 启用监控
监控配置:
# 监控配置参数
monitoring:
enabled: true
version: "100.1.0+up19.0.3"
grafana:
persistence:
enabled: true
size: 10Gi
prometheus:
persistence:
enabled: true
size: 50Gi
2. 配置告警
创建告警规则:
# 告警规则示例
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: cluster-rules
namespace: cattle-monitoring-system
spec:
groups:
- name: cluster.rules
rules:
- alert: HighCPUUsage
expr: rate(container_cpu_usage_seconds_total[5m]) > 0.8
for: 2m
labels:
severity: warning
annotations:
summary: "High CPU usage detected"
description: "CPU usage is above 80% for more than 2 minutes"
配置通知渠道:
# 通知渠道配置
apiVersion: v1
kind: Secret
metadata:
name: alertmanager-config
namespace: cattle-monitoring-system
stringData:
alertmanager.yaml: |
global:
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alert@example.com'
smtp_auth_username: 'alert'
smtp_auth_password: 'password'
route:
group_by: ['alertname']
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'admin@example.com'
集群安全配置
1. 网络策略
启用网络策略:
# 网络策略配置
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
配置Pod安全策略:
# Pod安全策略
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
volumes:
- 'configMap'
- 'emptyDir'
- 'projected'
- 'secret'
- 'downwardAPI'
- 'persistentVolumeClaim'
hostNetwork: false
hostIPC: false
hostPID: false
runAsUser:
rule: 'MustRunAsNonRoot'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
2. 认证与授权
配置RBAC:
# 创建角色
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
# 创建角色绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
集群升级
1. Kubernetes版本升级
升级步骤:
- 检查集群状态
- 备份重要数据
- 在Rancher UI中选择集群
- 点击"编辑集群"
- 选择新的Kubernetes版本
- 执行升级
通过API升级:
# 通过API升级集群
curl -u "${CATTLE_ACCESS_KEY}:${CATTLE_SECRET_KEY}" \
-X PUT \
-H 'Content-Type: application/json' \
-d '{
"kubernetesVersion": "v1.25.0+rke2r1"
}' \
'https://rancher.example.com/v3/clusters/<cluster-id>'
2. Rancher Agent升级
# 升级Rancher Agent
kubectl -n cattle-system set image deployment/cattle-cluster-agent cattle-cluster-agent=rancher/rancher-agent:v2.7.0
kubectl -n cattle-system set image daemonset/cattle-node-agent cattle-node-agent=rancher/rancher-agent:v2.7.0
集群备份与恢复
1. etcd备份
自动备份配置:
# etcd备份配置
services:
etcd:
backup_config:
enabled: true
interval_hours: 12
retention: 6
s3_backup_config:
access_key: "access_key"
secret_key: "secret_key"
bucket_name: "etcd-backups"
region: "us-west-2"
folder: "cluster-backups"
手动备份:
# 手动执行etcd备份
kubectl -n kube-system exec etcd-<node-name> -- etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/ssl/kube-ca.pem \
--cert=/etc/kubernetes/ssl/kube-node.pem \
--key=/etc/kubernetes/ssl/kube-node-key.pem \
snapshot save /tmp/etcd-snapshot-$(date +%Y%m%d_%H%M%S).db
2. 集群恢复
从备份恢复:
# 恢复etcd数据
kubectl -n kube-system exec etcd-<node-name> -- etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/ssl/kube-ca.pem \
--cert=/etc/kubernetes/ssl/kube-node.pem \
--key=/etc/kubernetes/ssl/kube-node-key.pem \
snapshot restore /tmp/etcd-snapshot.db
集群故障排查
1. 常见问题诊断
检查集群状态:
# 查看集群状态
kubectl cluster-info
# 查看节点状态
kubectl get nodes
# 查看Pod状态
kubectl get pods -A
# 查看事件
kubectl get events -A
检查组件日志:
# 查看API Server日志
kubectl -n kube-system logs -l component=kube-apiserver
# 查看etcd日志
kubectl -n kube-system logs -l component=etcd
# 查看Rancher Agent日志
kubectl -n cattle-system logs -l app=cattle-agent
2. 性能问题排查
资源使用情况:
# 查看节点资源使用
kubectl top nodes
# 查看Pod资源使用
kubectl top pods -A
# 查看资源配额
kubectl describe resourcequota -n <namespace>
网络问题排查:
# 检查网络插件状态
kubectl -n kube-system get pods -l k8s-app=canal
# 测试Pod间连通性
kubectl exec -it <pod-name> -- ping <other-pod-ip>
集群维护
1. 定期维护任务
清理资源:
# 清理完成的Job
kubectl delete jobs --field-selector status.successful=1 -A
# 清理失败的Pod
kubectl delete pods --field-selector status.phase=Failed -A
# 清理未使用的镜像
crictl rmi --prune
更新证书:
# 检查证书过期时间
kubectl -n kube-system get secret kube-apiserver-cert -o yaml | openssl x509 -text
# 更新RKE2证书
rke2 certificate rotate
2. 监控与告警
配置健康检查:
# 健康检查配置
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
集群最佳实践
1. 集群规划
- 根据业务需求规划集群规模
- 合理分配控制平面和工作节点
- 考虑高可用和灾备需求
2. 安全配置
- 启用网络策略
- 配置RBAC权限
- 定期更新安全补丁
- 启用审计日志
3. 监控告警
- 配置关键指标监控
- 设置合理的告警阈值
- 建立完善的告警响应机制
4. 备份恢复
- 定期执行etcd备份
- 测试备份恢复流程
- 将备份存储在安全位置
常用集群管理命令
命令 | 说明 |
---|---|
kubectl get nodes | 查看节点列表 |
kubectl get pods -A | 查看所有Pod |
kubectl describe node <node-name> | 查看节点详细信息 |
kubectl top nodes | 查看节点资源使用 |
kubectl get events -A | 查看集群事件 |
kubectl cluster-info | 查看集群信息 |
rke2 certificate rotate | 更新证书 |
etcdctl snapshot save | 备份etcd |
总结
Rancher提供了完整的Kubernetes集群管理功能,通过统一的界面可以轻松管理多个集群。在实际使用中,应根据业务需求合理规划集群架构,配置适当的安全策略和监控告警机制,并建立完善的备份恢复流程,确保集群的稳定性和安全性。