ノードnode K8Sのインストール

kubernetesノード

インストールkubelet
wget https://storage.googleapis.com/kubernetes-release/release/v1.11.0/kubernetes-server-linux-amd64.tar.gz
tar -xzvf kubernetes-server-linux-amd64.tar.gz
cd kubernetes
tar -zxf kubernetes-src.tar.gz
scp kubernetes/server/bin/{kube-proxy,kubelet} k8s-node1:/usr/local/bin/
scp kubernetes/server/bin/{kube-proxy,kubelet} k8s-node2:/usr/local/bin/
##### 生成kubelet权限,下面这条命令只在master点执行一次即可

kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
######说明
kubelet 启动时向 kube-apiserver 发送 TLS bootstrapping 请求,需要先将 bootstrap token 文件中的 kubelet-bootstrap 用户赋予 system:node-bootstrapper 角色,然后 kubelet 才有权限创建认证请求
1.8版本之前.开启rbac后,apiserver默认绑定system:nodes组到system:node的clusterrole。v1.8之后,此绑定默认不存在,需要手工绑定,否则kubelet启动后会报认证错误,使用kubectl get nodes查看无法成为Ready状态。
kubectl create clusterrolebinding kubelet-node-clusterbinding --clusterrole=system:node --group=system:nodes
######创建启动文件

/usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
ExecStart=/usr/local/sbin/kubelet \
            --address=172.16.20.206 \
            --hostname-override=172.16.20.206 \
            --cluster-dns=10.254.0.2 \
            --network-plugin=cni \
            --cni-conf-dir=/etc/cni/net.d \
            --cni-bin-dir=/opt/cni/bin \
            --logtostderr=true \
            --v=2 \
            --allow-privileged=true \
            --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1 \
            --cgroups-per-qos \
            --cgroup-driver=cgroupfs \
            --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig \
            --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
            --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local \
            --hairpin-mode promiscuous-bridge \
            --serialize-image-pulls=false \
            --runtime-cgroups=/systemd/system.slice \
            --kubelet-cgroups=/systemd/system.slice \
            --enforce-node-allocatable=pods \
            --kube-reserved=cpu=1,memory=2Gi,ephemeral-storage=5Gi \
            --system-reserved=cpu=1,memory=2Gi,ephemeral-storage=5Gi \
            --eviction-hard=memory.available<1Gi,nodefs.available<10%
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

#######説明
-addressは、ローカルIPですそれ以外の場合は、その後のポッドが127.0.0.1ポッドアクセスポイントなぜなら自分自身ではなくkubeletに、kubelet APIインタフェースにアクセス失敗し、127.0.0.1に設定することはできません。
-hostname-機械はまた、IPを上書き;
-cgroupドライバが(ドッカーとkubeletのcgroupドライバを保持同じで構成することができる)cgroupfsするように構成され、デフォルトのドッカーのcgroupドライバはcgrouopfsある
点オンkubeconfigブートストラップブートストラップkubeconfigファイル、使用kubelet -experimentalファイルは、ユーザー名とトークンKUBE-apiserver TLSのブートストラップ要求に送られ、
CSR要求によって、管理者は、自動的に-cert-dirのディレクトリに証明書と秘密鍵ファイル(kubelet-client.crtとkubelet-client.keyを作成kubelet ;)その後、指定されたファイルを-kubeconfig自動的に作成-kubeconfigファイルを()書き
-api-serversオプションが指定されていない場合、あなたは-require-kubeconfigオプションを指定する必要があり、コンフィギュレーション・ファイル-kubeconfigに指定された推奨KUBE-apiserverアドレスの後に構成ファイルから読み取らKUE-apiserverアドレス、それ以外の場合は区開始kubeletを見つけることができません 被apiserver(ログはAPIサーバーが見つかりません示す)、ノードが対応するノード情報を返しません取得kubectl。
-cluster-DNS、(最初のkubednsは、IPサービスを指定する場合、その後に作成、割り当て可能)サービスIPのkubednsを指定-クラスタドメインは、ドメイン名サフィックスを指定し、これら2つのパラメータは同時に指定されたテイクの効果の後に、
DNSアドレスkubeletがクラスタでありますIPはIPサービスは、IPで--serviceクラスタ-IP-範囲のセグメントに、IPサービスのポッドではないです
-cluster-ドメイン指定されたポッドは、当初、/etc/resolve.confファイルを起動したときに、検索ドメイン私たちは、DNSネームサービスを解決するときに、これは正常です、それはcluster.localになった設定が、FQDNポッドヘッドレス名でサービスが、間違って解析するとき、私たちはcluster.localするためにそれを修正する、口を削除します「ドット」の背後にある問題を解決することができます。
CSRによって要求されたとき-kubeconfig =の/ etc / Kubernetes / kubelet.kubeconfig kubelet.kubeconfig指定されたファイルには、以下を参照してください、最初のスタートkubeletの前に存在しません。 kubelet.kubeconfig自動的に生成されたファイル、あなたのノードは〜/ .kube / configファイルを生成した場合、あなたはこのパスにファイルをコピーすることができ、両方の 新しく追加されたノードが自動的にkubernetesクラスタに追加することができCSRリクエストを作成する必要がないように、名前付きkubelet.kubeconfig、すべてのノードは、同じノードkubelet.kubeconfigファイルを共有することができます。同様に、ホスト上でkubectl -kubeconfigコマンドを使用することができるようにする任意のアクセスは、クラスタのクラスタ操作をkubernetes、ちょうど〜/ .kube / configファイルを使用しますが、認証情報を持っているとあなたが管理者ユーザーだと思うので、機関によって認定することができ、クラスタは、すべての権限を持っています。

作成WORKINGDIRECTORY
mkdir /var/lib/kubelet
スタート
swapoff -a
systemctl daemon-reload
systemctl start kubelet
証明書kubeletを要求するTLSマスターノード
kubectl get csr
NAME                                                   AGE       REQUESTOR           CONDITION
node-csr-HSfbVhUD6BXSdM4jSRcyA5b_4IID_tzFfJQExkzd2NE   1m        kubelet-bootstrap   Pending
node-csr-mzWxGlRuf_6CBxr0pL8eDaPrrpLorcPwAVPKAkM4m3g   13m       kubelet-bootstrap   Pending

kubectl certificate approve node-csr-HSfbVhUD6BXSdM4jSRcyA5b_4IID_tzFfJQExkzd2NE node-csr-mzWxGlRuf_6CBxr0pL8eDaPrrpLorcPwAVPKAkM4m3g
検証
kubectl get nodes
NAME            STATUS    ROLES     AGE       VERSION
172.16.20.207   Ready     <none>    1m        v1.11.0
172.16.20.208   Ready     <none>    1m        v1.11.0
異常なエラー

マスター上の文を力づける実行して、どのノードが追加されていない場合は、ここで確認し、その後、ビューノードのノード・メッセージ・ログ、エラー許可を持っていません。

KUBE-プロキシ
スタートアップファイル
/usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
ExecStart=/usr/local/bin/kube-proxy \
        --logtostderr=true \
        --v=2 \
        --master=172.16.100.1:8080 \
        --bind-address=172.16.20.206 \
        --hostname-override=172.16.20.206 \
        --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
        --cluster-cidr=10.254.0.0/16
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
スタート
systemctl daemon-reload
systemctl start kube-proxy

おすすめ

転載: blog.51cto.com/phospherus/2445749
おすすめ