K8Sスケジューリングメカニズムとポッドの基本的なトラブルシューティング

1.スケジューリング制約プロセスの分析

ここに画像の説明を挿入

1.まず、ユーザーはkubectlコマンドまたはdashborad、API呼び出し(開発用)を介してリソースを作成および管理できます(Kubernetesは監視メカニズムを使用して各コンポーネントと連携し、各コンポーネント間の設計はデカップリングを実現します)
2。ユーザーがAPIサーバーにリソース作成のリクエストを送信します。APIサーバーは作成されたリソースのメタ情報(属性情報)をetcdに書き込みます。etcdは現在の作成状態を記録し、その情報をAPIサーバーに返します。情報はに返されます。ユーザー
3.APIサーバーは監視メカニズムを使用して他のコンポーネントを呼び出し(これらのコンポーネントはK8Sでは互いに独立しています)、最初にスケジューラスケジューラを呼び出し、リソースが作成されたノードノードをスケジューラに計算させ、情報をToに返します。 APIサーバー、APIサーバーは作成されたリソースのアドレスをetcdに書き込み、etcdレコードが完了した後に情報がAPIサーバーに返されます。APIサーバーはスケジューラーに情報を返し、情報の記録が完了したことをスケジューラーに通知します
。次にコンピューティングリソースが作成されるときに、以前に計算されたデータも考慮されます。4。APIサーバーは、監視メカニズムを使用してコントローラーを呼び出します-manager(コントローラー)は、リソースの作成を記録します。入力して、kubeletをスケジュールします。kubeletがコマンドを受信すると、APIサーバーをプロキシしてdockerエンジンをスケジュールし、docker runがリソースを作成し、dockerが情報をkubeletに返します。 (コンテナは実行中です)、kubeletはコンテナの実行ステータスをAPIサーバーに返します(kubeletにはetcdを直接スケジュールする権限がありません)。APIServerは情報をetcdに書き込み、情報を更新して、APIServerに情報を返します。 etcdの記録が完了した後、APIServerはその後の管理操作のためにkubeletをスケジュールします

1.1。スケジューリング方法

■nodeNameは、指定されたノード名にポッドをスケジュールするために使用されます(スケジューラーをスキップして直接割り当てます)

■nodeSelectorは、ポッドをノード一致ラベルにスケジュールするために使用されます

1.2、例1 nodeName

[root@master01 demo]# vim pod1.yaml
apiVersion: v1
kind: Pod  
metadata:
  name: pod-example  
  labels:
    app: nginx  
spec:
  nodeName: 192.168.140.30     #跳过调度器直接分配
  containers:
  - name: nginx  
    image: nginx:1.15
[root@master01 demo]# kubectl create -f pod1.yaml 
[root@master01 demo]# kubectl describe pod pod-example
[root@master01 demo]# kubectl get pods

ここに画像の説明を挿入

[root@master01 demo]# kubectl delete -f.   #清空当前目录下的所有pod(慎用!)

1.3、例2 nodeSelector

[root@master01 demo]# kubectl get nodes
[root@master01 demo]# kubectl label nodes 192.168.140.20 abc=a
[root@master01 demo]# kubectl label nodes 192.168.140.30 abc=b
[root@master01 demo]# kubectl get nodes --show-labels

ここに画像の説明を挿入

[root@master01 demo]# vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: httpd
spec:
  nodeSelector:
    abc: b
  containers:
  - name: httpd
    image: httpd
[root@master01 demo]# kubectl apply -f pod.yaml 
[root@master01 demo]# kubectl describe pod pod-example
[root@master01 demo]# kubectl get pods -o wide

ここに画像の説明を挿入

2.トラブルシューティング

2.1、故障現象

ここに画像の説明を挿入

2.2、トラブルシューティングのアイデア

■ポッドイベントを表示する

kubectl describe TYPE NAME_PREFIX  

■ポッドログの表示(失敗状態)

kubectl logs POD_NAME

■ポッドを入力します(ステータスは実行中ですが、サービスは提供されていません)

kubectl exec –it POD_NAME bash

おすすめ

転載: blog.csdn.net/weixin_50344814/article/details/115283251