Я создал Kubernetes StatefulSet. В StatefulSet есть три модуля с именами mysql-0
, mysql-1
и mysql-2
, каждый с одним контейнером.
Если я "войдите" в контейнер в pod mysql-1
и введите hostname
Я получаю ответ mysql-1
. Однако я хочу , чтобы контейнер думал, что его имя хоста - mysql-1.example.com
. Другими словами, принудительно добавляйте домен к имени хоста.
Как мне получить StatefulSet, чтобы это произошло?
Согласно 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])?
Однако вы можете использовать имя хоста :
и субдомен:
поля в определении модуля, как описано здесь
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
. Это приведет к появлению доменных имен K8s для ваших модулей, как описано здесь .
Вы также можете ввести переменную среды в модуль и поместить туда свою информацию, как я сделал в примере выше.
> kubectl exec test-replica-set-pz2kk -it -- sh
/ # echo $HOSTNAME
whathever.domain.com