(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

展開のご紹介

展開はkubernetes 1.2はスケジューリング問題ポッドを解決するために、概念を導入しています。展開は、RC(RC + Reolicatセット)のアップグレード版として理解することができます。常にノードを結合、展開、ポッドのつまり作成、スケジュールの進捗状況を知ることができるポッドの機能は、コンテナの完全なプロセスの進行状況を表示するために開始します。

利用シナリオ

対応するレプリカセットとポッドのコピーを作成するプロセスを生成するために、展開オブジェクトを作成します。
アクションが完了したかどうかを確認するために展開展開(期待値かどうかポッドのコピー数)の状態を確認してください。
更新プログラムの展開は、(イメージのアップグレードのシナリオのような)新しいポッドを作成します。
現在の展開が不安定ならば、バックの展開バージョンに落ちます。
展開を中断または再開します。

サービス紹介

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

サービスは、サービスにアクセスするためのエントリアドレスを定義するエントリアドレスによって後ろのアクセスにフロントエンドアプリケーションで構成されるポッドコピークラスタインスタンスのグループ、ポッドコピー間でクラスタサービスとそのバックエンドは、ラベルセレクタで「シームレス」を達成することです。RCポッド所望のレベルを維持するために、サービスのインスタンスの数のコピーを確保します。

システムアクセスの問題の外部サービス

IPタイプ 説明
Node IP ノードノードのIPアドレス
ポッドIP IPアドレスのポッド
クラスタのIP サービスのIPアドレス

環境の紹介

ホストコンピューター IPアドレス サービス
主人 192.168.1.21 K8S
node01 192.168.1.22 K8S
node02 192.168.1.23 K8S

実験に基づいて継続的https://blog.51cto.com/14320361/2464655

まず、Delpoymentの使用及びサービスへの単純な

YAMLファイルを書い1.練習は、自分のプライベートミラー、3のために必要な部数を必要とします。

[root@master ~]# vim xgp.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: xgp-web
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: xgp-server
    spec:
      containers:
      - name: web
        image: 192.168.1.21:5000/web:v1

(1)の実装について

[root@master ~]# kubectl apply -f xgp.yaml  --record

(2)外観

[root@master ~]# kubectl get pod

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(3)それへのアクセスを

[root@master ~]# curl 10.244.2.16

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(4)は一見のYAMLファイル、プラスのコピーを更新します

[root@master ~]# vim xgp.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: xgp-web
spec:
  replicas: 4
  template:
    metadata:
      labels:
        app: xgp-server
    spec:
      containers:
      - name: web
        image: 192.168.1.21:5000/web:v1

<1>执行一下

[root@master ~]# kubectl apply -f xgp.yaml --recore

<2>查看一下

[root@master ~]# kubectl get pod

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

副本数量加一,如果yaml文件的副本为0,则副本数量还是之前的状态,并不会更新。

2.练习写一个service文件

[root@master ~]# vim xgp-svc.yaml
kind: Service
apiVersion: v1
metadata:
  name: xgp-svc
spec:
  selector:
    app: xgp-server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

(1)执行一下

[root@master ~]# kubectl apply -f xgp-svc.yaml 

(2)查看一下

[root@master ~]# kubectl get svc

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(3)访问一下

[root@master ~]# curl 10.107.119.49

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

3.修改yaml文件

[root@master ~]# vim xgp.yaml 
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: xgp-web
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: xgp-server
    spec:
      containers:
      - name: web
        image: 192.168.1.21:5000/web:v1
        ports:
          - containerPort: 80  #提示端口

注意:在Delpoyment资源对象中,可以添加Port字段,但此字段仅供用户查看,并不实际生效

执行一下

[root@master ~]# kubectl apply -f xgp.yaml 

4.service文件映射端口

[root@master ~]# vim xgp-svc.yaml 
kind: Service
apiVersion: v1
metadata:
  name: xgp-svc
spec:
  type: NodePort
  selector:
    app: xgp-server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30123

执行一下

[root@master ~]# kubectl apply -f xgp-svc.yaml 

查看一下

[root@master ~]# kubectl get svc

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

访问一下

[root@master ~]# curl 127.0.0.1:30123

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

5.修改三个pod页面内容

(1)查看一下pod信息

[root@master ~]# kubectl get pod -o wide

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(2)修改POD页面内容(三台不一样)

[root@master ~]# kubectl exec -it xgp-web-8d5f9656f-8z7d9 /bin/bash
//根据pod名称进入pod之中

进入容器后修改页面内容

root@xgp-web-8d5f9656f-8z7d9:/usr/local/apache2# echo xgp-v1 > htdocs/index.html 
root@xgp-web-8d5f9656f-8z7d9:/usr/local/apache2# exit

访问一下

[root@master ~]# curl 127.0.0.1:30123

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

二.分析一下k8s负载均衡原理

(1)查看service的暴露IP

[root@master ~]# kubectl get svc

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(2)查看一下iptabes规则

[root@master ~]# iptables-save 
//查看已配置的规则

SNAT:Source NAT(源地址转换)

DNAT:Destination NAT(目标地址转换)

MASQ:动态的源地址转换

(3)根据service的暴露IP,查看对应的iptabes规则

[root@master ~]# iptables-save | grep 10.107.119.49

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

[root@master ~]# iptables-save | grep KUBE-SVC-ESI7C72YHAUGMG5S

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(4)对应一下IP是否一致

[root@master ~]# iptables-save | grep KUBE-SEP-ZHDQ73ZKUBMELLJB

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

[root@master ~]# kubectl get pod -o wide

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

Service实现的负载均衡:默认使用的是iptables规则。IPVS

三.回滚到指定版本

(1)删除之前创建的delpoy和service

[root@master ~]# kubectl  delete -f xgp.yaml 
[root@master ~]# kubectl  delete -f xgp-svc.yaml 

(2)准备三个版本所使用的私有镜像,来模拟每次升级不同的镜像

[root@master ~]# vim xgp1.yaml  (三个文件名不相同)
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: xgp-web
spec:
  revisionHistoryLimit: 10
  replicas: 3
  template:
    metadata:
      labels:
        app: xgp-server
    spec:
      containers:
      - name: web
        image: 192.168.1.21:5000/web:v1  (三台版本不同)
        ports:
          - containerPort: 80

此处3个yaml文件 指定不同版本的镜像

(3)运行三个服务,并记录三个版本信息

[root@master ~]# kubectl apply -f xgp-1.yaml --record 
[root@master ~]# kubectl apply -f xgp-2.yaml --record 
[root@master ~]# kubectl apply -f xgp-3.yaml --record 

(4)查看有哪些版本信息

[root@master ~]# kubectl rollout history deployment xgp-web 

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(5)运行之前的service文件

[root@master ~]# kubectl apply -f xgp-svc.yaml

(6)查看service暴露端口

[root@master ~]# kubectl get svc

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(7)测试访问

[root@master ~]# curl 127.0.0.1:30123

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(8)回滚到指定版本

[root@master ~]# kubectl rollout undo deployment xgp-web --to-revision=1
//这里指定的是版本信息的编号

<1>访问一下

[root@master ~]# curl 127.0.0.1:30123

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

<2>查看有哪些版本信息

[root@master ~]# kubectl rollout history deployment xgp-web 

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)
编号1已经被编号2替代,从而生的是一个新的编号4

四.用label控制pod的位置

默认情况下,scheduler会将pod调度到所有可用的Node,不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上。

kubernetes通过label来实现这个功能

ラベルは、キーと値のペアで、リソースがセットラベル、さまざまな追加するための柔軟性をすることができ、カスタム属性を例えば標識K8S-node1のノードがSSDに配置されているとして、次のコマンドを実行します。

まず、ラベルのSSDでマークされたノード1ノードを与えます

[root@master ~]# kubectl label nodes node02 disk=ssd

(1)ラベルを確認してください

[root@master ~]# kubectl get nodes --show-labels | grep node02

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(2)削除のコピー

[root@master ~]# kubectl delete -f xgp-1.yaml 
deployment.extensions "xgp-web" deleted
[root@master ~]# kubectl delete svc xgp-svc 

(3)ファイルYAMLの修正コピー

[root@master ~]# vim xgp-1.yaml 

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: xgp-web
spec:
  revisionHistoryLimit: 10
  replicas: 3
  template:
    metadata:
      labels:
        app: xgp-server
    spec:
      containers:
      - name: web
        image: 192.168.1.21:5000/web:v1
        ports:
          - containerPort: 80
      nodeSelector:    #添加节点选择器
        disk: ssd      #和标签内容一致

(4)いくつかの実装

[root@master ~]# kubectl apply -f xgp-1.yaml 

ルック

[root@master ~]# kubectl get pod -o wide

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

今ポッドとnode02上で実行されています

(5)ラベルを削除

[root@master ~]# kubectl  label nodes node02 disk-

ルック

[root@master ~]# kubectl get nodes --show-labels | grep node02

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

いいえディスクラベルありません

ファイブ小さな実験

1)展開ミラーv1のリソースオブジェクトの展開のプライベートバージョンを使用して、部数はバージョンを記録したポッドは、すべてのノード上で実行される3つのコピーnode01を、必要な指定、ポッドは3である必要があり、サービスリソース相互にオブジェクトを作成します。

(1)ラベル付きポッドの位置を制御します

[root@master ~]# kubectl label nodes node01 disk=ssd

(2)ソースファイルYAMLの調製

[root@master ~]# vim xgp.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: xgp-web
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: xgp-server
    spec:
      containers:
      - name: web
        image: 192.168.1.21:5000/web:v1
        ports:
          - containerPort: 80
      nodeSelector:    
        disk: ssd  

(3)ソース・ファイル・サービスの調製

[root@master ~]# vim xgp-svc.yaml
kind: Service
apiVersion: v1
metadata:
  name: xgp-svc
spec:
  type: NodePort
  selector:
    app: xgp-server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30123

(4)YAMLファイルの実装では、コントローラを作成します。サービスポートマッピングファイルの作成を実行します

[root@master ~]# kubectl apply -f  xgp.yaml  --recore
[root@master ~]# kubectl apply -f xgp-svc.yaml 

(5)を見ポッドノード

[root@master ~]# kubectl get pod -o wide

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(6)バージョンを記録

[root@master ~]# kubectl rollout history deployment xgp-web > pod.txt

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(7)それにアクセス

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

2)展開上、V2バージョンアップ、記録のバージョンによります。

(1)ファイルのミラーリングバージョンYAMLを変更

[root@master ~]# vim xgp.yaml 
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: xgp-web
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: xgp-server
    spec:
      containers:
      - name: web
        image: 192.168.1.21:5000/web:v2    #修改版本为二
        ports:
          - containerPort: 80
      nodeSelector:
        disk: ssd

(2)リフレッシュYAMLファイル

[root@master ~]# kubectl apply -f xgp.yaml --record 

(3)それへのアクセスを

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(4)バージョンを記録

[root@master ~]# kubectl rollout history deployment xgp-web > pod.txt

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

3)v3のバージョンへの最後のアップグレードは、その後、関連するサービスを表示し、詳細を均衡トラフィック負荷を分析します。

1)ファイルミラーリングバージョンYAMLを変更

[root@master ~]# vim xgp.yaml 
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: xgp-web
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: xgp-server
    spec:
      containers:
      - name: web
        image: 192.168.1.21:5000/web:v3   #修改版本为二
        ports:
          - containerPort: 80
      nodeSelector:
        disk: ssd

(2)リフレッシュYAMLファイル

[root@master ~]# kubectl apply -f xgp.yaml --record

(3)それへのアクセスを

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

(5)トラフィックのロードバランシングの詳細の分析

<1>チェックサービスのポートマッピング

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

<2> IPトラフィックのロードバランシングの詳細を分析するための開始点として、

負荷分散を実現するためのサービス:iptablesのルールを使用して、デフォルト。IPVS

[root@master ~]# iptables-save | grep 10.107.27.229
//根据service的暴露IP,查看对应的iptabes规则

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

[root@master ~]# iptables-save | grep KUBE-SVC-ESI7C72YHAUGMG5S

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

これは、各ノードの負荷率を示し

同じIPかどうかを確認するために、<3>対応
[root@master ~]# iptables-save | grep KUBE-SEP-VDKW5WQIWOLZMJ6G

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

[root@master ~]# kubectl get pod -o wide

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

4)ロール指定されたバージョンV1にバック、および検証のための。

指定されたバージョンにロールバックする<1>

[root@master ~]# kubectl rollout undo deployment xgp-web --to-revision=1
//这里指定的是版本信息的编号

<2>それにアクセスするには

[root@master ~]# curl 127.0.0.1:30123

(3)リソースを作成k8d(負荷分散原則を、ロールバックは、バージョンを指定し、ラベルコントロールポッドの位置)

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

[root@master ~]# less /var/log/messages  | grep kubelet
[root@master ~]# kubectl  logs -n  kube-system kube-scheduler-master 
[root@master ~]# kubectl describe pod xgp-web-7d478f5bb7-bd4bj 

おすすめ

転載: blog.51cto.com/14320361/2465238