一 Rancher
在二进制搭建k8集群时,我们就知道了k8s本身就具有一款原生的k8s集群管理工具,但是原生图形化管理工具dashborad只拥有管理一个集群的能力。而对于现代化生产力公司来讲,一个集群能够做的事情还是太少,所以我们需要引入更强大的集群管理工具。市面上较为常用的有rancher kubesphere k9s K3s。本次我们主要介绍rancher的功能于搭建。
1 Rancher 简介 k3s
Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes 集群在混合云+本
地数据中心的集中部署与管理, 以确保集群的安全性,加速企业数字化转型。超过 40000 家企业
每天使用 Rancher 快速创新。
官网:https://docs.rancher.cn/
2 Rancher 和 k8s 的区别
Rancher 和 k8s 都是用来作为容器的调度与编排系统。但是 rancher 不仅能够管理应用容器,更重
要的一点是能够管理 k8s 集群。 Rancher2.x 底层基于 k8s 调度引擎,通过 Rancher 的封装,用
户可以在不熟悉 k8s 概念的情况下轻松的通过 Rancher 来部署容器到k8s集群当中。
二 Rancher 安装及配置
实验环境:
控制节点/master01 | 192.168.11.12 |
工作节点/node01 | 192.168.11.13 |
工作节点/node02 | 192.168.11.4 |
Rancher节点/rancher | 192.168.11.3 |
1 安装 rancher
#在 master01 节点下载 rancher-agent 镜像
docker pull rancher/rancher-agent:v2.5.7
#在 rancher 节点下载 rancher 镜像
docker pull rancher/rancher:v2.5.7
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged --name rancher rancher/rancher:v2.5.7
#--restart=unless-stopped 表示在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
docker ps -a|grep rancher
2 登录 Rancher 平台
需要先等一会儿,再浏览器访问 http://192.168.11.3 ,由于未使用授信证书,会有报警,忽略即可
登录后如是英文页面,可点击右下角语言选项选择中文
别忘记关闭防护
3 Rancher 管理已存在的 k8s 集群
选择【添加集群】,点击【导入】
【集群名称】设置为 k8s-cluster,点击【创建】
选择复制第三条命令绕过证书检查导入 k8s 集群
在 k8s 控制节点 master01 上执行刚才复制的命令,如第一次执行报错,再执行一次即可
curl --insecure -sfL https://192.168.10.23/v3/import/ltlhl7vggnwz8knbjncgbxqlrf6krpbfbxtzh4qlpnqxrq5559k6gf_c-jf5bx.yaml | kubectl apply -f -
kubectl get ns
kubectl get pods -n cattle-system -o wide
kubectl get pods -n fleet-system -o wide
4 Rancher 部署监控系统
点击【启用监控以查看实时监控】
【监控组件版本】选择 0.2.1,其他的默认即可
点击【启用监控】,启动监控时间可能比较长,需要等待10分钟左右
注意:Rancher 机器内存要3G 及以上,不然虚拟机会卡顿
5 使用 Rancher 仪表盘管理 k8s 集群
//以创建 nginx 服务为例
点击【仪表盘】进入 k8s 集群仪表盘界面
6 创建 Deployment 资源
点击左侧菜单【Deployments】,再点击右侧【Create】
【Namespace】下拉选择 dev,【Name】输入 nginx-dev,【Replicas】输入 3
点击中间选项【Container】,【Container Image】输入 nginx:1.14,【Pull Policy】选择 IfNotPresent
在【Pod Labels】下点击【Add Lable】,【Key】输入 app,【Value】输入 nginx
点击中间选项【Labels and Annotations】,点击【Add Label】,【Key】输入 app,【Value】输入 nginx
点击右下角【Create】
7 创建 service
点击左侧菜单【Services】,再点击右侧【Create】
点击【Node Port】
【Namespace】下拉选择 dev,【Name】输入 nginx-dev
【Port Name】输入 nginx,【Listening Port】输入 80,【Target Port】输入 80,【Node Port】输入 30180
点击中间选项【Selectors】,【Key】输入 app,【Value】输入 nginx
点击右下角【Create】
点击【nginx-dev】查看 service 是否已关联上 Pod
#点击 service 资源的节点端口 30180/TCP,可以访问内部的 nginx 页面了
点击 service 资源的节点端口 30180/TCP,可以访问内部的 nginx 页面了
vim /etc/resolv.conf 可以直接更改DNS
CNI 若有问题就需要 重启K8s集群了
会建还要会删
三 K8S-高可用集群
高可用集群
1 架构
为了防止Master节点掉线,可用通过一些高可用方案对集群进行改造。
对于apiserver的访问通过Haproxy或Nginx集群进行反向代理,反向代理集群中使用Keepalived。
Haproxy和Nginx
2 Nginx 负载均衡器的特点是:
工作在网络的 7 层之上,可以针对 http 应用做一些分流的策略,比如针对域名、目录结构;
Nginx 安装和配置比较简单,测试起来比较方便;
也可以承担高的负载压力且稳定,一般能支撑超过上万次的并发;
Nginx 可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持 url 来检测;
Nginx 对请求的异步处理可以帮助节点服务器减轻负载;
Nginx 能支持 http 和 Email,这样就在适用范围上面小很多;
默认有三种调度算法: 轮询、weight 以及 ip_hash(可以解决会话保持的问题),还可以支持第三 方的 fair 和 url_hash 等调度算法;
3 HAProxy 的特点是:
HAProxy 是工作在网络 7 层之上;
支持 Session 的保持,Cookie 的引导等;
支持 url 检测后端的服务器出问题的检测会有很好的帮助;
支持的负载均衡算法:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权 URL 哈希和加权参数哈希(Weighted Parameter Hash);
单纯从效率上来讲 HAProxy 更会比 Nginx 有更出色的负载均衡速度;
HAProxy 可以对 Mysql 进行负载均衡,对后端的 DB 节点进行检测和负载均衡。
4 Keepalived
Keepalived 的主要功能是实现真实机的故障隔离及负载均衡器间的失败切换,提高系统的可用性。Keepalived以VRRP协议为实现基础,VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。
运行原理:keepalived 通过选举(看服务器设置的权重)挑选出一台热备服务器做 MASTER 机器,MASTER 机器会被分配到一个指定的虚拟 ip,外部程序可通过该 ip 访问这台服务器,如果这台服务器出现故障(断网,重启,或者本机器上的 keepalived crash 等),keepalived 会从其他的备份机器上重选(还是看服务器设置的权重)一台机器做 MASTER 并分配同样的虚拟 IP,充当前一台 MASTER 的角色。
选举策略:选举策略是根据 VRRP 协议,完全按照权重大小,权重最大(0~255)的是 MASTER 机器,下面几种情况会触发选举
keepalived 启动的时候;
master 服务器出现故障(断网,重启,或者本机器上的 keepalived crash 等,而本机器上其他应用程序 crash 不算);
有新的备份服务器加入且权重最大。