Kubernetesクラスタを素早くインストールして構成する

Kubernetesクラスタを素早くインストールして構成する

Kubernetes とは何ですか?

まず第一に、これはコンテナ技術に基づいた新しい最先端の分散アーキテクチャ ソリューションです。このソリューションは非常に新しいものですが、過去 10 年間にわたるコンテナ テクノロジの大規模な適用における Google の経験の蓄積と昇華の重要な成果です。正確に言うと、Kubernetes は、10 年以上もの間、厳重に秘密にされてきた Google の秘密兵器である Borg のオープンソース版です。 Borg は、Google 社内で使用されている有名な大規模クラスタ管理システムです。これはコンテナ テクノロジに基づいており、リソース管理を自動化し、複数のデータ センターにわたるリソース使用率を最大化することを目的としています。

[[269605]]

2015 年 4 月、長らく噂されていた Borg 論文が、Kubernetes (K8S) の注目度の高いプロモーションとともに Google によって正式にリリースされ、人々はその詳細を知ることができるようになりました。 Kubernetes が前身の Borg を基盤とし、過去 10 年間の Borg の経験と教訓から学んだからこそ、オープンソース化されると大ヒットし、コンテナ技術の分野を瞬く間に席巻したのです。

システム設計が Kubernetes の設計哲学に従っている場合、ビジネスとはほとんど関係のない従来のシステム アーキテクチャの基礎となるコードや機能モジュールは、すぐに私たちの視界から消えてしまいます。負荷分散の選択と展開について心配する必要がなくなり、複雑なサービス ガバナンス フレームワークの導入や開発を検討する必要がなくなり、サービス監視および障害処理モジュールの開発について心配する必要がなくなりました。つまり、Kubernetes が提供するソリューションを使用することで、開発コストを 30% 以上節約し、ビジネスそのものにさらに集中できるようになりました。さらに、Kubernetes は強力な自動化メカニズムを提供するため、その後のシステム運用と保守の難易度とコストが大幅に削減されました。

Kubernetesの概要

Docker テクノロジの発展と普及に伴い、クラウドネイティブ アプリケーションやコンテナのスケジュールおよび管理システムも IT 分野のホットな話題になっています。実際、Docker テクノロジーが普及する前から、クラウド ネイティブ アプリケーションのアイデアは、クラウド コンピューティング テクノロジーの先駆者や分散システム アーキテクチャの推進者によって広く普及していました。たとえば、Heroku のエンジニアは 2011 年にはすでにクラウド ネイティブ アプリケーションの 12 要素を提案していましたが、クラウド ネイティブ アプリケーションの基本的な実装として仮想マシン テクノロジを使用していました。仮想マシン イメージのサイズが大きいこと、イメージ標準に一貫性がないこと、パッケージ化プロセスとツールに一貫性がないことなどにより、クラウド ネイティブ アプリケーションの標準は業界で広く受け入れられず、クラウド ネイティブ アプリケーションの人気が制限されています。 Docker の登場により、クラウド ネイティブ アプリケーションの構築、配信、運用を制限するこれらのボトルネックが解決され、Docker を使用する開発者にとってクラウド ネイティブ アプリケーションの構築が自然な選択になりました。

Kubernetes は、実稼働環境向けに設計されたコンテナのスケジュールおよび管理システムです。負荷分散、サービス検出、高可用性、ローリング アップグレード、自動スケーリング、およびコンテナ クラウド プラットフォームのその他の機能要件をネイティブでサポートします。 Kubernetes は K と s の間に 8 つの文字があるため、k8s と呼ばれることがよくあります。実際、k8s システムのアーキテクチャと設計概念を深く理解すると、k8s システムはクラウドネイティブ アプリケーションを実行するように設計されていることがわかります。同時に、k8s システムの使用が深まり、普及するにつれて、クラウドネイティブ アプリケーションの設計パターンがますます多く登場し、スタンドアロン コンテナ サービスを開始するのと同じくらい簡単に、k8s システムに基づく本番レベルの複雑なクラウドネイティブ アプリケーションを設計および開発できるようになります。

なぜKubernetesなのか?

Kubernetes を使用する理由はたくさんありますが、最も基本的な理由は、IT が新しいテクノロジー主導の業界であるということです。新興のコンテナ技術であるDockerは、多くの企業に採用されています。単一のマシンからクラスターへの移行は避けられず、クラウド コンピューティングの急速な発展によりこのプロセスが加速しています。 Kubernetes は現在、業界で広く認知され、好まれている唯一の Docker 分散システム ソリューションです。今後数年間で、企業のローカル サーバーで実行されるか、パブリック クラウドでホストされるかに関係なく、多数の新しいシステムがこれを選択することが予測されます。

Kubernetes を使用するとどのようなメリットが得られますか?

まず第一に、Kubernetes を使用するということは、マイクロサービス アーキテクチャを完全に採用することです。マイクロサービス アーキテクチャの中核は、巨大なモノリシック アプリケーションを多数の小さな相互接続されたマイクロサービスに分解することです。マイクロサービスは複数のインスタンスのコピーによってサポートされる場合があり、システム負荷の変化に応じてコピーの数を調整できます。組み込みロードバランサーは、k8s プラットフォーム内の複数のインスタンスのコピーによってサポートされており、システム負荷の変化に応じてコピーの数を調整できます。組み込みロードバランサーは、k8s プラットフォームで重要な役割を果たします。マイクロサービス アーキテクチャでは、各サービスを専用の開発チームで開発することができ、開発者は開発テクノロジを自由に選択できるため、大規模なチームにとって非常に価値があります。さらに、各マイクロサービスは独立して開発、アップグレード、拡張されるため、システムは非常に安定し、迅速な反復的な進化が可能になります。

第二に、Kubernetes システム アーキテクチャには、非常に強力な水平拡張機能があります。インターネット企業にとって、ユーザー規模は資産に相当します。より多くのユーザーを持つ人が競争に勝つでしょう。したがって、超強力な水平拡張機能は、インターネットビジネスシステムの重要な指標の 1 つです。コードを変更することなく、Kubernetes クラスターを、数個のノードのみを含む小規模なクラスターから、数百または数千のノードを含む大規模なクラスターまでスムーズに拡張できます。 Kubernetes が提供するツールを使用すると、クラスターの拡張をオンラインで完了することもできます。マイクロサービスが適切に設計され、ハードウェアまたはパブリック クラウド リソースが直線的に増加している限り、システムは多数の同時ユーザーによる負荷に耐えることができます。

Kubernetes の基本概念と用語

Node、Pod、Replication Controller、Server、Deployment、Job、DaemonSet など、Kubernetes のほとんどの概念は、一種のリソース オブジェクトと見なすことができます。ほぼすべてのリソース オブジェクトは、Kubernetes が提供する kubectl ツールを使用して追加、削除、変更、確認することができ、永続的なストレージとして etcd に保存されます。この観点から見ると、Kubernetes は実際には、etcd ストレージに保存されている予想されるリソース状態と現在の環境の実際のリソース状態との差異を追跡および比較することで、自動制御と自動エラー修正の高度な機能を実装した、高度に自動化されたリソース制御システムです。

マスター

Kubernetes のマスターは、クラスター制御ノードを指します。各 Kubernetes クラスターには、クラスター全体の管理と制御を担当するマスター ノードが必要です。基本的に、すべての Kubernetes 制御コマンドはマスターに送信され、マスターが特定の実行プロセスを担当します。以降に実行されるコマンドはすべて、基本的にマスター ノードで実行されます。マスター ノードは通常、独立した X86 サーバーを占有します。主な理由の一つは、それがあまりにも重要だということです。クラスター全体の頭脳です。ダウンしたり利用できなくなったりすると、すべての制御コマンドが失敗します。

マスター ノードでは次の主要なプロセスが実行されています。

Kube-apiserver: HTTP REST インターフェースの主要なサービス プロセスを提供します。これは、Kubernetes 内のすべてのリソースを追加、削除、変更、およびチェックするための唯一のエントリ ポイントであり、クラスター制御エントリ プロセスでもあります。 Kube-controller-manager: Kubernetes 内のすべてのリソース オブジェクトの自動制御センターであり、リソース オブジェクトの管理人として理解できます。 Kube-scheduler: バス会社の配車室に相当する、リソースのスケジューリング プロセスを担当します。


実際、Kubernetes 内のすべてのリソース オブジェクトのデータは etcd に保存されるため、etcd サーバー プロセスはマスター ノードで開始されることがよくあります。

ノード

マスターに加えて、Kubernetes クラスター内の他のマシンはノード ノードと呼ばれ、以前のバージョンではミニオンとも呼ばれていました。マスターと同様に、ノードは物理ホストまたは仮想マシンにすることができます。ノードは Kubernetes クラスター内のワークロード ノードであり、各ノードにはマスターによって負荷が割り当てられます。ノードがダウンすると、そのワークロードはマスターによって他のノードに自動的に転送されます。

各ノードは次の主要なプロセス セットを実行します。

  • Kubelet: Pod に対応するコンテナの作成、起動、停止を担当し、マスター ノードと緊密に連携して基本的なクラスター管理機能を実装します。
  • Kube-proxy: Kubernetes Service の通信および負荷分散メカニズムを実装する重要なコンポーネント。

Pod: Kubernetes の最も重要かつ基本的な概念です。各ポッドには、「ルート コンテナー」と、密接に接続された 1 つ以上のビジネス コンテナーが含まれています。


Kubernetes は各 Pod に PodIP と呼ばれる一意の IP アドレスを割り当て、Pod 内の複数のコンテナが PodIP アドレスを共有します。基盤となるネットワークは、クラスター内の任意の 2 つの Pod 間の直接通信をサポートする必要があり、これは通常、仮想レイヤー 2 ネットワーク テクノロジー (Flannel) を使用して実現されます。

k8s クラスター展開ソリューション

以下は、私のクラスター展開戦略です。1 つのマスター + 2 つのノード (minion1.2 より前の名称)。私のストレージ クラスター etcd は単一ポイント クラスターであり、推奨されません。ネットワークはフランネル仮想セカンダリ ネットワークを使用します。


Kubernetes には完全なクラスター管理機能があります。

  • 多層セキュリティ保護とアクセスメカニズムを搭載
  • マルチテナントアプリケーションサポート機能
  • 透過的なサービス登録とサービス検出メカニズム
  • インテリジェントロードバランサーを内蔵
  • 強力な障害検出および自己修復機能
  • サービスのローリングアップグレードとオンライン容量拡張機能
  • スケーラブルな自動リソーススケジューリングメカニズム
  • 多粒度のリソース管理機能

同時に、Kubernetes は、開発、デプロイメント テスト、運用、保守監視など、あらゆる側面をカバーする完全な管理ツールを提供します。

Kubernetes では、サービスは分散クラスター アーキテクチャの中核です。サービス オブジェクトには、次の主な機能があります。

  • 一意に割り当てられた名前を持ちます (mysql-service など)。
  • 仮想 IP (クラスター IP、サービス IP、または VIP) とポート番号を持ちます。
  • 何らかのリモート サービス機能を提供できます。
  • これは、このサービス機能を提供するコンテナ アプリケーションのセットにマップされます。

Kubernetes.io は、Web ブラウザー経由で事前にデプロイされた Kubernetes クラスターを使用して、Kubernetes の機能とアプリケーション シナリオをすぐに体験できるインタラクティブ チュートリアルを開発しました。

リンク: https://kubernetes.io/docs/tutorials/kubernetes-basics/

K8s 公式ダウンロードアドレス: https://github.com/kubernetes


環境整備

  1. ホスト名 オペレーティングシステム IPアドレス
  2. マスター Centos 7.4-x86_64 192.168.2.102
  3. ノード1 Centos 7.4-x86_64 192.168.2.108
  4. ノード2 Centos 7.4-x86_64 192.168.2.228

CentOS7の組み込みファイアウォールサービスをオフにする

  1. systemctl ファイアウォールを無効にする
  2. systemctl 停止 ファイアウォール

ホスト名を変更する

  1. [root@localhost ~]# ホスト名ctl マスター //192.168.2.102
  2. [root@localhost ~]# ホスト名ctl node1 //192.168.2.108
  3. [root@localhost ~]# ホスト名ctl node2 //192.168.2.228

ホスト名をマスター、ノード1、ノード2に変更し、IPアドレスを設定し、3台のテストマシンの/etc/hostsファイルを設定(3台のサーバーで同期)

  1. [root@master ~]# cat /etc/hosts
  2. 127.0.0.1 ローカルホスト ローカルホスト.ローカルドメイン ローカルホスト4 ローカルホスト4.ローカルドメイン4
  3. ::1 ローカルホスト ローカルホスト.ローカルドメイン ローカルホスト6 ローカルホスト6.ローカルドメイン6
  4. 192.168.2.102 マスター
  5. 192.168.2.108 ノード1
  6. 192.168.2.228 ノード2
  7. [ルート@マスター ~]#   

時間調整(時間調整は3台のマシンすべてで実行されます)

  1. [root@master ~]# ntpdate ntp1.aliyun.com
  2. 9月13日 14:48:02 ntpdate[1596]:タイムサーバー120.25.115.20のオフセットを-0.015854秒に調整 
  3. [root@master ~]# hwclock
  4. 2018年9月13日木曜日 14:49:51 -0.646898秒

Kubernetesをインストールし、Dockerイメージを構成する

[root@master ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Kubernetes ウェアハウスを構成する

  1. [root@master yum.repos.d]# vim kubernetes.repo
  2. [Kubernetes]
  3. 名前= kubernetes リポジトリ
  4. ベースURL=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. gpgcheck=1
  6. gpgkey=https : //mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  7. 有効=1   

  1. [ root@master ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key .gpg
  2. [root@master ~]# rpm --import rpm-package-key.gpg  
  3. [root@master yum.repos.d]# yum repolist

  1. [root@master yum.repos.d]# scp CentOS-Base.repo docker-ce.repo kubernetes.repo node1:/etc/yum.repos.d/

DockerとKubeletをインストールする

  1. [root@master ~]# yum -y install docker-ce kubelet kubeadm kubectl

環境変数

  1. [root@master ~]# vim /usr/lib/systemd/system/docker.service
  2. 手動で行を追加する
  3. 環境 = "HTTPS_PROXY=http://www.ik8s.io:10080"  
  4. 環境 = "NO_PROXY=127.0.0.0/8,172.0.0.0/16"  

  1. [root@master ~]# systemctl daemon-reload
  2. Dockerを起動する
  3. [root@master ~]# systemctl dockerを起動します  
  4. スタートアップを設定する
  5. [root@master ~]# systemctl docker を有効にする
  6. [root@master ~]# docker 情報  
  7. 出力が1であることを確認する
  8. [root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
  9. 1
  10. [root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
  11. 1   
  12. [root@master ~]# rpm -ql kubelet
  13. /etc/kubernetes/manifests #マニフェストディレクトリ
  14. /etc/sysconfig/kubelet #設定ファイル
  15. /etc/systemd/system/kubelet.service
  16. /usr/bin/kubelet #メインプログラム  
  17. スタートアップを設定する
  18. [root@master ~]# systemctl kubelet を有効にする

初期化

  1. [root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12  

エラーメッセージ、解決策:

  1. [root@master ~]# vim /etc/sysconfig/kubelet
  2. KUBELET_EXTRA_ARGS = "--fail-swap-on=false"     
  3. [root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=スワップ 

このコマンドは保存する必要があることに注意してください(クラスターを追加するため)

  1. kubeadm192.168.2.102:6443 に参加します--token ns4kps.j8cuqwf78emp5a5b --discovery-token-ca-cert-hash sha256:b71b7e52c318959bab3f05f02f6fe51d6396d8c54ea6849ec7556927d1c6c88a  
  2. [root@master ~]# docker イメージ ls

  1. [root@master ~]# ss –ntl

  1. [root@master ~]# mkdir -p $HOME/.kube
  2. [root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. コンポーネントが正常に動作しているかどうかを確認する
  4. [root@master ~]# kubectl get cs

ノード情報が正常かどうか確認して検証する

  1. [root@master ~]# kubectl ノードを取得する
  2. 名前ステータス 役割 年齢 バージョン
  3. マスター NotReady マスター 44m v1.11.3

フランネルをインストールする

  1. [root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  2. [root@master ~]# curl -sSL "https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true" | kubectl作成-f -

  1. [root@master ~]# docker イメージ ls

ノード情報が正常かどうか確認して検証する

  1. [root@master ~]# kubectl ノードを取得する
  2. 名前ステータス 役割 年齢 バージョン
  3. マスター 準備完了マスター 2h v1.11.3

ポッドの実行状態を確認する

  1. [root@master ~]# kubectl get pods -n kube-system

設定ファイルはノード1とノード2に転送されます

  1. [root@master ~]# scp /usr/lib/systemd/system/docker.service node1:/usr/lib/systemd/system/docker.service
  2. [root@master ~]# scp /etc/sysconfig/kubelet node1:/etc/sysconfig/
  3. [root@master ~]# scp /usr/lib/systemd/system/docker.service node2:/usr/lib/systemd/system/docker.service
  4. [root@master ~]# scp /etc/sysconfig/kubelet node2:/etc/sysconfig/

Node1 サーバー構成

  1. [ root @node1 ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

  1. [root@node1 ~]# rpm --import rpm-package-key.gpg  

dockerとkubeletをインストールする

  1. [root@node1 ~]# yum -y install docker-ce kubelet kubeadm

Dockerを起動する

  1. [root@node1 ~]# systemctl dockerを起動します
  2. [root@node1 ~]# systemctl で docker kubelet を有効にする
  3. [root@node1 ~]# docker情報

メインクラスターを追加する

  1. [root@node1 ~]# kubeadm join 192.168.2.102:6443 --token ns4kps.j8cuqwf78emp5a5b --discovery-token-ca-cert-hash sha256:b71b7e52c318959bab3f05f02f6fe51d6396d8c54ea6849ec7556927d1c6c88a --ignore-preflight-errors=Swap  

ダウンロードミラーを表示

  1. [root@node1 ~]# docker イメージ ls

マスターサーバーでノード情報を確認できます

  1. [root@master ~]# kubectl ノードを取得する
  2. 名前ステータス 役割 年齢 バージョン
  3. マスター 準備完了マスター 3h v1.11.3
  4. node1 準備完了 7m v1.11.3  
  5. [root@master ~]# kubectl get pods -n kube-system -o wide

Node2 サーバー構成

  1. [ root @node2 ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

  1. [root@node2 ~]# rpm --import rpm-package-key.gpg  

dockerとkubeletをインストールする

  1. [root@node2 ~]# yum -y install docker-ce kubelet kubeadm

Dockerを起動する

  1. [root@node2 ~]# systemctl dockerを起動します
  2. [root@node2 ~]# systemctl で docker kubelet を有効にします
  3. [root@node2 ~]# docker情報


メインクラスターを追加する

  1. [root@node2 ~]# kubeadm join 192.168.2.102:6443 --token ns4kps.j8cuqwf78emp5a5b --discovery-token-ca-cert-hash sha256:b71b7e52c318959bab3f05f02f6fe51d6396d8c54ea6849ec7556927d1c6c88a --ignore-preflight-errors=Swap  


マスターサーバーでノード情報を確認できます

  1. [root@master ~]# kubectl ノードを取得する

  1. [root@master ~]# kubectl get pods -n kube-system -o wide

<<:  組織がビジネスをクラウドに移行する6つの理由

>>:  IDC: パブリッククラウドサービスへの世界支出は2023年までに2倍以上に増加

推薦する

colorhost-3.99 ユーロ/512M メモリ/50G ハードドライブ/5T トラフィック/ドイツ

25% 割引コード: LETVC9DYY9Z43 (7 日間有効)、小規模 VPS 5TB トラフィ...

風水占いウェブサイトのSEOユーザーエクスペリエンスを向上させる方法の簡単な分析

占いや風水は特別な産業です。人々はこの言葉を聞くと、いつも宗教的な色合いを感じます。占いや風水は中国...

李佳奇は魏牙のトラフィックを「収穫」できないのか?

李佳琦の「美独り占め」23日目。 「手の速さを練習しましょう。私たちの家族では、手の速さを練習しなけ...

Weimian.comは数百万の広告料の未払いに直面し、プレッシャーを軽減するために人員削減を行った。

寒い冬の間、電子商取引の注目度の高い戦略はB2Cスタートアップに適しているでしょうか?元従業員が暴露...

オリジナル記事を書くことはランキングにランクインすることを意味しますか?

外部リンクは Baidu によって絶えず攻撃されているため、今日のウェブマスターは外部リンクの構築に...

dreamhost vps、無制限のトラフィックを備えた信頼性の高いVPS、およびopenstackクラウドVPS

米国ロサンゼルスに拠点を置くホスティング会社 Dreamhost は、1999 年から世界中にホステ...

ウェブサイト内部最適化ガイドラインにおける「ファミリー管理」の方法

次の Web サイトの内部最適化のために何を行う必要があるかを簡単に説明します。 1. オンサイト最...

#hostwinds# 個人と企業の両方に適した、1時間あたり5セント相当の強力な「クラウドサーバー」

良心的なホスティング会社である Hostwinds は、完璧なサービスを提供します。 hostwin...

経験の時代では、ユーザーは教育を受けることができない

この記事を書く前に、著者は尋ねたいのですが、百度が現在何世代の検索エンジンサービス技術を使用している...

Qihoo 360 のロボット プロトコル違反: 事故か怠慢か

Qihoo 360 が「ロボット プロトコル」に違反したというニュースは、かなり前からインターネット...

SEO 最適化を行う際、これらの 8 つのポイントを本当に理解していますか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスSEO 最適化を長い間続...

あなたのウェブサイトが含まれていない、心配ですか? Yunzhi のウェブサイト構築により、1 か月で Baidu のホームページに掲載されるようになります

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますウェブサイ...

検索エンジンの設計ではどのような問題を解決する必要がありますか?

月給5,000~50,000のこれらのプロジェクトはあなたの将来です検索エンジンの設計はユーザーのさ...

初心者が入札のコスト効率を高める方法を簡単に説明します

今のところ、Baidu について良いことは何も言えません。Baidu は、独自の Web サイトを持...

企業がクラウドロックインを回避するための 4 つの重要な技術決定

[51CTO.com クイック翻訳] すべてのクラウドプロバイダーには、企業や開発者をそのプラットフ...