k 8 s-1.16.6高可用性クラスタを手動で構築するworkerノードの配置-dockerコンポーネントの配置
11216 ワード
dockerはコンテナを実行および管理し、kubeletはContainer Runtime Interface(CRI)を介してインタラクティブになります.
注意:特別な指示がなければ、本書のすべての操作はk 8 s-01で実行され、その後、ファイルをリモートで配布し、コマンドを実行する. flannelをインストールする必要があります.
すべてのworkerノードにバイナリファイルを配布するには、次の手順に従います.
EOFの前後に二重引用符があり、bashは dockerd実行時にdocker-proxyなどの他のdockerコマンドが呼び出されるため、dockerコマンドが存在するディレクトリをPATH環境変数に追加する必要があります. flanneld起動時にネットワーク構成を 複数の dockerはrootユーザーで実行する必要があります. dockerは1.13バージョンから、iptables FOrWARD chainのデフォルトポリシーをDROPに設定し、pingの他のノードのPod IPに失敗する可能性があります.この場合、手動でポリシーを に設定する必要があります.
さらに、以下のコマンドを
システムunitファイルをすべてのworkerホストに配布します.
国内のミラーウェアハウスサーバを使用してpull imageの速度を速め、ダウンロードの同時実行数を増やす(dockerdの有効化を再起動する必要がある):
すべてのworkerノードにdockerプロファイルを配布するには、次の手順に従います.
出力結果は次のとおりです.
ステータスが
出力内容は次のとおりです.
各workerノードのdocker 0ブリッジとflannelを確認する.1インタフェースのIPは同じネットワークセグメントにあります(以下172.30.128.0/32は172.30.128.1/21にあります).
注意:サービスのインストール順序が間違っているか、マシン環境が複雑な場合は、dockerサービスがflanneldサービスよりも早くインストールされ、workerノードのdocker 0ブリッジとflannelがインストールされます.1インタフェースのIPは同じネットワークセグメントではない可能性があります.このときdockerサービスを停止し、docker 0ネットワークカードを手動で削除し、dockerサービスを再起動してから修復してください.
注意:
一、dockerバイナリファイルのダウンロードと配布
cd /opt/k8s/work
wget https://download.docker.com/linux/static/stable/x86_64/docker-18.09.6.tgz
tar -zxf docker-18.09.6.tgz
すべてのworkerノードにバイナリファイルを配布するには、次の手順に従います.
cat > deploy.sh << "EOF"
#!/bin/bash
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp docker/* root@${node_ip}:/opt/k8s/bin/
ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
done
EOF
二、systemd unitファイルの作成と配布
cd /opt/k8s/work
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
$DOCKER_NETWORK_OPTIONS
のようなドキュメント内の変数を置換しません(これらの環境変数はsystemdが置換を担当しています)./run/flannel/docker
ファイルに書き込み、dockerd起動前にファイル内の環境変数DOCKER_NETWORK_OPTIONS
を読み出し、docker 0ブリッジセグメントを設定する.EnvironmentFile
オプションが指定されている場合は、/run/flannel/docker
を最後に配置する必要があります(docker 0がflanneldで生成されたbipパラメータを使用することを確認します).ACCEPT
:$ sudo iptables -P FORWARD ACCEPT
さらに、以下のコマンドを
/etc/rc.local
ファイルに書き込み、ノードがiptables FOrWARD chainを再起動しないようにするデフォルトポリシーをDROPに復元します./sbin/iptables -P FORWARD ACCEPT
システムunitファイルをすべてのworkerホストに配布します.
cat > deploy.sh << "EOF"
#!/bin/bash
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_IPS[@]}
do
echo ">>> ${node_ip}"
scp docker.service root@${node_ip}:/etc/systemd/system/
done
EOF
三、dockerプロファイルの構成と配布
国内のミラーウェアハウスサーバを使用してpull imageの速度を速め、ダウンロードの同時実行数を増やす(dockerdの有効化を再起動する必要がある):
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
すべてのworkerノードにdockerプロファイルを配布するには、次の手順に従います.
cat > deploy.sh << "EOF"
#!/bin/bash
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${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
EOF
四、dockerサービスを起動する
cat > deploy.sh << "EOF"
#!/bin/bash
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "systemctl daemon-reload && systemctl enable docker && systemctl restart docker"
done
EOF
五、サービス運行状態の表示
cat > deploy.sh << "EOF"
#!/bin/bash
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "systemctl status docker|grep Active"
done
EOF
出力結果は次のとおりです.
$ ./deploy.sh
>>> 192.168.0.71
Active: active (running) since Fri 2020-04-24 16:03:15 CST; 1min 56s ago
>>> 192.168.0.72
Active: active (running) since Fri 2020-04-24 16:03:17 CST; 1min 55s ago
>>> 192.168.0.73
Active: active (running) since Fri 2020-04-24 16:03:18 CST; 1min 54s ago
ステータスが
active (running)
であることを確認します.そうでない場合は、次のコマンドでログを表示し、理由を確認します.journalctl -u docker
六、docker 0ブリッジを検査する
cat > deploy.sh << "EOF"
#!/bin/bash
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "/usr/sbin/ip addr show flannel.1 && /usr/sbin/ip addr show docker0"
done
EOF
出力内容は次のとおりです.
$ ./deploy.sh
>>> 192.168.0.71
3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
link/ether 32:52:1f:dc:89:4e brd ff:ff:ff:ff:ff:ff
inet 172.30.128.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:d7:6b:e5:4f brd ff:ff:ff:ff:ff:ff
inet 172.30.128.1/21 brd 172.30.135.255 scope global docker0
valid_lft forever preferred_lft forever
>>> 192.168.0.72
3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
link/ether 02:6d:85:9e:c1:96 brd ff:ff:ff:ff:ff:ff
inet 172.30.88.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:96:a3:38:d3 brd ff:ff:ff:ff:ff:ff
inet 172.30.88.1/21 brd 172.30.95.255 scope global docker0
valid_lft forever preferred_lft forever
>>> 192.168.0.73
3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
link/ether e2:35:9c:62:ee:fe brd ff:ff:ff:ff:ff:ff
inet 172.30.104.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:22:02:21:8e brd ff:ff:ff:ff:ff:ff
inet 172.30.104.1/21 brd 172.30.111.255 scope global docker0
valid_lft forever preferred_lft forever
各workerノードのdocker 0ブリッジとflannelを確認する.1インタフェースのIPは同じネットワークセグメントにあります(以下172.30.128.0/32は172.30.128.1/21にあります).
注意:サービスのインストール順序が間違っているか、マシン環境が複雑な場合は、dockerサービスがflanneldサービスよりも早くインストールされ、workerノードのdocker 0ブリッジとflannelがインストールされます.1インタフェースのIPは同じネットワークセグメントではない可能性があります.このときdockerサービスを停止し、docker 0ネットワークカードを手動で削除し、dockerサービスを再起動してから修復してください.
$ systemctl stop docker
$ ip link delete docker0
$ systemctl start docker