
Kubernetes StatefulSet을 만들었습니다. StatefulSet에는 이름이 mysql-0
, 인 3개의 Pod가 있으며 mysql-1
각각 mysql-2
단일 컨테이너가 있습니다.
Pod의 컨테이너에 "로그인" mysql-1
하고 다음을 입력하면 hostname
응답이 표시됩니다 mysql-1
. 그러나 내가 무엇을원하다컨테이너가 호스트 이름을 이라고 생각하는 것입니다 mysql-1.example.com
. 즉, 호스트 이름에 도메인을 추가하도록 강제합니다.
이를 실현하려면 StatefulSet을 어떻게 구해야 합니까?
답변1
에 따라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])?
그러나 설명된 대로 포드 정의에서 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
. 그러면 설명된 대로 포드에 대한 K8s 도메인 이름이 생성됩니다.여기.
위의 예에서 했던 것처럼 환경 변수를 포드에 주입하고 거기에 정보를 넣을 수도 있습니다.
> kubectl exec test-replica-set-pz2kk -it -- sh
/ # echo $HOSTNAME
whathever.domain.com