我有一个pod yaml文件(请参见下文)。它具有我想要的所有属性,但副本属性除外。这样我就必须编写部署yaml。
apiVersion: v1
kind: Pod
metadata:
name: app-ykt
labels:
app: app-ykt
purpose: ykt_production
spec:
containers:
- name: app-ykt
image: app
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: volume-app-ykt
mountPath: /usr/application
env:
- name: spring.config.location
value: application.properties
volumes:
- name: volume-app-ykt
hostPath:
path: /opt/docker/datalook-pre-core
type: Directory
在编写部署文件时,我必须提及不需要的映像和其他属性。此外,它会创建另一个Pod,并缺少一些我必须具有的属性,例如音量。我的目标只是这个副本,这样我就可以使吊舱具有高可用性。有解决办法吗?
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-ykt
labels:
app: app-ykt
spec:
replicas: 1
selector:
matchLabels:
app: app-ykt
template:
metadata:
labels:
app: app-ykt
spec:
containers:
- name: app-ykt
image: app
ports:
- containerPort: 80
答案 0 :(得分:2)
首先,我认为hostPath卷不是HA解决方案,因此您应该考虑在整个kubernetes群集中共享一个作为ReadWriteMany Persistent Volume的卷。 然后,您还需要在已复制的Pod(例如Services [0])之间使用内部负载平衡器。
希望对您有帮助。
[0] [https://kubernetes.io/docs/concepts/services-networking/service/]
答案 1 :(得分:1)
每个Kubernetes对象都有其自己的要求。如果要创建Deployment
,则必须指定此属性。 Deployment
对象是ReplicaSet
创建和管理它的“抽象”层。没有容器属性描述(图像,卷等),您将无法创建任何Deployment
(RelicaSet)
如果要使用Kubernetes,则需要通过“ Kubernetes方式”部署应用程序。您可以使用应用说明创建Deployment
.yml文件,然后将Deployment
缩放到任意数量的副本。
Service
和Ingress
对象可以帮助您在副本之间实现负载平衡,如@Daein上文所述
您的Deployment
可能如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-ykt
namespace: elk
labels:
app: app-ykt
spec:
replicas: 3
selector:
matchLabels:
app: app-ykt
template:
metadata:
labels:
app: app-ykt
spec:
containers:
- name: app-ykt
image: <your_image>
ports:
- containerPort: 80
env:
- name: spring.config.location
value: application.properties
volumeMounts:
- name: volume-app-ykt
mountPath: /usr/application
volumes:
- name: volume-app-ykt
hostPath:
path: /opt/docker/datalook-pre-core
type: Directory
这将创建Deployment
,这反过来将自动创建3个副本(3个Pod),其中只有一个app-ykt
容器
注意:我也认为在这里使用hostPath
并不是一个好主意,就像@Daein提到的那样,即使我不知道您的应用程序配置如何。 hostPath
通常用于访问节点上的任何文件...
请记住仅在需要读取或写入时使用hostPath卷 节点上的系统文件。切勿使用它们在跨容器中持久存储数据。 “行动中的Kubernetes”(c)马可·卢卡斯(Marko Luksa)