目前K8S是大趋所示,对容器的编排管理有一统江湖的意思。
- Rancher 2.0发布之后,基础编排平台从Cattle变成了Kubernetes,Rancher 2.0使用的编排技术完成转向成为Kubernetes,
- Rancher 2.0与Rancher 1.6有了很大区别。目前,在这两个版本之间还没有直接的升级路径。
基于如上的种种原因我们直接从Rancher2.X开始学习,没有必要再去学习一定会被取代的东西和知识点了。
本文主要内容来自于:
- 入门必读 | Rancher文档 -----------api说明
- Rancher 2.0.x - 2.4.x 文档 | Rancher | Rancher文档 ----------------------rancher2.X版本总说明页面
- 安装指南 | Rancher文档 ------------2.4.X版本的安装与2.5.X版本的安装不一样.
- centos7系统部署rancher2.x,并创建k8s集群_51CTO博客_k8s集群部署 (特别鸣谢+>+)
如果内置启动创建K8S会有很多问题,这时候就需要清空下实例,重新搭建.方法如下(心酸的血泪史,建议不要安装最新版本的rancher因为未知的坑在等待你,选择rancher/rancher:stable版本):
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,具体参考Docker概述与安装使用_cuiyaonan2000的博客-CSDN博客
#修改时区
[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 --privileged --restart=unless-stopped --name myRancher -p 80:80 -p 443:443 rancher/rancher
设置账号密码,以及设置能访问该rancher的ip或者域名
右下角将英文切换成中文,左下角是rancher的版本号
点击集群选项卡右上角的----添加集群--》选择自定义创建
可以看到K8S的服务商有很多哈,这里我们是选择从现有节点中创建。cuiyaonan2000@163.com
这里只输入个集群名称就行了,同时也可以选择K8S的版本这里我就用的默认
如下的这个步骤很重要(这里的命令是用于添加集群,同时给运行的集群设置角色,------即不同机器添加不同的角色,运行不同的命令)
- 主机选项中勾选
Etcd
与Control
两个选项,复制命令,然后在master
主机执行命令---如此表示该主机是管理机器 - 主机选项中勾选
Worker
,复制命令,然后在node
主机执行命令----如此表示该主机是工作主机 - 官方文档说明的是,在主机和工作机器上都分别执行后再点击如下截图的完成。但是后续应该可以再动态添加的。cuiyaonan2000@163.com
执行完上面的步骤后--其实要很长时间这里我就做了2台虚拟机。
如下所示:红色字体表示当前正在做的事情-----全自动。中间如果服务器挂掉了也没事它也会自动重启然后在继续搭建k8s服务器
因为--restart=unless-stopped 总之这是个很漫长的过程 慢慢等待吧,除非有什么问题。
如下可以看到2个角色 一个是 所有角色 一个 worker角色,且都在配置阶段------这个有点坑为啥呢,因为中间如果有问题你不知道啊,然后程序就会不断的重启去搭建K8S。。。。。。很坑
最终如果现实如下的内容就表示成功了.状态是active,处理器和内存占有率可以看到,最新版本的安装把我坑惨了,各种问题~~~~~~~~~~~~~~~~~~~~~~~~~
工作负载即 Kubernetes 对一组 Pod 的抽象模型,用于描述业务的运行载体,包括 Deployment、Statefulset、Daemonset、Job、CronJob 等多种类型,详情请参考名词解释。
官网上提供了两种类型的工作负载:它们都是将集群外部流量导入到集群内的方式,只是实现方式不同-----cuiyaonan2000。
- 部署带有 Ingress 的工作负载
- 部署带有 NodePort 的工作负载
NodePort 服务是引导外部流量到你的服务的最原始方式。
NodePort,正如这个名字所示,在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。
Ingress 事实上不是一种服务类型。相反,它处于多个服务的前端,扮演着“智能路由”或者集群入口的角色。
例如:任何发往域名 foo.yourdomain.com 的流量转到 foo 服务,将路径 yourdomain.com/bar/path 的流量转到 bar 服务。
-
访问集群页面,选择您刚刚创建的集群,进入集群页面。
-
从集群页面的主菜单中选择项目/命名空间。
-
打开 项目:Default。
-
单击资源 > 工作负载。如果您使用的是 v2.3.0 之前的版本,请单击 工作负载 > 工作负载。
-
单击部署。结果: 打开部署工作负载 页面。
-
输入工作负载的名称。
-
在Docker 镜像一栏,输入nginx的镜像地址,请注意区分大小写字母。
-
余下的选项保持默认配置即可。
-
单击运行。
上述步骤帮助您完成了工作负载的部署,现在您需要将服务暴露出来,让其他服务可以通过网络连接和调用这个工作负载。
-
访问集群页面,选择您刚刚创建的集群,进入集群页面。
-
从集群页面的主菜单中选择项目/命名空间。
-
打开 项目 > Default。
-
单击资源 > 工作负载 > 负载均衡。如果您使用的是 v2.3.0 之前的版本,请单击 工作负载 > 负载均衡。
-
单击添加 Ingress
-
输入 Ingress 负载均衡的名称,如 “hello”。
-
在目标一栏,从下拉菜单选择您服务的名称。
-
在端口一栏输入
80
。 -
余下的选项保持默认配置即可,单击保存。
结果: 这个工作负载分配到了一个sslip.io
地址,已经暴露出去了。可能需要 1~2 分钟完成服务关联。
Rancher Server 中存在一个项目的概念,默认存在两个项目:default
和 system
,类似于 namespaces
但是并不是 namespaces
,而且 namespaces
还率属于某项目下,项目可以配置 Pod 安全策略以及资源配额,可以理解为更好的划分各个项目资源隔离。default
项目可以理解为非系统项目的个人自定义项目,system
项目可以理解为具有所有 Kubernetes 和 Rancher 系统命名空间的系统项
在我们成功创建一个集群后,系统会自动创建2个项目一个是Default,一个是System,如下图所示.这里我们选择Default里面进行相关容器的部署
选择-->部署服务
你可以在部署页中输入你的应用名称,可以指定部署多少个Pod(k8s中的概念),选择对应的镜像,然后配置各种参数策略,
如果你想进行数据持久化可以到数据卷的tab中进行配置,
如果你有参数的定义可以到环境变量的tab中进行指定,最后再启动它。
这看起来似乎是更方便的让我们执行了docker run命令,前提是你得熟悉docker中各种命令的使用及含义
如下我们启动一个tomcat镜像----这里有个小问题就是tomcat镜像没法用,启动了访问不了,使用tomcat:alpine镜像就没问题cuiyaonan2000@163.com
其实吧Rancher的负载均衡也是使用的Nginx这是防止在System命名空间中的,所以他会默认占用80端口.如果有冲突我们就需要去修改System命名空间下的Nginx端口cuiyaonan2000@163.com
修改映射端口
修改nginx启动参数
最后增加http-port 或者根据需要同时添加https-port即可
首先选择集群 然后选择对应的命名空间,后在在资源中选择密文,主要应用于我们没有在docker环境中 login到其它的镜像仓库. 但是我们在Rancher创建负载的时候制定了其它的镜像仓库地址cuiyaonan2000@163.com
对于创建的每个工作负载,都会创建一个相应的服务发现。此服务发现使用以下命名约定为工作负载的容器启用 DNS 解析: ..svc.cluster.local
。同理删除工作负载的时候也会同时删除相应的服务发现.
您还可以创建其他服务发现。您可以使用这些 DNS 记录,让用户可以通过 DNS 解析到一个或多个外部 IP 地址,外部主机名,另一个 DNS 记录的别名,其他工作负载或一组与您创建的选择器匹配的 Pod。-----------可以灵活的自定义服务的路由规则
操作流程:
-
从全局视图中,打开要添加 DNS 记录的项目。
-
在主导航栏中单击资源。单击服务发现标签。(在 v2.3.0 之前的版本中,只需单击服务发现选项卡。)然后单击添加记录。
-
输入 DNS 记录的名称。此名称用于 DNS 解析。
-
从下拉列表中选择一个命名空间。或者您可以通过单击添加到新命名空间来动态创建新命名空间。
-
选择一个解析到选项,以将请求路由到 DNS 记录。
-
一个或多个外部 IP 地址(用于容器访问外部的服务的路由设置,使用IP)
在目标 IP 地址字段中输入 IP 地址。通过单击添加 目标 IP添加更多 IP 地址。
-
外部主机名(用于容器访问外部的服务的路由设置,使用域名)
输入目标主机名。
-
另一个 DNS 记录值的别名
单击添加目标记录,然后从值下拉列表中选择另一个 DNS 记录。
-
一个或多个工作负载
单击 添加目标工作负载 然后从值下拉列表中选择另一个工作量.
-
与选择器匹配的 Pods
输入的键值对标签选择器为与您的参数匹配的所有 Pod 创建记录。
-
-
单击 创建
结果: 创建了一个新的 DNS 记录。
您可以通过项目的服务发现选项卡查看记录。 您可以通过 ..svc.cluster.local
来使用新创建的 DNS 记录,它将按照您的配置进行解析。
项目是 Rancher 引入的一个概念,是由一个或多个命名空间构成的集合。您可以将多个命名空间作为一个组进行管理,并在其中执行 Kubernetes 操作。您可以使用项目来支持租户权限管理,例如设置团队可以访问集群中的某个项目,但不能访问同一集群中的其他项目。
命名空间是 Kubernetes 的概念,它允许在集群中创建虚拟集群,这对于将集群划分为单独的“虚拟集群”非常有用,每个虚拟集群都有自己的访问控制和资源配额。
创建项目&命名空间
如下我们还能根据不同的项目设置它的硬件使用情况.棒棒cuiyaonan2000@163.com