k8sバイナリインストールノードノード

ノードノードのデプロイに関するいくつかの問題

  1. ノードノードの展開には証明書のレプリケーションは含まれず、認証と承認はkubectl configを介して生成されます(クラスター全体のアクセスは、認証と承認の2つの段階を通過する必要があります)
  2. ノードノードのネットワークは、docker独自のcniとネットワークプラグイン(フランネル)に基づいてネットワーク機能を完了することができます(違いは、dockerに付属しているのはdockerでのみ使用できることです)
  3. 承認はユーザー名に基づいており、kubeletとkube-porxyの両方が役割の承認を通じてリソースにアクセスする必要があります
  4. ノードがデプロイされた後、他のノードは一致するファイルを直接使用できます(ノードの表示名が変更されている限り、-hostname-override = k8s-nodex、同じ名前をクラスターに追加することはできません)
  5. ノード認証要求後、マスターセクションを確認する必要があります。構成エラーが発生した場合、または構成を変更した場合は、ノードによって生成されたすべての証明書ファイルを削除し、マスター要求情報を削除して、最後にkubeletを再起動する必要があります。サービスを提供し、クラスターに再参加します

ノードノード

  • kubelet:コンテナのライフサイクルを実現する
  • kube-proxy:サービスマッピングアクセスを実現するために(クラスター外のポッドアプリケーションへのアクセスを実現するために)IPTABLES、IPVSにルールを書き込む責任があります。
mkdir -p /usr/local/k8s/{
    
    conf,logs}
#创建工作目录
#拷贝kubelet和kube-proxy二进制文件到/usr/local/bin

認定ファイルを生成する

  • kubeletはトークン認証に基づいています
  • kube-プロキシ証明書認証

キュベレー

head -c 16 /dev/urandom | od -An -t x | tr -d ' '
#自动生成一个随机token

cat token.csv 
64c8a4bd1c2e920aa92049044b5197ba,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
#格式:token,用户名,UID,用户组

kube-proxy

cat kube-proxy-csr.json
{
    
    
    "CN": "kube-proxy",
    "hosts": [ ],
    "key": {
    
    
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
    
    
            "C": "CN",
            "L": "SHANGHAI",
            "ST": "SHANGHAI"
        }
    ]
}
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server kube-proxy-csr.json | cfssljson -bare /opt/etcd/ssl/k8s/kube-proxy
#只要注意-profile指定的名称,这个是ca证书里指定的

設定ファイルkubeconfigの生成

kubeconfigは、ノードノード上のクラスターにアクセスするためのkubeletとkube-proxyを認証するために使用されます

キュベレー

kubectl config set-cluster k8s-master   --certificate-authority=/usr/local/k8s/ssl/ca.pem   --embed-certs=true   --server=https://192.168.12.2:6443 --kubeconfig=kubelet-bootstrap.kubeconfig
#配置集群参数,修改ca公钥和集群server地址

kubectl config set-credentials kubelet-bootstrap --token=64c8a4bd1c2e920aa92049044b5197ba --kubeconfig=kubelet-bootstrap.kubeconfig
#配置客户端认证参数,token值就是生成token文件里的

kubectl config set-context default --cluster=k8s-master --user=kubelet-bootstrap --kubeconfig=kubelet-bootstrap.kubeconfig
#设置上下文参数,集群参数和用户参数可以同时设置多对,在上下文参数中将集群参数和用户参数关联起来
#上下文名称default,集群名称k8s-master,访问集群的用户名为kubelet-bootstrap

kube-proxy

kubectl config set-cluster k8s-master   --certificate-authority=/usr/local/k8s/ssl/ca.pem   --embed-certs=true   --server=https://192.168.12.2:6443 --kubeconfig=kube-proxy.kubeconfig

kubectl config set-credentials kube-proxy --client-certificate=/usr/local/k8s/ssl/kube-proxy.pem \ 
--client-key=/usr/local/k8s/ssl/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig
#不同在于kube-proxy使用认证方式

kubectl config set-context default --cluster=k8s-master --user=kube-proxy --kubeconfig=kube-proxy.kubeconfig
#用户kube-proxy 

生成されたファイルをノードにコピーします

ユーザー認証

kubeconfigはクラスターの認証を完了しますが、クラスターに正式にアクセスするにはユーザーのリソース認証も必要です

kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap

kubectl create clusterrolebinding kube-proxy \
--clusterrole=system:node-proxier \
--user=kube-proxy
#clusterrole代表的是集群角色,也就是所有的namespace资源
#2个角色的授权资源可以通过命令查看,system:node-bootstrapper和system:node-proxier都是自带的集群角色

ロールビュー

kubectl get clusterrole
#查看所有的集群角色

kubectl get clusterrole system:node-bootstrapper -o yaml
#查看system:node-bootstrapper角色的yaml信息
#verbs授权资源,create、get、list、watch

kubectl get clusterrolebinding kube-proxy -o wide
#查看集群构建kube-proxy详细信息

準備フェーズは終了しました

kubele構成ファイル

cat kubelet.conf
KUBELET_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/usr/local/k8s/logs \
--hostname-override=k8s-node1 \
--kubeconfig=/usr/local/k8s/conf/kubelet.kubeconfig \
--bootstrap-kubeconfig=/usr/local/k8s/conf/kubelet-bootstrap.kubeconfig \
--cert-dir=/usr/local/k8s/ssl \
--cluster-dns=10.2.0.2 \
--cluster-domain=cluster.local. \
--fail-swap-on=false \
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"

kubelet --help

  • -ホスト名-オーバーライド:ノードの表示名
  • --Network-plugin:CNIを有効にする#サードパーティのCNIを使用するように構成する必要があります。デフォルトのDockerは使用できません
  • --Kubeconfig:空のパス。自動的に生成され、後でapiserverへの接続に使用されます。
  • –bootstrap-kubeconfig:最初にapiserverからの証明書の申請を開始します
  • –cert-dir:kubelet証明書生成ディレクトリ
  • --Pod-infra-container-image:ポッドネットワークコンテナのイメージを管理します

pod-infra-container-imageは、共有ネットワークの名前空間とマウントを実現する一時停止コンテナです。

systemcd管理

cat /usr/lib/systemd/system/kubelet.service 
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service

[Service]
EnvironmentFile=/usr/local/k8s/conf/kubelet.conf
ExecStart=/usr/local/bin/kubelet $KUBELET_OPTS
Restart=on-failure
KillMode=process

[Install]
WantedBy=multi-user.target

systemctl start kubelet.service
#启动服务

kube-proxy設定

cat  kube-proxy.conf
KUBE_PROXY_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/usr/loacl/k8s/logs \
--config=/usr/local/k8s/conf/kube-proxy-config.yml"

--Configは構成パラメーターを保管します

cat kube-proxy-config.yml
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
metricsBindAddress: 0.0.0.0:10249
clientConnection:
 kubeconfig: /usr/local/k8s/conf/kube-proxy.kubeconfig
hostnameOverride: k8s-node1
clusterCIDR: 10.2.0.0/24

kube-proxy --help

参照パラメーター:https://github.com/kubernetes/kube-proxy/blob/20569a1933eee4b6a526bfe564d476dd7e29c020/config/v1alpha1/types.go#L136
構成テンプレート:https://github.com/ReSearchITEng/kubeadm-playbook/blob/master /group_vars/all/KubeProxyConfiguration.yml

systemcd管理

 cat /usr/lib/systemd/system/kube-proxy.service 
[Unit]
Description=Kubernetes Proxy
After=network.target

[Service]
EnvironmentFile=-/usr/local/k8s/conf/kube-proxy.conf
ExecStart=/usr/local/bin/kube-proxy $KUBE_PROXY_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target

ステータスを確認する

kubectl get node -o wide
#查看节点详细信息

kubectl run nginx --image=nginx --replicas=2
kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort
#创建测试pod

kubectl get pods
#查看pod,默认namespace=default 

構築プロセスは、各コンポーネントを理解することです。構成は後で調整する必要があります。構成は、オンラインおよび学習ビデオを参照します。公式自体は、バイナリインストールチュートリアルを提供していません。すべての構成は、コンポーネントの理解に基づいています。現在、構成は言うことができるだけです。それは稼働中であり、後の学習調整に非常に役立ちます。正しい構成または間違った構成は、後の段階で自分で調整または検証できます。

おすすめ

転載: blog.csdn.net/yangshihuz/article/details/112313055