如何解决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 时,它不能使用,因为变量名被附加到末尾。 如何设置 Pod 名称?
解决方法
最好使用 statefulset
而不是 deployment
。 Statefulset 的 pod 名称将类似于 <statefulsetName-0>
,<statefulsetName-1>
... 而且您将需要一个 clusterIP
服务。你可以用它来绑定你的豆荚。有关更多详细信息,请参阅文档。 Ref
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。
来自docs:
与 Deployment 一样,StatefulSet 管理基于 相同的容器规格。与 Deployment 不同,StatefulSet 维护 每个 Pod 的粘性标识。这些 Pod 是从 相同的规格,但不可互换:每个都有一个持久的 它在任何重新调度期间维护的标识符。
因此,如果您有一个名为 Statefulset
的 myapp
对象和两个副本,则 Pod 将命名为 myapp-0
和 myapp-1
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。