1 日 5 分で Kubernetes をプレイ | DaemonSet

書籍出典:Cloudman「1日5分で遊ぶKubernetes」

学習中に先生の授業内容やテストノートを整理してみんなで共有してください。違反しているものは削除されます。よろしくお願いします。

概要投稿を添付してください: Play Kubernetes in 5 minutes in a day | Summary_COCOgsta's Blog-CSDN Blog


Deployment によってデプロイされたレプリカ ポッドは各ノードに分散され、各ノードで複数のレプリカが実行される場合があります。DaemonSet の違いは、各ノードが最大 1 つのコピーしか実行できないことです。

DaemonSet の一般的なアプリケーション シナリオは次のとおりです。

(1) クラスターの各ノードで glusterd や ceph などのストレージ デーモンを実行します。

(2) 各ノードで、flunentd や logstash などのログ収集デーモンを実行します。

(3) Prometheus Node Exporter やcollectd などの監視デーモンを各ノードで実行します。

実際、Kubernetes 自体は DaemonSet を使用してシステム コンポーネントを実行します。図に示すように、次のコマンドを実行します。

kubectl get daemonset --namespace=kube-system

81aa00f621d1e01b60f55e8f1d5b5e28.png

 

図に示すように、DaemonSet kube-flannel-ds と kube-proxy は、各ノードで flannel コンポーネントと kube-proxy コンポーネントを実行する役割を果たします。

080db1554292fbd4fad1e258f9207458.png

 

flannel と kube-proxy はシステム コンポーネントであるため、コマンド ラインで --namespace=kube-system を通じて名前空間 kube-system を指定する必要があります。指定しない場合、デフォルトの名前空間のリソースのみが返されます。

5.2.1 kube-flannel-ds

以下では、kube-flannel-ds を分析して DaemonSet を学習します。

以前にフランネル ネットワークがどのように展開されたかを覚えていますか? 以下のコマンドを実行しました(海外サイトのファイルはダウンロードできないため、実際にはこの方法ではデプロイされません)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

b81bc59c4d692457189c1d5c6cea1669.png

 

注: 構成ファイルの完全な内容はさらに複雑なので、DaemonSet をよりよく学ぶために、最も重要な内容のみがここに保持されています。

① DaemonSet 設定ファイルの構文と構造は、種類が DaemonSet に設定されることを除いて、Deployment の構文と構造とほぼ同じです。

② hostName は、Pod が Node ネットワークを直接使用することを指定します。これは、docker run - -network=host と同等です。フランネルがクラスターへのネットワーク接続を提供する必要があることを考慮すると、この要件は合理的です。

③containers は、flannel サービスを実行する 2 つのコンテナを定義します。

別の DaemonSet kube-proxy を分析してみましょう。

5.2.2 プロキシになる

kube-proxy の YAML ファイルを取得できないため、次のコマンドを実行して構成を表示することしかできません。

kubectl edit daemonset kube-proxy --namespace=kube-system

結果を図に示します。

082dd57ee06a110c35b62e10458b3553.png

 

67930236efa9965a9d212af11fe6f359.png

 

c9d564314af1e06332f53e64124f093e.png

 

また、理解を容易にするために、ここには最も重要な情報のみが記載されています。

① kind: DaemonSet は、これが DaemonSet タイプのリソースであることを指定します。

②コンテナはkube-proxyのコンテナを定義します。

③ status は現在の DaemonSet の実行時のステータスで、この部分は kubectl edit に固有のものです。実際、Kubernetes クラスター内で現在実行中の各リソースは、kubectl edit (kubectl editdeployment nginx-deployment など) を通じてその構成と実行ステータスを表示できます。

5.2.3 独自の DaemonSet の実行

このセクションでは、Prometheus Node Exporter を例として取り上げ、ユーザーが独自の DaemonSet を実行する方法を示します。

Prometheus は一般的なシステム監視ソリューションであり、Node Exporter は Prometheus のエージェントであり、監視対象の各ノード上でデーモンの形式で実行されます。

Node Exporter コンテナを Docker で直接実行する場合、コマンドは次のとおりです。

docker run -d \ 
 -v "/proc:/host/proc" \ 
 -v "/sys:/host/sys" \ 
 -v "/:/rootfs" \ 
 --net=host \ 
 prom/node-exporter \ 
 --path.procfs /host/proc \ 
 --path.sysfs /host/sys \ 
 --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)" 

以下に示すように、DaemonSet の YAML 設定ファイル node_exporter.yml に変換します。

[root@k8s-master ~]# cat node_exporter.yml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter-daemonset
spec:
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      hostNetwork: true
      containers:
      - name: node-exporter
        image: prom/node-exporter
        imagePullPolicy: IfNotPresent
        command:
        - /bin/node_exporter
        - --path.procfs
        - /host/proc
        - --path.sysfs
        - /host/sys
        - --collector.filesystem.ignored-mount-points
        - ^/(sys|proc|dev|host|etc)($|/)
        volumeMounts:
        - name: proc
          mountPath: /host/proc
        - name: sys
          mountPath: /host/sys
        - name: root
          mountPath: /rootfs
      volumes:
      - name: proc
        hostPath:
          path: /proc
      - name: sys
        hostPath:
          path: /sys
      - name: root
        hostPath:
          path: /
[root@k8s-master ~]# 

① ホストのネットワークを直接使用します。

②コンテナ起動コマンドを設定します。

③ ホストパス /proc、/sys、/ をボリューム経由でコンテナにマッピングします。ボリュームについては後で詳しく説明します。

図に示すように、kubectl apply -f node_exporter.yml を実行します。

4420e5ed135dce36a0f3da9f32f3259e.png

 

DaemonSet ノード-エクスポーター-デーモンセットは正常にデプロイされ、ノード エクスポーター ポッドがそれぞれ k8s-node1 と k8s-node2 で実行されています。

 

おすすめ

転載: blog.csdn.net/guolianggsta/article/details/125044464