本文共 4445 字,大约阅读时间需要 14 分钟。
下载和分发 docker 二进制文件
cd /opt/k8s/workwget https://download.docker.com/linux/static/stable/x86_64/docker-18.09.6.tgztar -xvf docker-18.09.6.tgz
分发二进制文件到所有 worker 节点
cd /opt/k8s/workexport node_ip=192.168.0.114scp docker/* root@${node_ip}:/opt/k8s/bin/ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
创建docker服务启动文件
cd /opt/k8s/workcat > docker.service <<"EOF"[Unit]Description=Docker Application Container EngineDocumentation=http://docs.docker.io[Service]WorkingDirectory=/data/k8s/dockerEnvironment="PATH=/opt/k8s/bin:/bin:/sbin:/usr/bin:/usr/sbin"EnvironmentFile=-/run/flannel/dockerExecStart=/opt/k8s/bin/dockerd $DOCKER_NETWORK_OPTIONSExecReload=/bin/kill -s HUP $MAINPIDRestart=on-failureRestartSec=5LimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityDelegate=yesKillMode=process[Install]WantedBy=multi-user.targetEOF
EOF 前后有双引号,这样 bash 不会替换文档中的变量,如 $DOCKER_NETWORK_OPTIONS (这些环境变量是 systemd 负责替换的。);
dockerd 运行时会调用其它 docker 命令,如 docker-proxy,所以需要将 docker 命令所在的目录加到 PATH 环境变量中;
flanneld 启动时将网络配置写入 /run/flannel/docker 文件中,dockerd 启动前读取该文件中的环境变量 DOCKER_NETWORK_OPTIONS ,然后设置 docker0 网桥网段;
docker 从 1.13 版本开始,可能将 iptables FORWARD chain的默认策略设置为DROP,从而导致 ping 其它 Node 上的 Pod IP 失败,遇到这种情况时,需要手动设置策略为 ACCEPT:
export node_ip=192.168.0.114ssh root@${node_ip} "/sbin/iptables -P FORWARD ACCEPT"
分发 docker.service 文件到所有 worker 机器:
cd /opt/k8s/workexport node_ip=192.168.0.114scp docker.service root@${node_ip}:/etc/systemd/system/
配置和分发 docker 配置文件
使用国内的仓库镜像服务器以加快 pull image 的速度,同时增加下载的并发数 (需要重启 dockerd 生效):
cd /opt/k8s/workcat > docker-daemon.json <
分发 docker 配置文件到所有 worker 节点:
cd /opt/k8s/workexport node_ip=192.168.0.114ssh root@${node_ip} "mkdir -p /etc/docker/ /data/k8s/docker/data"scp docker-daemon.json root@${node_ip}:/etc/docker/daemon.json
启动 docker 服务
export node_ip=192.168.0.114ssh root@${node_ip} "systemctl daemon-reload && systemctl enable docker && systemctl restart docker"
检查服务运行状态
export node_ip=192.168.0.114ssh root@${node_ip} "systemctl status docker|grep Active"
确保状态为 active (running),否则查看日志,确认原因
如果出现异常,通过如下命令查看
journalctl -u docker
检查 docker0 网桥
export node_ip=192.168.0.114ssh root@${node_ip} "/sbin/ip addr show flannel.1 && /sbin/ip addr show docker0"
确认各 worker 节点的 docker0 网桥和 flannel.1 接口的 IP 处于同一个网段中
输出内容
export node_ip=192.168.0.114root@master:/opt/k8s/work# ssh root@${node_ip} "/sbin/ip addr show flannel.1 && /sbin/ip addr show docker0"4: flannel.1:mtu 1450 qdisc noqueue state UNKNOWN group default link/ether f2:fc:0f:7e:98:e4 brd ff:ff:ff:ff:ff:ff inet 172.30.78.0/32 scope global flannel.1 valid_lft forever preferred_lft forever inet6 fe80::f0fc:fff:fe7e:98e4/64 scope link valid_lft forever preferred_lft forever5: docker0: mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:fd:1f:8f:d8 brd ff:ff:ff:ff:ff:ff inet 172.30.78.1/24 brd 172.30.78.255 scope global docker0 valid_lft forever preferred_lft forever
注意: 如果您的服务安装顺序不对或者机器环境比较复杂, docker服务早于flanneld服务安装,此时 worker 节点的 docker0 网桥和 flannel.1 接口的 IP可能不会同处同一个网段下,这个时候请先停止docker服务, 手工删除docker0网卡,重新启动docker服务后即可修复
systemctl stop dockerip link delete docker0systemctl start docker
查看 docker 的状态信息
root@slave:/opt/k8s/work# docker infoContainers: 0 Running: 0 Paused: 0 Stopped: 0Images: 0Server Version: 18.09.6Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30init version: fec3683Security Options: apparmor seccomp Profile: defaultKernel Version: 5.0.0-23-genericOperating System: Ubuntu 18.04.3 LTSOSType: linuxArchitecture: x86_64CPUs: 4Total Memory: 3.741GiBName: slaveID: IDMG:7A6F:UNTP:IWVM:ZBK5:VHJ4:STC5:UXZX:HQT6:UUNE:YDOC:I27LDocker Root Dir: /data/k8s/docker/dataDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries: 127.0.0.0/8Registry Mirrors: https://docker.mirrors.ustc.edu.cn/ https://hub-mirror.c.163.com/Live Restore Enabled: trueProduct License: Community EngineWARNING: No swap limit support
转载地址:http://cyuki.baihongyu.com/