k 8 sクラスタ増加nodeノードプロセスと問題の総括

5896 ワード

文書ディレクトリ
  • 環境整備
  • 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を閉じる
    (生産環境は必要に応じてオフまたはオン)
    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壁に参照されて上のダウンロードミラー方法で解決されます.