首页 > 其他分享 >D20 kubernetes 工作负载资源对象-Deployment

D20 kubernetes 工作负载资源对象-Deployment

时间:2024-09-06 19:26:16浏览次数:4  
标签:kubernetes 仓库 D20 django blog myapp Deployment 镜像

1、Deployment简介

	Deployment是kubernetes中最常用的工作负载资源,具有以下特点和功能
- 副本管理:确保指定数量的pod副本在集群中运行。如果pod副本数小于期望值,则会自动创建pod;如果pod的副本数多余期望值,则删除多余的pod
- 滚动更新:采用滚动更新策略,逐步进行新旧版本pod 的替换,保障业务的连续性
- 版本回滚:如果应用程序在升级后出现问题或不符合预期,可以执行回滚操作,以快速恢复到先前的可用版本
	部署和交付是应用程序生命周期中的重要环节。涵盖部署、升级、回滚等多个阶段,具体如下所示。通过使用Deployment资源,可以高效的管理这一过程,并提高部署和交付的效率
  • 应用程序的生命周期如下所示
    源代码--》构建镜像--》部署--》升级--》回滚--》下线
  • 各个阶段的含义:
源代码:在完成应用程序代码的开发后,将其提交到代码仓库中进行管理
构建镜像:使用容器化技术(如docker)将应用程序构建成镜像,该镜像包含应用程序及其依赖环境
部署:将构建好的镜像部署到kubernetes集群中,并对外提供服务
升级:针对应用程序的更新迭代,如新增功能、修复bug等,需要重新构建镜像并将其更新到kubernetes中
回顾:如果在应用程序升级过程中出现问题,则需要回滚到之前的可用版本
下线:当一个应用程序不在需要提供服务时,需要将其从目标环境中下线

2、获取源代码

	假设有一个python Django开发的博客网站,该项目源代码仓库地址为 https://gitee.com/zhenliangli/django-web-demo,现在需要将这个博客网站部署到kubernetes集群中。
  • 首先,将源代码下载到本地
[root@k8s-master k8s]# git clone https://gitee.com/zhenliangli/django-web-demo
下载完成后,源代码文件在当前django-web-demo目录中,其目录结构如下
[root@k8s-master k8s]# tree -L 1 django-web-demo/
django-web-demo/
├── article		# 项目app
├── blog		# 项目目录
├── db.sqlite3		# sqlite数据库文件
├── Dockerfile		# 镜像构建文件
├── manage.py		# 一个命令行工具,用于Django项目进行交互
├── README.md		# 项目文档
├── static		# 静态文件目录
└── templates		# HTML页面模版目录
4 directories, 4 files

3、构建镜像

  • 在源代码目录中,Dockerfile文件内容如下
# 使用官方Python镜像作为基础镜像
FROM python:3.9
# 作者信息
LABEL author="lizhenliang"
# 将项目目录复制到 /app目录下
COPY blog /app
# 使用pip命令安装Django
RUN pip install Django -i https://mirrors.aliyun.com/pypi/simple
# 价格工作目录切换到/app
WORKDIR /app
# 声明容器运行时监听的端口
EXPOSE 8080
# 在容器中运行和启动Django
CMD python manage.py runserver 0.0.0.0:8080
  • 通过Dockerfile构建镜像
[root@k8s-master django-web-demo]# docker build -t django-blog:v1 .
  • 其中-t参数用于设置镜像名称和可选的标签。如果没有指定标签,则默认为latest。标签主要用于镜像版本管理,可以通过多种方式进行定义,如下所示
根据应用程序的版本定义标签,如myapp:1.0,myapp:2.0
根据不同部署环境(如开发、测试和生产)定义标签,如myapp:dev、myapp:test、myapp:prod
根据代码分支定义标签,如myapp:master,myapp:dev0617
根据构建时间自定义标签,如myapp:20240906
	为了更好的识别镜像版本,标签中可以包含上述多个维度,如:myapp:v1-master-20240906。在定义标签时,可以根据情况自由组合,只需要确保标签具备易于理解和唯一标识的特性
  • 指定docker build后,Docker会按照Dockerfile文件从上到下的顺序进行执行。执行完成后,查看构建的镜像
[root@k8s-master django-web-demo]# docker images|grep django
django-blog                                                       v1        b85737aade58   25 minutes ago   1.04GB

4、推送镜像到镜像仓库

	构建的镜像是存储在本地的,而kubernetes集群是一个多节点环境,这意味着pod可以在任意一台节点上运行。因此,为了成功的创建pod,必须确保该镜像在所有节点上都是可以访问的
	为了实现高效的管理镜像,镜像通常会被推送到镜像仓库进行集中管理,kubernetes集群中的节点只需要能够访问这个镜像出纳控股
  • 镜像仓库有下面两种实现方式:
1、公共镜像仓库:由第三方维护的镜像仓库,如Docker Hub、阿里云镜像仓库或者其他云厂商提供的镜像仓库等。这些仓库中存储了数以万计的镜像,可供用户下载和使用。例如
2、自建镜像仓库:与使用公共镜像仓库相比,自建仓库可以提供更高的灵活性、安全性和更快的传输速度。选择harbor开源项目自建镜像仓库是一个不错的选择,它提供了丰富的管理功能,能满足企业对镜像管理的需求
  • 登录docker hub镜像仓库
docker login
Username: suyajun
Password:
  • 登录成功后,将镜像地址标记为要推送的镜像仓库服务器地址
docker tag django-blog:v1 lizhenliang/django-blog:v1
  • 在dockerhub中,只需指定账号即可;对于自建镜像仓库,需要指定相应的ip地址或域名,推送本地镜像到镜像仓库
[root@k8s-master django-web-demo]# docker push lizhenliang/django-blog:v1
推送成功后,可以在任意节点使用下面的命令进行拉取
docker pull lizhenliang/django-blog:v1

5、部署应用程序

  • 在kubernetes集群中创建blog命名空间,将博客园所需资源放置到该命名空间中

标签:kubernetes,仓库,D20,django,blog,myapp,Deployment,镜像
From: https://www.cnblogs.com/suyj/p/18400806

相关文章

  • Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装
    七、Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装一、calicoCalico是一个开源的虚拟化网络方案,支持基础的Pod网络通信和网络策略功能。官方文档:https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart1、calico安装###在Master控......
  • D19 kubernetes 工作负载资源对象
    在kubernetes中,通常不会直接创建pod。都是使用工作负载资源deployment、statefulset来创建和管理pod。这种方式简化了pod的管理,提供了诸多如多副本、滚动和更新、回滚和自动扩展等告警功能,使得部署和管理应用程序变得方便和搞笑工作负载资源概述工作负载资源是kubernetes......
  • 【K8s】专题十三:Kubernetes 容器运行时之 Docker 与 Containerd 详解
    本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口Linux专栏 | Docker专栏 | Kubernetes专栏往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决方法【Docker】(全网首发)Kyli......
  • D18 kubernetes Pod资源对象有哪些重点需要了解的
    pod资源对象的着重需要了解的有:pod资源的概念、设计模式、基本管理操作、常用字段配置以及生命周期管理。具体如下-pod允许定义多个容器,这些容器之间存在密切协作关系。pod主要为它们提供可交互的环境,包括共享网络和共享存储-启动容器时可通过command和args字段来执行命令或传......
  • Kubernetes-etcd备份恢复
    目录使用etcdctl备份与恢复简介集群信息etcdctl安装下载安装同步到其他节点配置环境变量查看集群状态查看所有key查看指定key备份所有节点创建备份目录备份etcd数据恢复删除资源所有master节点停止etcd所有master节点备份原有数据master01恢复master02恢复master03恢复所有节点启......
  • Kubernetes容器生命周期详解:PostStart和PreStop应用案例解析
    1.容器启动命令:容器启动命令指在容器启动时需要执行的命令。通过设置ENTRYPOINT或CMD,可以自定义容器启动时执行的进程。使用了一个简单的Dockerfile来设置ENTRYPOINT命令:FROMubuntuENTRYPOINT["top","-b"]该命令告诉容器启动时运行top命令,并且以-b选项进行批量模式......
  • D17 kubernetes Pod生命周期
    1、创建pod当创建一个pod时,它是通过多个组件来完成的假设通过kubeletrunnginx--image=ningx命令创建一个pod,其工作流程如下:1、kubectl向APIserver发起创建pod的请求,请求中包含pod的配置信息2、APIserver接收到请求后,校验字段合法性,例如格式、镜像地址不能为空等,校验通......
  • D14 kubernetes 容器服务质量和容器环境变量
    1、容器服务质量 服务质量(qualityofServices,QoS),是kubernetes用于对pod的进行优先级划分的一种机制。通过QoS,kubernetes将pod划分为3个等级。如下所示Guaranteed 优先级最高 pod中每个容器都被设置了CPU/内存的资源请求和资源限制,并且资源请求的值与资源限制的值相等Burstabl......
  • D16 kubernetes 容器生命周期回调
    1、简介容器生命周期回调是指在容器的生命周期中执行用户定义的操作。kubernetes支持以下生命周期回调PostStart(容器启动后):在容器启动后立即执行的回调,它可以用于执行一些初始化任务PreStop(容器停止前):在容器停止之前执行的回调。它可以用于执行清理或保存状态的操作......
  • D15 kubernetes 初始化容器(initContainers)
    初始化容器(initContainers)是Pod中一种特殊类型的容器,专用于在主容器启动之前执行一些初始化任务和操作,以满足主容器所需的环境。 初始化容器在整个pod的生命周期内仅运行一次,并且在主容器启动之前完成它们的任务,既初始化容器一旦任务完成,就必须退出。初始化容器有以下应用场......