前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于RKE的Rancher 高可用版本离线安装实践分享

基于RKE的Rancher 高可用版本离线安装实践分享

作者头像
SDNLAB
发布2020-06-28 16:11:41
3.5K0
发布2020-06-28 16:11:41
举报
文章被收录于专栏:SDNLABSDNLAB

作者简介:赵鑫,北京邮电大学19级硕士在读。从事Cassandra数据库的搭建和调优,目前为中国联通网络技术研究院云计算实习生,主要从事k8s和rancher相关平台的研究和技术调研。

一、Rancher技术架构

k8s 作为容器管理系统,以其可移植性,可扩展性还有自动化的优点,在云计算领域受到越来越多的关注。而rancher是为使用容器的公司打造的容器管理平台。Rancher 简化了使用 Kubernetes 的流程,开发者可以随处运行 Kubernetes。

Rancher 1.x 最初是为了支持多种容器编排引擎而构建的,其中包括自己的容器编排引擎 Cattle。但随着 Kubernetes 在市场上的兴起,Rancher 2.x 已经完全转向Kubernetes。Rancher 2.x 可以部署和管理在任何地方运行的 Kubernetes 集群。

二、相关基本概念

本文主要介绍的是离线环境下高可用版本rancher 的安装,这里将带你一步一步完成安装。为了安装能够更顺利地进行,安装之前,需要了解以下概念。

1、域名与DNS解析基本概念

DNS(Domain Name System)是"域名系统"的英文缩写,它的作用是将域名转换为IP地址。比如我们在浏览器中输入www.baidu.com, 但是定位服务器需要知晓服务器的IP地址。DNS通过查询本地或者远端数据库,找到域名对应的服务器IP, 返回给请求端,请求端通过IP访问到真正服务。

这里在终端中输入 nslookup www.baidu.com, 就是使用DNS查询www.baidu.com的服务器IP, 这里返回了 180.101.49.11, 180.101.49.12。

本机也有DNS 记录(windows存放在C:\Windows\System32\drivers\etc\hosts)。

client 端发起请求时,首先在本机的hosts文件中进行查询。Rancher的安装和访问必须使用域名,这个域名是安装者自定义的,为了能够顺利解析,安装者必须在hosts 文件中添加这条记录,确保服务能够访问。

2、http七层代理和tcp四层代理基本概念

官网推荐的rancher 高可用架构是,URL请求先发往负责负载均衡机器(安装有Nginx),Nginx将流量转发给集群中各个机器,实现负载均衡和高可用。

在ISO/OSI 七层模型,将网络传输过程分成七层, 每一层负责不同的功能。http属于应用层(即第七层), 而TCP 属于第四层。所谓四层代理就是基于IP+端口的负载均衡;七层就是基于应用层信息的负载均衡。4层代理要比7层代理性能高很多,因为四层是TCP层,使用IP+端口的方式,只修改下IP地址,然后转发给后端服务器,TCP三次握手是直接和后端连接的, 而七层代理需要代理机进行与发起请求的机器TCP 连接之后,读取应用层信息再转发,性能必然有所下降,所以官网推荐的是四层转发。

3、正向代理和反向代理的基本原理

正向代理: client需要server的服务,但是client不能直接找到server,于是委托中间人agent代理, 这个agent是client 委托的,而且中间过程server只知道是为agent服务,而不知道client的存在。这个代理是指为client代理。

反向代理: server想把自己的服务发布出去,让client 能够访问。但他无法直接联系client,于是委托agent 为自己代理。经过agent代理之后,client可以访问server提供的服务。client不知道是server为他提供的服务,它只知道访问agent就能使用服务。这里反向代理是指为server代理。

因为我们是为rancher 服务器代理,实现负载均衡,所以是反向代理。

4、SSL证书与域名的关系

http协议是互联网应用中的主要协议,但 http协议是明文传输的,一些重要敏感的信息,如密码,个人信息,使用明文传输十分不安全。因此https协议应运而生。它基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护。

https协议使用的是443端口,https工作的主要工作流程是,当用户以https协议访问某个站点的时候,服务器先用自己的私钥加密网页,然后连同本身的数字证书,一起发送给客户端。(证书是一个文本,里面记载着这个证书的签发机构,该证书所有者的相关信息,该站点服务器的公钥,以及使用证书颁发机构的私钥加密的证书信息)当客户端使用自己信任的证书颁发机构的公钥对加密的证书信息解密的时候,可以判断出该证书是否被篡改,因此可以判断出远程服务器是否是自己想要访问的服务器,实现身份验证。客户端只有验证服务器身份如果没有问题,才会进行下一步通信。

安装rancher的时候,我们也需要证书文件,因为是公司内部机器,暂时使用自签名,证书没有经过CA(证书颁发机构)认证,所以访问rancher界面时浏览器仍然会显示不安全。在生成自签名证书的时候,需要输入域名,这时候证书和域名就完成绑定。

除了以上概念,还需要了解helm,linux,docker的基本操作,这里就不一一赘述。

三、私有镜像仓库部署

安排一台虚拟机,作为私有镜像仓库,我使用的是10.100.56.159这台机器。在这台机器上安装harbor。

下载harbor(地址: http://harbor.orientsoft.cn/) 拷贝至159机器,解压。

修改配置文件harbor.cfg,修改hostname 为10.100.56.159

修改配置文件,

添加两行内容,

然后重启,使得配置生效

运行harbor

最后可以在访问10.100.56.159上harbor服务。

四、实践部署

1、部署网络拓扑

准备虚拟机6台,虚拟机节点无法访问互联网,但是可以互相ping通。

官网给出的架构如下:

我的安排:

rancher集群

  • 10.100.56.13
  • 10.100.56.17
  • 10.100.56.37
  • 10.100.56.43

我们首先在这几台机器上安装k8s,然后在k8s基础上安装rancher, rancher是以pod形式跑在k8s上。这也体现了高可用的特性,即使某个节点宕机,pod在k8s上是有备份的,pod可以迅速迁移到其他节点上,保证服务可用。

私有镜像节点:10.100.56.159,这台机器上安装harbor私有仓库

Nginx负载均衡节点:10.100.56.167, 因为离线环境,为方便起见,使用docker运行Nginx, 使用TCP 四层代理。

2、软件的下载

下载rke,kubectl,helm到13节点

安装k8s需要使用rke,安装完成访问k8s需要使用kubetl, 安装rancher需要使用helm,可以去github下载rke,kubectl, helm二进制文件,赋给运行权限

运行helm, kubectl , rke, 如果不提示命令不存在,则安装成功

3、镜像下载和导入

具体命令可以按照官网

(https://rancher2.docs.rancher.cn/docs/installation/other-installation-methods/air-gap/populate-private-registry/_index/)

总的流程就是在一台可以访问互联网的机器上,使用官网提供脚本下载镜像,并打成压缩包,然后拷贝至离线机器。使用docker load ,docker push命令,或者使用官网提供的脚本,上传到私有仓库。最终安装所需的docker 镜像全部上传至私有仓库的rancher项目下(如下图)。

4、安装k8s

具体的命令可以参照官网

(https://docs.rancher.cn/rancher2x/installation/helm-ha-install/offline/install-kube.html#_1-2-%E9%95%9C%E5%83%8F%E4%BB%93%E5%BA%93%E9%85%8D%E7%BD%AE)

这里对可能出现的一些问题解释。

1)docker 使用

版本问题:

安装k8s时需要使用到docker,在安装k8s之前需要在各个节点安装docker, docker的版本只支持1.13以后,下图是我在安装时候遇到的版本问题

docker登录私有仓库问题:

在离线环境下,docker必须从本地仓库(10.100.56.159)拉取镜像,登录本地仓库需要设置配置文件。否则在安装k8s过程中会报错,无法连接本地仓库。

在/etc/docker文件下建立 daemon.json文件,然后里面添加内容(ip为你私有仓库的地址)输入命令,重启docker

登录docker

显示Login Succeeded表明登录成功,这样就可以从159机器上拉取docker镜像了。

2)用户权限设置

centos的root用户无法安装k8s, 需要添加新用户, 并赋给root权限。这里是新用户名rancher,然后添加到root组,docker组(为了能够运行docker)

因为rke安装命令是在 10.100.56.13节点上操作,所以这里使用设置13节点对17,37,43节点ssh 免密登录。

完成之后可以尝试:

如果不用输入密码就可以登录,说明设置成功

安装k8s时需要记得修改rancher-cluster.yml中~/.ssh/id_rsa 秘钥文件路径

3)启动k8s

启动:

安装成功会出现以下提示:

之后如果不想在这几台机器中使用k8s, 可以用这个命令删除k8s集群(当然我们现在不要用这个命令):

安装完成之后,会产生一个kube_config_rancher-cluster.yml文件,这个文件是访问和操作k8s集群的凭证。

验证k8s集群是否正常运行,可以看到四个节点已经全部就绪:

每次使用kubectl 命令都要带上凭证,非常麻烦, 这里配置kube-config 文件:将文件kube_config_rancher-cluster.yml复制成:~/.kube/config,这样就可以直接使用kubectl命令,而不要带上参数 --kubeconfig=kube_config_rancher-cluster.yml

5、安装rancher

具体的命令可以参考官网

(https://docs.rancher.cn/rancher2x/installation/helm-ha-install/offline/install-rancher.html#_1-%E5%88%9D%E5%A7%8B%E5%8C%96helm)

主要是对几个可能出现的问题进行解释

1)证书设置

安装时需要配置ssl证书文件,自己用openssl命令生成的证书,容易出错,导致安装失败,这里给出解答,官网给了脚本一键生成,但是写在一个不容易发现的位置

(https://docs.rancher.cn/rancher2x/install-prepare/self-signed-ssl.html#_4-1-%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90ssl%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6%E8%84%9A%E6%9C%AC)

脚本生成证书的时候,输入的域名是www.ranchertest.cn, 这个可以由用户自定义。

然后初始化helm,打包Rancher Charts模板,离线安装rancher。安装rancher的时候,使用我们刚刚得到的证书, tls.crt和tls.key。

安装最后一步命令,设置rancher 域名是:www.helmtest.cn , 和证书绑定的域名是一样的

完成安装:

安装完可以检查一下rancher 是否正常运行

可以看到三个容器的状态都是running

2)本地DNS设置

在客户端设置dns 记录,我是用公司电脑访问内网,设置windows dns记录

(修改C:\Windows\System32\drivers\etc\hosts)

添加记录:10.100.56.167 www.ranchertest.cn

这里的dns记录是指向167主机的,就是四层代理主机,167机器运行了nginx,会自动将流量转达rancher 集群

3)nginx 反向代理

Nginx 需要使用1.14, 或者1.15 版本(这两个版本经过测试)最新的版本可能无法和k8s上的ingress适配导致流量转发失败。我之前使用的latest版本一直无法转发。

URL 请求发送到167节点, 167 节点上运行着Nginx,转发流量到后端节点的ingress,实现负载均衡。

创建nginx.conf 文件:

将文件复制到/etc/nginx/nignx.conf,

这里可以看见配置中转发了80和443端口的流量,对应http和https,使用docker 运行nginx容器:

我这里我使用的是1.15版本nginx。

最后在浏览器中输入域名:www.rancheretest.cn,成功访问

五、后续工作安排

后面一步的工作是使用rancher搭建和管理k8s集群,利用rancher的UI界面,简化k8s部署流程,并可以时刻监控k8s状态。

六、参考

下面是一些链接是我在安装过程中遇到了问题,在网上找到了一些资料参考,希望对你们安装有所帮助。

https://blog.csdn.net/qianyeguilai/article/details/69945505

https://www.jianshu.com/p/1409967439d6

https://www.jianshu.com/p/b91879114174

https://www.jianshu.com/p/595fd3fac7ff

https://www.jianshu.com/p/7385b2a4141f

https://www.cnblogs.com/wenxingxu/p/9597307.html

https://www.jianshu.com/p/ae76c223c6ef

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档