将域附加到 Kubernetes StatefulSet 中的容器主机名

将域附加到 Kubernetes StatefulSet 中的容器主机名

我创建了一个 Kubernetes StatefulSet。StatefulSet 中有三个 Pod,名称分别为mysql-0mysql-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

相关内容