將網域附加到 Kubernetes StatefulSet 中的容器主機名

將網域附加到 Kubernetes StatefulSet 中的容器主機名

我創建了一個 Kubernetes StatefulSet。 StatefulSet 中有三個名為mysql-0mysql-1、 的 pod,mysql-2每個 pod 都有一個容器。

如果我「登入」到 pod 中的容器mysql-1並輸入,hostname我會得到回應mysql-1。然而,我是讓容器認為它的主機名稱是mysql-1.example.com。換句話說,強制主機名稱附加域。

我如何獲得 StatefulSet 來實現這一點?

答案1

按照http://man7.org/linux/man-pages/man7/hostname.7.html

主機名稱的有效字元為從 a 到 z 的 ASCII(7) 字母、從 0 到 9 的數字以及連字號 (-)。主機名稱不能以連字符開頭。

上述對於子域也是如此。這是用於驗證的正規表示式:[a-z0-9]([-a-z0-9]*[a-z0-9])?

但是,您可以在 pod 定義中使用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,或使用該選項檢索 FQDN 名稱-f。這將為您的 pod 產生 K8s 域名,如下所述這裡

您也可以將環境變數注入到 pod 中並將您的資訊放在那裡,就像我在上面的範例中所做的那樣。

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

相關內容