展開のご紹介
展開はkubernetes 1.2はスケジューリング問題ポッドを解決するために、概念を導入しています。展開は、RC(RC + Reolicatセット)のアップグレード版として理解することができます。常にノードを結合、展開、ポッドのつまり作成、スケジュールの進捗状況を知ることができるポッドの機能は、コンテナの完全なプロセスの進行状況を表示するために開始します。
利用シナリオ
対応するレプリカセットとポッドのコピーを作成するプロセスを生成するために、展開オブジェクトを作成します。
アクションが完了したかどうかを確認するために展開展開(期待値かどうかポッドのコピー数)の状態を確認してください。
更新プログラムの展開は、(イメージのアップグレードのシナリオのような)新しいポッドを作成します。
現在の展開が不安定ならば、バックの展開バージョンに落ちます。
展開を中断または再開します。
サービス紹介
サービスは、サービスにアクセスするためのエントリアドレスを定義するエントリアドレスによって後ろのアクセスにフロントエンドアプリケーションで構成されるポッドコピークラスタインスタンスのグループ、ポッドコピー間でクラスタサービスとそのバックエンドは、ラベルセレクタで「シームレス」を達成することです。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)それへのアクセスを
[root@master ~]# curl 10.244.2.16
(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
副本数量加一,如果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)访问一下
[root@master ~]# curl 10.107.119.49
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
访问一下
[root@master ~]# curl 127.0.0.1:30123
5.修改三个pod页面内容
(1)查看一下pod信息
[root@master ~]# kubectl get pod -o wide
(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
二.分析一下k8s负载均衡原理
(1)查看service的暴露IP
[root@master ~]# kubectl get svc
(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
[root@master ~]# iptables-save | grep KUBE-SVC-ESI7C72YHAUGMG5S
(4)对应一下IP是否一致
[root@master ~]# iptables-save | grep KUBE-SEP-ZHDQ73ZKUBMELLJB
[root@master ~]# kubectl get pod -o wide
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
(5)运行之前的service文件
[root@master ~]# kubectl apply -f xgp-svc.yaml
(6)查看service暴露端口
[root@master ~]# kubectl get svc
(7)测试访问
[root@master ~]# curl 127.0.0.1:30123
(8)回滚到指定版本
[root@master ~]# kubectl rollout undo deployment xgp-web --to-revision=1
//这里指定的是版本信息的编号
<1>访问一下
[root@master ~]# curl 127.0.0.1:30123
<2>查看有哪些版本信息
[root@master ~]# kubectl rollout history deployment xgp-web
编号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
(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
今ポッドとnode02上で実行されています
(5)ラベルを削除
[root@master ~]# kubectl label nodes node02 disk-
ルック
[root@master ~]# kubectl get nodes --show-labels | grep node02
いいえディスクラベルありません
ファイブ小さな実験
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
(6)バージョンを記録
[root@master ~]# kubectl rollout history deployment xgp-web > pod.txt
(7)それにアクセス
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)それへのアクセスを
(4)バージョンを記録
[root@master ~]# kubectl rollout history deployment xgp-web > pod.txt
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)それへのアクセスを
(5)トラフィックのロードバランシングの詳細の分析
<1>チェックサービスのポートマッピング
<2> IPトラフィックのロードバランシングの詳細を分析するための開始点として、
負荷分散を実現するためのサービス:iptablesのルールを使用して、デフォルト。IPVS
[root@master ~]# iptables-save | grep 10.107.27.229
//根据service的暴露IP,查看对应的iptabes规则
[root@master ~]# iptables-save | grep KUBE-SVC-ESI7C72YHAUGMG5S
これは、各ノードの負荷率を示し
同じIPかどうかを確認するために、<3>対応
[root@master ~]# iptables-save | grep KUBE-SEP-VDKW5WQIWOLZMJ6G
[root@master ~]# kubectl get pod -o wide
4)ロール指定されたバージョンV1にバック、および検証のための。
指定されたバージョンにロールバックする<1>
[root@master ~]# kubectl rollout undo deployment xgp-web --to-revision=1
//这里指定的是版本信息的编号
<2>それにアクセスするには
[root@master ~]# curl 127.0.0.1:30123
アイデアのトラブルシューティング
[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