クラウドネイティブのkubectlコマンド(2)とpodの関連操作を詳しく解説

目次

1. kubectl コマンドの詳細説明

1. リソースの詳細情報を表示します: kubectl describe pod pod_name -n nameapace

2. 指定された名前空間内のポッドの基本情報を確認します: kubectl get pods -n namespace

3. ホスト全体でコンテナにログインします: kubectl exec -it pod_name /bin/bash -n namespace

4. ポッドを削除する

4.1. Pod を直接削除します。しかし、デプロイ、レプリカ コントローラーはまだそこにあり、彼は自分で別のものを作成します。

①.PODを直接削除 

②本来のpod_nameと違うことを確認し、

 4.2. ポッド レプリカ コントローラーのデプロイを削除します。

4.3. 削除プロセス中に蛾が存在する場合、Pod は削除できず、常に終了状態になっているため、強制削除 --force --grace-period=0 を実行します

5. コマンドラインの伸縮

5.1. レプリカセットの拡張

①オリジナルレプリカセットを見る:1 

②レプリカセットを4つに拡張

5.2. レプリカセットのスケールダウン 

6. サービスの削除

7. ポッド ネットワーク ステータスの詳細とサービス公開ポートを確認する

8. 関連するノードを表示する

9. サービスの説明情報を表示する

2.ポッドのライフサイクル

1. Pod を作成し、nginx インスタンスを開始し、コンテナー ポート 80 を公開し、レプリカ セットを 3 に設定します (ポッドの作成)。

名前空間がデフォルトです

2. リリース: kubectl 公開コマンド 編集

3. ポートを確認する

第三に、サービスの種類


1. kubectl コマンドの詳細説明

1. リソースの詳細情報を表示します: kubectl describe pod pod_name -n nameapace

[root@master ~]# kubectl describe pods -n kube-public         

                                                            ### 指定された名前空間のポッドの詳細を表示します                                          

Name:         nginx-w1-7464d66457-psk6h
Namespace:    kube-public
Priority:     0
Node:         node01/192.168.159.11
Start Time:   Wed, 02 Nov 2022 01:40:47 +0800
Labels:       app=nginx-w1
              pod-template-hash=7464d66457
Annotations:  <none>
Status:       Running
IP:           10.150.1.3
IPs:
  IP:           10.150.1.3
Controlled By:  ReplicaSet/nginx-w1-7464d66457
Containers:
  nginx:
    Container ID:   docker://4011df060a9ad777793f061675fc1a784f4effe56f5585d91d5ba3670660c620
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:943c25b4b66b332184d5ba6bb18234273551593016c0e0ae906bab111548239f
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Wed, 02 Nov 2022 01:41:06 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-llzgh (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-llzgh:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:                      <none>


Name:         nginx-x1-77484d895f-ddhqt
Namespace:    kube-public
Priority:     0
Node:         node02/192.168.159.13
Start Time:   Thu, 03 Nov 2022 16:16:11 +0800
Labels:       app=nginx-x1
              pod-template-hash=77484d895f
Annotations:  <none>
Status:       Running
IP:           10.150.2.3
IPs:
  IP:           10.150.2.3
Controlled By:  ReplicaSet/nginx-x1-77484d895f
Containers:
  nginx:
    Container ID:   docker://ecc07803682f2d7a51037024354dae0d190841443121ca0a8514ab224179cbf5
    Image:          nginx:latest
    Image ID:       docker-pullable://nginx@sha256:943c25b4b66b332184d5ba6bb18234273551593016c0e0ae906bab111548239f
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Thu, 03 Nov 2022 16:16:36 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-47hxr (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-47hxr:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:                      <none>

2. 指定された名前空間内のポッドの基本情報を確認します: kubectl get pods -n namespace

[root@master ~]# kubectl get pods -n kube-public

NAME                        READY   STATUS    RESTARTS   AGE
nginx-w1-7464d66457-psk6h   1/1     Running   0          43h
nginx-x1-77484d895f-ddhqt   1/1     Running   0          5h12m

3. ホスト全体でコンテナにログインします: kubectl exec -it pod_name /bin/bash -n namespace

root@master ~]# kubectl exec -it nginx-x1-77484d895f-ddhqt /bin/bash -n kube-public

[root@master ~]# kubectl exec -it nginx-x1-77484d895f-ddhqt /bin/bash -n kube-public
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx-x1-77484d895f-ddhqt:/# 

4. ポッドを削除する

4.1. Pod を直接削除します。しかし、デプロイ、レプリカ コントローラーはまだそこにあり、彼は自分で別のものを作成します。

[root@master ~]# kubectl delete pod nginx- -n kube-public
pod "nginx-w1-7464d66457-psk6h" を削除

①.PODを直接削除 

②本来のpod_nameと違うことを確認し、

 4.2. ポッド レプリカ コントローラーのデプロイを削除します。

[root@master ~]# kubectl delete deployment nginx-w1 -n kube-public

4.3. 削除プロセス中に蛾が存在する場合、Pod は削除できず、常に終了状態になっているため、強制削除 --force --grace-period=0 を実行します

5. コマンドラインの伸縮

5.1. レプリカセットの拡張

①オリジナルレプリカセットを見る:1 

②レプリカセットを4つに拡張

5.2. レプリカセットのスケールダウン 

上記の結果に基づいて実験を行い、--replicas=2 を設定し、レプリカ セットの数を指定した後、既存のレプリカ セットの数を期待値と比較して、拡張するか縮小するかを決定します。

6. サービスの削除

[root@master ~]# kubectl delete svc nginx-server -n default

[root@master ~]# kubectl get svc -n default
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.125.0.1      <none>        443/TCP        2d6h
nginx-server    NodePort    10.125.126.34   <none>        80:30537/TCP   45m
nginx1-server   NodePort    10.125.103.25   <none>        80:31070/TCP   2m41s
[root@master ~]# kubectl delete svc nginx-server -n default
service "nginx-server" deleted

7. ポッド ネットワーク ステータスの詳細とサービス公開ポートを確認する

[root@master ~]# kubectl get svc,pods -n default

8. 関連するノードを表示する

[root@master ~]# kubectl get endpoints

[root@master ~]# kubectl get endpoints
NAME             ENDPOINTS                                    AGE
kubernetes       192.168.159.10:6443                          2d6h
nginx1-service   10.150.1.10:80,10.150.1.9:80,10.150.2.9:80   32m

9. サービスの説明情報を表示する

[root@master ~]# kubectl describe svc nginx


[root@master ~]# kubectl describe svc nginx
Name:                     nginx1-service
Namespace:                default
Labels:                   app=nginx
Annotations:              <none>
Selector:                 app=nginx
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.125.32.0
IPs:                      10.125.32.0
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31625/TCP
Endpoints:                10.150.1.10:80,10.150.1.9:80,10.150.2.9:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

10. コア コンポーネントのログを表示する

kubeadm によってデプロイされた K8S

kubectl ログ -f pod_name -n 名前空間または journalctl -u kubelet -f

バイナリ展開による K8S

journalctl -u kubelet -f

2.ポッドのライフサイクル

Pod のライフ サイクルとは、作成から削除までの過程で Pod が保持し経験する状態を指します。

ポッドには次の 2 種類があります。

①、自律: コントローラの管理はセルフサービスではありません。削除するときは削除するだけ

②. 宣言型: コントローラーが管理する Pod。(普段使っているタイプ)

1. Pod を作成し、nginx インスタンスを開始し、コンテナー ポート 80 を公開し、レプリカ セットを 3 に設定します (ポッドの作成)。

名前空間がデフォルトです

[root@master ~]# kubectl create deployment nginx-ceshi --image=nginx:1.14 --port 80 --replicas=3 
deployment.apps/nginx-ceshi created
 

2. リリース: kubectl 公開コマンド 

3. ポートを確認する

3. サービスの種類

①、clusterIP:Podアクセス用にクラスタ内に仮想IPを提供(サービスデフォルトタイプ)   

②、NodePort: 外部アクセスのために各ノードでポートを開きます。Kubernetes は各ノードでポートを開き、各ノードのポートは同じであり、NodeIp:NodePort を介して、Kubernetes クラスター外のプログラムがサービスにアクセスできます。各ポートは 1 つのサービスのみであり、ポート範囲は 30000 ~ 32767 のみです。

③. LoadBalancer: LoadBalancer を設定して、クラウド サービス プロバイダーが提供する LoadBalancer アドレスにマップします。この使用法は、パブリック クラウド サービス プロバイダーのクラウド プラットフォームでサービスをセットアップするシナリオでのみ使用されます。外部ロード バランサーを介してアクセスするには、通常、クラウド プラットフォームに LoadBalancer をデプロイするための追加料金が必要です。

④、externalName: サービス名を DNS ドメイン名にマッピングします, これは DNS サービスの CNAME レコードに相当し、Pod がクラスター外のリソースにアクセスできるようにするために使用されます. Pod 自体はリソースをバインドしません.

おすすめ

転載: blog.csdn.net/m0_62948770/article/details/127678600