三种常见的项目发布方式:

蓝绿发布:

金丝雀发布(灰度发布):

滚动发布:

应用程序升级,面临的最大的问题,就是新旧业务的更换,立项--定稿--需求发布--开发--测试--发布,测试之后上线,再完美也会有文题,为了不让发生的问题影响所有用户,上述的三种发布方式

蓝绿发布:

把应用服务集群标记为两个组,分为蓝组和绿组,先升级蓝组,要把蓝组从负载均衡当中移除,绿组继续提供服务,蓝组升级完毕,再把绿组从负载均衡当中移除,绿组升级,然后都加入回负载均衡当中去,完成对外服务

蓝绿发布的特点:

  1. 一旦出现问题,问题的影响范围很大
  2. 发布策略简单
  3. 基于现在的云计算微服务,用户无感知
  4. 升级和回滚比价方便

缺点:

  1. 在发布升级的过程中,只有一部分集群对外提供服务,可能会使得集群的负载能力下降,响应变慢,需要注意给集群增加负载能力(一般来说没什么特殊需求)
  2. 短时间内可能会浪费一定的资源成本

金丝雀发布(灰度发布):

Deployment控制器创建的服务,才可以使用这种发布方式,滚动更新,暂停,发布非过程中,暂时停止,只有一部分的pod先升级,其他的pod还是处于老的版本,只有一部分用户可以访问新的版本,绝大多数用户还是在老版本,确定无问题之后后,再把剩下的老版本,升级新的版本,把暂停取消,继续发布,如果有问题,可以立即回滚,暂停不是回滚,一旦取消暂停只能全部升级完成之后,再回滚

暂停之后不能回滚,必须全部更新完成之后,一起回滚回去

灰度发布的特点:

  1. 自动化要求比较高,对运维人员要求比较高
  2. 方便发现问题,及时解决,影响范围比较小
  3. 用户无感知,可以实现一个平滑过渡,比较节约资源
  4. 发布策略比较复杂
  5. 不易回滚,必须要全部发布成功之后才能回滚

滚动更新:是的deployment的默认方式,

演示

创建:

kubectl set image deployment nginx nginx=nginx:1.24 --record && kubectl rollout pause deployment nginx

等待一段时间:

查看回滚状态:

查看版本

回滚,只能全部升级完成之后,一起回滚

回滚:

查看版本

声明式资源管理方法(YAML文件):

特点:

  1. 适合对资源的修改操作,这是陈述式的弱项
  2. 声明式管理依赖于YAML文件,所有的内容都在YAML文件之中
  3. 编辑好的YAML文件,还是要依靠陈述式的命令,发布到k8s集群当中

如何发布呢,三种方式:

Create:只能创建,不能更新,从指定YAML文件中读取配置,创建服务,不能更新

Apply -f:既然可以创建资源对象也可以更新资源对象,如果YAML文件更改了,apply可以直接更新资源对象

Delete -f:删除YAML文件当中的声明的资源对象

YAML文件如何生成呢:

  1. 手打
  2. 可以根据已有的资源

演示根据已有的资源:

强制执行yml文件--force

演示service文件

同理pod也行:

常见到的YAML文件格式:

  1. deployment的YAML文件 daemonset statefulset
  2. Service的YAML文件
  3. 不急于控制器的pod的YAML文件

K8s当中支持两种声明式的资源管理方式:

  1. YAML格式,用于配置和管理资源对象
  2. Json格式,主要用于在api接口间的消息传递

Command

Args

定义容器运行的命令参数,类型与docker的CMD和entrypoint

Args可以理解docker中的cmd,给command传参

Command和args都会覆盖原容器的标准输出(CMD和ENTRYPOINT)

YAML文件怎么写:

查看创建格式

编写yml文件:

查看模板:

Deployment的YAML

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx1

  namespace: guoqi

  labels:

    wdf: nginx1

spec:

  replicas: 3

  selector:

    matchLabels:

      wdf: nginx1

  template:

    metadata:

      labels:

        wdf: nginx1

    spec:

      containers:

       - name: nginx

         image: nginx:1.10

        # posts:

        #  - containerPort: 80

查看service模板:

kubectl explain service

service的yaml

apiVersion: v1

kind: Service

metadata:

  name: nginx-service

  namespace: guoqi

  labels:

    wdf: nginx1

spec:

  type: NodePort

  ports:

  - port: 80

    targetPort: 80

  selector:

    wdf: nginx1

Pod的YAML

查看格式

apiVersion: v1

kind: Pod

metadata:

  name: centos1

  namespace: guoqi

spec:

  restartPolicy: Always

  containers:

  - name: centos

    image: centos:7

详细查看信息:

kubectl describe pod -n guoqi centos1

查看日志:

kubectl logs -n guoqi centos1

Command;Args

定义容器运行的命令参数,类似与docker的CMD和ENTRYPOINT

Args可以理解docker中的cmd,给command传参

Command和args都会覆盖原容器的标准输出(CMD和ENTRYPOINT)

如何定义多条命令:

建议格式,多个命令写在一行

不能同时有两个command,command和ARG不能同时出现,除非你要传参,都会容器的标准输出(CMD和enterpoint)

总结今天的内容:

三种发布方式

蓝绿发布:

灰度发布(重点):,基于deployment的滚动发布方式,使用了一个机制pause,resume继续,回滚:所有都升级完成之后才可以回滚

滚动发布:

三种YAML格式:

Deployment:

Service:

Pod:

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐