FAQ宝典之Rancher Server、K8s、Docker

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

Rancher FAQ宝典系列第二弹,Rancher Agent、Kubernetes、Docker相关的常见问题,本文一网打尽。

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

这个问题主要有以下几种情况:

  • RANCHER SERVER服务器防火墙没有开通8080端口;
  • 云平台安全组没有放行8080端口;
  • Agent 服务器没有开启IP转发规则 [为什么我的容器无法连接到网络?]:{site.baseurl}}/rancher/faqs/ troubleshooting/1为什么我的容器无法连接到网络;

=1为开启,=0为关闭

/etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
  • 主机hosts(/etc/hosts)文件没有配置;

5、rancher下创建的服务容器,docker inspect 查看到Entrypoint和CMD后面有/.r/r字符,这个起什么作用?

./r 是基于weave wait编译出来的。CNI网络下会添加/.r/r 这个参数,目的是:当容器启动时,其实网络设备还没设置好,这时候需要container 等待,不能启动真实业务,否则会失败。

6、添加hosts后 server上没有列出,agent报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

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连接。

4、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中。

安装方法见:《原生加速中国区Kubernetes安装》《Rancher-k8s加速安装文档》

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=

FAQ宝典之Rancher Server、K8s、Docker

5、Docker错误:无法删除文件系统

一些基于容器的实用程序(例如Google cAdvisor)会将Docker系统目录(如/ var / lib / docker /)挂载到容器中。例如,cadvisor的文档指示您运行cadvisor容器,如下所示:

$ 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

当挂载/var/lib/docker/时,这会有效地将所有其他正在运行的容器的所有资源作为文件系统安装在挂载/var/lib/docker/的容器中。当您尝试删除这些容器中的任何一个时,删除尝试可能会失败,出现如下所示的错误:

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

如果将/var/lib/docker/在/var/lib/docker/中的文件系统句柄上使用statfsor或fstatfs并且不关闭它们的容器,就会发生此问题。

通常,我们会以这种方式建议禁止挂载/var/lib/docker。然而,cAdvisor的核心功能需要这个绑定挂载。

如果您不确定是哪个进程导致错误中提到的路径繁忙并阻止它被删除,则可以使用lsof命令查找其进程。例如,对于上面的错误:

sudo lsof /var/lib/docker/containers/74bef250361c7817bee19349c93139621b272bc8f65          本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/2050097

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
299 78
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
173 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
193 11
|
2月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
229 19
|
3月前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
103 14
|
3月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
3月前
|
Kubernetes 开发者 Docker
Docker与Kubernetes的协同工作
Docker与Kubernetes的协同工作
|
3月前
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序
|
Kubernetes 负载均衡 Linux
Docker从入门到掉坑(四) 国内搭建k8s避坑指南
Docker从入门到掉坑(四) 国内搭建k8s避坑指南
481 0
|
存储 JSON Kubernetes
Docker从入门到掉坑(五):继续挖一挖 k8s
Docker从入门到掉坑(五):继续挖一挖 k8s
Docker从入门到掉坑(五):继续挖一挖 k8s