我试图了解如何使用Kubernetes部署容器。我是这个主题的新手,因此目前我正在虚拟机中测试所有这些想法。
我正在使用Git,Jenkins,Docker,Docker Hub和Kubernetes。
此外,我有一个主节点和一个从节点。
我创建了一个YAML部署文件来启动pod并创建一个新容器。
kubectl apply -f deployment.yaml
然后我公开部署。
kubectl expose deployment my-app --type=LoadBalancer --name=my-app
要部署的YAML文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: app
spec:
selector:
matchLabels:
app: app
role: master
tier: backend
replicas: 1
template:
metadata:
labels:
app: app
role: master
tier: backend
spec:
containers:
- name: appcontainer
image: repository:1.0
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 8085
imagePullSecrets:
- name: regcred
现在我已经完成所有工作,例如,我对该映像进行了新的更新,并且在完成部署后,需要将该新映像(例如,1.0升级为1.1)。我需要知道执行此操作的正确方法。
因为我想我做错了,就像我试图在使用新映像创建的容器上粉碎映像一样,并且我不知道是否正确的方法是使用新的YAML文件进行部署以及Kubernetes是否可以构建一个带有该映像的新容器,并因此杀死了旧的部署,但是如果这样做正确,我不知道该怎么办。
答案 0 :(得分:1)
使用新图像update a deployment的最简单方法是运行:
kubectl set image deployment/my-app appcontainer=repository:1.1 --record
通过这种方式,它将首先使用较新版本的映像创建一个新的pod,一旦成功部署,它将根据您在replicas
字段中指定的副本数终止旧的pod。 >
您可以通过运行
来检查更新状态kubectl rollout status deployment.v1.apps/my-app
答案 1 :(得分:0)
您要寻找的解决方案称为Rolling update
。您可以像这样更新deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: app
spec:
selector:
matchLabels:
app: app
role: master
tier: backend
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
replicas: 1
template:
metadata:
labels:
app: app
role: master
tier: backend
spec:
containers:
- name: appcontainer
image: repository:1.0
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 8085
imagePullSecrets:
- name: regcred
请注意滚动更新配置:
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
maxSurge
表示部署首次部署期间可以运行的额外Pod的数量。 maxUnavailable
大约是在发布期间可以取下的广告连播数量。这些值可以是整数值-吊舱的确切数量或吊舱的百分比。您可以调整这些值以适合您的用例。
然后,您可以在Yaml中更改图片标签,然后执行kubectl apply
来更新图片。