Deployment部署
k8s中,我们部署应用通常都不是直接创建Pod,而是通过Deployment来定义Pod以及其副本数量,然后交给k8s自动调度。通过操作Deployment,还能实现升级、回退、扩容等操作。
Deployment例子
下面例子中,部署了一个1.20
版本的Nginx,并配置了3个副本。
deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
labels:
k8s-app: nginx-demo
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
上面配置中我们可以看到,其实template
中定义的就是Pod相关的内容。spec.selector
需要能够匹配spec.template.metadata.labels
,这样才能正常部署。
Deployment基本操作
如下命令使用kubectl
可以通过YAML配置文件部署Deployment。
kubectl apply -f <YAML配置文件>
kubectl create
和kubectl apply
的区别:
create
:删除现有的组件,根据配置文件重新生成apply
:根据配置文件升级现有的组件
如下命令查看当前所有Deployment。
kubectl get deployments
如下命令如下命令查看Deployment详细信息。
kubectl describe deployments <Deployment名称>
如下命令删除Deployment。
kubectl delete deployments <Deployment名称>
注:删除Deployment后,对应Pod会自动销毁、删除。
重新部署
实际的线上环境因为情况非常复杂,我们可能遇到部署失败的情况,有时我们希望已有的Deployment重新尝试部署,可以使用如下命令实现。
kubectl rollout restart deployment <Deployment名称>
升级和回退版本
k8s能够按照一定的策略进行弹性升级,这里我们以上面部署的nginx
为例进行操作。
如下命令查看升级操作状态。
kubectl rollout status deployment <Deployment名称>
输出结果例子:
Waiting for deployment "nginx-deploy" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deploy" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deploy" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deploy" successfully rolled out
如下命令查看升级操作历史。
kubectl rollout history deployment <Deployment名称>
输出类似如下结果。
deployment.apps/nginx-deploy
REVISION CHANGE-CAUSE
1 <none>
2 <none>
我们也可以升级到指定镜象版本,下面是一个例子。
kubectl set image deployment nginx-deploy nginx=nginx:1.20.1
下面例子回退到指定版本。
kubectl rollout undo deployment nginx-deploy --to-revision=1
这里的revision
版本号我们可以通过kubectl rollout history
来找到。
伸缩副本数量
上面我们创建了3个副本,这里我们将其修改为5个副本。
kubectl scale deployment nginx-deploy --replicas=5
伸缩操作和软件镜像版本无关,因此不会计入revision
中。
如果我们需要操作所有的Deployment,例如紧急情况下我们要将所有副本数改为0
,可以使用--all
参数指定,例子如下。
kubectl scale deployment --all --replicas=0
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。