Rancher--开源k8s集群管理平台(搭建篇)

序言

目前K8S是大趋所示,对容器的编排管理有一统江湖的意思

  • Rancher 2.0发布之后,基础编排平台从Cattle变成了Kubernetes,Rancher 2.0使用的编排技术完成转向成为Kubernetes,
  • Rancher 2.0与Rancher 1.6有了很大区别。目前,在这两个版本之间还没有直接的升级路径。

基于如上的种种原因我们直接从Rancher2.X开始学习,没有必要再去学习一定会被取代的东西和知识点了。

本文主要内容来自于:

  1. https://docs.rancher.cn/docs/rancher2/quick-start-guide/_index -----------api说明
  2. https://docs.rancher.cn/rancher2/ ----------------------rancher2.X版本总说明页面
  3. https://docs.rancher.cn/docs/rancher2/installation/other-installation-methods/single-node-docker/_index/ ------------2.4.X版本的安装与2.5.X版本的安装不一样.
  4. https://blog.51cto.com/10950710/2478360?source=dra (特别鸣谢+>+)

准备工作

安装失败处理办法

如果内置启动创建K8S会有很多问题,这时候就需要清空下实例,重新搭建.方法如下(心酸的血泪史,建议不要安装最新版本的rancher因为未知的坑在等待你,选择rancher/rancher:stable版本):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
docker stop $(docker ps -aq)
docker system prune -f
docker volume rm $(docker volume ls -q)

for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done

rm -rf /etc/ceph \
      /etc/cni \
      /etc/kubernetes \
      /opt/cni \
      /opt/rke \
      /run/secrets/kubernetes.io \
      /run/calico \
      /run/flannel \
      /var/lib/calico \
      /var/lib/etcd \
      /var/lib/cni \
      /var/lib/kubelet \
      /var/lib/rancher/rke/log \
      /var/log/containers \
      /var/log/pods \
      /var/run/calico

安装Rancher 2.x

首先需要安装Docker,具体参考https://blog.csdn.net/cuiyaonan2000/article/details/102542581

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#修改时区
[cuiyaonan2000@mzdssop soft]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


#首先同步时间,这个在集群环境中非常重要
[cuiyaonan2000@mzdssop soft]# yum -y install ntp
[cuiyaonan2000@mzdssop soft]# systemctl enable ntpd
[cuiyaonan2000@mzdssop soft]# systemctl start ntpd
[cuiyaonan2000@mzdssop soft]# timedatectl set-ntp yes
[cuiyaonan2000@mzdssop soft]# ntpdate -u cn.pool.ntp.org
[cuiyaonan2000@mzdssop soft]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  
[cuiyaonan2000@mzdssop soft]# watch -n 1 'date'

#关闭Selinux
[cuiyaonan2000@mzdssop soft]# sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#修改语言环境
[cuiyaonan2000@mzdssop soft]# sudo echo 'LANG="en_US.UTF-8"' >> /etc/profile;source /etc/profile





#安装anchore最新版本
#注意这里增加了一个 --privileged,如果不加则会报错
#privileged 的作用其实就是启动的 container内的root拥有真正的root权限
#2.4.X即以前不需要使用privileged
#2.5.X需要使用privileged
[cuiyaonan2000@mzdssop soft]# sudo docker run -d --restart=unless-stopped --name myRancher -p 80:80 -p 443:443 rancher/rancher

设置账号密码,以及设置能访问该rancher的ip或者域名

img

右下角将英文切换成中文,左下角是rancher的版本号

img

创建K8S集群

点击集群选项卡右上角的----添加集群–》选择自定义创建

**可以看到K8S的服务商有很多哈,这里我们是选择从现有节点中创建。

img

这里只输入个集群名称就行了,同时也可以选择K8S的版本这里我就用的默认

img

如下的这个步骤很重要(这里的命令是用于添加集群,同时给运行的集群设置角色,------即不同机器添加不同的角色,运行不同的命令)

  • 主机选项中勾选EtcdControl 两个选项,复制命令,然后在 master 主机执行命令—如此表示该主机是管理机器
  • 主机选项中勾选Worker ,复制命令,然后在 node 主机执行命令----如此表示该主机是工作主机
  • 官方文档说明的是,在主机和工作机器上都分别执行后再点击如下截图的完成。但是后续应该可以再动态添加的。

img

执行完上面的步骤后–其实要很长时间这里我就做了2台虚拟机。

如下所示:红色字体表示当前正在做的事情-----全自动。中间如果服务器挂掉了也没事它也会自动重启然后在继续搭建k8s服务器

因为–restart=unless-stopped 总之这是个很漫长的过程 慢慢等待吧,除非有什么问题。

img

如下可以看到2个角色 一个是 所有角色 一个 worker角色,且都在配置阶段------这个有点坑为啥呢,因为中间如果有问题你不知道啊,然后程序就会不断的重启去搭建K8S。。。。。。很坑

最终如果现实如下的内容就表示成功了.状态是active,处理器和内存占有率可以看到,最新版本的安装把我坑惨了,各种问题~~~~~~~

img

部署服务–官方说法部署工作负载

工作负载即 Kubernetes 对一组 Pod 的抽象模型,用于描述业务的运行载体,包括 Deployment、Statefulset、Daemonset、Job、CronJob 等多种类型,详情请参考名词解释

官网上提供了两种类型的工作负载:它们都是将集群外部流量导入到集群内的方式,只是实现方式不同-----cuiyaonan2000。

NodePort

NodePort 服务是引导外部流量到你的服务的最原始方式。

NodePort,正如这个名字所示,在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。

img

Ingress—所以选你了

Ingress 事实上不是一种服务类型。相反,它处于多个服务的前端,扮演着“智能路由”或者集群入口的角色。

例如:任何发往域名 foo.yourdomain.com 的流量转到 foo 服务,将路径 yourdomain.com/bar/path 的流量转到 bar 服务。

img

用例部署

Rancher Server 中存在一个项目的概念,默认存在两个项目:defaultsystem,类似于 namespaces 但是并不是 namespaces,而且 namespaces 还率属于某项目下,项目可以配置 Pod 安全策略以及资源配额,可以理解为更好的划分各个项目资源隔离。default 项目可以理解为非系统项目的个人自定义项目,system 项目可以理解为具有所有 Kubernetes 和 Rancher 系统命名空间的系统项

在我们成功创建一个集群后,系统会自动创建2个项目一个是Default,一个是System,如下图所示.这里我们选择Default里面进行相关容器的部署

img

选择–>部署服务

img

你可以在部署页中输入你的应用名称,可以指定部署多少个Pod(k8s中的概念),选择对应的镜像,然后配置各种参数策略,

如果你想进行数据持久化可以到数据卷的tab中进行配置,

如果你有参数的定义可以到环境变量的tab中进行指定,最后再启动它。

这看起来似乎是更方便的让我们执行了docker run命令,前提是你得熟悉docker中各种命令的使用及含义

如下我们启动一个tomcat镜像----这里有个小问题就是tomcat镜像没法用,启动了访问不了,使用tomcat:alpine镜像就没问题