我创建了一个 Kubernetes StatefulSet。StatefulSet 中有三个 Pod,名称分别为mysql-0
、mysql-1
和 ,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:
主机名的有效字符为 ASCII(7) 字母(从 a 到 z)、数字(从 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