k8s是容器编排系统,需要docker的支持,今天分享一波docker的安装与调优过程。
不了解docker的童鞋可以参考博文,本篇文章的主题不在讲解docker原理~
想要解锁更多新姿势?请访问https://tengshe789.github.io/🧐🧐🧐🧐🧐🧐🧐🧐🧐
docker 安装
centos7下
更新 yum 源
1 | yum -y update |
修改系统源
1 | sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak |
安装 netstat(用于查看当前机器端口占用情况)
1 | #安装 |
添加 yum 源
1 | cat >/etc/yum.repos.d/docker.repo <<-EOF |
安装 docker
1 | yum install -y docker-selinux |
1 | yum install -y docker-engine |
配置docker
配置所有ip的数据包转发
1
2
3
4vi /lib/systemd/system/docker.service
#找到ExecStart=xxx,在这行下面加入一行,内容如下:(k8s的网络需要)
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT启动服务
1
2
3
4
5#设置 docker 开机服务启动
systemctl enable docker.service
#立即启动 docker 服务
$ systemctl start docker.service
docker ce
因为CentOS的安全限制,通过RKE安装K8S集群时候无法使用
root
账户。所以,建议CentOS
用户使用非root
用户来运行docker,不管是RKE
还是custom
安装k8s,详情查看无法为主机配置SSH隧道。
1 | # 添加用户(可选) |
Ubuntu下
卸载旧版本(如果有的话)
1 | $ apt-get remove docker docker-engine docker.io |
更新apt-get源
1 | $ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" |
修改系统源
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak |
1 | $ apt-get update |
安装apt的https支持包并添加gpg秘钥
1 | $ apt-get install \ |
安装docker-ce
安装最新的稳定版
1
$ apt-get install -y docker-ce
安装指定版本
1
2
3
4
5#获取版本列表
$ apt-cache madison docker-ce
#指定版本安装(比如版本是17.09.1~ce-0~ubuntu)
$ apt-get install -y docker-ce=17.09.1~ce-0~ubuntu接受所有ip的数据包转发
1
2
3
4$ vi /lib/systemd/system/docker.service
#找到ExecStart=xxx,在这行上面加入一行,内容如下:(k8s的网络需要)
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT启动服务
1
2$ systemctl daemon-reload
$ service docker start
遇到问题可以参考:[官方教程][1]
部署k8s前系统的设置
关闭、禁用防火墙(让所有机器之间都可以通过任意端口建立连接)
1 | $ ufw disable |
设置系统参数 - 允许路由转发,不对bridge的数据进行处理
1 | #写入配置文件 |
配置host文件
1 | #配置host,使每个Node都可以通过名字解析到ip地址 |
调优
对于通过systemd来管理服务的系统(比如CentOS7.X、Ubuntu16.X), Docker有两处可以配置参数: 一个是docker.service
服务配置文件,一个是Docker daemon配置文件daemon.json。
docker.service
对于CentOS系统,
docker.service
默认位于/usr/lib/systemd/system/docker.service
;对于Ubuntu系统,docker.service
默认位于/lib/systemd/system/docker.service
daemon.json
daemon.json默认位于
/etc/docker/daemon.json
,如果没有可手动创建,基于systemd管理的系统都是相同的路径。通过修改daemon.json
来改过Docker配置,也是Docker官方推荐的方法。
以下说明均基于systemd,并通过
/etc/docker/daemon.json
来修改配置。
调优与配置
配置镜像下载和上传并发数
从Docker1.12开始,支持自定义下载和上传镜像的并发数,默认值上传为3个并发,下载为5个并发。通过添加”max-concurrent-downloads”和”max-concurrent-uploads”参数对其修改:
1 | "max-concurrent-downloads": 3, |
配置镜像加速地址
Rancher从v1.6.15开始到v2.x.x,Rancher系统相关的所有镜像(包括1.6.x上的K8S镜像)都托管在Dockerhub仓库。Dockerhub节点在国外,国内直接拉取镜像会有些缓慢。为了加速镜像的下载,可以给Docker配置国内的镜像地址。
编辑/etc/docker/daemon.json
加入以下内容
1 | { |
可以设置多个
registry-mirrors
地址,以数组形式书写,地址需要添加协议头(https或者http)。
配置insecure-registries
私有仓库
Docker默认只信任TLS加密的仓库地址(https),所有非https仓库默认无法登陆也无法拉取镜像。insecure-registries
字面意思为不安全的仓库,通过添加这个参数对非https仓库进行授信。可以设置多个insecure-registries
地址,以数组形式书写,地址不能添加协议头(http)。
编辑/etc/docker/daemon.json
加入以下内容:
1 | { |
配置Docker存储驱动
OverlayFS是一个新一代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:旧版的overlay
,新版的overlay2
(更稳定)。
先决条件:
overlay2
: Linux内核版本4.0或更高版本,或使用内核版本3.10.0-514+的RHEL或CentOS。overlay
: 主机Linux内核版本3.18+- 支持的磁盘文件系统
- ext4(仅限RHEL 7.1)
- xfs(RHEL7.2及更高版本),需要启用d_type=true。 >具体详情参考 Docker Use the OverlayFS storage driver
编辑/etc/docker/daemon.json
加入以下内容
1 | { |
配置日志驱动
容器在运行时会产生大量日志文件,很容易占满磁盘空间。通过配置日志驱动来限制文件大小与文件的数量。 >限制单个日志文件为100M
,最多产生3
个日志文件
1 | { |
常见问题
Ubuntu\Debian系统 ,docker info提示WARNING: No swap limit support
Ubuntu\Debian系统下,默认cgroups未开启swap account功能,这样会导致设置容器内存或者swap资源限制不生效。可以通过以下命令解决:
1 | sudo sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1 /g' /etc/default/grub |
注意通过以上命令可自动配置参数,如果
/etc/default/grub
非默认配置,需根据实际参数做调整。提示以上配置完成后,建议重启一次主机。
调优配置总结
1、Docker镜像下载最大并发数
通过配置镜像上传\下载并发数max-concurrent-downloads,max-concurrent-uploads
,缩短镜像上传\下载的时间。
2、配置镜像加速地址
通过配置镜像加速地址registry-mirrors
,可以很大程度提高镜像下载速度。
3、配置Docker存储驱动
OverlayFS是一个新一代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:旧版的overlay,新版的overlay2(更稳定)。
4、配置日志文件大小
容器中会产生大量日志文件,很容器占满磁盘空间。通过设置日志文件大小,可以有效控制日志文件对磁盘的占用量。例如:
5、开启WARNING: No swap limit support,WARNING: No memory limit support
支持
对于Ubuntu\Debian系统,执行docker info
命令时能看到警告WARNING: No swap limit support或者WARNING: No memory limit support
。因为Ubuntu\Debian系统默认关闭了swap account或者
功能,这样会导致设置容器内存或者swap资源限制不生效,解决方法。
最终命令
输入如下:
1 | touch /etc/docker/daemon.json |
完
参考资料
https://www.cnrancher.com/docs/rancher/v2.x/cn/overview/quick-start-guide/
结束
全片结束,觉得我写的不错?想要了解更多精彩新姿势?赶快打开我的👉个人博客 👈吧!
谢谢你那么可爱,还一直关注着我~❤😝