一、Rancher 核心概念详解
1. Rancher 概述
Rancher是一个开源的企业级Kubernetes管理平台,提供了多集群管理、统一身份认证、应用商店、持续集成与部署等功能。它简化了Kubernetes的部署和运维,并提供了丰富的工具集。
2. Rancher 架构组件
- Rancher Server:管理整个Rancher部署的核心组件,包括用户界面、API服务器和集群控制器。
- 集群控制器(Cluster Controller) :每个被管理的Kubernetes集群都有一个对应的集群控制器,负责与Rancher Server通信。
- 节点代理(Node Agent) :运行在每个Kubernetes节点上的代理,负责节点与Rancher Server之间的通信。
- 认证代理(Authentication Proxy) :处理与Kubernetes集群的认证和授权。
3. Rancher 中的关键概念
- 项目(Project) :Rancher中用于组织多个命名空间(Namespace)的逻辑单元,通常对应一个应用或一个团队。
- 命名空间(Namespace) :Kubernetes中的命名空间,在Rancher中隶属于项目。
- 工作负载(Workload) :在Kubernetes中运行的应用程序,可以是Deployment、StatefulSet、DaemonSet、Job、CronJob等。
- 服务发现(Service Discovery) :Rancher可以自动为工作负载创建DNS记录,方便服务间通信。
- 负载均衡(Load Balancing) :Rancher可以配置负载均衡器,将外部流量导入到集群内的服务。
- 存储(Storage) :Rancher支持动态卷供应,可以使用多种存储驱动。
- 流水线(Pipeline) :Rancher内置了CI/CD流水线功能,可以集成Git仓库自动构建和部署。
二、Rancher 部署 Kubernetes 集群流程
1. 部署方式
Rancher支持多种方式部署Kubernetes集群:
- RKE(Rancher Kubernetes Engine) :Rancher自己的Kubernetes发行版,通过Docker容器运行Kubernetes组件。
- 托管Kubernetes服务:如EKS、GKE、AKS等。
- 导入已有集群:将已有的Kubernetes集群导入到Rancher中管理。
2. 使用RKE部署集群的步骤
- 安装Docker:在所有节点上安装Docker。
- 启动Rancher Server:在一台机器上启动Rancher Server容器。
- 访问Rancher UI:通过浏览器访问Rancher Server的UI。
- 创建集群:在UI中选择“添加集群”,然后选择“自定义”。
- 配置节点:为集群添加节点,并为每个节点分配角色(etcd、Control Plane、Worker)。
- 配置集群选项:设置网络插件、Ingress控制器、存储类等。
- 生成集群配置:Rancher会生成一个集群配置文件(cluster.yml),并启动RKE命令部署集群。
- 等待集群部署完成:Rancher会监控部署过程,并在完成后显示集群状态。
3. 集群配置详解
在Rancher中创建集群时,可以配置以下选项:
- Kubernetes版本:选择要安装的Kubernetes版本。
- 网络插件:Flannel、Calico、Canal等。
- Ingress控制器:默认使用Nginx Ingress Controller。
- 存储类:可以使用本地存储、云存储等。
- 集群告警:配置告警规则和接收器。
- 日志服务:集成EFK日志栈。
三、在Rancher中部署应用容器
1. 部署流程
- 创建项目/命名空间:在集群中创建项目,然后在项目中创建命名空间。
- 部署工作负载:在命名空间中部署工作负载,可以选择从Docker镜像、Helm Chart、应用商店等方式部署。
- 配置服务发现:为工作负载创建Service,以便内部访问。
- 配置负载均衡:创建Ingress规则,将外部流量导入到Service。
- 配置存储:如果需要持久化存储,创建持久卷声明(PVC)并挂载到工作负载。
- 配置配置映射和密钥:将配置文件和敏感信息以ConfigMap和Secret的形式挂载到容器中。
2. 工作负载配置详解
在Rancher UI中部署工作负载时,需要配置以下参数:
- 镜像:Docker镜像地址和标签。
- 端口映射:容器端口和Service端口。
- 环境变量:设置容器内的环境变量,可以来自直接输入、ConfigMap或Secret。
- 健康检查:配置存活探针和就绪探针。
- 资源限制:设置CPU和内存的请求和限制。
- 卷挂载:挂载持久卷、配置映射、密钥等。
- 节点调度:选择节点标签、容忍污点等。
- 伸缩:设置HPA自动伸缩策略。
3. 示例:部署一个Spring Boot应用
假设我们有一个Spring Boot应用,镜像为myregistry/myapp:v1.0,需要连接MySQL数据库。
步骤:
- 创建命名空间
myapp。 - 部署MySQL:
-
- 使用StatefulSet或Deployment,并配置持久卷。
- 创建ConfigMap存储MySQL配置。
- 创建Secret存储MySQL root密码。
- 部署Spring Boot应用:
-
- 创建Deployment,镜像为
myregistry/myapp:v1.0。 - 配置环境变量,如数据库连接字符串(使用Secret)。
- 设置健康检查路径为
/actuator/health。 - 配置资源限制。
- 创建Deployment,镜像为
- 创建Service,类型为ClusterIP,暴露Spring Boot应用的端口。
- 创建Ingress,将域名
myapp.example.com指向Spring Boot应用的Service。
四、Ingress 和 Nginx 配置详解
1. Ingress 概述
Ingress是Kubernetes中用于将外部HTTP/HTTPS流量路由到集群内部服务的API对象。Ingress控制器(如Nginx Ingress Controller)负责实现Ingress规则。
2. Rancher 中的 Ingress
Rancher默认安装了Nginx Ingress Controller,并提供了Ingress资源的管理界面。
3. 创建 Ingress 规则
在Rancher UI中创建Ingress时,需要配置:
- 规则:主机名、路径、后端服务(Service)和端口。
- TLS:配置HTTPS证书。
4. Nginx Ingress Controller 配置
可以通过ConfigMap自定义Nginx Ingress Controller的配置。例如,调整超时时间、上传文件大小限制等。
5. 示例:配置一个Ingress
假设我们要将域名myapp.example.com路由到Service myapp-service的80端口,并启用HTTPS。
步骤:
- 创建Ingress资源,命名为
myapp-ingress。 - 配置规则:
-
- 主机:
myapp.example.com - 路径:
/ - 后端服务:
myapp-service - 端口:80
- 主机:
- 配置TLS:
-
- 选择Secret,其中包含TLS证书和密钥。这个Secret必须与Ingress在同一个命名空间。
- 保存后,Rancher会自动更新Nginx Ingress Controller的配置。
6. 高级Ingress配置
- 多路径路由:一个Ingress可以配置多个路径,每个路径指向不同的服务。
- 基于主机名的路由:多个主机名可以配置在同一个Ingress中。
- 重写规则:可以使用注解(annotation)配置路径重写。
- 认证:可以通过注解配置基本认证、OAuth等。
7. 使用注解配置Nginx
在Ingress资源中添加注解可以自定义Nginx的行为。例如:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
spec:
# 规则配置
8. 监控Ingress
Rancher提供了Ingress的监控功能,可以查看请求数、错误率、延迟等指标。
五、持续集成与部署(CI/CD)
Rancher提供了内置的流水线功能,可以集成Git仓库,实现自动化构建和部署。
1. 流水线配置
- 选择Git提供商:如GitHub、GitLab、Bitbucket等。
- 授权访问:授权Rancher访问Git仓库。
- 配置流水线文件:在仓库根目录创建
.rancher-pipeline.yml文件,定义构建和部署步骤。 - 触发流水线:可以手动触发,也可以配置Webhook自动触发。
2. 示例:.rancher-pipeline.yml
yaml
stages:
- name: Build
steps:
- runScriptConfig:
image: maven:3.6-jdk-11
shellScript: |-
mvn clean package -DskipTests
- name: Publish
steps:
- publishImageConfig:
dockerfilePath: ./Dockerfile
buildContext: .
tag: myapp:${CICD_EXECUTION_SEQUENCE}
- name: Deploy
steps:
- applyYamlConfig:
path: ./deployment.yaml
六、总结
Rancher提供了一个完整的Kubernetes管理平台,使得部署和管理Kubernetes集群以及运行在其上的应用程序变得更加简单。通过Rancher UI,可以轻松完成集群部署、应用部署、服务发现、负载均衡、存储配置等操作。同时,Rancher还提供了丰富的扩展功能,如CI/CD、监控、告警等,帮助团队实现DevOps实践。
对于Ingress和Nginx的配置,Rancher默认集成了Nginx Ingress Controller,并提供了直观的界面来配置Ingress规则和TLS证书。通过注解,还可以进一步自定义Nginx的行为,满足复杂的需求。
在实际使用中,建议结合Rancher的最佳实践,合理规划项目、命名空间、资源配额等,确保集群的稳定性和安全性。