
He creado un StatefulSet de Kubernetes. Hay tres pods en StatefulSet con nombres mysql-0
, mysql-1
y mysql-2
cada uno con un único contenedor.
Si "inicio sesión" en el contenedor en el pod mysql-1
y escribo, hostname
obtengo la respuesta mysql-1
. Sin embargo, lo que yodeseares que el contenedor piense que su nombre de host es mysql-1.example.com
. En otras palabras, fuerce que se agregue el dominio al nombre de host.
¿Cómo consigo que StatefulSet haga que esto suceda?
Respuesta1
segúnhttp://man7.org/linux/man-pages/man7/hostname.7.html:
Los caracteres válidos para los nombres de host son las letras ASCII(7) de la a a la z, los dígitos del 0 al 9 y el guión (-). Un nombre de host no puede comenzar con un guión.
Lo anterior también es válido para los subdominios. Aquí hay una expresión regular utilizada para la validación:[a-z0-9]([-a-z0-9]*[a-z0-9])?
Sin embargo, puede utilizar los campos hostname:
y subdomain:
en una definición de pod, como se describeaquí
Un ReplicaSet con los campos anteriores se vería así:
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"
Esto funciona así:
> kubectl exec test-replica-set-pz2kk -it -- hostname
my-hostname
También puede recuperar el nombre de dominio DNS agregando la -d
opción, o el nombre FQDN usando la -f
opción. Esto generará nombres de dominio K8 para sus pods como se describeaquí.
También puedes inyectar una variable ambiental en un pod y poner tu información allí, como hice en el ejemplo anterior.
> kubectl exec test-replica-set-pz2kk -it -- sh
/ # echo $HOSTNAME
whathever.domain.com