博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
07-1.部署 docker 组件
阅读量:6082 次
发布时间:2019-06-20

本文共 4068 字,大约阅读时间需要 13 分钟。

07-1.部署 docker 组件

docker 是容器的运行环境,管理它的生命周期。kubelet 通过 Container Runtime Interface (CRI) 与 docker 进行交互。

安装依赖包

参考

下载和分发 docker 二进制文件

到 页面下载最新发布包:

wget https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz tar -xvf docker-18.03.1-ce.tgz

分发二进制文件到所有 worker 节点:

source /opt/k8s/bin/environment.shfor node_ip in ${NODE_IPS[@]}  do echo ">>> ${node_ip}" scp docker/docker* k8s@${node_ip}:/opt/k8s/bin/ ssh k8s@${node_ip} "chmod +x /opt/k8s/bin/*" done

创建和分发 systemd unit 文件

cat > docker.service <<"EOF"[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.io[Service]Environment="PATH=/opt/k8s/bin:/bin:/sbin:/usr/bin:/usr/sbin"EnvironmentFile=-/run/flannel/dockerExecStart=/opt/k8s/bin/dockerd --log-level=error $DOCKER_NETWORK_OPTIONS ExecReload=/bin/kill -s HUP $MAINPID Restart=on-failure RestartSec=5 LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target EOF
  • EOF 前后有双引号,这样 bash 不会替换文档中的变量,如 $DOCKER_NETWORK_OPTIONS;
  • dockerd 运行时会调用其它 docker 命令,如 docker-proxy,所以需要将 docker 命令所在的目录加到 PATH 环境变量中;
  • flanneld 启动时将网络配置写入 /run/flannel/docker 文件中,dockerd 启动前读取该文件中的环境变量 DOCKER_NETWORK_OPTIONS ,然后设置 docker0 网桥网段;
  • 如果指定了多个 EnvironmentFile 选项,则必须将 /run/flannel/docker 放在最后(确保 docker0 使用 flanneld 生成的 bip 参数);
  • docker 需要以 root 用于运行;
  • docker 从 1.13 版本开始,可能将 iptables FORWARD chain的默认策略设置为DROP,从而导致 ping 其它 Node 上的 Pod IP 失败,遇到这种情况时,需要手动设置策略为 ACCEPT

    $ sudo iptables -P FORWARD ACCEPT

    并且把以下命令写入 /etc/rc.local 文件中,防止节点重启iptables FORWARD chain的默认策略又还原为DROP

    /sbin/iptables -P FORWARD ACCEPT

完整 unit 见

分发 systemd unit 文件到所有 worker 机器:

source /opt/k8s/bin/environment.shfor node_ip in ${NODE_IPS[@]}  do echo ">>> ${node_ip}" scp docker.service root@${node_ip}:/etc/systemd/system/ done

配置和分发 docker 配置文件

使用国内的仓库镜像服务器以加快 pull image 的速度,同时增加下载的并发数 (需要重启 dockerd 生效):

cat > docker-daemon.json <

分发 docker 配置文件到所有 work 节点:

source /opt/k8s/bin/environment.shfor node_ip in ${NODE_IPS[@]}  do echo ">>> ${node_ip}" ssh root@${node_ip} "mkdir -p /etc/docker/" scp docker-daemon.json root@${node_ip}:/etc/docker/daemon.json done

启动 docker 服务

source /opt/k8s/bin/environment.shfor node_ip in ${NODE_IPS[@]}  do echo ">>> ${node_ip}" ssh root@${node_ip} "systemctl stop firewalld && systemctl disable firewalld" ssh root@${node_ip} "/usr/sbin/iptables -F && /usr/sbin/iptables -X && /usr/sbin/iptables -F -t nat && /usr/sbin/iptables -X -t nat" ssh root@${node_ip} "/usr/sbin/iptables -P FORWARD ACCEPT" ssh root@${node_ip} "systemctl daemon-reload && systemctl enable docker && systemctl restart docker" ssh root@${node_ip} 'for intf in /sys/devices/virtual/net/docker0/brif/*; do echo 1 > $intf/hairpin_mode; done' ssh root@${node_ip} "sudo sysctl -p /etc/sysctl.d/kubernetes.conf" done
  • 关闭 firewalld(centos7)/ufw(ubuntu16.04),否则可能会重复创建 iptables 规则;
  • 清理旧的 iptables rules 和 chains 规则;
  • 开启 docker0 网桥下虚拟网卡的 hairpin 模式;

检查服务运行状态

source /opt/k8s/bin/environment.shfor node_ip in ${NODE_IPS[@]}  do echo ">>> ${node_ip}" ssh k8s@${node_ip} "systemctl status docker|grep Active" done

确保状态为 active (running),否则查看日志,确认原因:

$ journalctl -u docker

检查 docker0 网桥

source /opt/k8s/bin/environment.shfor node_ip in ${NODE_IPS[@]}  do echo ">>> ${node_ip}" ssh k8s@${node_ip} "/usr/sbin/ip addr show flannel.1 && /usr/sbin/ip addr show docker0" done

确认各 work 节点的 docker0 网桥和 flannel.1 接口的 IP 处于同一个网段中(如下 172.30.39.0 和 172.30.39.1):

3: flannel.1: 
mtu 1450 qdisc noqueue state UNKNOWN group default link/ether ce:2f:d6:53:e5:f3 brd ff:ff:ff:ff:ff:ff inet 172.30.39.0/32 scope global flannel.1 valid_lft forever preferred_lft forever inet6 fe80::cc2f:d6ff:fe53:e5f3/64 scope link valid_lft forever preferred_lft forever 4: docker0:
mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:bf:65:16:5c brd ff:ff:ff:ff:ff:ff inet 172.30.39.1/24 brd 172.30.39.255 scope global docker0 valid_lft forever preferred_lft forever
链接:https://www.orchome.com/1198
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

转载于:https://www.cnblogs.com/linux20190409/p/10976851.html

你可能感兴趣的文章
CCS初学那点事(二)
查看>>
机器学习:数据预处理之独热编码(One-Hot)
查看>>
我的友情链接
查看>>
apache之虚拟主机
查看>>
dedeCMS5.7在任意栏目获取顶级栏目名称及链接的方法
查看>>
linux之文本搜索工具(grep、egrep)用法
查看>>
活动目录中组的类型和可用范围
查看>>
子网掩码划分随手记
查看>>
mysqli_fetch_all
查看>>
OpenCL-0-基础概念
查看>>
‘char* maxn(const char**, int)’ does not match any template declaration
查看>>
打造企业级应用--邮件服务器postfix+dovecot+extmail
查看>>
微软开发者解释为什么Windows内核落后于Linux
查看>>
HP DL380G5安装Win2012后开启Hyper-V
查看>>
信息系统项目管理师系统集成项目管理工程师相关法律法规
查看>>
标准io和管道
查看>>
微会动平台免费开放多种活动场景现场抽奖功能产品助力企业市场活动
查看>>
Project:如何分析项目中的资源分配情况
查看>>
IT男的悲惨命运(自己写的连载中)2
查看>>
SQL server网络数据库的简单应用
查看>>