Rancher部署Kubernetes及容器应用全流程详解

46 阅读7分钟

一、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部署集群的步骤

  1. 安装Docker:在所有节点上安装Docker。
  2. 启动Rancher Server:在一台机器上启动Rancher Server容器。
  3. 访问Rancher UI:通过浏览器访问Rancher Server的UI。
  4. 创建集群:在UI中选择“添加集群”,然后选择“自定义”。
  5. 配置节点:为集群添加节点,并为每个节点分配角色(etcd、Control Plane、Worker)。
  6. 配置集群选项:设置网络插件、Ingress控制器、存储类等。
  7. 生成集群配置:Rancher会生成一个集群配置文件(cluster.yml),并启动RKE命令部署集群。
  8. 等待集群部署完成:Rancher会监控部署过程,并在完成后显示集群状态。

3. 集群配置详解

在Rancher中创建集群时,可以配置以下选项:

  • Kubernetes版本:选择要安装的Kubernetes版本。
  • 网络插件:Flannel、Calico、Canal等。
  • Ingress控制器:默认使用Nginx Ingress Controller。
  • 存储类:可以使用本地存储、云存储等。
  • 集群告警:配置告警规则和接收器。
  • 日志服务:集成EFK日志栈。

三、在Rancher中部署应用容器

1. 部署流程

  1. 创建项目/命名空间:在集群中创建项目,然后在项目中创建命名空间。
  2. 部署工作负载:在命名空间中部署工作负载,可以选择从Docker镜像、Helm Chart、应用商店等方式部署。
  3. 配置服务发现:为工作负载创建Service,以便内部访问。
  4. 配置负载均衡:创建Ingress规则,将外部流量导入到Service。
  5. 配置存储:如果需要持久化存储,创建持久卷声明(PVC)并挂载到工作负载。
  6. 配置配置映射和密钥:将配置文件和敏感信息以ConfigMap和Secret的形式挂载到容器中。

2. 工作负载配置详解

在Rancher UI中部署工作负载时,需要配置以下参数:

  • 镜像:Docker镜像地址和标签。
  • 端口映射:容器端口和Service端口。
  • 环境变量:设置容器内的环境变量,可以来自直接输入、ConfigMap或Secret。
  • 健康检查:配置存活探针和就绪探针。
  • 资源限制:设置CPU和内存的请求和限制。
  • 卷挂载:挂载持久卷、配置映射、密钥等。
  • 节点调度:选择节点标签、容忍污点等。
  • 伸缩:设置HPA自动伸缩策略。

3. 示例:部署一个Spring Boot应用

假设我们有一个Spring Boot应用,镜像为myregistry/myapp:v1.0,需要连接MySQL数据库。

步骤:

  1. 创建命名空间myapp
  2. 部署MySQL:
    • 使用StatefulSet或Deployment,并配置持久卷。
    • 创建ConfigMap存储MySQL配置。
    • 创建Secret存储MySQL root密码。
  1. 部署Spring Boot应用:
    • 创建Deployment,镜像为myregistry/myapp:v1.0
    • 配置环境变量,如数据库连接字符串(使用Secret)。
    • 设置健康检查路径为/actuator/health
    • 配置资源限制。
  1. 创建Service,类型为ClusterIP,暴露Spring Boot应用的端口。
  2. 创建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。

步骤:

  1. 创建Ingress资源,命名为myapp-ingress
  2. 配置规则:
    • 主机:myapp.example.com
    • 路径:/
    • 后端服务:myapp-service
    • 端口:80
  1. 配置TLS:
    • 选择Secret,其中包含TLS证书和密钥。这个Secret必须与Ingress在同一个命名空间。
  1. 保存后,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. 流水线配置

  1. 选择Git提供商:如GitHub、GitLab、Bitbucket等。
  2. 授权访问:授权Rancher访问Git仓库。
  3. 配置流水线文件:在仓库根目录创建.rancher-pipeline.yml文件,定义构建和部署步骤。
  4. 触发流水线:可以手动触发,也可以配置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的最佳实践,合理规划项目、命名空间、资源配额等,确保集群的稳定性和安全性。