Kubernetes StatefulSet 内のコンテナホスト名にドメインを追加する

Kubernetes StatefulSet 内のコンテナホスト名にドメインを追加する

mysql-0Kubernetes StatefulSet を作成しました。StatefulSet には、、という名前の 3 つのポッドがありmysql-1mysql-2それぞれに 1 つのコンテナがあります。

ポッド内のコンテナに「ログイン」してmysql-1入力すると、hostname応答が返されますmysql-1。しかし、私が欲しいコンテナがホスト名を であると認識するようにしますmysql-1.example.com。言い換えると、ホスト名にドメインを強制的に追加します。

これを実現するには、StatefulSet をどのように取得すればよいでしょうか?

答え1

に従ってhttp://man7.org/linux/man-pages/man7/hostname.7.html:

ホスト名に有効な文字は、ASCII(7)のaからzまでの文字、0から9までの数字、およびハイフン(-)です。ホスト名はハイフンで始まることはできません。

上記はサブドメインにも当てはまります。検証に使用される正規表現は次のとおりです。[a-z0-9]([-a-z0-9]*[a-z0-9])?

ただし、ポッド定義では、説明されているように、フィールドhostname:とフィールドを使用できます。subdomain:ここ

上記のフィールドを持つ ReplicaSet は次のようになります。

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: test-replica-set
  labels:
    app: guestbook
    tier: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      hostname: my-hostname
      subdomain: my-subdomain
      containers:
      - image: busybox:1.28
        command:
          - sleep
          - "3600"
        name: busybox1
        env:
        - name: HOSTNAME
          value: "whathever.domain.com"

これは次のように機能します:

> kubectl exec test-replica-set-pz2kk -it -- hostname
my-hostname

オプションを追加してDNSドメイン名を取得したり-d-fオプションを使用してFQDN名を取得することもできます。これにより、前述のようにポッドのK8sドメイン名が生成されます。ここ

上記の例のように、環境変数をポッドに挿入してそこに情報を置くこともできます。

> kubectl exec test-replica-set-pz2kk -it -- sh
/ # echo $HOSTNAME
whathever.domain.com

関連情報