
mysql-0
Kubernetes StatefulSet を作成しました。StatefulSet には、、という名前の 3 つのポッドがありmysql-1
、mysql-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