龙空技术网

Rancher2.x安装及k8s集群部署

htmltoo 334

前言:

现在你们对“rancher部署项目”可能比较注意,各位老铁们都需要了解一些“rancher部署项目”的相关内容。那么小编同时在网上汇集了一些关于“rancher部署项目””的相关知识,希望你们能喜欢,大家快快来学习一下吧!

1.产品介绍1.1.关于 Kubernetes

Kubernetes 提供了调度、伸缩、服务发现、健康检查、密文管理和配置管理等功能。

Kubernetes 集群 是由多个计算机(可以是物理机、云主机或虚拟机)组成的一个独立系统,通过 Kubernetes 容器管理系统,实现部署、运维和伸缩 Docker 容器等功能,它允许您的组织对应用进行自动化运维。

1.2.Kubernetes 集群中的节点角色

节点 是集群内的一个计算资源,节点可以是裸金属服务器或虚拟机。根据节点的角色不同,我们把节点分为三类:etcd 节点、controlplane 节点和worker 节点,下文会讲解三种节点的功能。一个 Kubernetes 集群至少要有一个 etcd 节点、一个 controlplane 节点 和 一个 worker 节点。

1.2.1.etcd 节点

etcd 节点 的主要功能是数据存储,它负责存储 Rancher Server 的数据和集群状态。 Kubernetes 集群的状态保存在etcd 节点 中,etcd 节点运行 etcd 数据库。etcd 数据库组件是一个分布式的键值对存储系统,用于存储 Kubernetes 的集群数据,例如集群协作相关和集群状态相关的数据。建议在多个节点上运行 etcd,保证在节点失效的情况下,可以获取到备份的集群数据。

etcd 更新集群状态前,需要集群中的所有节点通过 quorum 投票机制完成投票。假设集群中有 n 个节点,至少需要 n/2 + 1(向下取整) 个节点同意,才被视为多数集群同意更新集群状态。例如一个集群中有 3 个 etcd 节点,quorum 投票机制要求至少两个节点同意,才会更新集群状态。

集群应该含有足够多健康的 etcd 节点,这样才可以形成一个 quorum。对含有奇数个节点的集群而言,每新增一个节点,就会增加通过 quorum 投票机制所需节点的数量。

一般情况下,集群中只要配置三个 etcd 节点就能满足小型集群的需求,五个 etcd 节点能满足大型集群的需求。

1.2.2.Controlplane 节点

Controlplane 节点上运行的工作负载包括:Kubernetes API server、scheduler 和 controller mananger。这些节点负载执行日常任务,从而确保您的集群状态和您的集群配置相匹配。因为 etcd 节点保存了集群的全部数据,所以 Controlplane 节点是无状态的。虽然您可以在单个节点上运行 Controlplane,但是我们建议在三个或以上的节点上运行 Controlplane,以保证冗余性。另外,因为 Kubernetes 只要求每个节点至少要分配一个角色,所以一个节点可以既是 Controlplane 节点,又是 etcd 节点。

1.2.3.Worker 节点

worker 节点运行以下应用:

Kubelet: 监控节点状态的 Agent,确保您的容器处于健康状态。工作负载: 承载您的应用和其他类型的部署的容器和 Pod。

Worker 节点也运行存储和网络驱动;有必要时也会运行应用路由控制器(Ingress Controller)。Rancher 对 Worker 节点的数量没有限制,您可以按照实际需要创建多个 Worker 节点。

1.2.4 关于 Helm

Helm 是安装 Rancher 高可用集群时会用到的工具。

Helm 是 Kubernetes 的软件包管理工具

1.2.5. Rancher Server 架构

Rancher Server 由认证代理(Authentication Proxy)、Rancher API Server、集群控制器(Cluster Controller)、etcd 节点和集群 Agent(Cluster Agent) 组成。除了集群 Agent 以外,其他组件都部署在 Rancher Server 中。

通过Rancher认证代理管理 Kubernetes 集群

集群控制器、集群 Agent 和 Node Agent 是如何允许 Rancher 控制下游集群的

1.3.Kubernetes相关概念1.3.1.集群(Cluster)#

集群指容器运行所需要的云资源组合,关联了若干云服务器节点、负载均衡等云资源。您可以理解为集群是“同一个子网中一个或多个弹性云服务器(又称:节点)”通过相关技术组合而成的计算机群体,为容器运行提供了计算资源池。

1.3.2.节点(Node)#

也叫“主机”,每一个节点对应一台服务器(可以是虚拟机实例或者物理服务器),容器应用运行在节点上。节点上运行着 Agent 代理程序(kubelet),用于管理节点上运行的容器实例。集群中的节点数量可以伸缩。

1.3.3.实例(Pod)#

实例(Pod)是 Kubernetes 部署应用或服务的最小的基本单位。一个 Pod 封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。

1.3.4.容器(Container)#

一个通过 Docker 镜像创建的运行实例,一个节点可运行多个容器。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。

1.3.5.工作负载(Workload)#

工作负载即 Kubernetes 对一组 Pod 的抽象模型,用于描述业务的运行载体,包括 Deployment、Statefulset、Daemonset、Job、CronJob 等多种类型。

1.3.6.无状态工作负载(Deployment)#

即 Kubernetes 中的“Deployments”,无状态工作负载支持弹性伸缩与滚动升级,适用于实例完全独立、功能相同的场景,如:nginx、wordpress 等。

1.3.7.有状态工作负载(StatefulSet)#

即 Kubernetes 中的“StatefulSets”,有状态工作负载支持实例有序部署和删除,支持持久化存储,适用于实例间存在互访的场景,如 ETCD、mysql-HA 等

1.3.8.守护进程集(DaemonSet)#

即 Kubernetes 中的“DaemonSet”,守护进程集确保全部(或者某些)节点都运行一个 Pod 实例,支持实例动态添加到新节点,适用于实例在每个节点上都需要运行的场景,如 ceph、fluentd、Prometheus Node Exporter 等。

1.3.9.普通任务(Job)#

即 Kubernetes 中的“Job”,普通任务是一次性运行的短任务,部署完成后即可执行。使用场景为在创建工作负载前,执行普通任务,将镜像上传至镜像仓库。

1.3.10.定时任务(CornJob)#

即 kubernetes 中的“CronJob”,定时任务是按照指定时间周期运行的短任务。使用场景为在某个固定时间点,为所有运行中的节点做时间同步。

1.3.11.编排(Orchestration)#

编排模板包含了一组容器服务的定义和其相互关联,可以用于多容器应用和虚机应用的部署和管理。

1.3.12.镜像(Image)#

Docker 镜像是一个模板,是容器应用打包的标准格式,用于创建 Docker 容器。或者说,Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。在部署容器化应用时可以指定镜像,镜像可以来自于 Docker Hub、华为云容器镜像服务或者用户的私有 Registry。例如一个 Docker 镜像可以包含一个完整的 Ubuntu 操作系统环境,里面仅安装了用户需要的应用程序及其依赖文件。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的“类” 和“实例” 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

1.3.13.镜像仓库(Registry)#

镜像仓库用于存放 Docker 镜像,包括公共镜像仓库(如 DockerHub)和私有镜像仓库(如 Harbor)。

1.3.14.命名空间(Namespace)#

命名空间是对一组资源和对象的抽象整合。在同一个集群内可创建不同的命名空间,不同命名空间中的数据彼此隔离。使得它们既可以共享同一个集群的服务,也能够互不干扰。

例如:可以将开发环境、测试环境的业务分别放在不同的命名空间。

1.3.15.服务(Service)#

服务定义了实例及访问实例的途径,如单个稳定的 IP 地址和相应的 DNS 名称。

1.3.16.亲和性与反亲和性#

在应用没有容器化之前,原先一个虚机上会装多个组件,进程间会有通信。但在做容器化拆分的时候,往往直接按进程拆分容器,比如业务进程一个容器,监控日志处理或者本地数据放在另一个容器,并且有独立的生命周期。这时如果他们分布在网络中两个较远的点,请求经过多次转发,性能会很差。

亲和性:可以实现就近部署,增强网络能力实现通信上的就近路由,减少网络的损耗。如:应用 A 与应用 B 两个应用频繁交互,所以有必要利用亲和性让两个应用的尽可能的靠近,甚至在一个节点上,以减少因网络通信而带来的性能损耗。 反亲和性:主要是出于高可靠性考虑,尽量分散实例,某个节点故障的时候,对应用的影响只是 N 分之一或者只是一个实例。如:当应用采用多副本部署时,有必要采用反亲和性让各个应用实例打散分布在各个节点上,以提高 HA。

1.3.17.应用服务网格(Istio)#

Istio 是一个提供连接、保护、控制以及观测功能的开放平台。

Rancher 集成了应用服务网格,支持完整的生命周期管理和流量治理能力,兼容 Kubernetes 和 Istio 生态。开启应用服务网格后即可提供非侵入的智能流量治理解决方案,其功能包括负载均衡、熔断、限流等多种治理能力。应用服务网格内置金丝雀、蓝绿等多种灰度发布流程,提供一站式自动化的发布管理。

2.快速入门

docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher

创建了集群后,您可以使用 Rancher 部署工作负载

2.1.带有 Ingress 的工作负载

项目/命名空间->资源 > 工作负载->部署->输入工作负载的名称->

资源 > 工作负载 > 负载均衡->添加 Ingress

->在目标一栏,从下拉菜单选择您服务的名称->在端口一栏输入 80

2.2.带有 NodePort 的工作负载

端口映射单击添加端口->从 网络模式 下拉菜单选择 NodePort

->在主机监听端口一栏,保持随机选项->在容器端口 输入80

2.3.升级单节点 Rancher

2.3.1.停止rancher

docker stop rancher

2.3.2.创建 Rancher Server 数据副本

docker create --volumes-from rancher --name rancher-data rancher/rancher:2.1.3

2.3.3.创建备份压缩包

根据您刚创建的数据容器(rancher-data),创建一个备份压缩包 (rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz)。

docker run --volumes-from rancher-data -v $PWD:/backup busybox tar zcvf /backup/rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz /var/lib/rancher

2.3.4.拉取新版 Rancher 镜像

docker pull rancher/rancher:latest

2.3.5.启动新的 Rancher Server 容器

A - 使用 Rancher 默认的自签名证书

docker run -d --volumes-from rancher-data \ --restart=unless-stopped \ -p 80:80 -p 443:443 \ rancher/rancher:latest

B - 使用自己的自签名证书

docker run -d --volumes-from rancher-data \ --restart=unless-stopped \ -p 80:80 -p 443:443 \ -v /<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \ -v /<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \ -v /<CERT_DIRECTORY>/<CA_CERTS.pem>:/etc/rancher/ssl/cacerts.pem \ rancher/rancher:latest

C - 使用自己的由可信 CA 签名的证书

docker run -d --volumes-from rancher-data \ --restart=unless-stopped \ -p 80:80 -p 443:443 \ -v /<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \ -v /<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \ rancher/rancher:latest \ --no-cacerts

D - 使用 Let's Encrypt 证书

docker run -d --volumes-from rancher-data \ --restart=unless-stopped \ -p 80:80 -p 443:443 \ rancher/rancher:latest \ --acme-domain <YOUR.DNS.NAME>
2.4.高可用安装指南2.4.1.添加 Helm Chart 仓库
helm repo add rancher-stable  国内 helm repo add rancher-stable 
2.4.2.创建 Namespace
kubectl create namespace cattle-system
2.4.3.通过 Helm 安装 Rancher
helm install rancher rancher-stable/rancher \ --namespace cattle-system \ --set hostname=rancher.my.org \ --set ingress.tls.source=secret
2.4.4.验证
kubectl -n cattle-system rollout status deploy/rancher

-检查 deployment 的状态

kubectl -n cattle-system get deploy rancher NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE rancher 3 3 3 3 3m DESIRED和AVAILABLE应该显示相同的个数
2.5.高可用升级指南(Helm 3)2.5.1.备份集群

-创建 etcd 数据库的快照

使用 Rancher Kubernetes Engine(RKE)创建当前 etcd 数据库的快照。

A:定使快照

编辑rancher-cluster.yml配置文件;

编辑 service etcd的配置以启用自动备份。

services: etcd: backup_config: enabled: true# 设置true启用ETCD自动备份,设置false禁用; interval_hours: 6 # 快照创建间隔时间,单位小时; retention: 60 # 快照保留天数(以天为单位)rke up --config rancher-cluster.yml

RKE 会在每个 etcd 节点上定期创建快照,并将快照将保存到每个 etcd 节点的:/opt/rke/etcd-snapshots/目录下。如果配置了 S3 存储配置,快照备份也会上传到 S3 兼容的存储后端。

B:一次性快照

rke etcd snapshot-save --name <SNAPSHOT.db> --config rancher-cluster.yml

RKE 为在每个节点上运行的 etcd 创建快照。该文件将保存到/opt/rke/etcd-snapshots

-外部存储快照

创建快照后,将其导出到一个安全的位置,如果您的集群遇到问题,保存快照的位置将不会受到影响。

2.5.2.更新 Helm Chart 仓库

helm repo update helm fetch rancher-latest/rancher
2.5.3.升级 Rancher

-从已安装的当前 Rancher Helm chart 中获取通过 --set 传递的值。

helm get values rancher -n cattle-system hostname: rancher.my.org

-取上一步中的所有值,然后使用--set key=value将它们附加到命令中

helm upgrade rancher rancher-<CHART_REPO>/rancher \ --namespace cattle-system \ --set hostname=rancher.my.org

标签: #rancher部署项目