【k8s 系列】k8s 学习二十五-2,Deployment 升级应用

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 上一次我们分享到,如何去升级一个 pod 的新的版本,相信在理论上,大家都知道可以如何做了,那么我们来进行实践一下,看看都会遇到哪些问题,以及操作起来是否便捷,感兴趣的可以一起来体验一波

【k8s 系列】k8s 学习二十五-2,Deployment 升级应用1

上一次我们分享到,如何去升级一个 pod 的新的版本,相信在理论上,大家都知道可以如何做了,那么我们来进行实践一下,看看都会遇到哪些问题,以及操作起来是否便捷,感兴趣的可以一起来体验一波

本来是可以使用 rolling-update 的方式

使用 rolling-update 的方式,其实对于 k8s 来说已经是过时了的,但是我们还是要来了解和尝试一下rolling-update 的方式 ,在这里我们先说一下为啥他会被淘汰

因为使用 rolling-update 的方式其实是会直接修改我们创建出来的对象的,这回导致直接更新 pod 和 RS 的标签,这种做法还是不太好,而且现在最新的 k8s 也不支持了

对于先删除旧的,然后创建新的,这个方式比较简单,就是使用 RS 的扩容和缩容拉实现,之前的分享的事件案例中就有所涉及,我们可以再来温习一遍

我们可以使用这两种方式

  • RS 扩缩容的方式
  • deployment

RS 扩缩容的方式

创建必备基本环境

写一个应用程序,可以标识版本

app.js

const http = require('http');
const os = require('os');
console.log("xmt kubia server starting...");
var handler = function(request, response){
    console.log("received request from " + request.connection.remoteAddress);
    response.writeHead(200);
    response.end("you've hit xmt web  " + os.hostname() + "version is v1"  "\n");
};
var www = http.createServer(handler);
www.listen(8080);

自己可以继续复用之前的一个小应用,简单的 http 请求,访问应用的 8080 端口后,应用会给客户端 pod 的 名字和 版本号 v1

做一个镜像

Dockerfile

FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]

我们将上述的小应用加入到 Dockerfile 中,直接运行即可

docker build -t xiaomotong888/newkubia:v1
docker push xiaomotong888/newkubia:v1

写 yaml ,创建 RS,Service,Pod

mynewkubia.yaml

apiVersion: v1
kind: Service
metadata:
  name: newkubia-service
spec:
  type: NodePort
  selector:
    app: newkubia
  ports:
  - port: 80
    targetPort: 8080
---
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: newkubia-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: newkubia
  template:
    metadata:
      labels:
        app: newkubia
    spec:
      containers:
      - name: newkubia
        image: xiaomotong888/newkubia:v1
        ports:
        - containerPort: 8080

创建一个 SVC 和 RS,可以放在同一个 yaml 文件中一起部署,我们只需要用 --- 隔开即可

使用 kubectl create -f  mynewkubia.yaml即可创建出 RS ,SVC 和 POD

此处的 SVC 本来是想模拟 LoadBalancer 的,但是我使用的是 minikube ,没有办法使用 LoadBalancer,不过我可以使用 NodePort 的类型

image.png

我们可以进入任意一个 pod ,是用 curl 命令访问 服务的地址(svc),我们可以看到如下效果

image.png

能够看到访问此时的服务打印出来的消息是 v1 版本的,没有毛病

开始创建一个新的 RS2,将流量切换到新的 Pod 中

这个时候,我们来创建另外一个 RS2,然后通过修改标签的方式,来将 Service 的流量切换到新的 pod 中

具体的 yaml 内容 和上述的 RS yaml 内容一致,我们只需要将对应的地方修改为 newkubia-rs-2  即可,不要和之前创建的  RS 冲突了,标签也要一起修改

kubectl create 对应的 yaml 文件之后 ,我们在进入到 对应的 SVC 修改 标签

image.png

这个时候我们再来查看一下流量是否真的会去切换到 pod v2 版本上

我们仍然可以使用同样的方式,找到任意一个 pod ,进入到容器,通过 curl 命令访问 svc 的地址,查看日志给我们输出的是什么效果

image.png

通过查看效果响应的是 v2 版本的,我们可以知道,Service 的流量确实且到了新的 pod , 对应这个请求的路径是这个样子的:

image.png

这个图,我们在分享 Service 的时候,也有体现。

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
16天前
|
应用服务中间件 调度 nginx
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
|
18天前
|
存储 Kubernetes 负载均衡
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
18 1
|
20天前
|
存储 Kubernetes 调度
k8s学习--k8s群集部署zookeeper应用及详细解释
k8s学习--k8s群集部署zookeeper应用及详细解释
|
存储 Kubernetes NoSQL
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(六)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(六)
183 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(六)
|
监控 应用服务中间件 nginx
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(五)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(五)
182 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(五)
|
数据可视化 Perl 容器
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(四)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(四)
281 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(四)
|
数据可视化 NoSQL 应用服务中间件
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(三)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(三)
251 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(三)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(二)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(二)
148 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(二)
|
Kubernetes 应用服务中间件 nginx
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(一)
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(一)
222 0
KUBERNETES03_命名空间、Pod是什么、Deployment多副本能力、扩缩容、自愈或故障转移、滚动更新、版本回退(一)
|
21天前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
90 17