株式会社ヴァンデミックシステム

Blog

<スポンサーリンク>

ヘッドレスサービス

  • 対象となる個々のPodのIPアドレスが直接帰ってくるService
  • DNSラウンドロビンのイメージ
  • ロードバランシングするためのIPアドレスは不要
  • StatefulSetがHeadlessServiceを利用している場合、Pod名でIPアドレスを引くことができる(Kubernetesの設計的に、StatefulSet内の各Podを直接指定するのはナンセンス)

セットアップ

HeadlessServiceのデプロイ

sample-headless.yaml
apiVersion  v1の
種類 サービス
メタデータ
  名前 サンプル・ヘッドレス
仕様
  タイプ CLUSTERIP 
  CLUSTERIP  なし
  ポート
  -  名前 " HTTPポート" 
    プロトコル " TCP" 
    ポート 80 
    targetPort  80 
  セレクター
    アプリ サンプルアプリ

展開

kubectl apply -f sample-headless.yaml

状態確認

kubectl get service sample-headless

出力結果

名前タイプクラスターIP外部IPポート年齢
sample-headless ClusterIPなし<なし> 80 / TCP 8分9秒

StatefullSetのデプロイ

  • ReplicaSetの亜種
  • PersistentVolumeを使っている場合、Pod再起動時には同じディスクを利用して再作成される
  • ポッド名が変わらない
sample-statefulset-headless.yaml
apiVersion  apps / v1 
種類 StatefulSet 
メタデータ
  名前 sample-statefulset- 
headless 仕様
  serviceName  サンプルヘッドレス
  レプリカ 3 
  セレクター
    matchLabels 
      app  sample-app 
  テンプレート
    メタデータ
      ラベル
        app  サンプルアプリ
    仕様
      コンテナー
        -  名前 nginx-container 
          イメージ nginx:1.12

展開

kubectl apply -f sample-statefulset-headless.yaml

状態確認

kubectl get statefulsets sample-statefulset-headless

出力結果

名前対応年齢
sample-statefulset-headless 3/3 7分11秒

動作確認

別PodよりHeadlessServiceを名前解決できるかを確認

kubectl run --image = centos:6 --restart = Never --rm -i testpod-dig 
sample-headless.default.svc.cluster.local

出力結果
3のIPアドレスが返されていることがわかる

; << >> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.1 << >> 
sample-headless.default.svc.cluster.local
;; グローバルオプション:+ cmd
;; 答えを得ました:
;; ->> HEADER <<-opcode:QUERY、status:NOERROR、id:33653
;; フラグ:qr aa rd ra; クエリ:1、回答:3、権限:0、追加:0

;; 質問セクション:
; sample-headless.default.svc.cluster.local。で

;; 回答セクション:
sample-headless.default.svc.cluster.local。5 IN A 10.42.0.11
sample-headless.default.svc.cluster.local。5 IN A 10.42.2.8
sample-headless.default.svc.cluster.local。5 IN A 10.42.1.8

;; クエリ時間:1ミリ秒
;; サーバー:10.43.0.10#53(10.43.0.10)
;; いつ:2019年10月6日05:19:56
;; MSGサイズrcvd:230

ポッド「testpod」が削除されました

StatefulSet内のポッドを直接名前解決できることを確認

kubectl run --image = centos:6 --restart = Never --rm -i testpod-dig 
sample-statefulset-headless-0.sample-headless.default.svc.cluster.
local

出力結果
IP アドレスが返ってきている

; << >> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.1 << >> 
sample-statefulset-headless-0.sample-headless.default.svc.cluster.
local
;; グローバルオプション:+ cmd
;; 答えを得ました:
;; ->> HEADER <<-opcode:QUERY、status:NOERROR、id:39140
;; フラグ:qr aa rd ra; クエリ:1、回答:1、権限:0、追加:0

;; 質問セクション:
; sample-statefulset-headless-0.sample-headless.default.svc.cluster.
local。で

;; 回答セクション:
sample-statefulset-headless-0.sample-headless.default.svc.cluster.
local。5 IN A 10.42.1.8

;; クエリ時間:1ミリ秒
;; サーバー:10.43.0.10#53(10.43.0.10)
;; いつ:2019年10月6日05:22:03
;; MSGサイズrcvd:176

ポッド「testpod」が削除されました

参考

https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-impress-top-gear- %E9%9D%92%E5%B1%B1 / dp / 4295004804 / ref = sr_1_1?__ mk_ja_JP =%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid = 2KQ802O485GTG&keywords = kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89&qid = 1570339459&sprefix = kubernet%2Caps%2C256&sr = 8-1

<スポンサーリンク>

コメントを残す

Allowed tags:  you may use these HTML tags and attributes: <a href="">, <strong>, <em>, <h1>, <h2>, <h3>
Please note:  all comments go through moderation.

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)