図以下のポッド、さらにreplicaSet、展開、サービス間の関係。
下:
ポッドは、1つ以上の容器の組み合わせは、これらのコンテナがメモリを共有しており、ネットワークの名前空間は、どのように実行し、規制します。ポッドKubernetesを展開することができる最小単位です。中国は、単語ポッドのエンドウ豆を翻訳され、ドッキングウィンドウコンテナはエンドウ豆のさや豆で実行されているようなものです。
さらにreplicaSet:
私はレプリケーションコントローラーをお話しましょう。レプリケーションコントローラーの役割は、指定部数としてポッドの実行を確保することです。
さらにreplicaSetレプリケーションコントローラがアップグレードされたバージョンです。セレクタのさらにreplicaSetとレプリケーションコントローラーサポートの唯一の違い。レプリケーションのコントローラは、唯一の方程式ベースのセレクタ(ENV = DEVや環境!= Qaの)をサポートしていますが、さらにreplicaSetも(DEV、QA notin(v1.0を、V2.0)またはENVでコレクションセレクタ(バージョンに基づいて、新しいをサポートしています))。
ポッドによってコピーspec.replicas文のYAMLファイル番号で。
展開:
ポッド、さらにreplicaSetを管理するための展開は、アップグレードおよびロールバックは、アプリケーション、拡張および体積の減少を実現することができる転がります。
サービス:
ただ、質問、さらにreplicaSetはポッドの数は、何らかの理由でポッドが停止したときに、2でさらにreplicaSet操作は常に2であることを確実にするために、新たなポッド、ポッド番号を作成します定義されています。しかし、各ポッドは、独自のIPを持って、フロントエンドの要求は、新しいポッドIPは、その要求がその中に新しいポッドのフロントエンドに送信される方法が何であるかを知らないのですか?
答えは、サービス使用することで
、各容器はの後端に負荷分散され外部からのエントリ・アドレスへのアクセス要求によって背後からなるアプリケーション遠位アクセスをコピーサービスのK8Sがサービスのアクセス・エントリ・アドレス、ポッドのクラスタインスタンスのセットを定義しますアプリケーション。サービスおよびクラスタのそのバックエンドポッドコピーの間でラベルのセレクタを関連付けることによって達成されます。
人間話してください:フロントエンドの要求がサービスはポッドに転送し、その後、要求をポッドに直接送信が、サービスに送信されません。
要約すると:ポッドはさらにreplicaSet管理され、さらにreplicaSetはポッドの数を制御し、さらにreplicaSetてきデプロイメント管理、アプリケーションをアップグレードする展開コントロールポッド、ロールバック、もちろん、また、ポッドの数を制御することができます。サービスは、ポッドに要求を転送する責任統一固定入り口、フロントエンドを提供します。
練習
myapp.yamlファイルを定義します
apiVersion: apps/v1
# 声明一个Deployment资源对象
kind: Deployment
metadata:
name: deployment-myapp
spec:
# 通过replicas声明pod个数是2
replicas: 2
# 通过标签选择被控制的pod
selector:
matchLabels:
app: myapp
# 在template中定义pod
template:
metadata:
# 给pod打上标签app=myapp
labels:
app: myapp
spec:
containers:
# 声明容器名称,注意不是pod名称,pod名称应该定义在metadata中
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
# 在一个yaml文件中通过---分割多个资源对象
---
apiVersion: v1
# 声明一个Service资源对象
kind: Service
metadata:
name: service-myapp
spec:
# service-myapp将选择标签包含app=myapp的pod
selector:
app: myapp
ports:
- name: http
# Service监听端口
port: 80
# 转发到后端Pod的端口号
targetPort: 80
このリソースの展開一覧
-f myapp.yamlを適用kubectl
非常に興味深い絵を見てください
myapp.yamlファイルは、展開の名前、無声明さらにreplicaSet、ポッドの名前を宣言します。しかしkubernetesが自動的に名前からさらにreplicaSet、ポッドを与えるだろう。
展開の名前は、展開、myappのです
さらにreplicaSet名が展開myappの-5fdb5f69f、ポッド・テンプレートの実際の展開名とハッシュ値であり、
ポッド名展開myappの-5fdb5f69f-njrb6、展開myappに-5fdb5f69f-whpwg、実際にはハッシュ値の名前に加えてさらにreplicaSet。
使用すると、サービスmyappの表情のSVCサービスmyappのコマンド詳細を説明しkubectl。
あなたは、サービスmyappのIPアドレスが10.97.41.88で見ることができます。リクエストを送信すると、10.97.41.88:80 10.244.1.5:80または10.244.2.2:80に転送されます
ルック:
ホスト名の最初の直接的要求ポッド、ポッド取得
カール10.244.1.5:80/hostname.html
カール10.244.2.2:80/hostname.html
サービスmyappのを要求し、サービスmyappのポッドは、バックエンドにリクエストをロードします
カール10.97.41.88:80/hostname.html
非常に興味深いものもあります。ポッドはpingを実行することができますが、SERVICにpingを実行しませんでした
これはなぜでしょうか?
回答:サービスは、実際にpingが少し失敗したので、ルールは、ICMPプロトコルをサポートしていないルールiptablesのかIPVSを、転送しているので。