[kubernetes]kubeadmメソッドでkubernetesクラスターを構築する方法を教えてください。シングルマスターノードクラスター、マルチマスターノードクラスターの説明。

kubernetesクラスターの構築

1.クラスター分類

Kubernetesクラスターは、シングルマスターノードクラスターとマルチマスターノードクラスターに分けられます。実際のアプリケーションでは、通常、マルチマスターノードクラスターを使用して高可用性を実現します。

  • 単一マスターノードクラスターモデル:

ここに画像の説明を挿入

  • マルチマスターノードクラスターモデル

ここに画像の説明を挿入

2.クラスター構築のハードウェア要件

  • マスターノード:2コア、4Gメモリ、20Gディスク

  • ノードノード:4コア、8Gメモリ、40Gディスク

マスターは制御ノードとしてのみ使用され、大量のリソースを占有しませんが、ノードノードは実際のビジネス処理などを実行し、比較的大量のリソースを占有します。

3.クラスターの構築方法

kubernetesクラスターを構築するには、一般的に2つの方法があります。

  1. クベアドム

KubeadmはK8sデプロイメントツールであり、kubeadminitとkubeadmjoinを提供してKubernetesクラスターを迅速にデプロイします。

公式アドレス:https ://kubernetes.io/docs/reference/setup-tools/kubeadm/

  1. バイナリパッケージ

ディストリビューションのバイナリパッケージをgithubからダウンロードし、各コンポーネントを手動でデプロイしてKubernetesクラスターを形成します。

2つの方法の比較:Kubeadmは展開のしきい値を下げますが、多くの詳細を保護するため、問題のトラブルシューティングが困難になります。より制御しやすくしたい場合は、バイナリパッケージを使用してKubernetesクラスタをデプロイすることをお勧めします。手動でデプロイするのは面倒ですが、期間中に多くの動作原理を学ぶことができ、メンテナンス後の作業にも役立ちます。

4.kubeadmの展開方法

Kubeadmは、kubernetesクラスターを迅速にデプロイするために公式コミュニティによって立ち上げられたツールです。このツールは、2つの手順でkubernetesクラスターのデプロイを完了することができます。

まず、マスターノードを作成します

kubeadm init

次に、ノードノードを現在のクラスターに追加します

kubeadm join <Master节点的IP和端口>

4.1インストール要件

  • 1台以上のマシン、オペレーティングシステムCentOS7.x-86_ x64
  • ハードウェア構成:2GB以上のRAM、2コアCPU以上、30GB以上のハードディスク
  • 外部ネットワークにアクセスできます。イメージをプルする必要があります。サーバーがインターネットにアクセスできない場合は、事前にイメージをダウンロードしてノードをインポートする必要があります。
  • スワップパーティションを無効にする

ここでは仮想マシンを使用して、それぞれマスターノードとノードノードとして3台のサーバーをシミュレートします

ここに画像の説明を挿入

ノードのプロパティ ip
主人 192.168.237.136
node1 192.168.237.137
node2 192.168.237.139

4.2初期化作業

ファイアウォールをオフにします

systemctl stop firewalld
systemctl disable firewalld

selinuxを閉じる

sed -i 's/fenforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0 # 临时

スワップを閉じる

swapoff -a # 临时
sed -ri 's/. *swap. */#&/' /etc/fstab  # 永久

計画に従ってホスト名を設定します

hostnamectl set-hostname <hostname>

マスターノードにホストを追加します(マスターノードでのみ実行されます)

cat >> /etc/hosts << EOF 
192.168.237.136 master1  # ip 主机名称
192.168.237.137 worker1
192.168.237.139 worker2
EOF

ブリッジされたIPv4トラフィックをiptablesに渡すチェーン

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  # 生效

時間同期

yum install ntpdate -y
ntpdate -u ntp.api.bz

4.3 Docker / kubeadm/kubeletをインストールします

KubernetesのデフォルトのCRI(コンテナランタイム)はDockerであるため、最初にDockerをインストールします

4.3.1Dockerをインストールする

以前の記事を参照してください

https://blog.csdn.net/weixin_45842494/article/details/123013040

4.3.2 AlibabaCloudYUMソフトウェアソースを追加する

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo-gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

4.3.3 kubeadm、kubelet、およびkubectlをインストールします

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0  # 指定版本,根据需要选择
systemctl enable kubelet  # 设置开机启动

4.4Kubernetesマスターをデプロイする

マスターノード(マスター)で実行

kubeadm init \
--apiserver-advertise-address=192.168.237.136 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16  # 这些网段没严格要求,和当前网段不冲突就行

ここに画像の説明を挿入

Your Kubernetes control-plane has initialized successfully!成功を示すプロンプトメッセージを参照し、docker images引っ張られているように見えるミラーを使用します。

kubectlツールを使用します(プロンプト情報でコピーします)

mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl get nodes

ここに画像の説明を挿入

4.5 加入Kubernetes Node

ワーカーノード(ノード)実行

クラスターに新しいノードを追加するには、kubeadminitで出力されたkubeadmjoinコマンドを実行します。

# 这些内容根据提示写
kubeadm join 192.168.237.136:6443 --token 82lknt.d9fg3q0dnl17zc6d \
    --discovery-token-ca-cert-hash sha256:1c95dcbc9104363f14061d6f5bb3a38dc21c5cec12a884017f5790b388ee6ba3 

ここに画像の説明を挿入

デフォルトのトークン有効期間は24時間で、それ以降はトークンは使用できなくなります。このとき、トークンを再作成する必要があり、操作は次のとおりです。

kubeadm token create --print-join-command

図から、現在のNotReady状態であり、CNIネットワークプラグインを追加する必要があることがわかります。

4.6CNIネットワークプラグインのデプロイ

kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml
[root@master1 ~]# kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
master1   Ready    master   43m   v1.18.0
worker1   Ready    <none>   30m   v1.18.0
worker2   Ready    <none>   29m   v1.18.0
[root@master1 ~]# kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-57546b46d6-zls4k   1/1     Running   0          2m45s
calico-node-9n9hj                          1/1     Running   0          2m45s
calico-node-brrsq                          1/1     Running   0          2m45s
calico-node-l79q8                          1/1     Running   0          2m45s
coredns-7ff77c879f-64z5h                   1/1     Running   0          44m
coredns-7ff77c879f-mprbq                   1/1     Running   0          44m
etcd-master1                               1/1     Running   0          45m
kube-apiserver-master1                     1/1     Running   0          45m
kube-controller-manager-master1            1/1     Running   0          45m
kube-proxy-52ldf                           1/1     Running   0          31m
kube-proxy-sb2sc                           1/1     Running   0          44m
kube-proxy-xvqvh                           1/1     Running   0          31m
kube-scheduler-master1                     1/1     Running   0          45m
[root@master1 ~]# 

ここに画像の説明を挿入

ステータスは実行中です

4.7kubernetesクラスターをテストする

Kubernetesクラスターにポッドを作成し、実行されていることを確認します。

kubectl create deployment nginx --image=nginx

kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get pod,svc
[root@master1 ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@master1 ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@master1 ~]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-nntwg   1/1     Running   0          78s
[root@master1 ~]# kubectl get pod,svc
NAME                        READY   STATUS    RESTARTS   AGE
pod/nginx-f89759699-nntwg   1/1     Running   0          2m49s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        54m
service/nginx        NodePort    10.106.109.109   <none>        80:30179/TCP   2m3s
[root@master1 ~]# 

ここに画像の説明を挿入

ここでのポート番号は30179であることに注意してください

外部ネットワークアクセス:NodeIp:Port

ここに画像の説明を挿入

もちろん、マスターノードのIPを使用することもできます。

ここに画像の説明を挿入

シングルマスターノードクラスターが構築されます。マルチマスターノードクラスターの構築については、後で説明します。フォローしてください。

WeChatのパブリックアカウントはすでに開設されています。「JiangXiaonanと彼の友達」を検索すると、私を見つけることができます。友達、注目してください。記事は同期して更新され、見やすくなります。

おすすめ

転載: blog.csdn.net/weixin_45842494/article/details/123267341