前言:上一篇通过rancher管理k8s,部署服务应用扩容,高可用,本篇介绍kubectl命令行部署高可用集群节点,测试升级、扩容等

1、测试环境:3节点k3s,使用其中2节点(ubuntunode1与ubuntunode2),node3暂不用

  • 输入命令,查看节点状况

2、进入任意节点,使用kubectl命令行进行服务部署操作,我们这里用node1节点

  • 新建一个.yaml文件,用于部署2个负载的应用,文件名称:springbootapp-2nodes.yaml

  • 文件内容如下,kind节点使用Deployment类型:

  • 文本如下:
      apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: springbootapp-dep
    labels:
    app: springbootapp
    spec:
    replicas: 2
    selector:
    matchLabels:
    app: springbootapp
    template:
    metadata:
    labels:
    app: springbootapp
    spec:
    containers:
    - name: springbootapp
    image: xjk27400861/springbootapp:42
    ports:
    - containerPort: 8080
  • 新建一个命名空间,用于部署集群应用
    命令如下:
      sudo kubectl create namespace springboot2node

  • 输入命令,创建2节点副本应用,-n 指定命名空间
    命令如下:
      sudo kubectl create -f springbootapp-2nodes.yaml -n springboot2node

  • 也可以在.yaml文件中指定命名空间:

  • 输入命令,查看pod节点运行状态
    命令如下:
      sudo kubectl get pods -n springboot2node

  • 输入命令,查看副本集情况
    命令如下:
      sudo kubectl get rs -n springboot2node

  • 输入命令,创建一个svc的service,暴露集群
    命令如下:
      sudo kubectl apply -f springbootapp-2node-svc.yaml

  • springbootapp-2node-svc.yaml文件内容如下:
      apiVersion: v1
    kind: Service
    metadata:
    name: springbootapp-2node-svc
    namespace: springboot2node
    labels:
    app: springbootapp-2node-svc
    spec:
    type: NodePort
    ports:
    - port: 8080
    nodePort: 30001
    selector:
    app: springbootapp

  • 通过任意节点ip+端口:30001+路由即可访问应用,我这是:http://192.168.231.133:30001/hellohttp://192.168.231.134:30001/hello

3、k8s扩容

  • 修改配置文件springbootapp-2nodes.yaml,2节点改为3节点

  • 输入命令,重新部署,查看副本集变为3个
      sudo kubectl apply -f springbootapp-2nodes.yaml --record=true

  • 查看pod数量,也为3个

4、k8s自愈性

  • 删除2个pod,模拟服务器宕机状况
      sudo kubectl delete pod springbootapp-dep-67656f6dc9-cncb6 springbootapp-dep-67656f6dc9-pp47x -n springboot2node

  • 重新查看pod状况,发现又重新构建了2个新的pod,保证负载还是3台
      sudo kubectl get pods -n springboot2node

5、k8s升级

  • 修改代码,区分版本,重新构建镜像推到仓库

  • 新镜像tag:43

  • 修改部署文件:springbootapp-2nodes.yaml,镜像版本改为43

  • 输入命令,重新部署应用,参数--record=true让 Kubernetes 把这行命令记到发布历史中方便后面查看
      sudo kubectl apply -f springbootapp-2nodes.yaml --record=true

  • ContainerCreating状态的表示新版本的容器正在启动,Running的是新版本的已经运行起来了,Terminating的这个是老版本正在停止
  • 过了一段时间,发现3个节点已经创建完成

  • 访问应用,即可看见新版本已发布完成

6、k8s回滚应用

  • 输入命令,查看发布历史
      sudo kubectl rollout history deployment springbootapp-dep -n springboot2node

  • 可以看到有2个版本,我们回滚到版本1的状态
      sudo kubectl rollout undo deployment springbootapp-dep --to-revision=1 -n springboot2node
  • 查看回滚状态,成功
      sudo kubectl rollout status deployment springbootapp-dep -n springboot2node

  • 访问应用,即可看见应用已回滚到老版本

7、rancher2.x对springboot2node进行迁移,迁移到default项目下,便于rancher管理

  • 点击右侧下拉菜单,移动



  • 命名空间已转移到项目default中

  • 以后可以通过rancher操作应用扩容缩容回滚等,会相当方便

k8s学习笔记(3)- kubectl高可用部署,扩容,升级,回滚springboot应用的更多相关文章

  1. Kafka学习笔记-如何保证高可用

    一.术语 1.1 Broker Kafka 集群包含一个或多个服务器,服务器节点称为broker. broker存储topic的数据. 如果某topic有N个partition,集群有N个broker ...

  2. k8s学习笔记(1)- 简单部署springboot应用

    前言:k8s全称kubernetes,k8s是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱k8s,并且当前k8s已经主导了云业务流程,关于更多的k8s知识,可自行学习 1.k8 ...

  3. redis 学习笔记(4)-HA高可用方案Sentinel配置

    上一节中介绍了master-slave模式,在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的”读/写功能都将受影响,这在生产环境中显然 ...

  4. SpringCloud学习笔记(6)——Eureka高可用

    参考Spring Cloud官方文档第12章12.3.12.5.12.6小节 12.3 High Availability, Zones and Regions 默认情况下,每一个Eureka服务器同 ...

  5. Spring学习笔记——Spring事务仅仅对执行时异常回滚

    我们在使用Spring时候一般都知道事务在遇到异常的时候会回滚.岂不知Spring的事务默认仅仅有在发生执行时异常即:RunTimeException时才会发生事务,假设一个方法抛出Exception ...

  6. Rancher Server HA的高可用部署实验-学习笔记

    转载于https://blog.csdn.net/csdn_duomaomao/article/details/78771731 Rancher Server HA的高可用部署实验-学习笔记 一.机器 ...

  7. 【K8s学习笔记】K8s是如何部署应用的?

    本文内容 本文致力于介绍K8s一些基础概念与串联部署应用的主体流程,使用Minikube实操 基础架构概念回顾 温故而知新,上一节[K8S学习笔记]初识K8S 及架构组件 我们学习了K8s的发展历史. ...

  8. kubernetes 1.15.1 高可用部署 -- 从零开始

    这是一本书!!! 一本写我在容器生态圈的所学!!! 重点先知: 1. centos 7.6安装优化 2. k8s 1.15.1 高可用部署 3. 网络插件calico 4. dashboard 插件 ...

  9. kubernetes1.7.6 ha高可用部署

    写在前面:  1. 该文章部署方式为二进制部署. 2. 版本信息 k8s 1.7.6,etcd 3.2.9 3. 高可用部分 etcd做高可用集群.kube-apiserver 为无状态服务使用hap ...

随机推荐

  1. Git使用教程七——Git实用技能

    Git实用技能 1.图形管理工具 Github for Desktop Source tree 老牌的GitGUl管理工具了,也号称是最好用的Git GUI工具.功能丰富,基本操作和高 级操作都非常流 ...

  2. Shell中的运算

    1.运算方式及运算符号 2.SHELL 中常用的运算命令 3.相关操作演示 1.用脚本写一个10秒倒计时 脚本的执行: 2.编写脚本,1分10秒的倒计时 执行脚本: 3.编写脚本,制作一个计算器 脚本 ...

  3. redis未授权getshell的4种方式

    前言 redis未授权漏洞或弱口令一直是很有用的渗透突破口,最近正好闲的无事就拿redis来测试一些,做一个简单的收集,方便自己日后的回顾. 漏洞描述 Redis 默认情况下,会绑定在 0.0.0.0 ...

  4. 2021秋 noip 模拟赛

    9.9 T3 第负二题 \(f_i\) 的数学意义:中心在第 \(i\) 行的全 \(1\) 组成的最大正方形(对角线水平/竖直),对角线长 \(2f_i-1\). 显然 \(f_i\) 具有单调性( ...

  5. java9的JShell小工具和编译器两种自动优化

    一.按顺序逐步执行的脚本程序: 二.编译器自动优化 1.不超数据类型范围编译器自动添加强转操作: 2.一但发生运算,byte/short/char都会自动提升为Int,当只有常量参与运算时,编译器会先 ...

  6. 10 个不为人知的Python冷知识

    1. 省略号也是对象 ... 这是省略号,在Python中,一切皆对象.它也不例外. 在 Python 中,它叫做 Ellipsis . 在 Python 3 中你可以直接写-来得到这玩意. > ...

  7. Linux find命令实例教程 15个find命令用法

    除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易.本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令.首先,在你的h ...

  8. php时间区间,优化显示

    <?php /** * 类似微信的时间显示 * 规则是:今天的,显示几秒前,几分钟前,几小时前,昨天的显示昨天 上午 XX:XX * 再往前,本周的,显示周几+时间,再往前,本年的,显示月日+时 ...

  9. Android Studio找不到设备,解决adb占用问题的方法

    使用as连接真机时,找不到设备,发现 D:\Android\Sdk\platform-tools\adb.exe start-server' failed -- run manually if nec ...

  10. php去除html标签及空格回车

    /** * 去除html标签和空格回车等 * @param $string * @return string */ function cutstr_html($string){ $string = s ...