ノードノードのデプロイに関するいくつかの問題
- ノードノードの展開には証明書のレプリケーションは含まれず、認証と承認はkubectl configを介して生成されます(クラスター全体のアクセスは、認証と承認の2つの段階を通過する必要があります)
- ノードノードのネットワークは、docker独自のcniとネットワークプラグイン(フランネル)に基づいてネットワーク機能を完了することができます(違いは、dockerに付属しているのはdockerでのみ使用できることです)
- 承認はユーザー名に基づいており、kubeletとkube-porxyの両方が役割の承認を通じてリソースにアクセスする必要があります
- ノードがデプロイされた後、他のノードは一致するファイルを直接使用できます(ノードの表示名が変更されている限り、-hostname-override = k8s-nodex、同じ名前をクラスターに追加することはできません)
- ノード認証要求後、マスターセクションを確認する必要があります。構成エラーが発生した場合、または構成を変更した場合は、ノードによって生成されたすべての証明書ファイルを削除し、マスター要求情報を削除して、最後に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"
- -ホスト名-オーバーライド:ノードの表示名
- --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
参照パラメーター: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
構築プロセスは、各コンポーネントを理解することです。構成は後で調整する必要があります。構成は、オンラインおよび学習ビデオを参照します。公式自体は、バイナリインストールチュートリアルを提供していません。すべての構成は、コンポーネントの理解に基づいています。現在、構成は言うことができるだけです。それは稼働中であり、後の学習調整に非常に役立ちます。正しい構成または間違った構成は、後の段階で自分で調整または検証できます。