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

简介: 上一次我们分享到,如何去升级一个 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搭建和管理企业级网站应用
相关文章
|
1天前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
|
29天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
117 21
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
1月前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
2月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
2月前
|
人工智能 Kubernetes 安全
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
82 13
|
3月前
|
Kubernetes 监控 安全
容器化技术:Docker与Kubernetes的实战应用
容器化技术:Docker与Kubernetes的实战应用
|
存储 设计模式 运维
YAML 管理 Kubernetes 应用
YAML 管理 Kubernetes 应用
367 1
|
存储 设计模式 运维
如何不编写 YAML 管理 Kubernetes 应用?
Kubernetes 将自身边界内的事物都抽象为资源。其中的主要部分,是以 Deployment、StatefulSet 为代表的 workload 工作负载控制器,其他各类资源都围绕这些主要的资源工作。这些资源合并起来,可以为 IT 技术工作者展现出一个以 workload 为中心的模型。Kubernetes 中所有的资源,都通过声明式配置文件来编辑描述,一条条的 Yaml 字段定义,给了 IT 技术人员最大的自由度的同时,也对技术人员的能力提出了极高的要求。
|
Kubernetes Shell 开发工具
使用 Kustomize 帮你管理 kubernetes 应用(二): Kustomize 的使用方法
本篇为系列文章第二篇,手把手教你使用 Kustomize 的两种方式。
4604 0

热门文章

最新文章