app网站开发成本,公司网站运营包括哪些方面,0453牡丹江信息网招聘,中国建设银行官网的网站首页目录 一、常用的发布方式
1、蓝绿发布#xff1a;
2、金丝雀发布#xff08;灰度发布#xff09;#xff1a;
3、滚动更新#xff08;deployment的默认更新方式#xff09;#xff1a;
二、声明式管理方法#xff08;yaml文件#xff09;
1、三种发布命令#x…目录 一、常用的发布方式
1、蓝绿发布
2、金丝雀发布灰度发布
3、滚动更新deployment的默认更新方式
二、声明式管理方法yaml文件
1、三种发布命令
2、三种常用的yaml文件
2.1、deployment的yaml文件
2.2、service的yaml文件
2.3、port的yaml文件 一、常用的发布方式
三种常见的项目发布方式
蓝绿发布、金丝雀发布灰度发布、滚动发布 应用程序升级面临的最大的问题是新旧业务之间的切换。
立项—定稿—需求发布—开发—测试—发布
测试之后上线在完美也会有问题。为了不让发生的问题影响所有用户产生了上述的三种发布方式 1、蓝绿发布 工作方式
1、把应用服务集群标记为两个组蓝组和绿组。先升级蓝组要把蓝组从负载均衡当中移除绿组继续提供服务
2、蓝组升级完毕再把绿组从负载均衡中移除绿组升级然后都加入回负载均衡中去完成对外服务 蓝绿发布对硬件资源要求很高但是有了云计算和微服务现在的成本也大大降低了 蓝绿发布的特点
一旦出现问题问题的影响范围很大发布策略简单基于现在的云计算和微服务用户是无感知的升级和回滚都比较方便 缺点
在发布升级的过程中只有一部分集群在对外提供服务可能会使集群的负载能力下降响应变慢需要注意给这个集群增加负载能力一般来说没什么特殊需要一般都是半夜访问最小的之后升级。在短时间内可能会浪费一定的资源成本 2、金丝雀发布灰度发布
必须是基于deployment控制器创建的服务才可以使用这种发布方式。相当于测试服 工作方式
实际上也是一种滚动更新发布的过程中暂时停止只有一部分的pod先升级其他的pod还是处于老的版本。只有一部分用户可以访问新的版本绝大多数用户还是老版本。确定无问题之后再把剩下的老版本升级成新版本把暂停取消继续发布。如果有问题可以立即回滚。暂停不是回滚一旦取消暂停只能全部升级完毕之后再回滚
#K8S的金丝雀暂停发布只会更新一个kubectl set image deployment nginx nginxnginx:1.24 --record kubectl rollout pause deployment nginx #统一更新kubectl rollout resume deployment nginx #全部升级完毕后才能回滚kubectl rollout history deployment nginxkubectl rollout undo deployment nginx --to-revision1 若想回滚只能全部升级完毕之后才能回滚 灰度发布特点
自动化的要求比较高对运维人员的要求比较高方便发现问题及时解决影响范围比较小用户无感知可以实现一个平滑的过度。节约资源发布策略比较复杂不易回滚必须等到全部发布成功之后才能回滚 3、滚动更新deployment的默认更新方式
deployment的默认更新方式 一般灰度和滚动发布即可
一般用滚动特殊场景用灰度要准备场景 二、声明式管理方法yaml文件
1、适合对资源的修改操作
2、声明式管理依赖于yaml文件所有的内容都在yaml文件中声明
3、编辑好的yml文件还是要靠陈述式命令发布到K8S集群中 K8S中支持两种声明式的资源管理方式
1、yaml格式用于配置和管理资源对象
2、json格式只要用于在api接口之间消息的传递 1、三种发布命令
kubectl create#create只能创建不能更新。从指定的yml文件中读取配置创建服务。不能更新kubectl apply -f#既可以创建资源对象也可以更新资源对象。如果yml文件更改了apply可以直接更新资源对象用的最多的方式kubectl delete -f#删除yml文件中声明的资源对象 yaml文件如何生成
两种方式 1、手打
2、可以根据已有的资源直接生成
kubectl get deployments.apps nginx -o yamlkubectl get deployments.apps nginx -o yaml /opt/test.yaml 调用yaml文件
kubectl apply -f test.yaml 改过一次的yaml文件再次调用会报错重新导出yaml文件才行 若修改之后想再调用加--force 强制调用
kubectl apply -f test.yaml --force 2、三种常用的yaml文件
deployment的yaml文件daemonset、statefulsetservice的yaml文件不基于控制器的pod的yaml文件 2.1、deployment的yaml文件 #deployment的yaml文件模版
kubectl explain deploymentvim deploymentapiVersion: apps/v1
#声明api版本的标签
kind: Deployment
#定义资源的类型Service/Pod/Deployment/Job/Ingress/Daemonset/Statefulset
metadata:name: nginx1 namespace: test1labels: test: nginx1
#定义资源的元数据信息比如资源名称、资源对象、部署的命名空间、标签等信息
spec:
#定义deployment的资源需要的参数属性replicas: 3
#定义副本数selector:
#定义标签选择器matchLabels: test: nginx1
#选择匹配的标签template:
#定义业务模版如果定义了多个副本所有的副本属性都会按照模版的配置进行匹配metadata: labels: test: nginx1
#定义了pod的副本都使用元数据的标签和属性来进行匹配spec:containers: - name: nginximage: nginx:1.10#ports: #- containerPort: 80
#spec声明的是容器的相关参数虽然指定了容器的暴露端口是80如果镜像默认的端口不是8080也访问不了端口这里可以忽略默认的不用加即使指定了其他端口也不会改变容器的端口要改只能进容器改. 2.2、service的yaml文件
vim service.yaml#定义api版本
apiVersion: v1
kind: Service
metadata:name: nginx1-servicenamespace: test1labels:test: nginx1
#元数据信息包括service的名称不能重复所属的命名空间以及要匹配的deployment的标签要和之前的deployment标签一致否则会重新生成新的servicespec:type: NodePortports: - port: 80targetPort: 80nodePort: 30000selector: test: nginx1
#匹配所有的标签都是test:nginx1的pod后端提供服务 2.3、port的yaml文件
vim pod.yaml#pod的yaml模版
kubectl explain pod#定义pod的apiversion
apiVersion: v1
#定义资源的类型
kind: Pod
#定义元数据信息,pod的名称所属的命名空间标签等
metadata:name: centos1namespace: test1spec:restartPolicy: Always
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略Always、Never、Onfailure只有异常
退出才会重启状态码非0重启为0不重启restartPolicy指的是容器的重启策略资源类型定义为deplo
yment容器的重启策略只能是Always可以不加。containers:- name: centosimage: centos:7 运行一次之后centos会直接退出 想要持续运行要添加两个参数
command、args
定义容器运行的命令参数类型与docker的CMD和ENTRYPOINT args可以理解为CMD可以给command传参
CMD可以给ENTRYPOINT传参 command和args都会覆盖原容器的标准输出CMD和ENTRYPOINT都会覆盖 持续运行
#定义pod的apiversion
apiVersion: v1
#定义资源的类型
kind: Pod
#定义元数据信息,pod的名称所属的命名空间标签等
metadata:name: centos1namespace: test1spec:restartPolicy: Never
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略Always、Never、Onfailure只有异常
退出才会重启状态码非0重启为0不重启restartPolicy指的是容器的重启策略资源类型定义为deplo
yment容器的重启策略只能是Always可以不加。containers:- name: centosimage: centos:7args: - /bin/bash- -c- while true; do sleep 3600; done
#多个命令用;分号隔开 3600秒后自动退出 也可以在一行定义多个命令用,逗号和空格隔开 command的多条命令一起执行必须是 /bin/bash -c 开头
格式 command和args只能有一个。会把容器的标准输出覆盖。不论是args和command都会覆盖CMD和ENTRYPOINT command和args不要同时出现除非传参时。都会覆盖容器的标准输出CMD和ENTRYPOINT