K8S之FAQ
  it2nV7RK7uw1 2023年11月28日 74 0

Docker 常见问题

1、镜像下载慢,如何提高下载速度?

touch /etc/docker/daemon.json
 cat >> /etc/docker/daemon.json <<EOF
 {
 "insecure-registries": ["0.0.0.0/0"],
 "registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com"]
 }
 EOF
 systemctl daemon-reload && systemctl restart docker
PS:0.0.0.0/0 表示信任所有非https地址的镜像仓库,对于内网测试,这样配置很方便。对于线上生产环境,
 为了安全请不要这样配置

2、如何配置Docker后端存储驱动?

以overlay为例

touch /etc/docker/daemon.json
 cat >> /etc/docker/daemon.json <<EOF
 {
 "storage-driver": "overlay"
 }
 EOF
 systemctl daemon-reload && systemctl restart docker

3、docker info 出现 WARNING

WARNING: No swap limit support
 WARNING: No kernel memory limit support
 WARNING: No oom kill disable support

编辑/etc/default/grub 文件,并设置:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

接着

SUSE

grub2-mkconfig -o /boot/grub2/grub.cfg

Cetos

Update grub

Ubuntu

update-grub

4、我怎么通过rancher让docker里的程序代理上网呢?

启动容器的时候添加:

-e http_proxy=  -e https_proxy=

K8S之FAQ_Server



5、Docker Error: Unable to remove filesystem

Some container-based utilities, such as Google cAdvisor, mount Docker system directories, such as /var/lib/docker/, into a container. For instance, the documentation for cadvisor instructs you to run the cadvisor container as follows:

$ sudo docker run \
   --volume=/:/rootfs:ro \
   --volume=/var/run:/var/run:rw \
   --volume=/sys:/sys:ro \
   --volume=/var/lib/docker/:/var/lib/docker:ro \
   --publish=8080:8080 \
   --detach=true \
   --name=cadvisor \
   google/cadvisor:latest

When you bind-mount /var/lib/docker/, this effectively mounts all resources of all other running containers as filesystems within the container which mounts /var/lib/docker/. When you attempt to remove any of these containers, the removal attempt may fail with an error like the following:

Error: Unable to remove filesystem for
 74bef250361c7817bee19349c93139621b272bc8f654ae112dd4eb9652af9515:
 remove /var/lib/docker/containers/74bef250361c7817bee19349c93139621b272bc8f654ae112dd4eb9652af9515/shm:
 Device or resource busy

The problem occurs if the container which bind-mounts /var/lib/docker/ uses statfsor fstatfs on filesystem handles within /var/lib/docker/ and does not close them.

Typically, we would advise against bind-mounting /var/lib/docker in this way. However, cAdvisor requires this bind-mount for core functionality.

If you are unsure which process is causing the path mentioned in the error to be busy and preventing it from being removed, you can use the lsof command to find its process. For instance, for the error above:

sudo lsof /var/lib/docker/containers/74bef250361c7817bee19349c93139621b272bc8f65

Kubernetes常见问题

1、部署Kubernetes时候出现以下有关cgroup的问题

Failed to get system container stats for "/system.slice/kubelet.service": 
failed to get cgroup stats for "/system.slice/kubelet.service": failed to 
get container info for "/system.slice/kubelet.service": unknown container 
"/system.slice/kubelet.service"
Expected state running but got error: Error response from daemon: 
oci runtime error: container_linux.go:247: starting container 
process caused "process_linux.go:258: applying cgroup configuration 
for process caused \"mountpoint for devices not found\""

以上问题为Kubernetes版本与docker 版本不兼容导致cgroup功能失效

2、Kubernetes err: [nodes \“iZ2ze3tphuqvc7o5nj38t8Z\” not found]”

Rancher-Kubernetes中,节点之间通信需要通过hostname,如果没有内部DNS服务器,那么需要为每台节点配置hosts文件。

配置示例:假如某个节点主机名为node1,ip 地址为192.168.1.100

cat /etc/hosts<<EOF
127.0.0.1 localhost
192.168.1.100 node1
EOF

3、如何验证您的主机注册地址设置是否正确?

如果您正面临Rancher Agent和Rancher Server的连接问题,请检查主机设置。当您第一次尝试在UI中添加主机时,您需要设置主机注册的URL,该URL用于建立从主机到Rancher Server的连接。这个URL必须可以从您的主机访问到。为了验证它,您需要登录到主机并执行curl命令:

curl -i <Host Registration URL you set in UI>/v1

您应该得到一个json响应。 如果开启了认证,响应代码应为401。如果认证未打开,则响应代码应为200。

注意: 普通的HTTP请求和websocket连接(ws://)都将被使用。 如果此URL指向代理或负载平衡器,请确保它们可以支持Websocket连接。

Kuberbetes UI 显示Service unavailable

很多同学正常部署Kuberbetes环境后无法进入Dashboard,基础设施应用栈均无报错。但通过查看 基础架构|容器 发现并没有Dashboard相关的容器.因为Kuberbetes在拉起相关服务(如Dashboard、内置DNS等服务)是通过应用商店里面的YML文件来定义的,YML文件中定义了相关的镜像名和版本。

而Rancher部署的Kuberbetes应用栈属于Kuberbetes的基础框架,相关的镜像通过dockerhub/rancher 仓库拉取。默认Rancher-catalog Kuberbetes YML中服务镜像都是从谷歌仓库拉取,在没有科学上网的情况下,国内环境几乎无法成功拉取镜像。

为了解决这一问题,优化中国区用户的使用体验,在RANCHER v1.6.11之前的版本,我们修改了 http://git.oschina.net/rancher/rancher-catalog 仓库中的YML文件,将相关的镜像也同步到国内仓库,通过替换默认商店地址来实现加速部署;在RANCHER v1.6.11及之后的版本,不用替换商店catalog地址,直接通过在模板中定义仓库地址和命名空间就行实现加速;在后期的版本种,Kuberbetes需要的镜像都会同步到docker hub中。

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-agentrancher-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=<NEW_HOST_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 hostname

7、Rancher cattle , 为什么添加第二台主机后会把第一台主机替换掉?

在/var/lib/rancher/ 目录下保存了每个节点的注册配置信息。如果是克隆的主机,在/var/lib/rancher/ 目录有相同的内容,当新加主机的时候会识别为重新添加某台主机,这样之前添加的主机就会被替换掉。

解决办法:新加主机时,删除/var/lib/rancher/ 目录。

Rancher Server常见问题

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 <CONTAINER_ID_OF_SERVER> 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 <container_id> bash
  
 跳转到 Cattle 日志所在的目录下
 cd /var/lib/cattle/logs/
 cat cattle-debug.log

在这个目录里面会出现cattle-debug.logcattle-error.log。 如果您长时间使用此Rancher Server,您会发现我们每天都会创建一个新的日志文件。

8、将Rancher Server的日志复制到主机上。

以下是将Rancher Server日志从容器复制到主机的命令。

docker cp <container_id>:/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_eventservice_event表中的数据则数据会被删除。在API中的设置是以秒为单位的(1209600)。API中的设置为events.purge.after.seconds.

默认情况下,process_instance表在1天前产生的数据将会被删除,在API中的设置是以秒为单位的(86400)。API中的设置为process_instance.purge.after.seconds.

为了更新API中的设置,您可以跳转到http://<rancher-server-ip>: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 <container_ID>

释放数据库锁

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

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

sudo docker exec -it <container_id> 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 <rancher_server_container_ID> mysql

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

  • 选择Cattle数据库。
mysql> use cattle;
  • 查看setting表。
mysql> select * from setting;
  • 更改api.security.enabledfalse,并清除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 <rancher-server_container_id> bash
 在 Rancher-Server 容器内
 curl -i <Host Registration URL you set in UI>/v1

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

docker exec -it <go-machine-service_container_id> bash
 在go-machine-service 容器内
 curl -i -u '<value of CATTLE_ACCESS_KEY>:<value of CATTLE_SECRET_KEY>' <value of CATTLE_URL>

您应该得到一个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/9887

19、Rancher server 如何免密更新Catalog

在配置私有仓库地址的时候,添加用户名和密码

https://{username}:{password}@github.com/{repo}

20、修改server 日志等级

默认情况下,server日志记录等级为INFO,可以按照以下方法修改:

通过打开 http://rancher_url:8080/v2-beta/settings/auth.service.log.level ,

K8S之FAQ_IP_02

点击编辑 修改

K8S之FAQ_docker_03

K8S之FAQ_Server_04

点击show Request,再点击send Request.

K8S之FAQ_docker_05

21、禁止新用户不创建default 环境

默认情况下,新用户第一次登录会创建default环境,通过设置API可以禁止此设置:

通过打开 http://rancher_url:8080/v2-beta/settings/project.create.default

K8S之FAQ_Server_06

修改value值为false

K8S之FAQ_Server_07

常见故障排查与修复方法

一、服务/容器

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=<HOST_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

三、DNS

1、如何查看我的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也不会对应用做调度处理。

七、CentOS

1、为什么容器无法连接到网络?

如果您在主机上运行一个容器(如:docker run -it ubuntu)该容器不能与互联网或其他主机通信,那可能是遇到了网络问题。Centos默认设置/proc/sys/net/ipv4/ip_forward0,这从底层阻断了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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月28日 0

暂无评论

推荐阅读
  wwLZeziuqjLR   2023年12月11日   30   0   0 Dockercentos
  MCWYWqSAMsot   2023年12月11日   31   0   0 Docker
  DnoStTHsc0vp   2023年12月11日   23   0   0 Docker
  wwLZeziuqjLR   2023年12月08日   97   0   0 Dockercentosbash
  Yoru5qB4TSKM   2023年12月10日   33   0   0 服务器重启IP
  aYmIB3fiUdn9   2023年12月08日   48   0   0 客户端IPNATlvs