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

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

相关文章

Debian系和Redhat系防火墙配置方式

《Debian系和Redhat系防火墙配置方式》文章对比了Debian系UFW和Redhat系Firewalld防火墙的安装、启用禁用、端口管理、规则查看及注意事项,强调SSH端口需开放、规则持久化,... 目录Debian系UFW防火墙1. 安装2. 启用与禁用3. 基本命令4. 注意事项5. 示例配置R

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种