
Ich habe ein Kubernetes StatefulSet erstellt. Es gibt drei Pods im StatefulSet mit den Namen mysql-0
, mysql-1
und mysql-2
jeweils mit einem einzelnen Container.
Wenn ich mich beim Container im Pod anmelde mysql-1
und eingebe, hostname
erhalte ich die Antwort mysql-1
. Was ich jedochwollenbedeutet, dass der Container denkt, sein Hostname sei mysql-1.example.com
. Mit anderen Worten: Erzwingen Sie, dass die Domäne an den Hostnamen angehängt wird.
Wie erhalte ich das StatefulSet, um dies zu ermöglichen?
Antwort1
Gemäßhttp://man7.org/linux/man-pages/man7/hostname.7.html:
Gültige Zeichen für Hostnamen sind ASCII(7)-Buchstaben von a bis z, die Ziffern von 0 bis 9 und der Bindestrich (-). Ein Hostname darf nicht mit einem Bindestrich beginnen.
Das oben Gesagte gilt auch für Subdomains. Hier ist ein regulärer Ausdruck, der zur Validierung verwendet wird:[a-z0-9]([-a-z0-9]*[a-z0-9])?
Sie können jedoch hostname:
und subdomain:
Felder in einer Pod-Definition verwenden, wie beschriebenHier
Ein Replikatsatz mit den oben genannten Feldern würde folgendermaßen aussehen:
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"
Das funktioniert so:
> kubectl exec test-replica-set-pz2kk -it -- hostname
my-hostname
Sie können auch den DNS-Domänennamen abrufen, indem Sie die -d
Option hinzufügen, oder den FQDN-Namen, indem Sie die -f
Option verwenden. Dadurch erhalten Sie K8s-Domänennamen für Ihre Pods, wie beschriebenHier.
Sie können auch Umgebungsvariablen in einen Pod einfügen und Ihre Informationen dort ablegen, wie ich es im obigen Beispiel getan habe.
> kubectl exec test-replica-set-pz2kk -it -- sh
/ # echo $HOSTNAME
whathever.domain.com