Kubeadmはマスターと2つのスレーブKubernetesクラスターを展開します

Kubeadmはマスターと2つのスレーブKubernetesクラスターを展開します

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​

Kubernetes クラスターは、一般的に、1 つのマスターと複数のスレーブ、および複数のマスターと複数のスレーブの 2 つのカテゴリに分けられます

1 つのマスターと複数のスレーブ: 1 つのマスター ノードと複数のノード ノード。構築は簡単ですが、単一のマシンが故障するリスクがあります。テスト環境に適しています。

複数のマスターと複数のスレーブ:複数のマスター ノードと複数のノード ノード。セットアップが難しく、実稼働環境に適しています。

この記事では、kubeadm を使用して、テスト用にマスター 2 スレーブの Kubernetes クラスターをデプロイします。また、ネットワーク プラグインと、単純な nginx サービスのデプロイの例も紹介します。

1. スワップパーティションを無効にする

 スワップオフ- a

スワップ パーティションは仮想メモリ パーティションを指します。その機能は、物理メモリが使い果たされた後に使用できるように、ディスク領域をメモリに仮想化することです。

スワップ デバイスを起動するとシステム パフォーマンスに非常に悪影響を与えるため、ここではスワップ パーティションをオフにします。

 vim / etc / fstab

最後の行をコメントアウトします。

2. dockerをインストールする(3ノード)

1.ミラーソースを切り替える

 https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo を実行します。 

2. 以前のイメージソースでサポートされているDockerバージョンを確認する

 yum list docker -ce --showduplicates を実行します

3. 指定されたバージョンの docker をインストールします (–setopt=obsoletes=0 で、指定されたバージョンを使用します)

 yum install --setopt = obsoletes = 0 docker - ce - 18.06.3   ce - 3. el7 - y

4. 設定ファイルを追加する

Docker がデフォルトで使用する Cgroup ドライバーは cgroupfs ですが、Kubernetes では cgroupfs ではなく systemd を使用することが推奨されています。

 /etc/docker ディレクトリに移動します

cat < <EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"レジストリミラー": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
終了

5. Dockerを起動する

 systemctl docker を再起動します
systemctl ドッカーを有効にする

3. Kubernetes コンポーネントをインストールする (3 つのノード)

1. ミラーソースを構成する

 vim /etc/yum.repos.d/kubernetes.repo     
[ Kubernetes ]
名前= Kubernetes
Baseurl = http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
有効= 1
gpgチェック= 0
リポジトリgpgcheck = 0
gpgkey = http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyum.com/kubernetes/yum/doc/rpm-package-key.gpg

2. 指定されたバージョンのkubeadm、kubelet、kubectlをインストールする

 yum install -- setopt = obsoletes = 0 kubeadm - 1.23 .6 - 0 kubelet - 1.23 .6 - 0 kubectl - 1.23 .6 - 0 - y

3. /etc/sysconfig/kubeletの内容を変更し、内部の内容を置き換える

 vim / etc / sysconfig / kubelet
KUBELET_CGROUP_ARGS = "--cgroup-driver=systemd"
KUBE_PROXY_MODE = "ipvs"

4. kubeletを自動的に起動するように設定する

 systemctl kubelet を有効にする

4. クラスターイメージを準備する

このステップは、kubeadm init の 5 番目のステップを準備するためのものです。init はイメージをプルしますが、このイメージは kubernetes ウェアハウスにあります。ネットワーク上の理由により接続できませんので、以下の方法をご利用ください。

 こんにちは シュ

コンテンツを追加します。

 画像= (
kube - apiserver : v1.23.6
kube - コントローラー- マネージャー: v1.23.6
kube - スケジューラ: v1.23.6
kube - プロキシ: v1.23.6
一時停止: 3.6
など: 3.5.1-0
coredns : v1.8.6

$ { images [ @ ]} 内のリストの場合; する
docker pull レジストリcn - 杭州アリユンクスcom / google_containers / $list
docker タグレジストリcn - 杭州アリユンクスcom / google_containers / $list k8sgcrio / $リスト
終わり
docker タグレジストリcn - 杭州アリユンクスcom / google_containers / coredns : v1.8.6k8s gcrio / coredns / coredns : v1.8.6
 シマ シュ

5. クラスタの初期化(マスターノード)

1. マスターノードがクラスターを作成する

 kubeadm 初期化\
--kubernetes - バージョン= v1.23.6 \
-- ポッド- ネットワーク- cidr = 10.0 .0 .0 / 16 \
-- サービス- cidr = 10.0 .0 .0 / 12 \
--apiserver - アドバタイズ- アドレス= 172.20.10.6

最後のいくつかのコマンドを記録します。

初期化に失敗した場合は、次のコマンドを使用して環境をクリーンアップし、再初期化します。

kubeadm リセット

rm -rf $HOME/.kube

systemctl kubelet を再起動します

2. 必要なファイルを作成する

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

6. スタンバイマシンの初期化

kubeadm init の最後にある kubeadm join ステートメントを使用して、スタンバイ マシンを初期化します。 kubeadm join ステートメントを忘れた場合は、次のコマンドを使用して、マスター ノード上の join コマンド パラメータを取得できます。

 kubeadm トークン作成-- 印刷- 参加- コマンド

2 台のスタンバイ マシンで変更ステートメントを実行し、クラスターに参加します。結果は次のとおりです。

ノードのステータスを表示するには、コントロールプレーンで kubectl get nodes を実行するように求められます。つまり、マスターノードで実行します。ノードのステータスが NotReady であることがわかります。これは、ネットワーク プラグインがインストールされていないためです。

 kubectl ノードを取得する

7. ネットワークプラグインをインストールする - calico

Kubernetes は、flannel、calica、canal など、さまざまなネットワーク プラグインをサポートしています。いずれかを選択して使用できます。今回は三毛猫を選びました。

ネットワーク プラグインがインストールされていない場合、CoreDNS はネットワーク プラグインなしでは IP アドレスを割り当てることができないため、ノードは <font color="#dd00dd">NotReady</font> 状態になり、保留状態のままになります。

このプラグインがないと、kubedns は起動できず、ポッドは相互に通信できません。

<font color="#dd00dd">マスターノードでのみ実行する必要があります。プラグインは、各ノードで実行される DaemonSet コントローラーを使用します。 </font><br />。

1. 設定ファイルを取得して適用する

curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O を実行します。

2. サービスの状態を確認すると、すべて実行中である

ノードのステータスを再度確認すると、すべてのノードが <font color=“#dd00dd”>準備完了</font> 状態であることがわかりました。

8. CoreDNSをデプロイする

 git クローンhttps://github.com/coredns/deployment.git
yum - y インストールepel - リリース
yum -y jq をインストールします
cd デプロイメント/ kubernetes /
./deploy .sh -i 10.0 .0 .254 > coredns .yaml
kubectl 適用-f coredns .yaml

コマンドを使用してステータスを確認し、ポッドが ContainerCreating 状態にあることを確認します。

 kubectl ポッドSVC を取得- A

kubectl describe を使用して coredns ポッドを表示し、 coredns イメージがプルされていることを確認します。しばらくお待ちください。

 kubectl はポッドcoredns - 799 bc9dbc6 - m7q4t - n kube - システムを説明します

しばらく待ってからイベントを確認すると、プルがようやく成功したことがわかりました。

pod と svc のステータスを確認します。両方とも実行中です。

 kubectl ポッドSVC を取得- A 

9. kubernetes-dashboardのデプロイ

1. yamlファイルを取得する

 https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml ​ を取得します。

2.ダッシュボードを外部に公開するための設定を追加する

 vim 推奨.yaml

デフォルトではダッシュボードはクラスター内でしかアクセスできないため、サービスを NodePort タイプに変更して外部に公開します。

3. 変更したrecommended.yamlを適用する

 kubectl apply - f 推奨.yaml 

4. kubernetes-dashboardのポッドステータスを確認すると、すべてすでに実行中であることがわかります。

 kubectl get pods - n kubernetes - ダッシュボード

5. ウェブサイトにアクセスする

https://NodeIP:30001。

私のマスターノードのアドレスは 172.20.10.6 なので、https://172.20.10.6:30001 にアクセスしてください。

6. サービス アカウントを作成し、デフォルトの cluster-admin 管理者クラスター ロールにバインドします。

ユーザーを作成します:

 kubectl サービスアカウントダッシュボードを作成- admin - n kube - system

ユーザー認証:

 kubectl クラスターロールバインディングダッシュボード- admin --clusterrole = cluster - admin --serviceaccount = kube - system : ダッシュボード- admin 作成します

ユーザートークンを取得します:

 kubectl はシークレットを記述します- n kube - system $ ( kubectl - n kube - system はシークレットを取得します| awk '/dashboard-admin/{print $1}' ) 

7. 出力トークンを使用してダッシュボードにログインします。

ノード、名前空間など、現在の k8s 関連情報を表示できます。

10. k8sを使ってnginxを簡単にデプロイする

1. yamlに従って名前空間を作成する

 vim nginx - 名前空間.yaml
内容は以下のとおりです
apiVersion : v1 #タイプは名前空間です
kind : 名前空間#Type は名前空間です
メタデータ:
name : ns - テスト#名前空間名
ラベル:
名前: ラベル- テスト#pod ラベル

名前空間を作成します。

 [root@pg01 ~]# kubectl create -f nginx-namespace.yaml
名前空間/ns-test が作成されました

クエリ名前空間:

 [ root @ pg01 ~ ]# kubectl 名前空間を取得する
名前ステータス年齢
デフォルトアクティブ92 m
kube - ノード- リースアクティブ92
kube - パブリックアクティブ92
kube - システムアクティブ92 m
kubernetes - ダッシュボードアクティブ21
ns - テストアクティブ5

2.ポッドを作成する

通常、ポッドは直接作成されず、コントローラーを通じて作成されます。デプロイメントはコントローラーの1つです

nginx イメージをプルします:

 docker プルnginx

ポッドの yaml ファイルを編集します。

 vim nginx - デプロイメント.yaml

内容は以下のとおりです。

 apiバージョン: アプリ/ v1
種類: デプロイメント
メタデータ:
名前空間: ns - テスト
名前: nginx - デプロイメント
仕様:
セレクター:
マッチラベル:
アプリ: nginx
レプリカ2
テンプレート
メタデータ:
ラベル:
アプリ: nginx
仕様:
コンテナ:
- 名前: nginx
画像: nginx : 最新
ポート:
- コンテナポート: 80

作成する:

 kubectl create -f nginx -deployment .yaml

クエリ:

 kubectl ポッドを取得- n ns - テスト
kubectl デプロイメントを取得- n ns - テスト

nginx-deployment によってデプロイされた両方のポッドは成功しました。

nginx に割り当てられた 2 つの IP を確認します。

 kubectl ポッドを取得- o ワイド- n ns - テスト

アクセステスト:

 カールhttp://10.0.181.5 

3. サービスを作成する

対応する yaml ファイルを作成します。

 vim nginx - service.yaml

内容は以下のとおりです。

 APIバージョン: v1
種類: サービス
メタデータ:
名前空間: ns - テスト
名前: nginx - サービス
仕様:
セレクター:
アプリ: nginx
ポート:
- プロトコル: TCP
ポート: 80
ターゲットポート: 80

サービスを作成します。

 kubectl create -f nginx -service .yaml

サービスを見る:

 kubectl get svc nginx - サービス- o ワイド- n ns - tes

アクセステスト:

4. ポートを公開してnginxサービスをデプロイする

nginx-service.yaml ファイルは次のとおりです。

 APIバージョン: v1
種類: サービス
メタデータ:
ラベル:
アプリ: nginx
名前: nginx - サービス
名前空間: ns - テスト
仕様:
ポート:
- ポート: 9000
名前: nginx - サービス
プロトコル: TCP
targetPort : 80 # コンテナ nginx が外部に開くポートは、 上記の dm によって指定されています
nodePort : 31090 #外部ネットワークアクセス用のポート
セレクター:
アプリ: nginx
タイプ: NodePort

サービスをデプロイします。

 kubectl create -f nginx -service .yaml

サービスとポートを確認してください。

 kubectl get svc nginx - サービス- n ns - テスト

テストは次のとおりです。

ブラウザはマスターノードの IP アドレスを使用して k8s の nginx にアクセスします。マスターノードの IP アドレスは 172.20.10.6 なので、http://172.20.10.6:31090/ にアクセスします。結果は以下のようになります。

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​.

<<:  可用性、同時実行性、パフォーマンスに優れたクラウドネイティブ コンテナ ネットワークを構築するにはどうすればよいでしょうか?

>>:  エッジコンピューティング (Edge ML) を 1 つの記事で理解しましょう。

推薦する

gfrack フランスの高防御 VPS (99 元/年、1G メモリ/1 コア/30g NVMe/無制限トラフィック) の簡単なレビュー

新しく設立されたVPSブランドgfrackは現在、フランスの高防御クラウドサーバー事業に注力しており...

ウェブマスターはなぜ SEO 最適化を行うのでしょうか?

インターネットの急速な発展に伴い、企業の間でウェブサイトの SEO 最適化がますます普及しています。...

中小企業は戦略を考える必要はない。最も重要なのは、自ら豆腐を挽くことだ

多くの企業は生き残ることがますます困難になっていると感じています。彼らはもはや消費者を理解しておらず...

#11.11# edgenat: すべての VPS が 30% オフ、韓国 CN2\US CN2\US Unicom cuvip 大容量帯域幅

edgenat も今年の Double Eleven に参加しました。すべての VPS が年間支払い...

プライバシーを保護するためにブラウザでサードパーティのCookieをブロックする

大規模なウェブサイトで何かを検索すると、検索した内容に関連する広告が他のウェブサイトに表示されます。...

Pinduoduoのゲーミフィケーション運営の核心を徹底解説!

屋台経済は一夜にして人気となり、インターネットに初めて「屋台」を持ち込んだ企業もまた、ハイライトの瞬...

第三世代の検索? 360は冗談ですか? !

8月15日、360 Searchの公式Weiboアカウントで、8月16日の360 Search一周年...

通信とエッジコンピューティングの融合がネットワークインテリジェンスをどのように再定義するか

急速に変化するテクノロジーの世界では、通信とエッジ コンピューティングの融合は、ネットワーク インテ...

Google ADSense 配信プラン

ウェブマスター向けのウェブサイトであるため、GG広告を掲載する際には「推奨」を重視し、オンライン収益...

virmach: 夏の VPS クリアランス セール、複数のコンピュータ ルーム、超低価格、Alipay + PayPal

virmach の毎年恒例の夏のクリアランス セールが始まりました。過去の経験から、異なる構成がさま...

ASO 最適化: ユーザーが APP を検索するとき、何を検索しているのでしょうか?

はじめに:この記事は によって編集され、公開されています。転載する場合は、必ずこの記事へのリンクを含...

またまた受賞です! | H3CがGNTCカンファレンスで輝き、インテリジェントネットワークの革新をリード

10月22日から24日まで、国家次世代インターネットエンジニアリングセンターが主催し、南京江北新区な...

毎日の話題:WeChatはユーザーの安全を守り、自社の利益も考慮してXiaoIceを禁止した

A5 Webmaster Network(www.admin5.com)は6月3日、マイクロソフトが...

クラウドへの移行にはビッグデータの問題の解決が必要

Denodo の CTO である Alberto Pan 氏は、企業がビジネスをクラウド プラットフ...