k8s分析-ポッド、デプロイ、サービス

1.コンセプト紹介(元の住所

1.ポッド

Kubernetesはポッドを使用してコンテナを管理し、各ポッドには1つ以上の密接に関連するコンテナを含めることができます。ポッドは密接に関連するコンテナのセットであり、PID、IPC、ネットワーク、UTS名前空間を共有します。これらはKubernetesスケジューリングの基本単位です。ポッド内の複数のコンテナがネットワークとファイルシステムを共有します。これらを組み合わせて、プロセス間通信とファイル共有のシンプルで効率的な方法でサービスを完成させることができます。

ポッドyamlファイル

apiVersion:v1#バージョン番号
種類:ポッド#ポッド
メタデータ:メタデータ
  名:文字列#ポッド名
  名前空間:文字列#ポッドが属する名前空間
  ラベル:#カスタムラベル名:文字列カスタム
    ラベル名注釈:#自定義コメントlist 
    -name:string 
spec:#
  ポッドコンテナ内コンテナの詳細な定義:#コンテナのポッドリスト
  -name:string #Container name 
    image:string コンテナのイメージ名imagePullPolicy:[Always | Never | IfNotPresent] #Get画像Alawysのポリシーは、画像をダウンロードすることを意味します。IfnotPresentは、最初にローカル画像を使用することを意味します。それ以外の場合は、画像をダウンロードします。Nerverは、ローカル画像
    コマンドのみを使用することを意味します。
    argsをパッケージ化するときに使用されるコマンド:[string] 
    #Containerの起動コマンドパラメータリストworkingDir:string#Containerの作業ディレクトリ
    volumeMounts:#コンテナ内のストレージボリューム構成へのマウント引用し。volumes 
        #Resource Limits Limits #Resource制限cpu:文字列#Cpu制限、単位はコアの数であり、dockerrun--cpu-sharesパラメーターに使用されます
      -name:string#
    ポッドによって定義された共有ストレージボリュームの名前を引用ます。volumes []で定義されたボリューム名を使用する必要があります。mountPath:string#コンテナ内のストレージボリュームマウントの絶対パスは小さくする必要があります512文字を超える
      readOnly:boolean #wether読み取り専用モードの場合
    ports:#公開する必要のあるポートライブラリ番号のリスト
    -name:string#ポート番号名
      containerPort:int コンテナがhostPortを監視する必要があるポート番号: int#コンテナが配置されているホストのポート番号。デフォルトはコンテナと同じ
      プロトコルです:文字列#ポートプロトコル、TCPとUDPをサポート、デフォルトTCP 
    env:#コンテナの前に設定する必要がある環境変数のリスト操作
    名:文字列#環境変数名
      値:文字列#環境変数値
    リソース:#リソース制限と要求された設定
      制限:
        #リソース制限設定メモリ:文字列#メモリ制限、単位はMib / Gibで、次の目的で使用されますdocker run --memoryパラメータ
      リクエスト:
        #resourceリクエスト設定cpu:文字列#Cpuリクエスト、コンテナ起動の最初の利用可能な数
        memory:stringメモリ要求、コンテナ起動の初期利用可能数
    livenessProbe:#コンテナのヘルスチェックを設定しますポッド内で、応答が数回検出されなかった後、コンテナが自動的に再起動される場合。検査メソッドには、exec、httpGet、およびtcpSocketが含まれます。コンテナに設定する必要があるのはこれらのメソッドの1つだけです。exec #で検査メソッドを設定します。ポッドコンテナからexecメソッド
        コマンドへ:[文字列] #execメソッドにはコマンドまたはスクリプトが必要です
      httpGet:#ポッド内のコンテナのヘルスチェックメソッドをHttpGetに設定し、パス、ポート
        パス:文字列
        ポート:番号
        ホストを指定する必要があります:文字列
        スキーム:文字列
        HttpHeaders:-名前:
        文字列
          値:文字列
      tcpSocket:#ポッド内のコンテナのヘルスチェックメソッドをtcpSocket
         ポートに設定します:number 
       initialDelaySeconds:0 コンテナが開始された後の最初の検出時間(秒単位)
       timeoutSeconds:0#コンテナヘルスチェック検出への応答を待機するタイムアウト期間(秒単位)。デフォルトは1秒です
       periodSeconds:0#コンテナ監視チェックの定期的な検出時間設定、単位秒、デフォルトは10秒1回
       successThreshold:0 failureThreshold 
       :0 
       securityContext:
         privileged:false 
    restartPolicy:[Always | Never | OnFailure] #Pod restartポリシー、常に1回を意味します。どのように終了しても、kubeletが再起動します。OnFailureは、ポッドのみがゼロ以外の終了コードで終了することを意味します。Nerverは、ポッドが再起動されないことを意味します
    。nodeSelector:obeject #Set NodeSelectorは、ポッドは、このラベルを含むノードにスケジュールされます。
    上記では、imagePullSecrets:をkey:value :#の形式で指定し、ミラーリング時に使用されるシークレット名をプルし、key:secretkey 
    -name:string 
    hostNetwork:falseの形式で指定します。ホストネットワークモードを使用する場合、デフォルトはfalseです。trueに設定されている場合は、ホストネットワーク
    ボリュームを使用することを意味しますポッド上の共有ストレージボリュームのリストを定義します。-name 
    :string #共有ストレージボリューム名(多数あります)ボリュームのタイプ)emptyDir:{}#ポッドと同じライフサイクルを持つemtyDirタイプのストレージボリューム一時ディレクトリ。ヌル
      hostPath:string#ポッドがマウントされているホストのディレクトリを示す
        path:string#されて、同じ期間の目次でマウントに使用されます
      シークレット:#シークレットタイプのストレージボリューム、クラスターと定義されたシークレットオブジェクトをコンテナーにマウントします
        scretname:string 
        items:      -key 
        :string 
          path:string 
      configMap:#configMap  タイプのストレージボリューム、事前定義されたconfigMapオブジェクトをコンテナーの内部にマウントします
        名前:文字列
        項目:-
        キー:文字列
          パス:文字列

その中で、いくつかのポイントがあることを説明する価値があります

  1. k8sのapiVersionバージョン、コマンドkubectlapi-versionsを使用して表示できます。ここに3つの一般的なものがあります
  • アルファ:開発バージョン、エラーが含まれている可能性があり、この機能のサポートはいつでも破棄される可能性があります
  • ベータ:ベータバージョン、ソフトウェアは十分にテストされており、有効化機能は安全であると見なされ、詳細は変更される可能性がありますが、機能は後続のバージョンで削除されません
  • 安定版:安定版。後続のソフトウェアバージョンに表示されます。
  1. ハーバーのデフォルトはhttpsプロトコルです。httpプロトコルを介してハーバーのイメージをプルする場合は、k8sの各ノードで/etc/docker/daemon.jsonファイルを変更する必要があります。
{ 
    "insecure-registries":["http:// your-harbor-url"] 
}

次に、dockerを再起動します

systemctl dadmon-systemctl restartdockerをリロードし
ます

2.導入

  • ポッドとReplicaSetを作成するためのデプロイメントを定義する
  • ローリングアップグレードおよびロールバックアプリケーション
  • 膨張と収縮
  • 展開を一時停止して再開します

デプロイyamlファイル(スペースに制限され、多くのコンテンツが省略されています)

apiVersion:extensions / v1beta1   
種類:デプロイメント                 
メタデータ:
  名前:文字列#デプロイメント名の
仕様:
  レプリカ:3 ターゲットレプリカの数
  戦略:rollingUpdate:   
      maxSurge:1#
      ローリングアップグレード中の1つのポッドの最大同時アップグレードmaxUnavailable:1#ローリング中の最大使用不可能ポッドの数の許可アップグレード
  :テンプレートを         
    メタデータ:
      ラベル:
        アプリ:文字列
    #templateのSEPCます。#defineコンテナテンプレート、テンプレートは、複数のコンテナを含めることができます
      :コンテナ                                                                   -nameを
        :文字列                                                           
          画像:文字列
          ポートを:
            -
              名前:http containerPort:8080#ポートをサービスに公開

k8sでアプリケーションをアップグレードおよびロールバックする方法

ローリングアップグレードを実行するときは、最初にyamlファイルのミラーバージョンを更新してから、設定要件に従ってmaxSurgeとmaxUnavailableの値を設定して完了します

k8sはどのように拡張と縮小を完了しますか

レプリカの値を変更した後、再公開します

3.サービス

apiVersion:v1 
kind:Service 
matadata:#Metadata 
  name:string service 's name 
  namespace:string #Namespace 
  label :#Custom label attribute list- 
    name:string 
  annotations:#Custom Annotation attribute list- 
    name:string 
spec:
  #Detailed descriptionセレクター:[] #labelセレクター構成、管理スコープ
  タイプとしてラベルタグ付きのポッドを選択:string #service type、サービスアクセス方法を指定、デフォルトはclusterIp 
  clusterIP:string 
  #virtual service address sessionAffinity:string#セッションをサポートするかどうか
  ポート:#公開するポートのサービスリスト
    -
  名前:文字列#ポート
    プロトコル:文字列ポートプロトコル、TCPとUDPをサポート、デフォルトのTCP
    ポート:int #サービスリスニングポート番号targetPort:int#バックエンドに転送する必要がありますポッドポート番号
    nodePort:int#type = NodePortの場合、物理マシンの
  ステータスにマップされるポート番号を指定します。#spce.type = LoadBalancerの場合、
    外部ロードバランサーのアドレスを設定します。loadBalancer:#外部ロードバランサーの
      入力:# external load Balancer 
        ip:string#
        外部ロードバランサーのIPアドレス値hostname:string#外部ロードバランサーのホスト名

 

2.関係分析(元のアドレス


展開はRSを制御し、RSはポッドを制御します。このセット全体が安定した信頼性の高いサービスを提供します。
分析
以下は分析プロセスです

まず、最小のスケジューリングユニットポッドから始めます。
現在、k8sクラスターにポッドがあります。その名前はmq-svc-5b96bf78d9-brpjwです。

[root @ VM_0_17_centos〜] #kubectl getpods
名前準備完了ステータス再起動年齢mq
-svc-5b96bf78d9-brpjw1 / 1実行051mで
詳細確認

[root @ VM_0_17_centos〜] #kubectl describe pod mq-svc-5b96bf78d9-brpjw
名前:mq -svc-5b96bf78d9-brpjw
名前空間:デフォルト
ノード:10.0.0.17/10.0.0.17
開始時間:2018年8月17日金曜日17:24: 44 +0800
ラベル:pod-template-hash = 1652693485
                qcloud-app = mq-svc
アノテーション:<none>
ステータス:実行中
IP:172.16.0.39
制御元:ReplicaSet / mq-svc-5b96bf78d9
コンテナー:
  queue- mq
    コンテナーID :docker:// 700cdc55c111a413faaa8cabb8680009d2663701ccbe84b8a50ea6e6fe1d538c
    画像:rabbitmq:management
    イメージID:ドッキングウィンドウ-pullable:// RabbitMQの@ SHA256は:0b36ea1a8df9e53228aaeee277680de2cc97c7d675bc2d5dbe1cc9e3836a9d9f
    <なし>:ポート
    ホストポート:<なし>
    の状態は:実行中の
      開始:金、2018年8月17日17時24分49秒0800
    レディ:真の
    再起動が数:0
    限界を:
      cpu:500m
      メモリ:1Gi
    リクエスト:
      cpu:250m
      メモリ:256Mi
    環境:<なし>
    マウント:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-vzhz4(ro)
条件:
  タイプステータス
  初期化True 
  Ready True 
  PodScheduled True 
Volumes:
  default-token-vzhz4:
    Type:Secret(Secretが入力されたボリューム)
    SecretName:default-token-vzhz4
    オプション:false
QoSクラス:Burstable
Node-Selectors:<none>
許容値:<none>
イベント:
  Type Reason Age From Message
  ---- ------ ---- ---- -------
  Normal Scheduled 51m default-schedulermq-svc-5b96bf78d9-brpjwが10.0.0.17に正常に割り当てられました。
  通常のSuccessfulMountVolume51m kubelet、10.0.0.17MountVolume.SetUpがボリューム "default-token-vzhz4"に対して成功しました
  通常のプル51mkubelet、10.0.0.17プルイメージ "rabbitmq:management"
  通常のプル51m kubelet、10.0.0.17正常にプルされたイメージ "rabbitmq:management"
  通常作成された51m kubelet、10.0.0.17作成されたコンテナー
  通常開始51m kubelet、10.0.0.17開始コンテナ
には実際には機密情報が含まれています。ポッドはmq-svc-5b96bf78d9という名前のReplicaSetによって管理されます。したがって、RSはポッドの管理に特に使用される高レベルのコンポーネントであると考えられます。1つのRSがポッドのバッチを管理します。

制御者:ReplicaSet / mq-svc-5b96bf78d9
 

また、ポッドで行われるプラクティスは、イメージのプル、コンテナーの開始など、コンテナーに対する操作でもあります。

イベント:
  タイプReason Age From Message
  ---- ------ ---- -------------
  通常のスケジュール済み51mdefault-schedulermq-svc-5b96bf78d9-brpjwが10.0に正常に割り当てられました。 0.17
  通常のSuccessfulMountVolume51m kubelet、10.0.0.17MountVolume.SetUpがボリューム "default-token-vzhz4"に対して成功しました
  通常のプル51mkubelet、10.0.0.17プルイメージ "rabbitmq:management"
  通常のプル51m kubelet、10.0.0.17正常にプルされたイメージ "rabbitmq :management "
  Normal Created 51m kubelet、10.0.0.17 Created container
  Normal Started 51m kubelet、10.0.0。17コンテナを開始しました
 

次に、このRSの詳細を見てみましょう
[root @ VM_0_17_centos〜] #kubectl describe rs mq
-svc-5b96bf78d9
名前:mq-svc-5b96bf78d9名前空間:デフォルト
セレクター:pod-template-hash = 1652693485、qcloud-app = MQ-SVC
ラベル:ポッドのテンプレートハッシュ= 1652693485
                qcloudアプリ= MQ-SVC
注釈:deployment.changecourse =更新
                deployment.kubernetes.io/desired-replicas=1
                deployment.kubernetes.io/max-replicas=2
                展開を.kubernetes.io / revision = 2description = rabbitmqに
                基づくサービス
制御者:Deployment / mq-svc
レプリカ:1現在/ 1希望
ポッドステータス:1実行中/ 0待機中/ 0成功/ 0失敗
ポッドテンプレート:
  ラベル:pod-template-hash = 1652693485
           qcloud-app = mq-svc
  コンテナ:
   queue-
    mq:イメージ:rabbitmq:management
    ポート:<なし>
    ホストポート:<なし>
    制限:
      cpu:500m
      メモリ:1Gi
    リクエスト:
      cpu:250m
      メモリ:256Mi
    環境:<なし>
    マウント:<なし>
  ボリューム:<なし>
イベント:
  タイプ理由メッセージからの経過時間
  ---- --- --- ---- ---- -------
  通常成功作成50mレプリカセットコントローラー作成ポッド:mq-svc-5b96bf78d9-r8n8t
  通常成功作成49mレプリカセットコントローラー作成ポッド:mq-svc-5b96bf78d9-l4zj2
  通常成功作成49mレプリカセットコントローラー作成ポッド:mq-svc-5b96bf78d9-m8tmv
  通常成功49mレプリカセットコントローラー削除されたポッド:mq-svc-5b96bf78d9-m8tmv
  通常成功作成49mレプリカセットコントローラー作成ポッド:mq-svc-5b96bf78d9-r9wkj
  通常成功作成49mレプリカセットコントローラー作成ポッド:mq-svc-5b96bf78d9-8wzpq
  通常成功作成49mレプリカ-コントローラー作成ポッド:mq-svc-5b96bf78d9-d8gwc
  通常成功削除49mレプリカセット-コントローラー削除ポッド:mq-svc-5b96bf78d9-d8gwc
  通常成功削除49mレプリカセットコントローラー削除ポッド:mq-svc-5b96bf78d9-8wzpq
  通常成功削除49mレプリカセットコントローラー削除ポッド:mq-svc-5b96bf78d9-l4zj2
  通常成功削除49mレプリカセットコントローラー削除ポッド:mq-svc-5b96bf78d9-r9wkj
  通常成功45mレプリカセットコントローラー削除されたポッド:mq-svc-5b96bf78d9-r8n8t
 

重要な情報

制御元:Deployment / mq-svc
このRSはmq-svcという名前のDeploymentによって制御されます。この観点から、Deploymentは、RSを管理するためのRSより1レベル上のコンポーネントです。

RSレベルで発生するイベントは、ポッドに対するすべての操作であり、ポッドが作成され、ポッドが削除されます。

イベント:
  メッセージからの理由年齢の入力
  ---- ------ ---- ---- -------
  通常のSuccessfulCreate50mレプリカセットコントローラー作成されたポッド:mq-svc-5b96bf78d9-r8n8t
  通常のSuccessfulCreate 49mレプリカセットコントローラー作成ポッド:mq-svc-5b96bf78d9-l4zj2
  通常成功作成49mレプリカセットコントローラー作成ポッド:mq-svc-5b96bf78d9-m8tmv
  通常成功削除49mレプリカセットコントローラー削除ポッド:mq-svc-5b96bf78d9-m8tmv
  通常成功作成49mレプリカ
  -コントローラー作成ポッド:mq-svc-5b96bf78d9-r9wkj通常成功作成49mレプリカセット-コントローラー作成ポッド:mq-svc-5b96bf78d9-8wzpq
  通常成功作成49mレプリカセットコントローラー作成ポッド:mq-svc-5b96bf78d9-d8gwc
  通常成功削除49mレプリカセットコントローラー削除ポッド:mq-svc-5b96bf78d9-d8gwc
  通常成功削除49mレプリカセットコントローラー削除ポッド:mq-svc-5b96bf78d9-8wzpq
  通常成功49mレプリカセットコントローラー削除ポッド:mq-svc-5b96bf78d9-l4zj2
  通常成功削除49mレプリカセットコントローラー削除ポッド:mq-svc-5b96bf78d9-r9wkj
  通常成功削除45mレプリカセットコントローラー削除ポッド:mq-svc-5b96bf78d9-r8n8t
 

接下来、我们来看衛Delpoyment
[root @ VM_0_17_centos〜] #kubectl describe deploy mq-svc
名前:mq-svc
名前空間:デフォルト
CreationTimestamp:2018年8月17日金曜日17:21:13 +0800
ラベル:qcloud-app = mq -svc
注釈:deployment.changecourse =更新
                        deployment.kubernetes.io/revision=2description=rabbitmqに
                        基づくサービス。
セレクター:qcloud-app = mq-svc
レプリカ:1個必要| 1更新| 合計1 | 1つ利用可能| 0使用不可
StrategyType:RollingUpdate
MinReadySeconds:10
RollingUpdateStrategy:0最大使用不可、1最大サージ
ポッドテンプレート:
  ラベル:qcloud-app = mq-svc
  コンテナ:
   queue-
    mq イメージ:rabbitmq:management
    ポート:<none>
    ホストポート:<none>
    制限:
      cpu:500m
      メモリ:1Gi
    リクエスト:
      cpu:250m
      メモリ:256Mi
    環境:<なし>
    マウント:<なし>
  ボリューム:<なし>
条件:
  タイプステータス理由
  ---- ------------
  進行中TrueNewReplicaSetAvailable
  利用可能TrueMinimumReplicasAvailable
OldReplicaSets:<なし>
NewReplicaSet:mq-svc-5b96bf78d9(1/1レプリカが作成されました)
イベント:
  タイプReason Age From Message
  ---- ------ ---- -------------
  通常のScalingReplicaSet58mデプロイメント-コントローラースケールアップされたレプリカセットmq-svc-5b96bf78d9から2
  通常のScalingReplicaSet57m展開-コントローラースケールアップされたレプリカセットmq-svc-5b96bf78d9から3
  通常のScalingReplicaSet57m展開-コントローラースケールアップされたレプリカセットmq-svc-5b96bf78d9から4
  通常のScalingReplicaSet57mデプロイメントコントローラースケールダウンレプリカセットmq-svc-5b96bf78d9から3
  通常のScalingReplicaSet57mデプロイメントコントローラースケールアップレプリカセットmq-svc-5b96bf78d9から6
  通常のScalingReplicaSet57mデプロイメントコントローラー縮小レプリカセットmq-svc-5b96bf78d9から4
  通常のScalingReplicaSet56mデプロイメントコントローラー縮小レプリカセットmq-svc-5b96bf78d9から2
  通常のScalingReplicaSet53mデプロイメントコントローラー縮小レプリカセットmq-svc-5b96bf78d91
配備レベルで、それはもはや他のコンポーネントによって制御されず、APIが呼び出されるように彼の状態の遷移が発生したことが分かります。デプロイメントレベルで発生するイベントは、通常、サービスの作成、サービスアップグレードのローリング、またはRSスケーリングポッドクラスターの操作であることがわかりました。

最後に、ここでは、サービスが実際にはこの一連の基盤全体で外部に提供される安定したサービスであることも非常に明確です。

おすすめ

転載: blog.csdn.net/THMAIL/article/details/107312208