伸缩应用
scaling 伸缩应用
当流量增加的时候,通过对应用程序进行伸缩操作以满足系统性能需求。
伸缩的实现可以通过更改nginx-deployment.yaml文件中部署replicas副本数来完成
sec:
replicas: 2 #使用该deployment创建两个应用程序实例
下图中,service A只将访问流量转发到ip为10.0.0.5的pod上
修改了deployment的replicas为4后,k8s又为该deployment创建了3个新的pod。这四个pod有相同的标签,因此service a通过标签选择器与新的pod建立对应关系。将访问流量通过负载均衡再4个pod之间进行转发。
使用kubectl进行扩容
修改nginx-deployment.yaml文件
apiVersion apps/v1
kind Deployment
metadata
name nginx-deployment
labels
app nginx
spec
replicas 4 #此处修改
selector
matchLabels
app nginx
template
metadata
labels
app nginx
spec
containers
name nginx
image nginx1.7.9
ports
containerPort80
执行并检查结果
kubectl apply -f nginx-deployment.yaml
watch kubectl get pods -o wide
滚动更新
rolling update滚动更新通过使用新版本的pod逐步替代旧版本的pod来实现deployment的更新,从而实现零停机。新的pod将再具有可用资源的node上进行调度。
k8s更新多副本的deployment的版本的时候,会逐步创建新版本的pod,逐步停止旧版本的pod,以便使应用一直处于可用状态,这个过程中,service能够监视pod的状态,将流量始终转发到可用的pod上。
默认情况下,rolling update滚动更新过程中,k8s逐步使用新版本的pod替换旧版本的pod(最大可用pod数为1,最大新建pod数也为1)。这两个参数可以配置数字或者百分比。再k8s中,更新版本化的,任何部署更新都可以恢复为以前的稳定版本。
描述
1.原本service a 将流量负载均衡到4个旧版本的pod上。
2.更新完deployment部署文件中的镜像版本后,master节点选择了一个worker节点,并根据新的镜像版本创建pod,新pod拥有唯一的新的IP,同时,master节点选择一个旧版本的pod将其移除。
此时service a将新pod纳入到负载均衡中,将旧pod移除。
3 同步骤2,再创建一个新的pod替换原有的pod
4 如此rolling update滚动更新,指导所有的旧版本的pod均被移除,新版本的pod也达到了deployment部署文件中的副本数,则滚动更新完成。
滚动更新允许以下操作;
- 将应用程序从准上线环境升级到生产环境(通过更新容器镜像)
- 回滚到以前的版本
- 持续集成和持续交付的应用程序,无需停机
使用kubectl更新
修改nginx-yaml文件,修改文件中的image镜像的标签
apiVersion apps/v1
kind Deployment
metadata
name nginx-deployment
labels
app nginx
spec
replicas4
selector
matchLabels
app nginx
template
metadata
labels
app nginx
spec
containers
name nginx
image nginx 1.8 #使用镜像nginx:1.8替换原来的nginx:1.7.9
ports
containerPort80
执行并检查结果
kubectl apply -f nginx-deployment.yaml
watch kubectl get pods -l app=nginx