部署环境
IP地址 | 主机名 | 功能 |
---|---|---|
10.1.104.200 | k8s-deploy | 部署节点,不承担实际作用 |
10.1.104.201 | k8s-master01 | master节点 |
10.1.104.202 | k8s-master02 | master节点 |
10.1.104.203 | k8s-master03 | master节点 |
10.1.104.204 | k8s-nginx | 负载均衡节点,实际生产中应为HA架构 |
10.1.104.205 | k8s-node01 | node节点 |
10.1.104.206 | k8s-node02 | node节点 |
10.1.104.207 | k8s-node03 | node节点 |
部署worker节点(docker)
安装worker节点需要的依赖包(k8s-deploy):
安装worker节点需要的依赖包:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "yum install -y epel-release"
ssh root@${node_ip} "yum install -y conntrack ipvsadm ntp ntpdate ipset jq iptables curl sysstat libseccomp && modprobe ip_vs"
done
- 若master节点也需作为work节点,则此处变量需要改成${NODE_IPS[@]。
下载和分发docker二进制文件(k8s-deploy):
分发worker节点所需的二进制文件:
cd /opt/k8s/work
wget http://download.wenjun1984.cn/Kubernetes/Docker/docker-18.09.6.tgz
tar -xvf docker-18.09.6.tgz
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp docker/* root@${node_ip}:/opt/k8s/bin/
ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
done
创建docker服务文件:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
cat > docker.service << "EOF"
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.io
[Service]
WorkingDirectory=##DOCKER_DIR##
Environment="PATH=/opt/k8s/bin:/bin:/sbin:/usr/bin:/usr/sbin"
EnvironmentFile=-/run/flannel/docker
ExecStart=/opt/k8s/bin/dockerd $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。
- flanneld启动时将网络配置写入/run/flannel/docker文件中,dockerd启动前读取该文件中的环境变量$DOCKER_NETWORK_OPTIONS,然后设置docker0网桥网段。
- 如果指定了多个EnvironmentFile选项,则必须将/run/flannel/docker放在最后(确保docker0使用flanneld 生成的 bip 参数)。
- docker需要以root权限运行。
将docker服务文件分发到各worker节点:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
sed -i -e "s|##DOCKER_DIR##|${DOCKER_DIR}|" docker.service
for node_ip in ${NODE_NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp docker.service root@${node_ip}:/etc/systemd/system/
done
创建docker配置文件:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
cat > docker-daemon.json << EOF
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"],
"insecure-registries": ["docker02:35000"],
"max-concurrent-downloads": 20,
"live-restore": true,
"max-concurrent-uploads": 10,
"debug": true,
"data-root": "${DOCKER_DIR}/data",
"exec-root": "${DOCKER_DIR}/exec",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
EOF
将docker配置文件分发到各worker节点:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "mkdir -p /etc/docker/ ${DOCKER_DIR}/{data,exec}"
scp docker-daemon.json root@${node_ip}:/etc/docker/daemon.json
done
启动docker并检测运行状态(k8s-deploy):
启动各worker节点的docker服务:
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "systemctl daemon-reload && systemctl enable docker && systemctl restart docker"
done
确认各worker节点docker服务正常启动:
for node_ip in ${NODE_NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "systemctl status docker|grep Active"
done
检测各worker节点docker0和flannel是否在同一网段中:
for node_ip in ${NODE_NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "/usr/sbin/ip addr show flannel.1 && /usr/sbin/ip addr show docker0"
done
- 如果docker0网桥和flannel.1接口的IP不处于同一个网段下,则先停止docker服务, 手工删除docker0网卡,重新启动docker服务后即可修复:
systemctl stop docker ip link delete docker0 systemctl start docker
使用docker info检测每个实例,确保进程正常启动。
文档更新时间: 2020-10-22 15:55 作者:闻骏