kubernetes部署PodName设置


apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
name: test
labels:
app: test
spec:
containers:
- name: server
image: test_ml_server:2.3
ports:
- containerPort: 8080
volumeMounts:
- name: hostpath-vol-testserver
mountPath: /app/test/api
#          env:
#            - name: POD_NAME
#              valueFrom:
#                fieldRef:
#                  fieldPath: template.metadata.name
- name: testdb
image: test_db:1.4
ports:
- name: testdb
containerPort: 1433
volumeMounts:
- name: hostpath-vol-testdb
mountPath: /var/opt/mssql/data
#          env:
#            - name: POD_NAME
#              valueFrom:
#                fieldRef:
#                  fieldPath: template.metadata.name
volumes:
- name: hostpath-vol-testserver
hostPath:
path: /usr/testhostpath/testserver
- name: hostpath-vol-testdb
hostPath:
path: /usr/testhostpath/testdb

我想设置pod的名称,因为它基于pod的名称进行内部通信但是当创建pod时,它不能被使用,因为变量名被附加到末尾。如何设置吊舱名称?

最好使用statefulset而不是deployment。Statefulset的pod名称将类似于<statefulsetName-0><statefulsetName-1>。。。您将需要clusterIP服务。你可以用它绑住你的吊舱。有关更多详细信息,请参阅文档。参考

apiVersion: v1
kind: Service
metadata:
name: test-svc
labels:
app: test
spec:
ports:
- port: 8080
name: web
clusterIP: None
selector:
app: test
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: test-StatefulSet
labels:
app: test
spec:
replicas: 1
serviceName: test-svc
selector:
matchLabels:
app: test
template:
metadata:
name: test
labels:
app: test
spec:
containers:
- name: server
image: test_ml_server:2.3
ports:
- containerPort: 8080
volumeMounts:
- name: hostpath-vol-testserver
mountPath: /app/test/api
- name: testdb
image: test_db:1.4
ports:
- name: testdb
containerPort: 1433
volumeMounts:
- name: hostpath-vol-testdb
mountPath: /var/opt/mssql/data
volumes:
- name: hostpath-vol-testserver
hostPath:
path: /usr/testhostpath/testserver
- name: hostpath-vol-testdb
hostPath:
path: /usr/testhostpath/testdb

在这里,pod的名称将类似于test-StatefulSet-0

如果您正在使用kind: Deployment,那么在这种情况下,理想情况下您不可能使用kind: Statefulset

您可以使用Kubernetes服务进行通信,而不是POD到POD的通信。

尽管如此,statefulset在序列中管理pod名称

statefulsetname - 0
statefulsetname - 1
statefulsetname - 2

你不能。

Deployment的pod的特性是它们没有与它们相关联的身份。

如果你想让pod有一个状态,你可以看看Statefulset而不是Deployment。

来自文档:

与部署一样,StatefulSet管理基于与部署不同,StatefulSet维护他们每个播客的粘性身份。这些吊舱是从相同的规范,但不可互换:每个规范都有一个持久的它在任何重新安排中维护的标识符。

因此,如果您有一个名为myappStatefulset对象和两个副本,则pod将命名为myapp-0myapp-1

最新更新