
我創建了一個 Kubernetes StatefulSet。 StatefulSet 中有三個名為mysql-0
、mysql-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