Rancher1.6中docker-compose 读取环境变量文件

    如图,在Rancher1.6中,如果我们在导入应用栈的时候,docker-compose文件中想直接配置读取环境变量文件,默认情况下应用是无法部署的。UI填写的所有配置会传递给rancher server,rancher server容器中并没有配置...
继续阅读 »

    如图,在Rancher1.6中,如果我们在导入应用栈的时候,docker-compose文件中想直接配置读取环境变量文件,默认情况下应用是无法部署的。UI填写的所有配置会传递给rancher server,rancher server容器中并没有配置的环境变量文件,所以docker-compose无法读取设置的变量文件。
    如果一定需要这个功能,那么可以 登录rancher server所在的主机,登录到rancher server容器中:
docker exec -ti  bash

 在rancher server容器中手动创建环境变量文件,把相应的变量参数填写进去,这样就可以正常创建服务了。
    如果rancher server是HA部署,那么通过NFS共享一个路径这样也可以保证文件的一致性。 收起阅读 »

Rancher2.0常见问题

1、出现大量Failed Pod 这个问题可能是磁盘满了,执行 kubectl describe pod  --all-namespaces 查看日志
继续阅读 »
1、出现大量Failed Pod

这个问题可能是磁盘满了,执行 kubectl describe pod  --all-namespaces 查看日志 收起阅读 »

Rancher2.0UI无法删除工作负载

kubectl delete deployment --force xxxxxx
kubectl delete deployment --force xxxxxx

Rancher2.0通过nodeport映射端口后,只有POD所在主机能通过端口访问,其他主机无法访问

Rancher2.0通过nodeport映射端口后,只有POD所在主机能通过端口访问,其他主机无法访问   这个问题有可能是iptables把相应的转发包丢弃了   解决方法:sudo iptables -P FORWARD ACCEPT,打开全局的转发规则 ...
继续阅读 »
Rancher2.0通过nodeport映射端口后,只有POD所在主机能通过端口访问,其他主机无法访问
 
这个问题有可能是iptables把相应的转发包丢弃了
 
解决方法:sudo iptables -P FORWARD ACCEPT,打开全局的转发规则
  收起阅读 »

Docker deamon 配置参数

{ "authorization-plugins": [], "data-root": "", "dns": [], "dns-opts": [], "dns-search": [], "exec-opts": [], "exec-root": ...
继续阅读 »
{
"authorization-plugins": [],
"data-root": "",
"dns": [],
"dns-opts": [],
"dns-search": [],
"exec-opts": [],
"exec-root": "",
"experimental": false,
"storage-driver": "",
"storage-opts": [],
"labels": [],
"live-restore": true,
"log-driver": "",
"log-opts": {},
"mtu": 0,
"pidfile": "",
"cluster-store": "",
"cluster-store-opts": {},
"cluster-advertise": "",
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5,
"default-shm-size": "64M",
"shutdown-timeout": 15,
"debug": true,
"hosts": [],
"log-level": "",
"tls": true,
"tlsverify": true,
"tlscacert": "",
"tlscert": "",
"tlskey": "",
"swarm-default-advertise-addr": "",
"api-cors-header": "",
"selinux-enabled": false,
"userns-remap": "",
"group": "",
"cgroup-parent": "",
"default-ulimits": {},
"init": false,
"init-path": "/usr/libexec/docker-init",
"ipv6": false,
"iptables": false,
"ip-forward": false,
"ip-masq": false,
"userland-proxy": false,
"userland-proxy-path": "/usr/libexec/docker-proxy",
"ip": "0.0.0.0",
"bridge": "",
"bip": "",
"fixed-cidr": "",
"fixed-cidr-v6": "",
"default-gateway": "",
"default-gateway-v6": "",
"icc": false,
"raw-logs": false,
"allow-nondistributable-artifacts": [],
"registry-mirrors": [],
"seccomp-profile": "",
"insecure-registries": [],
"no-new-privileges": false,
"default-runtime": "runc",
"oom-score-adjust": -500,
"node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],
"runtimes": {
"cc-runtime": {
"path": "/usr/bin/cc-runtime"
},
"custom": {
"path": "/usr/local/bin/my-runc-replacement",
"runtimeArgs": [
"--debug"
]
}
}}
收起阅读 »

2.0常见的前端状态提示

'activating':      'active':          'available':       'bound':           'backedup':        'created':         'creating':     ...
继续阅读 »
'activating':   
  'active':       
  'available':    
  'bound':        
  'backedup':     
  'created':      
  'creating':     
  'deactivating': 
  'degraded':     
  'disconnected': 
  'error':        
  'erroring':     
  'expired':      
  'healthy':       
  'inactive':     
  'initializing': 
  'migrating':    
  'paused':       
  'provisioning': 
  'pending':      
  'purged':       
  'purging':      
  'reconnecting': 
  'registering':  
  'released':     
  'reinitializing':
  'removed':      
  'removing':     
  'requested':    
  'restarting':   
  'restoring':    
  'running':      
  'starting':     
  'stopped':      
  'stopping':     
  'succeeded':    
  'terminated':   
  'unavailable':  
  'unhealthy':    
  'unknown':      
  'updating':     
  'waiting':
收起阅读 »

Rancher1.6常见故障排查与修复方法

一、服务/容器1、为什么我只能编辑容器的名称? Docker容器在创建之后就不可更改了。唯一可更改的内容是我们要存储的不属于Docker容器本身的那一部分数据。 无论是停止、启动或是重新启动,它始终在使用相同的容器。如需改变任何内容都需要删除或重新创建一个容器...
继续阅读 »
一、服务/容器1、为什么我只能编辑容器的名称?
Docker容器在创建之后就不可更改了。唯一可更改的内容是我们要存储的不属于Docker容器本身的那一部分数据。 无论是停止、启动或是重新启动,它始终在使用相同的容器。如需改变任何内容都需要删除或重新创建一个容器。
你可以克隆,即选择已存在的容器,并基于已有容器的配置提前在添加服务界面中填入所有要设置的内容,如果你忘记填入某项内容,可以通过克隆来改变它之后删除旧的容器。2、service-link的容器/服务在Rancher中是如何工作的?
在Docker中,关联容器(在 
docker run
中使用
--link
)的ID和IP地址会出现在容器的
/etc/hosts
中。在Rancher中,我们不需要更改容器的
/etc/hosts
文件,而是通过运行一个内部DNS服务器来关联容器,DNS服务器会返回给我们正确的IP。3、不能通过Rancher的界面打开命令行或查看日志,如何去访问容器的命令行和日志?
Agent主机有可能会暴露在公网上,Agent上接受到的访问容器命令行或者日志的请求是不可信的。Rancher Server中发出的请求包括一个JWT(JSON Web Token),JWT是由服务器签名并且可由Agent校验的,Agent可以判断出请求是否来自服务器,JWT中包括了有效期限,有效期为5分钟。这个有效期可以防止它被长时间使用。如果JWT被拦截而且没有用SSL时,这一点尤为重要。
如果你运行
docker logs -f (rancher-agent名称或ID)
。日志会显示令牌过期的信息,随后检查Rancher Server主机和Rancher Agent主机的时钟是否同步。4、在哪里可以看到我的服务日志?
在服务的详细页中,我们提供了一个服务日志的页签日志。在日志页签中,列出了和服务相关的所有事件,包括时间戳和事件相关描述,这些日志将会保留24小时。5、RANCHER SERVER 点击WEB shell屏幕白屏
如果RANCHER SERVER 运行在V1.6.2版本,点击WEB shell出现白屏,这是UI上的一个BUG,请选择升级server服务。二、跨主机通信
如果容器运行在不同主机上,不能够ping通彼此, 可能是由一些常见的问题引起的.1、如何检查跨主机通信是否正常?
在应用->基础设施中,检查 
healthcheck
 应用的状态。如果是active跨主机通信就是正常的。
手动测试,你可以进入任何一个容器中,去ping另一个容器的内部IP。在主机页面中可能会隐藏掉基础设施的容器,如需查看点击“显示系统容器”的复选框。2、UI中显示的主机IP是否正确?
有时,Docker网桥的IP地址会被错误的作为了主机IP,而并没有正确的选择真实的主机IP。这个错误的IP通常是
172.17.42.1
或以
172.17.x.x
开头的IP。如果是这种情况,在使用
docker run
命令添加主机时,请用真实主机的IP地址来配置
CATTLE_AGENT_IP
环境变量。
 sudo docker run -d -e CATTLE_AGENT_IP= --privileged \
 -v /var/run/docker.sock:/var/run/docker.sock \
 rancher/agent:v0.8.2 http://SERVER_IP:8080/v1/scripts/xxxx
3、Rancher的默认子网(
10.42.0.0/16
)在我的网络环境中已经被使用或禁止使用,我应该怎么去更改这个子网?
Rancher Overlay网络默认使用的子网是
10.42.0.0/16
。如果这个子网已经被使用,你将需要更改Rancher网络中使用的默认子网。你要确保基础设施服务里的Network组件中使用着合适的子网。这个子网定义在该服务的
rancher-compose.yml
文件中的
default_network
里。
要更改Rancher的IPsec或VXLAN网络驱动,你将需要在环境模版中修改网络基础设施服务的配置。创建新环境模板或编辑现有环境模板时,可以通过单击编辑来配置网络基础结构服务的配置。在编辑页面中,选择配置选项 > 子网输入不同子网,点击配置。在任何新环境中将使用环境模板更新后的子网,编辑已经有的环境模板不会更改现在已有环境的子网。
这个实例是通过升级网络驱动的
rancher-compose.yml
文件去改变子网为
10.32.0.0/16
.
ipsec:
  network_driver:
    name: Rancher IPsec
    default_network:
      name: ipsec
      host_ports: true
      subnets:
      # After the configuration option is updated, the default subnet address is updated
      - network_address: 10.32.0.0/16
      dns:
      - 169.254.169.250
      dns_search:
      - rancher.internal
    cni_config:
      '10-rancher.conf':
        name: rancher-cni-network
        type: rancher-bridge
        bridge: docker0
        # After the configuration option is updated, the default subnet address is updated
        bridgeSubnet: 10.32.0.0/16
        logToFile: /var/log/rancher-cni.log
        isDebugLevel: false
        isDefaultGateway: true
        hostNat: true
        hairpinMode: true
        mtu: 1500
        linkMTUOverhead: 98
        ipam:
          type: rancher-cni-ipam
          logToFile: /var/log/rancher-cni.log
          isDebugLevel: false
          routes:
          - dst: 169.254.169.250/32


注意: 随着Rancher通过升级基础服务来更新子网,以前通过API更新子网的方法将不再适用。


4、VXLAN 网络模式下,跨主机容器无法通信
Vxlan 通过4789端口实现通信,检查防火墙有没有开放此端口;
执行 iptables -t filter -L -n 参看IPtable表, 查看chain FORWARD 是不是被丢弃,如果是,执行sudo iptables -P FORWARD ACCEPT三、DNS1、如何查看我的DNS是否配置正确?
如果你想查看Rancher DNS配置,点击应用 > 基础服务。点击
network-services
应用,选择
metadata
,在
metadata
中,找到名为
network-services-metadata-dns-X
的容器,通过UI点击执行命令行后,可以进入该容器的命令行,然后执行如下命令。
cat /etc/rancher-dns/answers.json
八、在Ubuntu上运行容器时彼此间不能正常通信。
如果你的系统开启了
UFW
,请关闭
UFW
或更改
/etc/default/ufw
中的策略为:
DEFAULT_FORWARD_POLICY="ACCEPT"
四、负载均衡1、为什么我的负载均衡一直是
Initializing
状态?
负载均衡器自动对其启用健康检查。 如果负载均衡器处于初始化状态,则很可能主机之间无法进行跨主机通信。2、我如何查看负载均衡的配置?
如果要查看负载均衡器的配置,你需要用进入负载均衡器容器内部查找配置文件,你可以在页面选择负载均衡容器的执行命令行
cat /etc/haproxy/haproxy.cfg

该文件将提供负载均衡器的所有配置详细信息。3、我在哪能找到HAproxy的日志?
HAProxy的日志可以在负载均衡器容器内找到。 负载均衡器容器的
docker logs
只提供与负载均衡器相关的服务的详细信息,但不提供实际的HAProxy日志记录。
cat /var/log/haproxy
4、如何自定义负载均衡的配置
如图,在自定义配置中,按照global、defaults、frontend、backend的格式配置,五、健康检查1、为什么健康检查服务一直显示黄色初始化状态?
healthcheck不仅为其他服务提供健康检查,对系统组件(比如调度服务)也提供健康检查服务,healthcheck也对自己进行健康检查。多个healthcheck组件时,它们会相互交叉检查,只有健康检查通过后,容器状态才会变成绿色。 而healthcheck一直显示黄色初始化状态,说明一直没有通过健康检查。健康检查都是通过网络访问的,所以一定是网络通信异常导致。六、调度
为什么节点关机后,应用没有自动调度到其他节点上? Rancher上应用的调度,需要配合健康检查功能。当健康检查检查到应用不健康才会重新调度,如果没有配置健康检查, 即使关机,cattle也不会对应用做调度处理。七、CentOS1、为什么容器无法连接到网络?
如果你在主机上运行一个容器(如:
docker run -it ubuntu
)该容器不能与互联网或其他主机通信,那可能是遇到了网络问题。 Centos默认设置
/proc/sys/net/ipv4/ip_forward
0
,这从底层阻断了Docker所有网络。
解决办法:
vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

重启network服务
systemctl restart network

查看是否修改成功
sysctl net.ipv4.ip_forward

如果返回为
net.ipv4.ip_forward = 1
则表示成功了八、京东云1、京东云运行rancher server 出现以下问题

解决办法:
sudo sysctl -w net.ipv4.tcp_mtu_probing=1
九、阿里云主机运行Rancher-NFS驱动报如下错误
 

解决办法:注释掉 /etc/resolv.conf  中option 有关的行 收起阅读 »

Rancher Agent 1.6

1、Rancher Agent无法启动的原因是什么?1.1、添加 --NAME RANCHER-AGENT (老版本) 如果你从UI中编辑docker run .... rancher/agent...命令并添加--name rancher-agent选项,那...
继续阅读 »
1、Rancher Agent无法启动的原因是什么?1.1、添加 
--NAME RANCHER-AGENT
 (老版本)
如果你从UI中编辑
docker run .... rancher/agent...
命令并添加
--name rancher-agent
选项,那么Rancher Agent将启动失败。Rancher Agent在初始运行时会启动3个不同容器,一个是运行状态的,另外两个是停止状态的。Rancher Agent要成功连接到Rancher Server必须要有两个名字分别为
rancher-agent
rancher-agent-state
的容器,第三个容器是docker自动分配的名称,这个容器会被移除。1.2、使用一个克隆的虚拟机
如果你使用了克隆其他Agent主机的虚拟机并尝试注册它,它将不能工作。在rancher-agent容器的日志中会产生
ERROR: Please re-register this agent.
字样的日志。Rancher主机的唯一ID保存在
/var/lib/rancher/state
,因为新添加和虚拟机和被克隆的主机有相同的唯一ID,所以导致无法注册成功。
解决方法是在克隆的VM上运行以下命令:
rm -rf /var/lib/rancher/state; docker rm -fv rancher-agent; docker rm -fv rancher-agent-state

完成后可重新注册。2、我在哪里可以找到Rancher agent容器的详细日志?
从v1.6.0起,在rancher-agent容器上运行
docker logs
将提供agent相关的所有日志。3、主机是如何自动探测IP的?我该怎么去修改主机IP?如果主机IP改变了(因为重启),我该怎么办?
当Agent连接Rancher Server时,它会自动检测Agent的IP。有时,自动探测的IP不是你想要使用的IP,或者选择了docker网桥的IP,如. 
172.17.x.x
。 或者,你有一个已经注册的主机,当主机重启后获得了一个新的IP, 这个IP将会和Rancher UI中的主机IP不匹配。 你可以重新配置“CATTLE_AGENT_IP”设置,并将主机IP设置为你想要的。 当主机IP地址不正确时,容器将无法访问管理网络。要使主机和所有容器进入管理网络,只需编辑添加自定义主机的命令行,将新的IP指定为环境变量“CATTLE_AGENT_IP”。 在主机上运行编辑后的命令。 不要停止或删除主机上的现有的Rancher Agent容器!
sudo docker run -d -e CATTLE_AGENT_IP= --privileged \-v /var/run/docker.sock:/var/run/docker.sock \rancher/agent:v0.8.2 http://SERVER_IP:8080/v1/scripts/xxxx
4、错误提示如下:INFO: Attempting to connect to: http://192.168.xx.xx:8080/v1 ERROR: http://192.168.xx.xx:8080/v1 is not accessible (Failed to connect to 192.168.xx.xx port 8080: No route to host)
这个问题主要有以下几种情况:
1.RANCHER SERVER服务器防火墙没有开通8080端口;
2.云平台安全组没有放行8080端口;
3.Agent 服务器没有开启IP转发规则 [为什么我的容器无法连接到网络?]:{site.baseurl}}/rancher/faqs/ troubleshooting/1为什么我的容器无法连接到网络;
=1为开启,=0为关闭
/etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

4.主机hosts(
/etc/hosts
)文件没有配置;5、rancher下创建的服务容器,docker inspect 查看到Entrypoint和CMD后面有/.r/r字符,这个起什么作用?
./r 是基于weave wait编译出来的。 CNI网络下会添加/.r/r 这个参数,目的是:当容器启动时,其实网络设备还没设置好,这时候需要container 等待,不能启动真实业务,否则会失败。6、Host not registered yet. Sleeping 1 second and trying again.” Attempt=0 reportedUuid=752031dd-8c7e-4666-5f93-020d7f4da5d3
检查主机名和hosts配置, hosts中需要配置:
127.0.0.1 localhost
hostip hostname7、Rancher cattle , 为什么添加第二台主机后会把第一台主机替换掉?
在/var/lib/rancher/ 目录下保存了每个节点的注册配置信息。如果是克隆的主机,在/var/lib/rancher/ 目录有相同的内容,当新加主机的时候会识别为重新添加某台主机,这样之前添加的主机就会被替换掉。
解决办法:新加主机时,删除/var/lib/rancher/ 目录。 收起阅读 »

Rancher Server 1.6 常见问题

1、Docker 运行Rancher server 容器应该注意什么? 需要注意运行rancher server 容器时,不要使用host模式。程序中有些地方定义的是localhost或者127.0.0.1,如果容器网络设置为host,将会去访问宿主机资源,因...
继续阅读 »
1、Docker 运行Rancher server 容器应该注意什么?
需要注意运行rancher server 容器时,不要使用host模式。程序中有些地方定义的是localhost或者127.0.0.1,如果容器网络设置为host,将会去访问宿主机资源,因为宿主机并没有相应资源,rancher server 容器启动就出错。
PS:docker命令中,如果使用了 --network host参数,那后面再使用-p 8080:8080 就不会生效。
docker run -d -p 8080:8080 rancher/server:stable

此命令仅适用于单机测试环境,如果要生产使用Rancher server,请使用外置数据库(mysql)或者通过
-v /xxx/mysql/:/var/lib/mysql -v /xxx/log/:/var/log/mysql -v /xxx/cattle/:/var/lib/cattle

把数据挂载到宿主机上。如果用外置数据库,需提前对数据库做性能优化,以保证Rancher 运行的最佳性能。2、如何导出Rancher Server容器的内部数据库?
你可以通过简单的Docker命令从Rancher Server容器导出数据库。
docker exec  mysqldump cattle > dump.sql
3、我正在运行的Rancher是什么版本的?
Rancher的版本位于UI的页脚的左侧。 如果你点击版本号,将可以查看其他组件的详细版本。4、如果我没有在Rancher UI中删除主机而是直接删除会发生什么?
如果你的主机直接被删除,Rancher Server会一直显示该主机。主机会处于
Reconnecting
状态,然后转到
Disconnected
状态。 你也可以通过添加主机再次把此节点添加到RANCHER 集群,如果不在使用此节点,可以在UI中删除。
如果你有添加了健康检查功能的服务自动调度到状态
Disconnected
主机上,CATTLE会将这些服务重新调度到其他主机上。
PS:如果使用了标签调度,如果你有多台主机就有相同的调度标签,那么服务会调度到其他具有调度标签的节点上;如果选择了指定运行到某台主机上,那主机删除后你的应用将无法在其他主机上自动运行。
5、我如何在代理服务器后配置主机?
要在代理服务器后配置主机,你需要配置Docker的守护进程。详细说明参考在代理服务器后添加自定义主机。6、为什么同一主机在UI中多次出现?
宿主机上
var/lib/rancher/state
这个文件夹,这是Rancher用来存储用于标识主机的必要信息. .registration_token中保存了主机的验证信息,如果里面的信息发生变化,RANCHER会认为这是一台新主机, 在你执行添加主机后,UI上将会出现另外一台相同的主机,第一台主机接着处于失联状态。7、在哪能找到 Rancher Server 容器的详细日志?
运行
docker logs
可以查看在Rancher Server容器的基本日志。要获取更详细的日志,你可以进入到Rancher Server容器内部并查看日志文件。
进入 Rancher Server 容器内部
docker exec -it  bash

跳转到 Cattle 日志所在的目录下cd /var/lib/cattle/logs/
cat cattle-debug.log

在这个目录里面会出现
cattle-debug.log
cattle-error.log
。 如果你长时间使用此Rancher Server,你会发现我们每天都会创建一个新的日志文件。8、将Rancher Server的日志复制到主机上。
以下是将Rancher Server日志从容器复制到主机的命令。
docker cp :/var/lib/cattle/logs /local/path
9、如果Rancher Server的IP改变了会怎么样?
如果更改了Rancher Server的IP地址,你需要用新的IP重新注册主机。
在Rancher中,点击系统管理->系统设置更新 Rancher Server的主机注册地址。注意必须包括Rancher Server暴露的端口号。默认情况下我们建议按照安装手册中使用8080端口。
主机注册更新后,进入基础架构->添加主机->自定义。 添加主机的
docker run
命令将会更新。 使用更新的命令,在Rancher Server的所有环境中的所有主机上运行该命令。10、Rancher Server运行变得很慢,怎么去优化它?
很可能有一些任务由于某些原因而处于僵死状态,如果你能够用界面查看系统管理 -> 系统进程,你将可以看到
Running
中的内容,如果这些任务长时间运行(并且失败),则Rancher会最终使用太多的内存来跟踪任务。这使得Rancher Server处于了内存不足的状态。
为了使服务变为可响应状态,你需要添加更多内存。通常4GB的内存就够了。
你需要再次运行Rancher Server命令并且添加一个额外的选项
-e JAVA_OPTS="-Xmx4096m"
docker run -d -p 8080:8080 --restart=unless-stopped -e JAVA_OPTS="-Xmx4096m" rancher/server

根据MySQL数据库的设置方式的不同,你可能需要进行升级才能添加该选项。
如果是由于缺少内存而无法看到系统管理 -> 系统进程的话,那么在重启Rancher Server之后,已经有了更多的内存。你现在应该可以看到这个页面了,并可以开始对运行时间最长的进程进行故障分析。11、Rancher Server数据库数据增长太快.
Rancher Server会自动清理几个数据库表,以防止数据库增长太快。如果对你来说这些表没有被及时清理,请使用API来更新清理数据的时间间隔。
在默认情况下,产生在2周以前的
container_event
service_event
表中的数据则数据会被删除。在API中的设置是以秒为单位的(
1209600
)。API中的设置为
events.purge.after.seconds
.
默认情况下,
process_instance
表在1天前产生的数据将会被删除,在API中的设置是以秒为单位的(
86400
)。API中的设置为
process_instance.purge.after.seconds
.
为了更新API中的设置,你可以跳转到
http://:8080/v1/settings
页面, 搜索要更新的设置,点击
links -> self
跳转到你点击的链接去设置,点击侧面的“编辑”更改’值’。 请记住,值是以秒为单位。12、为什么Rancher Server升级失败导致数据库被锁定?
如果你刚开始运行Rancher并发现它被永久冻结,可能是liquibase数据库上锁了。在启动时,liquibase执行模式迁移。它的竞争条件可能会留下一个锁定条目,这将阻止后续的流程。
如果你刚刚升级,在Rancher Server日志中,MySQL数据库可能存在尚未释放的日志锁定。
....liquibase.exception.LockException: Could not acquire change log lock. Currently locked by 
释放数据库锁


注意: 请不要释放数据库锁,除非有相关日志锁的异常。如果是由于数据迁移导致升级时间过长,在这种情况下释放数据库锁,可能会使你遇到其他迁移问题。


如果你已根据升级文档创建了Rancher Server的数据容器,你需要
exec
rancher-data
容器中升级
DATABASECHANGELOGLOCK
表并移除锁,如果你没有创建数据容器,你用
exec
到包含有你数据库的容器中。
sudo docker exec -it  mysql

一旦进入到 Mysql 数据库, 你就要访问
cattle
数据库。
mysql> use cattle;

检查表中是否有锁mysql> select * from DATABASECHANGELOGLOCK;

更新移除容器的锁mysql> update DATABASECHANGELOGLOCK set LOCKED="", LOCKGRANTED=null, LOCKEDBY=null where ID=1;

检查锁已被删除mysql> select * from DATABASECHANGELOGLOCK;
+----+--------+-------------+----------+
| ID | LOCKED | LOCKGRANTED | LOCKEDBY |
+----+--------+-------------+----------+
|  1 |        | NULL        | NULL     |
+----+--------+-------------+----------+
1 row in set (0.00 sec)
13、管理员密码忘记了,我该如何重置管理员密码?
如果你的身份认证出现问题(例如管理员密码忘记),则可能无法访问Rancher。 要重新获得对Rancher的访问权限,你需要在数据库中关闭访问控制。 为此,你需要访问运行Rancher Server的主机。
ps:假设在重置访问控制之前有创建过其他用户,那么在认证方式没有变化的情况下,重置访问控制除了超级管理员(第一个被创建的管理员,ID为1a1),其他用户账号信息不会受影响。
  • 假设数据库为rancher内置数据库
docker exec -it  mysql

注意: 这个 

是具有Rancher数据库的容器。 如果你升级并创建了一个Rancher数据容器,则需要使用Rancher数据容器的ID而不是Rancher Server容器,rancher内置数据库默认密码为空。

  • 选择Cattle数据库。
mysql> use cattle;
  • 查看
    setting
    表。
mysql> select * from setting;
  • 更改
    api.security.enabled
    false
    ,并清除
    api.auth.provider.configured
    的值。
# 关闭访问控制mysql> update setting set value="false" where name="api.security.enabled";# 清除认证方式mysql> update setting set value="" where name="api.auth.provider.configured";
  • 确认更改在
    setting
    表中是否生效。
mysql> select * from setting;
  • 可能需要约1分钟才能在用户界面中关闭身份认证,然后你可以通过刷新网页来登陆没有访问控制的Rancher Server

关闭访问控制后,任何人都可以使用UI/API访问Rancher Server。

  • 刷新页面,在系统管理访问控制 重新开启访问控制。重新开启访问控制填写的管理员用户名将会替换原有的超级管理员用户名(ID为1a1 )。

14、Rancher Compose Executor和Go-Machine-Service不断重启.
在高可用集群中,如果你正在使用代理服务器后,如果rancher-compose-executor和go-machine-service不断重启,请确保你的代理使用正确的协议。15、我怎么样在代理服务器后运行Rancher Server?
请参照在HTTP代理后方启动Rancher Server.16、为什么在日志中看到Go-Machine-Service在不断重新启动? 我该怎么办?
Go-machine-service是一种通过websocket连接到Rancher API服务器的微服务。如果无法连接,则会重新启动并再次尝试。如果你运行的是单节点的Rancher Server,它将使用你为主机注册地址来连接到Rancher API服务。 检查从Rancher Sever容器内部是否可以访问主机注册地址。
docker exec -it  bash
在 Rancher-Server 容器内
curl -i /v1

你应该得到一个json响应。 如果认证开启,响应代码应为401。如果认证未打开,则响应代码应为200。 验证Rancher API Server 能够使用这些变量,通过登录go-machine-service容器并使用你提供给容器的参数进行
curl
命令来验证连接:
docker exec -it  bash
在go-machine-service 容器内
curl -i -u ':

你应该得到一个json响应和200个响应代码。 如果curl命令失败,那么在
go-machine-service
和Rancher API server之间存在连接问题。 如果curl命令没有失败,则问题可能是因为go-machine-service尝试建立websocket连接而不是普通的http连接。 如果在go-machine-service和Rancher API服务器之间有代理或负载平衡,请验证代理是否支持websocket连接。17、rancher catalog 多久同步一次
http://X.X.X.X/v1/settings/catalog.refresh.interval.seconds 默认300秒 可以修改 点setting会立即更新18、Rancher server cattle-debug.log 文件占满磁盘的问题
这个问题主要在Rancher server 1.6.11 之前(1.6.11 已经解决)
目前是按天来创建日志文件, 如果日志文件太多会进行日志分段,每一段默认100M, 默认情况下,系统保留5个分段。 通过打开http://rancher_url:8080/v2-beta/settings ,网页搜索 logback 可以看到以下内容,
{"id": "logback.max.file.size","type": "activeSetting","links": {"self": "…/v2-beta/settings/logback.max.file.size"},"actions": { },"baseType": "setting","name": "logback.max.file.size","activeValue": "100MB","inDb": false,"source": "Code Packaged Defaults","value": "100MB"},{"id": "logback.max.history","type": "activeSetting","links": {"self": "…/v2-beta/settings/logback.max.history"},"actions": { },"baseType": "setting","name": "logback.max.history","activeValue": "5","inDb": false,"source": "Code Packaged Defaults","value": "5"},

点击self 后的相应类型,比如”self”: “…/v2-beta/settings/logback.max.history” 可以做相应参数调整。
相应issue:https://github.com/rancher/rancher/issues/988719、Rancher server 如何免密更新Catalog
在配置 私有仓库地址的时候,添加用户名和密码
https://{username}:{password}@github.com/{repo}
20、修改server 日志等级
默认情况下,server日志记录等级为INFO,可以按照以下方法修改:
通过打开 http://rancher_url:8080/v2-beta/settings/auth.service.log.level ,

点击编辑 修改


点击show Request,再点击send Request.

收起阅读 »

Rancher-Ceph卷驱动部署

操作步骤Ceph 服务端安装 如果没有Ceph 服务器,可以通过容器运行一个Ceph 服务器 DEMO环境: docker run -d –net=host -v /etc/ceph:/etc/ceph -e MON_IP=172.18.0.11 -e CEP...
继续阅读 »
操作步骤Ceph 服务端安装
如果没有Ceph 服务器,可以通过容器运行一个Ceph 服务器 DEMO环境:
docker run -d –net=host -v /etc/ceph:/etc/ceph -e MON_IP=172.18.0.11 -e CEPH_PUBLIC_NETWORK=172.18.0.0/24 ceph/demo:tag-build-master-jewel-ubuntu-16.04
IP地址根据实际情况修改。
把Ceph 服务容器所在宿主机/etc/ceph路径下所有文件复制到Rancher 环境下所有节点的相同路径下。Rancher下Ceph应用安装应用商店添加进入 系统管理系统设置 添加一个名为Ceph的自定义商店

名称:Ceph
地址:https://github.com/niusmallnan/rancher-rbd-catalog.git
分支:masterCeph应用安装
进入应用商店,搜索RBD进行安装。安装完成后:
再进 系统架构存储 查看:
安装测试应用应用安装
新建一个名为myapp的空应用栈并添加服务:

红色线框为配置重点:
使用驱动卷插件与使用本地卷驱动有所区别, 使用本地卷驱动添加卷 时应该写 /AA/BB:/CC/DD,前后都要为路径; 使用驱动卷插件 时应该写为 A:/BB/CC 。 这个的A为一个卷名,不能是路径。
因为我们是Ceph存储,这里需要填卷驱动为:rancher-rbd 。部署好之后如图:

查看 基础架构存储
数据存储测试
在容器中向/root 目录下新建一个文件:


现在这个容器位于node2上, 接着把这个服务容器删除,删除后myapp应用栈为空:

接着,在空的应用栈中添加一个服务,并手动调度容器运行到其他节点上。
PS:新建的服务,参数中的卷名与卷映射路径必须相同,卷驱动也要相同。


服务运行成功,运行在node1上

查看 基础架构存储

进入容器的/root目录查看创建的文件

文件依然存在,说明文件不是存在本地,证明Ceph存储对接成功。 收起阅读 »

Rancher日志收集

引言 文档参考http://www.cnrancher.com/rancher-logging/ 。 一个完整的容器平台,容器日志收集也是很重要的一环。尤其在微服务架构大行其道状况下,程序的访问监控、健康状态检查很多都依赖日志信息的收集,由于Docker的存在...
继续阅读 »
引言
文档参考http://www.cnrancher.com/rancher-logging/ 。
一个完整的容器平台,容器日志收集也是很重要的一环。尤其在微服务架构大行其道状况下,程序的访问监控、健康状态检查很多都依赖日志信息的收集,由于Docker的存在,让容器平台中的日志收集和传统方式很多不一样,日志的输出和收集与以前也大有不同。本文就此探讨一下,Rancher平台内如何做容器日志收集。现状
纵览当前容器日志收集的各种解决方案,无非就是两种方式:一、直接采集Docker标准输出,通过Docker的日志驱动(log driver)可以发送到相应的收集程序中;二、非标准输出,延续传统的日志写入方式,容器内的服务将日志直接写到Log文件中,通过Docker volume映射形式,将日志文件映射到Host上,日志采集程序直接收集映射出来的Log文件。三、通Journald 收集二进制日志数据。
PS:
标准输出:即通过docker logs查看到的日志信息。Ubuntu OS下,这些信息默认保存在/var/lib/docker/containers路径下以容器ID为名的文件夹下并以容器ID为前缀的 -json.log 文件中。
非标准输出:根据Docker容器的特性,容器启动后必须有一个服务保持前台运行。如果一个容器要运行多个服务,那么按照启动顺序,前面的服务就必须得后台运行。 所以,默认情况下这些后台运行的服务产生的日志将无法以标准输出获取,产生的日志默认会存放于/var/log 目录下。
第一种方式足够简单,直接配置相关的日志驱动(Log driver)就可以,但是这种方式也有些劣势:
  1. 当主机的容器密度比较高的时候,对Docker Engine的压力比较大,毕竟容器标准输出都要通过Docker Engine来处理。
  2. 尽管原则上,我们希望遵循一容器部署一个服务的原则,但是有时候特殊情况不可避免容器内有多个业务服务,这时候很难做到所有服务都标准输出日志,这就需要用到传统的方式收集log日志。
  3. 虽然我们可以选择很多种Log Driver,但是有些Log Driver会破坏Docker原生的体验,比如,日志输出到其他日志服务器后,docker logs将无法看到容器日志。

基于以上考虑,一个完整的日志收集方案必须要同时满足标准输出收集和日志卷(非标准输出)收集或者通过journald 收集二进制日志数据 。当然完整的日志体系中,并不仅仅是采集,还需要有日志存储和UI展现。日志存储有很多种开源的实现,这个一般用户都会有自己钟情的选择。而UI展现更是各家有各家的需求,很难形成比较好的标准,一般都是通过定制化方式解决。所以此文主要展现的方案是日志采集方案,当然在存储和UI展现上会对接开源实现,没有特殊需求的情况下,也可以拥有一个完整的体验。

Rancher下的解决方案(json-file驱动)方案介绍
如上面图中所示,日志存储和UI展现可以直接使用ElasticSearch & Kibana。日志采集方面如之前所分析,需要对接两种采集模式(标准输出日志和非标准输出),本方案中,日志采集这部分采用Fluentd & Logging Helper的组合。Fluentd是很通用的日志采集程序,拥有优异的性能,相对Logstash来说同等压力下,其内存消耗要少很多。
为了要保证Dokcer和Rancher体验的完整性,之所以Docker Log Driver选择Json-file或者Journald,其原因:一、json-file和journald相对来说比较常用;二、这两种驱动下,docker logs依然可以有内容输出,保证了体验的完整性。实现流程
方案实现流程:Fluentd对接Json-file或者Journald驱动,获取标准输出日志数据或者二进制日志数据; Logging Helper可以理解为Fluentd的助手,它可以识别容器日志卷(非标准输出)映射的路径,并通知Fluentd进行采集。 Fluentd收集数据后,接着数据被传递并存储到ES,最后Kibana将ES中的数据直接展示出来。
下面开始说明,整个方案的部署过程。先用一张图来描述整体的部署结构,如下:
方案部署ElasticSearch & Kibana部署
通过web登录Rancher,进入应用商店,搜索ElasticSearch,推荐安装2.x版本。

点击查看详情, 进去后修改一下最后的Public port,默认为80端口, 改为其他端口避免端口冲突。
接着再进入应用商店搜索Kibana.

配置选项中,需选择Elasticsearch-clients

最后的Public port 根据实际情况进行修改,避免冲突。

服务正常启动后,可以通过这个端口访问Kibana web 页面。
Rancher logging服务部署目前Rancher logging不在官方仓库中,所以需要使用Rancher logging 需要添加自定义商店地址。 点击小图管理系统设置 进入, 点击添加应用商店,
名称:rancher -logging
地址: https://github.com/niusmallnan/rancher-logging-catalog.git
分支:master
最后点击保存,并返回应用商店。在应用商店中输入log进行搜索:

点击查看详情进去,进入配置页面:在本示例中,除了Elasticsearch source 如图配置外,其他保持默认:

以上部署完成之后,部署一些应用并产生一些访问日志,就可以在Kibana的界面中看到:

若要使用日志卷方式,则需要在Service启动的时候配置Volume,Volume name需要匹配之前设定的Volume Pattern:
收起阅读 »

webhook实现服务自动升级

webhook实现服务自动升级 大概阅读时间: 1 minute一、概述 前面的文章我们有讲述了如何通过Rancher-webhook实现Service/Host的弹性伸缩。今天我们再来演示一下如何通过Rancher-webhook对接三方的CI系统,实现微服...
继续阅读 »
webhook实现服务自动升级
大概阅读时间: 1 minute一、概述
前面的文章我们有讲述了如何通过Rancher-webhook实现Service/Host的弹性伸缩。今天我们再来演示一下如何通过Rancher-webhook对接三方的CI系统,实现微服务镜像的自动构建与服务的自动升级。
PS: CI即持续集成,包括但不限于自动编译、发布和测试、自动构建,我们这里说的CI系统仅限于自动构建这一步。
前面已经对webhook做了介绍,这里不再讲解.
本文主要基于阿里云的容器镜像服务,整个流程大致如下图所示:
二、基础准备
  1. 安装支持的docker (http://rancher.com/docs/rancher/v1.6/en/hosts/#supported-docker-versions);
  2. 安装Rancher v1.6.11 (https://hub.docker.com/u/rancher);
  3. 因为是对接云端CI,所以Rancher server 需要能被公网访问;
  4. 在GitHub创建一个test仓库并上传一个 Dkoerfile 文件,文件中只写 FROM busybox 一行代码;
  5. 去https://requestb.in/ 创建一个RequestBin,用于接收并查看阿里云webhook消息的内容;

三、测试服务准备
  1. 登录 Rancher WEB ,进入 应用\用户视图,新建名为app的测试应用栈;
  2. 给应用打上 test=true 的标签,其他参数保存默认;


PS:这个地方的标签,是为后面通过webhook升级时候调取服务用,需要保证标签的唯一性,不然相同标签的服务都会被升级
测试服务已经创建好,接下来创建一条webhook升级策略。四、添加webhook接收器
  1. 通过API进入webhook:
  2. 点击添加接收器,配置接收器:

名称:根据喜好填写;
类型:选择升级服务;
镜像仓库Webhook参数格式:目前可以选择阿里云或者docker hub
镜像标签:这个标签对应仓库中构建镜像的标签
服务选择器标签:这里填写创建服务时填写的标签;
其他参数保持默认

接收器创创建好后,可以点击右侧的触发地址把地址复制到其他地方备用。
五、创建阿里云测试镜像仓库
通过dev.aliyun.com登录阿里云容器服务,进入控制台,点击右上角创建镜像仓库

ps:选择与你服务器所在的区域,镜像可以走内网下载。
找到刚刚创建的仓库,点击管理

添加一条webhook,webhook URL为rancher-webhook中复制的地址。
六、测试
修改并提交test代码仓库中的Dockerfile文件 在阿里云容器服务中查看构建进度
七、查看阿里云webhook的信息内容
复制 https://requestb.in/ 中创建的RequestBin地址

再在阿里云云服务中添加一条webhook

再次修改并提交test代码仓库中的Dockerfile文件,并进入https://requestb.in 页面查看:

再对RAW BODY 格式化:
收起阅读 »

Rancher 2.0 Training Camp回顾

第1期:使用Rancher 2.0创建Kubernetes集群 课程大纲: 从零开始搭建一个简单的Rancher 2.0环境纳管现有的kubernetes集群在Rancher 2.0上通过RKE创建一个kubernetes集群使用Aliyun驱动创建一个kub...
继续阅读 »
第1期:使用Rancher 2.0创建Kubernetes集群
课程大纲:
  1. 从零开始搭建一个简单的Rancher 2.0环境
  2. 纳管现有的kubernetes集群
  3. 在Rancher 2.0上通过RKE创建一个kubernetes集群
  4. 使用Aliyun驱动创建一个kubernetes集群

回放地址:http://e.vhall.com/431874021
 
 
第2期:Rancher 2.0应用部署分享
课程大纲:
  1. Workload介绍
  2. Load Balancing 介绍
  3. Services Discovery 介绍
  4. Volume 介绍
  5. 如何部署一个简单应用
  6. 如何部署一个高可用应用
  7. 如何在Rancher上使用Yaml文件部署应用

回放地址:http://e.vhall.com/209459630
 
第3期:Kubernetes上的监控告警
课程大纲:
 
  1. 如何在2.0上对Kubernetes Cluster设置告警规则
  2. 如何在2.0上对Workload设置告警规则
  3. 如何集成Prometheus、Grafana等监控组件
  4. 如何使用prometheus的Kubernetes service discovery
  5. 如何给alert manager 配置告警规则

回放地址:http://e.vhall.com/163710123
 
 
第4期:使用Rancher 2.0进行多集群角色管理
课程大纲:
  1. 介绍kubernetes认证模型和RBAC授权模型
  2. Rancher 2.0多集群统一认证授权的实现原理
  3. 如何针对不同层级做角色授权管理

回放地址:https://e.vhall.com/829906699 收起阅读 »