k8sでのポッド管理の詳細な説明

1.コントローラー

1.
ポッド分類:自律ポッド:終了後にポッドは作成されません。
コントローラーによって管理されるポッド:コントローラーのライフサイクルでは、ポッドのコピー数を常に維持する必要があり
ます。2。コントローラータイプ:
レプリケーションコントローラーおよびReplicaSet
Deployment
DaemonSet
StatefulSet
Job
CronJobHPA
はHorizo​​ntalPodAutoscalerの略です。

(1)ReplicationControllerとReplicaSetReplicaSet
は次世代のReplicationControllerであり、公式の推奨事項はReplicaSetを使用することです。
ReplicaSetとReplicationControllerの唯一の違いは、セレクターのサポートです。ReplicaSetは、新しいセットベースのセレクター要件をサポートします。
ReplicaSetは、指定された数のポッドレプリカが常に実行されていることを確認します。
ReplicaSetは個別に使用できますが、現在は主に、ポッドの作成、削除、更新を調整するメカニズムとしてデプロイメントで使用されています。
(2)デプロイメント
デプロイメントは、ポッドとレプリカセットの宣言型定義メソッドを提供します。
典型的なアプリケーションシナリオ:
1。ポッドとReplicaSetの作成に使用
2.ローリング更新とロールバック
3.拡張と縮小
4.一時停止と再開

kubectl apply -f rs.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v2

kubectl get pod --show-labels
kubectl label pod deployment-6d4f5bf58f-mbswv app=myapp --overwrite
# 根据标签控制,始终要满足三个副本

ここに画像の説明を挿入します
(3)DaemonSet 1.
DaemonSetは、すべて(または一部)のノードがポッドのコピーを実行することを保証します。ノードがクラスターに参加すると、ポッドも追加されます。ノードがクラスターから削除されると、これらのポッドもリサイクルされます。DaemonSetを削除すると、DaemonSetによって作成されたすべてのポッドが削除されます。
2. DaemonSetの一般的な使用法:
glusterd、cephなどの各ノードでクラスターストレージDaemonSetを実行します。
fluentd、logstashなどの各ノードでログコレクションDaemonSetを実行します。
Prometheus Node Exporter、zabbixエージェントなどの各ノードで監視デーモンセットを実行します。3
。簡単な使用法は、各タイプのデーモンとして使用されるすべてのノードでデーモンセットを開始することです。
4.もう少し複雑な使用法は、デーモンのタイプごとに複数のデーモンセットを個別に使用することですが、符号が異なり、ハードウェアタイプごとにメモリとCPUの要件が異なります。

vim daemonset.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
  labels:
    k8s-app: zabbix-agent
spec:
  selector:
    matchLabels:
      name: zabbix-agent
  template:
    metadata:
      labels:
        name: zabbix-agent
    spec:
      containers:
      - name: zabbix-agent
        image: zabbix-agent
      
kubectl apply -f daemonset.yml
kubectl get pod -o wide
kubectl get pod --show-labels

kubectl get daemonsets.apps  #控制器查看
kubectl describe daemonsets.apps

ここに画像の説明を挿入します
ここに画像の説明を挿入します
(4)仕事を
バッチ処理タスクを実行し、タスクの一つ以上のポッドが正常に完了していることを確認するために一度だけタスクを実行

# 拉取测试镜像,上传到本地仓库server1
docker pull per
docker tag perl:latest reg.westos.org/library/perl:latest
docker push reg.westos.org/library/perl:latest
vim job.yml
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

kubectl apply -f job.yml
kubectl logs pi-sxrl7

ここに画像の説明を挿入します
(5)CronJob
Cron Jobは、タイムスケジューリングに基づいてジョブを作成します。
CronJobオブジェクトは、crontab(cronテーブル)ファイルの行のようなものです。Cron形式で記述され、指定されたスケジュールされた時間に定期的にジョブを実行します。

vim cronjob.yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busyboxplus
            imagePullPolicy: IfNotPresent
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

kubectl logs hello-1614059700-8sxjp
kubectl get cronjobs.batch
kubectl describe cronjobs.batch

ここに画像の説明を挿入します

Two.service

(1)サービスは、同じサービスを提供するポッドの外部アクセスインターフェイスのセットと見なすことができます。サービスの助けを借りて、アプリケーションはサービス検出と負荷分散を簡単に実現できます。サービスはデフォルトで4層の負荷分散機能のみをサポートし、層7の機能はありません。他の方法で実装できます(入力)。
(2)サービスタイプ
ClusterIP:デフォルト値、k8sシステムによってサービスに自動的に割り当てられた仮想IPは、クラスター内でのみアクセスできます。
NodePort:指定されたノードのポートを介してサービスを外部に公開します。NodeIPへのアクセス:nodePortはClusterIPにルーティングされます。
LoadBalancer:NodePortに基づいて、クラウドプロバイダーを利用して外部ロードバランサーを作成し、リクエストをNodePortに転送します。このモードはクラウドサーバーでのみ使用できます。
ExternalName:DNS CNAMEレコードを介して指定されたドメイン名にサービスを転送します(spec.externlName
(3)によって設定されます)IPVSモードの
サービスサービスは、kube -proxyコンポーネントと、
プロセスを介してポッドおよびサービスアクセスkube-proxyを実現するiptablesで構成されますof iptables処理サービスでは、ホストに多数のiptablesルールを設定する必要があります。ホストに多数のポッドがある場合、iptablesルールを絶えず更新すると、大量のCPUリソースが消費されます
。service-> pod:IPVSモードのサービス使用するK8sクラスターはより多くのレベルのポッド
ポッド->サービスをサポートします:iptables
ここに画像の説明を挿入します

kubectl -n kube-system get pod etcd-server2  #所有的配置信息

vim demo1.yml
---
apiVersion: v1
kind: Service
metadata:
  name: myservice1
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1

# 开启kube-proxy的ipvs模式
yum install -y ipvsadm  #所有节点安装
kubectl apply -f demo1.yml
kubectl -n kube-system edit cm kube-proxy  #修改IPVS模式,配置文件,需要重启pod
# mode: "ipvs"
kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'  #更新kube-proxy pod,就是重建pod
ipvsadm -ln
kubectl get all

kube-proxyは、Linux IPVSモジュールを使用して、サービス内のポッドをrrポーリングモードでスケジュールします
ここに画像の説明を挿入します
。IPVSモードでは、サービスの作成後にkube-proxyがホストマシンに仮想ネットワークカードkube-ipvs0を追加し、割り当てます。サービスIP
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_49564346/article/details/113930399