新しいノードは、クラスタ内のノードに追加されます

ディレクトリ

序文

以前に基づいて、すべての記事が完了した後、ここではどのように新しいノードを追加するために私達に伝えるために、

新しいノードの解析を行います

hostsファイルの解析方法

あなたはhostsファイルの解析を使用している場合は、すべてのノードに対して以下のコンテンツhsotsファイルを追加する必要があります。

10.0.20.15 node05 node05.k8s.com

方法2解決に特異的に結合します

あなたは内部のバインドのDNS解決を行うために時間を使用する場合は、あなただけのAにレコードを追加する必要があります

node05  IN  A   10.0.20.15

オーバーロードバインドプロフィール

rndc reload

テスト

node01のマシンでのテスト

[root@node01 work]# ping -c 1 node05
PING node05.k8s.com (10.0.20.15) 56(84) bytes of data.
64 bytes from 10.0.20.15 (10.0.20.15): icmp_seq=1 ttl=64 time=0.122 ms

--- node05.k8s.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.122/0.122/0.122/0.000 ms
[root@node01 work]# ping -c 1 node05.k8s.com
PING node05.k8s.com (10.0.20.15) 56(84) bytes of data.
64 bytes from 10.0.20.15 (10.0.20.15): icmp_seq=1 ttl=64 time=0.121 ms

--- node05.k8s.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.121/0.121/0.121/0.000 ms

分散キー

プッシュファイルを容易にするために、このステップは実行できません

ssh-copy-id -i ~/.ssh/id_rsa.pub node05

CA証明書をプッシュ

ssh node05 "mkdir -p /etc/kubernetes/cert"
scp ca*.pem ca-config.json node05:/etc/kubernetes/cert

flanneld展開

次の手順のすべてがされているnode01A上で実行します

flanneldバイナリコマンドプッシュ

scp flannel/{flanneld,mk-docker-opts.sh} node05:/opt/k8s/bin/

flanneldキーを押してください

ssh node05 "mkdir -p /etc/flanneld/cert"
scp flanneld*.pem node05:/etc/flanneld/cert

flanneldスタートアップファイルをプッシュ

scp flanneld.service node05:/etc/systemd/system/

スタートflanneld

ssh node05 "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"
ssh node05 "systemctl status flanneld|grep Active"

ビューflanneldネットワーク

ssh node05 "/usr/sbin/ip addr show flannel.1|grep -w inet"

etcdネットワークデータを見ます

ルックは、追加するかどうかを割り当てられたCIDRの数にetcd

source /opt/k8s/bin/environment.sh
etcdctl \
  --endpoints=${ETCD_ENDPOINTS} \
  --ca-file=/etc/kubernetes/cert/ca.pem \
  --cert-file=/etc/flanneld/cert/flanneld.pem \
  --key-file=/etc/flanneld/cert/flanneld-key.pem \
  get ${FLANNEL_ETCD_PREFIX}/subnets/172.30.80.0-21

出力を表示します。

[root@node01 work]# etcdctl \
>   --endpoints=${ETCD_ENDPOINTS} \
>   --ca-file=/etc/kubernetes/cert/ca.pem \
>   --cert-file=/etc/flanneld/cert/flanneld.pem \
>   --key-file=/etc/flanneld/cert/flanneld-key.pem \
>   ls ${FLANNEL_ETCD_PREFIX}/subnets
/kubernetes/network/subnets/172.30.80.0-21
/kubernetes/network/subnets/172.30.48.0-21
/kubernetes/network/subnets/172.30.216.0-21
/kubernetes/network/subnets/172.30.224.0-21
/kubernetes/network/subnets/172.30.160.0-21

上から見た出力は、新しいノードが正常に持ってflanneld

ドッキングウィンドウのインストール・設定

ここでは、直接node05ノード上で動作

インストール

yum install docker-ce-18.09.6 -y

プロフィールを作成

mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://hjvrgh7a.mirror.aliyuncs.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

起動時のパラメータを変更するドッカー

vim /usr/lib/systemd/system/docker.service
EnvironmentFile=-/run/flannel/docker
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock

[スタート]を表示

[root@localhost ~]# vim /usr/lib/systemd/system/docker.service 
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@localhost ~]# systemctl start docker

docker0ブリッジは、ゲートウェイflanneldネットワークであるかどうかを確認してください

[root@localhost ~]# ip addr show flannel.1 && /usr/sbin/ip addr show docker0
5: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether fe:64:95:d1:b5:7c brd ff:ff:ff:ff:ff:ff
    inet 172.30.216.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:79:3b:10:f3 brd ff:ff:ff:ff:ff:ff
    inet 172.30.216.1/21 brd 172.30.223.255 scope global docker0
       valid_lft forever preferred_lft forever

kubeletインストール

ここでのnode01操作

kubeletバイナリファイルをプッシュ

scp kubernetes/server/bin/kubelet node05:/opt/k8s/bin/

ファイルを作成しますkubeletブートストラップkubeconfig

export BOOTSTRAP_TOKEN=$(kubeadm token create \
  --description kubelet-bootstrap-token \
  --groups system:bootstrappers:node05 \
  --kubeconfig ~/.kube/config)
# 设置集群参数
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/cert/ca.pem \
  --embed-certs=true \
  --server=https://vip.k8s.com:8443 \
  --kubeconfig=kubelet-bootstrap-node05.kubeconfig
# 设置客户端认证参数
kubectl config set-credentials kubelet-bootstrap \
  --token=${BOOTSTRAP_TOKEN} \
  --kubeconfig=kubelet-bootstrap-node05.kubeconfig
# 设置上下文参数
kubectl config set-context default \
  --cluster=kubernetes \
  --user=kubelet-bootstrap \
  --kubeconfig=kubelet-bootstrap-node05.kubeconfig
# 设置默认上下文
kubectl config use-context default --kubeconfig=kubelet-bootstrap-node05.kubeconfig

すべてのワーカーノードへの配布ブートストラップkubeconfigファイル

scp kubelet-bootstrap-node05.kubeconfig root@node05:/etc/kubernetes/kubelet-bootstrap.kubeconfig

ビューkubeadm新しいノード用に作成されたトークン

[root@node01 work]# kubeadm token list --kubeconfig ~/.kube/config
TOKEN                     TTL       EXPIRES                     USAGES                   DESCRIPTION               EXTRA GROUPS
cu4q2e.ogvim78s3p252ysg   7h        2019-12-06T17:44:24+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node03
nrypmb.35fyygbwr9failr5   7h        2019-12-06T17:44:23+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node01
r5luwb.6x6c5lnit5utyotz   7h        2019-12-06T17:44:23+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node02
# 下面多了一条node05
ss66d3.yse8ia5bt1s06jmg   23h       2019-12-07T10:01:58+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node05
sx8n4m.vlltkkv8m23ogxg9   7h        2019-12-06T17:44:24+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node04

関連する秘密トークン見ます

[root@node01 work]# kubectl get secrets  -n kube-system|grep bootstrap-token
bootstrap-token-cu4q2e                           bootstrap.kubernetes.io/token         7      16h
bootstrap-token-nrypmb                           bootstrap.kubernetes.io/token         7      16h
bootstrap-token-r5luwb                           bootstrap.kubernetes.io/token         7      16h
# 根据上面查看的token,下面这条是新添加的
bootstrap-token-ss66d3                           bootstrap.kubernetes.io/token         7      99s
bootstrap-token-sx8n4m                           bootstrap.kubernetes.io/token         7      16h

設定パラメータkubelet作成と配布

cd /opt/k8s/work
sed -e "s/##NODE_IP##/10.0.20.15/" kubelet-config.yaml.template > kubelet-config-10.0.20.15.yaml.template
scp kubelet-config-10.0.20.15.yaml.template root@node05:/etc/kubernetes/kubelet-config.yaml

kubeletスタートアップファイルを作成して配布

cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
sed -e "s/##NODE_NAME##/node05/" kubelet.service.template > kubelet-node05.service
scp kubelet-node05.service root@node05:/etc/systemd/system/kubelet.service

スタートkubeletサービス

cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
ssh root@node05 "mkdir -p ${K8S_DIR}/kubelet/kubelet-plugins/volume/exec/"
ssh root@node05 "/usr/sbin/swapoff -a"
ssh root@node05 "systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet"

手動でサーバー証明書のCSRを承認

しばらくすると、手動で証明書の要求によってする必要がある
セキュリティ上の考慮事項に基づいて、CSR承認コントローラは自動的にkubeletサーバ証明書署名要求を承認していない、あなたが手動で承認する必要があります

kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve

新しいノードを見ます

再びノードを表示するコマンドを使用している場合、この時点では、それは成功したが追加されました

[root@node01 work]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
node01   Ready    <none>   16h   v1.15.6
node02   Ready    <none>   16h   v1.15.6
node03   Ready    <none>   16h   v1.15.6
node04   Ready    <none>   16h   v1.15.6
node05   Ready    <none>   74s   v1.15.6   # 这里显示正常

KUBE-プロキシのインストール

ここではnode01上で実行されています

プッシュKUBE-プロキシバイナリブートファイル

cd /opt/k8s/work/
scp kubernetes/server/bin/kube-proxy node05:/opt/k8s/bin/

配布kubeconfigファイル

cd /opt/k8s/work/
scp kube-proxy.kubeconfig root@node05:/etc/kubernetes/

配布し、KUBE-プロキシの設定ファイルを作成します

cd /opt/k8s/work/
sed -e "s/##NODE_NAME##/node05/" -e "s/##NODE_IP##/10.0.20.15/" kube-proxy-config.yaml.template > kube-proxy-config-node05.yaml.template
scp kube-proxy-config-node05.yaml.template root@node05:/etc/kubernetes/kube-proxy-config.yaml

配布KUBE-プロキシにsystemdユニットファイル

scp kube-proxy.service root@node05:/etc/systemd/system/

スタートKUBE-プロキシサービス

cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
ssh root@node05 "mkdir -p ${K8S_DIR}/kube-proxy"
ssh root@node05 "modprobe ip_vs_rr"
ssh root@node05 "systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy"

結果をチェックを開始

ssh root@node05 "systemctl status kube-proxy|grep Active"
ssh root@node05 "netstat -lnpt|grep kube-prox"

表示ルーティングルールIPVS

ssh root@node05 "/usr/sbin/ipvsadm -ln"

出力:

[root@node01 work]# ssh root@node05 "/usr/sbin/ipvsadm -ln"
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.254.0.1:443 rr
  -> 10.0.20.11:6443              Masq    1      0          0         
  -> 10.0.20.12:6443              Masq    1      0          0         
  -> 10.0.20.13:6443              Masq    1      0          0         
TCP  10.254.0.2:53 rr
  -> 172.30.48.2:53               Masq    1      0          0         
  -> 172.30.160.2:53              Masq    1      0          0         
TCP  10.254.0.2:9153 rr
  -> 172.30.48.2:9153             Masq    1      0          0         
  -> 172.30.160.2:9153            Masq    1      0          0         
UDP  10.254.0.2:53 rr
  -> 172.30.48.2:53               Masq    1      0          0         
  -> 172.30.160.2:53              Masq    1      0          0 

この時点で、新しいノードは、クラスタノードの操作が完了した加入します。

現在のクラスタ・ノードを見ます

[root@node01 work]# kubectl get nodes -o wide
NAME     STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIME
node01   Ready    <none>   16h   v1.15.6   10.0.20.11    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6
node02   Ready    <none>   16h   v1.15.6   10.0.20.12    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6
node03   Ready    <none>   16h   v1.15.6   10.0.20.13    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6
node04   Ready    <none>   16h   v1.15.6   10.0.20.14    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6
node05   Ready    <none>   12m   v1.15.6   10.0.20.15    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6

おすすめ

転載: www.cnblogs.com/winstom/p/11993893.html