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オブジェクトをコンテナーの内部にマウントします 名前:文字列 項目:- キー:文字列 パス:文字列
その中で、いくつかのポイントがあることを説明する価値があります
- k8sのapiVersionバージョン、コマンドkubectlapi-versionsを使用して表示できます。ここに3つの一般的なものがあります
- アルファ:開発バージョン、エラーが含まれている可能性があり、この機能のサポートはいつでも破棄される可能性があります
- ベータ:ベータバージョン、ソフトウェアは十分にテストされており、有効化機能は安全であると見なされ、詳細は変更される可能性がありますが、機能は後続のバージョンで削除されません
- 安定版:安定版。後続のソフトウェアバージョンに表示されます。
- ハーバーのデフォルトは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スケーリングポッドクラスターの操作であることがわかりました。
最後に、ここでは、サービスが実際にはこの一連の基盤全体で外部に提供される安定したサービスであることも非常に明確です。