首页 > 其他分享 >k8s平台不停机更新发布服务

k8s平台不停机更新发布服务

时间:2022-12-23 15:22:52浏览次数:45  
标签:name admin 停机 nacos 更新 oms megalab pod k8s

一、单机服务架构实现不停机更新,利用readines prob实现pod就绪探测。

deployment参考配置如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dengbao-record-api
spec:
  selector:
    matchLabels:
      app: dengbao-record-api
  replicas: 1
  template:
    metadata:
      labels:
        app: dengbao-record-api
    spec:
      containers:
      - name: dengbao-record-api
        image: harbor.mkl.io/chenlin/dengbao-record-api:0.1-$BUILD_NUMBER
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        readinessProbe:             #就绪探测使用tcp端口方式
          tcpSocket:
            port: 8080
          initialDelaySeconds: 30    #容器启动30秒后开始第一次探测
          periodSeconds: 10            #每10秒探测一次
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 15
          periodSeconds: 20
      imagePullSecrets:
      - name: secret-harbor-user

 

二、spring cloud alibaba微服务架构实现不停服更新服务,由于这种微服务架构,所有服务都注册到nacos,由gateway进行转发,所以在服务pod更新时,需要使用脚本自动下线服务,gateway才不会将请求转发至已下线pod

deployment参考配置如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: megalab-admin-oms-dev
spec:
  selector:
    matchLabels:
      app: megalab-admin-oms-dev    
  replicas: 2
  strategy:    #根据实际情况修改pod滚动更新策略,也可不修改,使用默认策略
    rollingUpdate:
      maxSurge: 100%             
      maxUnavailable: 0      
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: megalab-admin-oms-dev
    spec:
      terminationGracePeriodSeconds: 60   #默认termination时间为30s,改为60s
      nodeName: node0
      containers:
      - name: megalab-admin-oms-dev
        image: harbor.mkl.io/megalab/megalab-admin-oms-dev:0.1-$BUILD_NUMBER
        imagePullPolicy: IfNotPresent
        env:              #获取pod ip地址
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: status.podIP
        ports:
        - containerPort: 8084
        readinessProbe:    #pod就绪探测
          tcpSocket:
            port: 8084
          initialDelaySeconds: 60   
          periodSeconds: 20
        livenessProbe:      #pod心跳探测
          tcpSocket:
            port: 8084
          initialDelaySeconds: 15
          periodSeconds: 20
        lifecycle:
          preStop:     #在容器删除前执行服务下线脚本
            exec:
              command: ["/bin/sh","-c","sh /service_offline_nacos.sh"]
      imagePullSecrets:
      - name: secret-harbor-user

服务下线参考脚本service_offline_nacos.sh 如下:

#!/bin/sh
URL="http://nacos.mkl.io:8849"
USERNAME="nacos"
PASSWORD="mega8849"
SERVERNAME="megalab-admin-oms"
NAMESPACEID="megalab-dev"
PORT=8084

Token=$(curl -s --location --request POST "$URL/nacos/v1/auth/login" -d "username=$USERNAME&password=$PASSWORD" | awk -F "accessToken" '{print $2}'|awk -F ":" '{print $2}'|awk -F '"' '{print $2}')
curl -X PUT  "$URL/nacos/v1/ns/instance?accessToken=${Token}&serviceName=$SERVERNAME&groupName=DEFAULT_GROUP&namespaceId=$NAMESPACEID&ip=${MY_POD_IP}&clusterName=DEFAULT&port=$PORT&ephemeral=true&weight=1&enabled=1"

sleep 30

三、测试参考脚本如下,大致流程是,写个死循环,调用正在更新的服务接口进行测试验证。

#!/bin/bash
while true
do
  result=$(curl -s  -H 'token: ce90120b41348798d89d15c8e983c1d9'  'http://admin.mkl.io/api/object/list?page=1&limit=10&category=' | grep 502 | grep -v grep -c)
  if [ $result -gt 0 ]; then
      echo "服务不可用"
  fi
done

 

标签:name,admin,停机,nacos,更新,oms,megalab,pod,k8s
From: https://www.cnblogs.com/chenlin2022/p/17000732.html

相关文章

  • MySQL中的级联删除与更新策略on delete restrict on update restrict
    MySQL中的级联删除与更新策略ondeleterestrictonupdaterestrict在MySQL中,当我们执行级联删除与级联更新时,可能会执行OnDeleteRestrict和OnUpdateRestrict语句,这两......
  • 每天一点基础K8S--K8S中的存储方案PV、PVC
    持久卷PV官网文档https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/什么是PV和PVC持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员......
  • K8S 添加 DNS
    背景K8S集群部署在云中,此时为公网,但国内大型企业或国企的内部系统部署在内网,正常情况下在公网与内部局域网中会搭建专线已方便服务调用,但某些情况下需要手动设置容器的D......
  • BitSail issue 持续更新中,快来挑战,赢取千元礼品!
     背景介绍近期,BitSail社区发布了Contributor激励计划第一期,包含众多issue,吸引了很多热衷开源的小伙伴的加入,详情可查看......
  • 排序算法模板(更新中)
    快速排序#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;intn;intq[N];voidposition(intq[],intl,intr){if(l>=r)ret......
  • Kubernetes(K8S) helm 安装
    Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到kubernetes上。Helm有3个重要概念:helm:一......
  • Kubernetes(K8S) 常用命令
    Docker常用命令​​Docker常用命令​​#查看API版本[root@k8smaster~]#kubectlapi-versions#重启K8S[root@k8smaster~]#systemctlrestartkubelet#查看kubelet......
  • Kubernetes(K8S) 配置静态资源服务
    Kubernetes(K8S)配置静态资源服务---apiVersion:v1kind:ConfigMapmetadata:name:img-confignamespace:vipsoftdata:img.conf:|server{charsetutf-......
  • Kubernetes(K8S) kubectl top (metrics-server) node NotFound
    kubectltop命令安装metrics-servercomponents.yaml网上的各种方法都有问题,找到了一个完整版的yamlapiVersion:v1kind:ServiceAccountmetadata:labels:k8s-app......
  • 每天一点基础K8S--K8S中的常用存储方案--emptyDir、hostPath、NFS
    这几天阳了,坐一会儿就腰痛K8S中的常用存储方案背景因为K8S的POD运行了最终的业务,而pod在控制器的管理下可能会出现重建,重建的pod是镜像的新实例,如果一些重要配置文件或......