项目的发布方式和容器的重启策略

2024-08-29 16:28

本文主要是介绍项目的发布方式和容器的重启策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目的发布方式:

应用升级以及新旧业务切换,在这个过程当中如何保证对外的服务正常是一个非常重要的问题。

三种的发布方式:

1、蓝绿发布:

把服务器分为蓝组和绿组,先停其中的一部分,先停蓝组,绿组依然对外提供服务,等蓝组更新维护完毕,上线之后,再把绿组关闭维护。可以做到业务更新和发布过程的对外服务不受影响。

过去成本很高,

负载均衡+高可用

特点:一旦出现问题,影响范围比较大

发布策略也比较简单

用户无感知,平滑过渡

缺点:需要大量的后台服务器以作为支撑。成本还是比较高的

2、金丝雀发布:

金丝雀发布就是先整个测试服测试版本,先打上断点,版本没问题就可以取消断点进行滚动更新,删除所有旧版本,加上一个新版本

金丝雀发布:灰度发布。

Deployment控制器可以通过自定义控制的方式实现金丝雀发布。

[root@master01 ~]# kubectl create deployment nginx1 --image=nginx:1.12 --replicas=3     #创建pod
​
[root@master01 ~]# kubectl set image deployment/nginx1 nginx=nginx:1.22 && kubectl rollout pause deployment nginx1                      #创建一个测试服
​
[root@master01 ~]# kubectl rollout resume deployment/nginx1             #测试服没有问题,更新版本

自动化控制的要求很高。整个系统的稳定性比蓝绿发布要高。影响范围可控。

3、pod的默认形式,滚动发布,

部署时间比较慢,但是节约资源。发布的策略也比较复杂。

声明式的管理方式:

yaml文件实现:

yaml文件:
deployment的部署方式:
[root@master01 k8s-yaml]# vim nginx-deploy.yaml
#aip版本的标签
aipVersion: apps/v1
kind: Deployment
#定义资源的类型/角色 kind的类型:Deployment  Job Ingress Service  Deamonset
metadata:
#定义创建资源的元数据信息,资源的名称————pod的名称,命名空间,pod的标签name: nginx1
#  namepaces:               #定义命名空间,不写就是默认命名空间labels:app: nginx1
#标签名:app=nginx1 上下文要一致
spec:
#顶格写属于全局配置,spec配置deployment资源需要的参数属性。副本数,匹配的标签以及容器的重启策略replicas: 3
#定义该资源pod的数量selector:matchLabels:
#selector用来定义标签的选择器,matchLabels用来定义匹配的标签,这里需要上下文保持一致。app: nginx1
#都是定义容器和pod的元数据template:
#定义业务模板,定义了3个副本,所有的pod的属性都会和template的设置保持一致metadata:labels:app: nginx1
#这里也需要和上下文保持一致spec:
#定义pod内的容器containers:- name: nginximage: nginx:1.22
#--image=nginx:1.22
#        ports:
#        - containerPort: 8080
#如果nginx的端口是默认的就是80,ports可以不写,写了也无法改变容器内的端口。
#如果默认端口不是80,那就需要加上ports声明非默认端口。
[root@master01 k8s-yaml]# kubectl apply -f nginx-deploy.yaml            #创建资源对象
​
[root@master01 k8s-yaml]# kubectl delete -f nginx-deploy.yaml           #删除资源对象

pod和容器是分开的也是合并的。镜像定义容器。pod不能改变镜像

service的部署方式:
[root@master01 k8s-yaml]# vim nginx-service.yaml 
#定义api标签:
apiVersion: v1
kind: Service
metadata:
#定义service的名称和标签name: nginx1-svclabels:app1: nginx1
spec:
#定义service的资源参数,端口映射,类型、匹配的标签名(和哪个资源对象进行匹配)type: NodePortports:- port: 80
#service的端口targetPort: 80
#容器内的端口nodePort: 30000selector:app: nginx1[root@master01 k8s-yaml]# kubectl apply -f nginx-service.yaml 
pod的部署方式:
[root@master01 k8s-yaml]# vim nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx-podlabels:app: nginx-pod
spec:
#声明容器的参数containers:- name: nginximage: nginx:1.22ports:- containerPort: 80hostPort: 80
#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)
​
[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml pod/nginx-pod created
[root@master01 k8s-yaml]# kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP            NODE     NOMINATED NODE   READINESS GATES
nginx-pod                1/1     Running   0          13s    10.244.1.42   node02   <none>           <none>
nginx1-b666bdb8c-67tkt   1/1     Running   0          104m   10.244.2.40   node01   <none>           <none>
nginx1-b666bdb8c-pltdv   1/1     Running   0          104m   10.244.2.41   node01   <none>           <none>
nginx1-b666bdb8c-wzw7q   1/1     Running   0          104m   10.244.1.41   node02   <none>           <none>
[root@master01 k8s-yaml]# curl 192.168.60.130
123

容器的重启策略和传参

重启策略

restartPolicy:

Always 只要启动失败就会一直重启容器

Never 从不重启 docker的默认模式

OnFailure 只有容器异常退出时,才会重启。返回码非0时,才会对容器进行重启。

Always:
[root@master01 k8s-yaml]# vim centos-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: centos-podlabels:app: centos-pod
spec:
#声明容器的参数containers:- name: centosimage: centos:7ports:- containerPort: 80hostPort: 80restartPolicy: Always
#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)
[root@master01 k8s-yaml]# kubectl apply -f nginx-centos.yaml 
[root@master01 k8s-yaml]# kubectl get pod
NAME                     READY   STATUS             RESTARTS   AGE
centos-pod               0/1     CrashLoopBackOff   1          77s

Never
apiVersion: v1
kind: Pod
metadata:name: centos-podlabels:app: centos-pod
spec:
#声明容器的参数containers:- name: centosimage: centos:7ports:- containerPort: 80hostPort: 80restartPolicy: Never[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml pod/centos-pod created
[root@master01 k8s-yaml]# kubectl get pod
NAME         READY   STATUS      RESTARTS   AGE
centos-pod   0/1     Completed   0          3s

总结:

如果是deployment,那么容器只能是Always,默认就是Always,可以不写。

基于pod的yaml文件,三种类型都可以。

pod内的传参:

command和args

在yaml文件当中command和arges只能各存在一个。

agres可以给command传参

写法一:
apiVersion: v1
kind: Pod
metadata:name: centos-podlabels:app: centos-pod
spec:
#声明容器的参数containers:- name: centosimage: centos:7ports:- containerPort: 80hostPort: 80args:- /bin/bash- -c- while true; do sleep 3600; done
[root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force               #pod的yaml会有这种重复,提示有内容没有发生变化,需要加--force强制执行。
[root@master01 k8s-yaml]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
centos-pod               1/1     Running   0          9s
写法二:
apiVersion: v1
kind: Pod
metadata:name: centos-podlabels:app: centos-pod
spec:
#声明容器的参数containers:- name: centosimage: centos:7ports:- containerPort: 80hostPort: 80args: ["/bin/bash","-c","while true;do sleep 3600;done"][root@master01 k8s-yaml]# kubectl apply -f nginx-pod.yaml --force
[root@master01 k8s-yaml]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
centos-pod               1/1     Running   0          4s
​

    args: ["/bin/bash","-c","touch /opt/123.txt;echo 123 > /opt/123.txt; sleep 3600"]#/bin/bash 多个命令必须要加/bin/bash
#-c 输出命令的格式
#多个命令 /bin/bash  -c  都需要
#主机端口,直接让主机端口和容器端口做映射(只能在yaml文件当中表示)

command的用法:

 args: ["/bin/bash","-c","touch /opt/123.txt;echo 123 > /opt/123.txt; sleep 3600"]

args给command传参:

apiVersion: v1
kind: Pod
metadata:name: centos-podlabels:app: centos-pod
spec:
#声明容器的参数containers:- name: centosimage: centos:7ports:- containerPort: 80hostPort: 80command: ["echo"]args: ["hello word"][root@master01 k8s-yaml]# kubectl logs -f centos-pod 
hello word

总结:

command和args如果不需要传参只能存在一个

不论是args还是command都会覆盖容器的标准输出(类似CMD和entrypoint)

导出模板:

#先创建一个pod
[root@master01 k8s-yaml]# kubectl create deployment nginx-de --image=nginx-1.22 --replicas=3#将pod的模板导入到/opt/k8s-yaml/目录下
[root@master01 k8s-yaml]# kubectl get deployments.apps nginx-de -o yaml > /opt/k8s-yaml/nginx-de.yaml

这篇关于项目的发布方式和容器的重启策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1118364

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF