ヘッドレスサービス

  • 対象となる個々の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

<スポンサーリンク>

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

*

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