こんにちは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.3580: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を使用してウェブサーバーにアクセスするたびに、リクエストはノード上のポッド間で自動的に負荷分散されます。
これで記事は終わりです。この記事がポッド、サービス、レプリケーションコントローラーのデプロイと理解に役立つ場合に備えて、フィードバックとコメントを共有してください。