k 8 sクラスタ増加nodeノードプロセスと問題の総括
文書ディレクトリ環境整備 kubernetes環境はkubeadmにより初期化され、セルフホスティング(self-hosted)モードで構築された(dockerミラーリング) 1.ファイアウォールを閉じselinuxを閉じる 2.同期サーバ時間 3.swapパーティションを閉じる 4.クラスタ全ノードホスト相互解析可能 5.master対nodeノードssh相互通信 6.システムカーネルパラメータを設定してブリッジを流れるトラフィックもiptables/netfilterフレームワークに入れる 7.ホスト名の変更 ノード取付docker kubeadm kubelet kubernetes-cni 1:yum(全ノード)配置 2:kubeadm、docker、kubeletを取り付ける 3:ダウンロードミラー(注意バージョン): 4:クラスタ加入 問題発生 環境準備
kubernetes環境はkubeadmによって初期化され,自己管理(self-hosted)モードで構築された(dockerミラー)
1.ファイアウォールを閉じ、selinuxを閉じる
(生産環境は必要に応じてオフまたはオン)
チェック:
2.同期サーバー時間
パブリックネットワークntpdサーバまたはカスタムntpdサーバの選択
3.swapパーティションを閉じる
検査:sysctl-a|grep“vm.swappiness”
4.クラスタのすべてのノードホストは互いに解析することができる
5.master対nodeノードssh相互通信
6.システムカーネルパラメータを構成し、ブリッジを流れるトラフィックもiptables/netfilterフレームワークに入る
または
7.ホスト名の変更
ノードインストールdocker kubeadm kubelet kubernetes-cni
1:yumの設定(すべてのノード)
2:クbeadm、docker、クbeletをインストールする
注意:masterノードのバージョンと一致するように、kubectlは自動的にインストールされます.
3:ミラーのダウンロード(注バージョン):
k 8 s.gcr.ioミラーソースウェアハウスを使用すると、壁になる可能性があるので、ミラーを手動でダウンロードします.
4:クラスタへの参加
問題にぶつかる
kubeadm joinエラーの報告と解決1、エラーの報告:
kubeadm join — [WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/
理由k 8 sのデフォルトのcgroup-driverはcgroupfsですが、yumがkubeletをインストールすると自動的にsystemdに変更され、dockerがdocker infoコマンドで表示するのはcgroupfsで、解決方法は2つあります.
方法1:k 8 sをcgroupfsに変更する
方法2:dockerのcgroup driverをsystemdに変更する
2、誤報
kubeadm join — error execution phase preflight: couldn’t validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s
理由:masterノードのtokenが期限切れになった解決:新しいtokenを作成し、コマンドを間違えないでください.
3、誤報
[kubelet] Downloading configuration for the kubelet from the “kubelet-config-1.11” ConfigMap in the kube-system namespace configmaps “kubelet-config-1.11” is forbidden: User “system:bootstrap:7df77e” cannot get configmaps in the namespace “kube-system”
理由:kubeadmおよびkubeletバージョンはクラスタと一致しません.cri-tools、kubelet、kubeadmをアンインストールし、kubeadmとkubeletの正しいバージョンを再インストールします.バージョンはmasterのバージョンに基づいてインストールし、masterのバージョンより高くないでください.(kubeletバージョンがkubeadmより高い場合は、ノードの追加に成功した後もNotReady状態になります)
4、誤報
Failed create pod sandbox: rpc error: code = Unknown desc = failed pulling image “k8s.gcr.io/pause:3.1”: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
理由:新しいノードはpause:3.1ミラーをダウンロードする必要があり、デフォルトのミラーソースgcr.ioはGFW壁に参照されて上のダウンロードミラー方法で解決されます.
kubernetes環境はkubeadmによって初期化され,自己管理(self-hosted)モードで構築された(dockerミラー)
1.ファイアウォールを閉じ、selinuxを閉じる
(生産環境は必要に応じてオフまたはオン)
systemctl disable firewalld.service
systemctl stop firewalld.service
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
チェック:
systemctl is-enabled firewalld.service
systemctl status firewalld.service
getenforce
2.同期サーバー時間
パブリックネットワークntpdサーバまたはカスタムntpdサーバの選択
3.swapパーティションを閉じる
echo "vm.swappiness=1">>/etc/sysctl.conf
sysctl -p
検査:sysctl-a|grep“vm.swappiness”
4.クラスタのすべてのノードホストは互いに解析することができる
5.master対nodeノードssh相互通信
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.xx.xx
6.システムカーネルパラメータを構成し、ブリッジを流れるトラフィックもiptables/netfilterフレームワークに入る
modprobe br_netfilter
echo -e 'net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf && sysctl -p
または
cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
7.ホスト名の変更
hostnamectl set-hostname node02.k8s.com
echo 'node02.k8s.com' >/etc/hostname
ノードインストールdocker kubeadm kubelet kubernetes-cni
1:yumの設定(すべてのノード)
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2:クbeadm、docker、クbeletをインストールする
注意:masterノードのバージョンと一致するように、kubectlは自動的にインストールされます.
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce docker-ce-selinux
yum install -y kubeadm-1.14.2 kubelet-1.14.2 docker-ce-18.09.3
systemctl enable kubelet && systemctl start kubelet
systemctl enable docker && systemctl start docker
3:ミラーのダウンロード(注バージョン):
k 8 s.gcr.ioミラーソースウェアハウスを使用すると、壁になる可能性があるので、ミラーを手動でダウンロードします.
#!/bin/bash
images=(
kube-proxy:v1.14.2
pause:3.1
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
done
4:クラスタへの参加
kubeadm join 192.168.3.62:6443 --token f9vc9q.czje7ajf0qqfxtww --discovery-token-ca-cert-hash sha256:9b48669c620fce6a839f1d95938f542ff441156f45cdfd43f690819e9d9ba6df
問題にぶつかる
kubeadm joinエラーの報告と解決1、エラーの報告:
kubeadm join — [WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/
理由k 8 sのデフォルトのcgroup-driverはcgroupfsですが、yumがkubeletをインストールすると自動的にsystemdに変更され、dockerがdocker infoコマンドで表示するのはcgroupfsで、解決方法は2つあります.
方法1:k 8 sをcgroupfsに変更する
#vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
#systemctl enable docker
#systemctl enable kubelet
#kubeadm join --token c04f89.b781cdb55d83c1ef 10.10.3.4:63 --discovery-token-ca-cert-hash sha256:986e83a9cb948368ad0552b95232e31d3b76e2476b595bd1d905d5242ace29af --ignore-preflight-errors=Swap
方法2:dockerのcgroup driverをsystemdに変更する
mkdir /etc/docker
# Setup daemon.
cat > /etc/docker/daemon.json <
2、誤報
kubeadm join — error execution phase preflight: couldn’t validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s
理由:masterノードのtokenが期限切れになった解決:新しいtokenを作成し、コマンドを間違えないでください.
kubeadm token create # token
kubeadm token list # token
# discovery-token-ca-cert-hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex |sed 's/^.* //'
#
kubeadm join 192.168.3.62:6443 --token f9vc9q.czjexxx --discovery-token-ca-cert-hash sha256:9b48669c620fcxxxx
3、誤報
[kubelet] Downloading configuration for the kubelet from the “kubelet-config-1.11” ConfigMap in the kube-system namespace configmaps “kubelet-config-1.11” is forbidden: User “system:bootstrap:7df77e” cannot get configmaps in the namespace “kube-system”
理由:kubeadmおよびkubeletバージョンはクラスタと一致しません.cri-tools、kubelet、kubeadmをアンインストールし、kubeadmとkubeletの正しいバージョンを再インストールします.バージョンはmasterのバージョンに基づいてインストールし、masterのバージョンより高くないでください.(kubeletバージョンがkubeadmより高い場合は、ノードの追加に成功した後もNotReady状態になります)
4、誤報
Failed create pod sandbox: rpc error: code = Unknown desc = failed pulling image “k8s.gcr.io/pause:3.1”: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
理由:新しいノードはpause:3.1ミラーをダウンロードする必要があり、デフォルトのミラーソースgcr.ioはGFW壁に参照されて上のダウンロードミラー方法で解決されます.