GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS 7のKubernetesにポッド、レプリケーションコントローラー、サービスをデプロイする

こんにちはTechies、前のチュートリアルでは、CentOS 7 / RHEL 7へのKubernetesのインストール手順についてすでに説明しました。このチュートリアルでは、ポッド、レプリケーションコントローラー、およびサービスをデプロイする方法について説明します。

Kubernetesのセットアップはすでに稼働していると思います。そうでない場合は、次のガイドを参照してください。

  • CentOS 7 / RHEL 7にKubernetes(k8s)1.7をインストールする方法

それでは、ポッドのデプロイに飛び込みましょう。ポッドは、ワーカーノードまたはミニオンのいずれかで起動されるコンテナーの多層またはグループです。ポッドをデプロイするには、最初にマスターノードまたはkubectlツールがインストールされているシステムにymlまたはjsonファイルを作成する必要があります。 Kubectl ymlファイルを使用し、 kube-apiserverに接続します 6443ポートで、kube-apiserverは kube-controller-managerに接続します そして、Kube-controller-managerはさらに Kube-Schedulerに接続します スケジューラプログラムは、 kubeletを使用してワーカーノードに接続します エージェント、次にkubeletエージェントがノード上のdockerデーモンに接続し、ポッド定義に基づいてコンテナーを起動します。

pod ymlファイルの作成を開始する前に、まずDockerハブにテストDockerイメージがあることを確認してください。私の場合、Dockerハブに1つのDockerイメージ(linuxtechi / web-server-php)を既にプッシュしています。

それでは、マスターサーバー上にpod.ymlファイルを作成しましょう。

 [[email protected]〜]#mkdir / techcode [[email protected]〜]#cd / techcode / [[email protected] techcode]#vi pod.ymlapiVersion:v1kind:Podmetadata:name:web-server-podラベル:アプリ:webserver-app1リージョン:INラック:r1バージョン: "1.1"仕様:コンテナ:-名前:web-server-test-container画像:linuxtechi / web-server-php:testversionポート:-containerPort:80 

ファイルを保存して終了します。

apiversionをv1として指定したファイルでは、ファイル「/root/.kube/config」からapiversionを相互検証でき、種類を「ポッド」として指定できます。 ’このymlファイルを使用してポッドをデプロイしているため。ポッドのメタデータとラベルを指定します。

これとは別に、「イメージ名」やコンテナから公開されるポートなどのコンテナの仕様についても説明しました。

以下の「kubectl」を使用してください ‘ポッドをデプロイするコマンド。

 [[email protected] techcode]#kubectl create -f pod.ymlpod "web-server-pod" created [[email protected] techcode]#

次のコマンドを使用して、マスターノードからポッドのステータスを確認します

 [[email protected]〜]#kubectl get podsNAME READY STATUS RESTARTS AGEweb-server-pod 1/1 Running 0 NAME#be] 4m [[email protected]〜]#[[email準備完了ステータス再起動年齢IPNODEweb-server-pod1/1実行中04m10.32.0.2 worker-node2 [[email protected]〜]#

上記の出力のとおり、ポッドはワーカーノード2にデプロイされています。これまでポッドにパッティングまたはナッティングのルールを設定していないため、ポッド内で実行されているアプリケーションにアクセスできません。

特定のポートのワーカーノード2のIPアドレスでリクエストが発生した場合、ポート80のポッド(web-server-pod)にリダイレクトされるようにルールを作成しましょう。これはサービスで実現できます。サービスは、コマンドまたはymlファイルを介して定義できます。

「kubectlexpose」を使用してコマンドラインからサービスを作成する

 [[email protected]〜]#kubectl export pods web-server-pod --name =webpod-service --target-port =80 --type =NodePortservice "webpod-service" expected [[email protected]〜 ]#

上記のコマンドは、ポッドまたはコンテナを外界に公開します。ポッドが作成されるノードにランダムポートが生成され、上記のコマンドでパッティングタスクが実行されると言えます。外部ユーザーは、ランダムポートとともにノードIPを使用してポッド内で実行されているWebサーバーにアクセスできます。

次のコマンドを使用してサービスステータスを確認します

 [[email protected]〜]#kubectl get svcNAME CLUSTER-IP EXTERNAL-IP PORT(S)AGEkubernetes TCP 80> 30 [メールで保護]〜]#[[メールで保護]〜]#kubectl get svc -o wideNAME CLUSTER-IP EXTERNAL-IPポート(S)年齢.51.190<ノード>80:30108 / TCP 3m app =webserver-app1、rack =r1、region =IN、version =1.1 [[メール保護]〜]#

次に、Webサーバーにアクセスしてみます

〜]#curl 192.168.1.50:30108 

次のコマンドを使用して、上記で作成したサービスを削除できます

 [[email protected]〜]#kubectl delete svc webpod-serviceservice "webpod-service" delete [[email protected]〜]#

ymlファイルを使用したサービスの作成

service.yml」という名前の新しいymlファイルを作成します ‘以下の内容で。今回のKindパラメータ値は「Service」になります。 [仕様]フィールドで、コンテナ内でWebサーバーまたはアプリケーションが実行されているポートについて説明しました。NodePortはWorkノードのランダムポートです。 Selectorは、このサービスがバージョンパラメータが「1.1」のポッドに適用可能であることを示しています。したがって、この場合、このサービスはポッド「web-server-pod」に適用可能です

 [[email protected] techcode]#vi service.ymlapiVersion:v1kind:Servicemetadata:name:webpod-service labels:app:webpod-service-labelspec:type:NodePort ports:-port:80 nodePort:30001 protocol:TCPセレクター:バージョン:「1.1」

次のコマンドを実行してサービスを作成します

 [[email protected] techcode]#kubectl create -f service.ymlservice "webpod-service" created [[email protected] techcode]#

以下のコマンドを使用して、サービスのステータスを確認しましょう

 [[email protected] techcode]#kubectl get svcNAME CLUSTER-IP EXTERNAL-IP PORT(S)AGEkubernetes 3000 TCP 10.96.0.1 [email protected] techcode]#[[email protected] techcode]#kubectl get svc -o wideNAME CLUSTER-IP EXTERNAL-IP PORT(S)PORT(S)TCP .18.35  80:30001 / TCP 2m version =1.1 [[email protected] techcode]#

次に、curlコマンドを使用してアプリケーションにアクセスします:

 [[メール保護]〜]#curl http://192.168.1.50:30001 

出力は次のようになります

現在、1つのポッドとそのサービスを展開しています。同じ種類のポッドを5つデプロイしたい場合は、レプリケーションコントローラーを使用してデプロイできます。要するに、それは「 rc」と呼ばれていました ‘。 rcを使用してポッドをプロビジョニングする場合は常に、ポッドの可用性とフォールトトレランスが高くなります。つまり、ポッドに問題が発生した場合、同じ種類のポッドがクラスターによって自動的にデプロイされます。

レプリケーションコントローラーの展開

レプリケーションコントローラーも、kubectlコマンドを使用してymlファイルでデプロイされます。 rcのymlファイルを作成しましょう。

 [[email protected] techcode]#vi Replication-controller.ymlapiVersion:v1kind:ReplicationControllermetadata:name:webserver-rcspec:replicas:5 selector:app:lamp-app1 template:metadata:labels:app:lamp-app1 region :INラック:r1バージョン: "1.1"仕様:コンテナ:-名前:webserver-php-con1イメージ:linuxtechi / web-server-php:testversionポート:> --containerPort: 

この時間の種類のパラメータ値は「ReplicationController」です。 」と仕様の下で、「レプリカ=5」があります ‘、これは、Dockerイメージ「linuxtechi / web-server-php:testversion」を使用して5つのポッドがワーカーノード全体にデプロイされることを意味します

次のコマンドを実行して、レプリケーションコントローラーをデプロイします

 [[email protected] techcode]#kubectl create -f Replication-controller.ymlreplicationcontroller "webserver-rc" created [[email protected] techcode]#

ポッドのステータスを確認し、プロビジョニングされた場所を確認します

 [[email protected] techcode]#kubectl get pods [[email protected] techcode]#kubectl get pods -o wide 

underkubectlコマンドを使用してレプリケーションコントローラーのステータスを確認します

 [[電子メールが保護された] techcode]#kubectl GET rcNAME所望の電流READY AGEwebserver-rcの5 5 5 5メートル[[電子メールが保護された] techcode]#kubectl GET RC -o wideNAME所望の電流READY AGE CONTAINER(S)IMAGE(S) SELECTORwebserver-rc 5 5 5 5m webserver-php-con1 linuxtechi / web-server-php:testversion app =lamp-app1 [[email protected] techcode]#

上記で作成したレプリケーションコントローラーのサービスを定義しましょう。

 [[email protected] techcode]#vi rc-service.ymlapiVersion:v1kind:Servicemetadata:name:webserver-service labels:app:webserver-service-labelspec:type:NodePort ports:-port:80 nodePort:30002 protocol :TCPセレクター:バージョン: "1.1" 

kubectlコマンドを使用してサービスを作成します

 [[email protected] techcode]#kubectl create -f rc-service.ymlservice "webserver-service" created [[email protected] techcode]#

以下のkubectlコマンドを使用してサービスのステータスを取得します

<前> [[Eメール保護] techcode]#kubectl GET SVC -o wideNAME CLUSTER-IP EXTERNAL-IP PORT(S)AGE SELECTORkubernetes 10.96.0.1 <なし> 443 / TCPの3時間<なし> Webサーバサービス10.111.34.34 <ノード> 80:30002 / TCP 1m version =1.1 [[email protected] techcode]#

次に、両方のノードからWebサーバーにアクセスしてみます

 [[メール保護]〜]#curl http://192.168.1.40:30002 

[[メール保護]〜]#curl http://192.168.1.50:30002

上記の出力のように、両方のワーカーノードのIPアドレスを使用してWebサーバーにアクセスできます。ワーカーノードのIPを使用してウェブサーバーにアクセスするたびに、リクエストはノード上のポッド間で自動的に負荷分散されます。

これで記事は終わりです。この記事がポッド、サービス、レプリケーションコントローラーのデプロイと理解に役立つ場合に備えて、フィードバックとコメントを共有してください。


Cent OS
  1. CentOS8およびFedora33にFail2Banをインストールおよび構成する方法

  2. CentOS 7でFirewalldを停止して無効にする-ステップバイステップのプロセス?

  3. CentOS/RHEL 6 および 7 で rpc.quotad サービスを無効にする方法

  1. CentOS7でFirewallを停止および無効にする方法

  2. Systemctlは、CentOS7のChkconfigおよびServiceコマンドを置き換えます

  3. CentOS/RHEL 7 および 8 でサービスをマスクまたはマスク解除する方法

  1. CentOS7.xおよびRHEL7.xにKVMハイパーバイザーをインストールします

  2. CentOS7にForemanをインストールして設定する方法

  3. CentOS7およびRHEL7にJenkinsをインストールして構成する方法