Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。
在原来, 如果我们需要做一个分布式集群我们需要学习一全套的框架并编码实现如 服务发现, 负载均衡等逻辑, 给开发者造成很大的负担, 不过好在现在有Docker以及他周边的一些技术能在上层解决这些问题, 而应用该怎么开发就怎么开发.
当你选择使用Docker技术栈的时候, 会发现在生产环境中不光光是 docker run
就能解决的. 还需要考虑比如docker之间的组网, 缩扩容等问题, 于是你去学习kubernetes, 发现好像有点复杂啊, 有没有更傻瓜化一点的? 那就是rancher了.
rancher-server 主要负责图形化管理主机容器, 并且储存用户的数据(账号, 主机信息, 应用(task)等).
他是一个管理者, 管理工作机应该启动什么容器.
启动一个单节点server, 并将数据库数据挂载到宿主机, 保证容器删除后数据还在.
sudo docker run -d -v /workspace/rancher/mysql:/var/lib/mysql --restart=unless-stopped -p 8081:8080 rancher/server
稍等片刻就能通过访问8081端口进入到Rancher UI
因为rancher前端使用ws和后端通讯, 所以如果使用nginx作为代理访问这个服务器需要这样设置:
server {
listen 80;
server_name rancher.bysir.store;
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
在"ADMIN->Access Contor"添加一个管理员用于登陆, 我使用的是本地认证方式, 没遇到什么问题就不赘述了.
在rancher-server中默认内置了一个Cattle Template的环境, 我也不知道Cattle是个啥, 我们还是用Kubernetes吧, 眼熟.
点击Add Environment按钮
这段话我们用中文版本来看:
Rancher 支持将资源分组归属到多个环境。 每个环境具有自己独立的基础架构资源及服务,并由一个或多个用户、团队或组织所管理。
例如,您可以创建独立的“开发”、“测试”及“生产”环境以确保环境之间的安全隔离,将“开发”环境的访问权限赋予全部人员,但限制“生产”环境的访问权限给一个小的团队。
先建一个Test试一试
在这个页面点击添加一个主机
rancher-agent 也就是主机, 是用来执行具体工作的机器
按照提示来添加主机:
在第四步的输入框中填写上主机的ip地址, 在这里我填写的是10.117.195.190
, 这个ip使用来给ipsec组网的, 所以需要暴露UDP的500和4500端口.
rancher在这里叫你添加的是公网ip, 但在实际生产环境中, 不可能每个主机都有公网ip并且也不应该使用公网建立网络, 所以我们在这里填写内网(私网)ip地址, 只要保证当你添加多个主机的时候他们之间的UDP500和4500能互相访问.
PS: 可以通过以下代码测试端口连通性:
$ nc -u -z -v 10.25.170.125 4500
Connection to 10.25.170.125 4500 port [udp/ipsec-nat-t] succeeded!
PPS: 阿里的只需要主机在同一个安全组就能实现内网所有端口互通
复制第五步的代码到主机上执行, 执行之后可以通过以下代码看它的运行情况:
docker logs rancher-agent
稍等片刻你就能在rancher的web页面"INFRASTRUCTURE->Hosts"下找到你刚刚添加的主机.
这时候能看到这个主机的很多服务(容器)正在启动, 不出意外的话能看到这个样子的主机:
图太长了, 没截完, 反正全绿就可以了
如果遇到红色无法启动的容器, 首先查看日志, 找找有用信息, 然后尝试以下操作:
当我们在测试或者某个主机出现某些难以解决的错误的时候, 会经常使用重启大法
, 注意在重新将这个主机加入到rancher集群之前需要清理到原来运行的container以及挂载出来的volume, 否则的话, 当再次启动rancher/agent之后你会发现很多服务启动不了, 如etcd, kubernetes; 一般来说, 只需要清理 kubernetes留下来的东西就好了.
一般如下操作
docker volume rm etcd
, 如果提示它被某个容器使用了就停止掉这个容器后再操作rm -rf /var/etcd/backups
, 删除etcd挂载出来的数据参考这篇官方文章: 清理主机
ipsec会将所有主机组网, 当其中有某个主机连接不上的时候其他ipsec节点也会unhealthy, 这时候就需要检查是那个主机的问题, 看其UDP的500和4500端口是否能与其他主机互相访问.
ipsec会向rancher-server机器请求得到其他主机的ip地址以实现组网.
但我通过查看ipsec的错误日志发现这个ipsec容器访问不到rancher-server机器的外网地址, 登陆容器执行命令发现curl http://www.baidu.com
都报错, 这种情况下... 我选择重启docker(没办法了啊, 如果读者有解决方案感谢告诉我哦).
但请谨慎操作呀 service docker restart
会重启所有的容器, 这将导致所有服务不可用.
好像etcd无法启动和ipsec没有正常运行有关, 所以先解决ipsec的问题
在上面说了记得删除volume etcd
更多的可以参考这篇官方文章: 灾难恢复
如果你在"INFRASTRUCTURE->Containers"中看到红色的etcd容器并且在不断重启, 不要惊讶.
在灾难恢复中说到 Rancher在三个不同的主机上运行多达三个 etcd 实例, 猜测Rancher会一直在不同的主机上启动etcd直到满足三个节点, 不过etcd也支持低于三个节点的, 所以正常使用是没问题的. 如果实在看不顺眼就添加3个或以上的主机.
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://api;
proxy_set_header Authorization "";
}
}
这是一个简单的反代功能, 但在Rancher环境中是无法工作的, nginx会报错: no resolver defined to resolve api.
这是因为在Docker环境中, 需要使用Docker自带的Dns服务器才能找对host对应的ip.
所以需要这样:
server {
listen 80;
server_name localhost;
// for Docker
// resolver 127.0.0.11 ipv6=off;
// for Rancher
resolver 169.254.169.250 ipv6=off;
location / {
proxy_pass http://api;
proxy_set_header Authorization "";
}
}
在原生Docker中使用127.0.0.11作为Dns服务器, Rancher中使用169.254.169.250作为Dns服务器, 它们都是固定的, 可以写死.
参考:
更多信息请Google关键字: docker nginx resolve.
Original url: Access
Created at: 2020-03-13 11:34:26
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论