我创建了一个Kubernetes StatefulSet。在StatefulSet中有三个名称为mysql-0
、mysql-1
和mysql-2
的豆荚,每个都有一个容器。
如果我“登录”到pod mysql-1
中的容器并键入hostname
,我将得到响应mysql-1
。但是,我想让容器认为它的主机名是mysql-1.example.com
。换句话说,强制主机名附加域。
我如何让StatefulSet实现这一目标?
发布于 2019-07-19 13:22:06
根据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
还可以检索添加-d
选项的DNS域名,或使用-f
选项检索FQDN名称。这将为您的豆荚生成K8s域名,如这里所描述的。
您也可以将环境变量注入到一个容器中,并将您的信息放在那里,就像我在上面的示例中所做的那样。
> kubectl exec test-replica-set-pz2kk -it -- sh
/ # echo $HOSTNAME
whathever.domain.com
https://serverfault.com/questions/975813
复制相似问题