第2步生产环境上 K8s 前,需要注意注意哪些问题|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
网络型负载均衡 NLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习第2步生产环境上 K8s 前,需要注意哪些问题

开发者学堂课程【云原生实践公开课第2步生产环境上 K8s 前,需要注意哪些问题】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/698/detail/12267


第2步 生产环境上 K8s 前,需要注意哪些问题


基础篇:5步上手 K8s

  • 第1步︰如何创建及部署应用
  • 第2步:上 K8 s应用到生产之前有哪些注意事项
  • 第3步:Kubernetes 集群的监控与日志
  • 第4步:关于 K8s 集群的弹性伸缩问题
  • 第5步∶怎样升级一个 Kubernetes 集群

 

内容介绍:

一、 课程介绍

二、 生产集群与应用部署

三、 资源的声明

四、 优雅上下线

五、 集群级生产准备介绍


一、 课程介绍

1. 应用级别生产 ready

资源声明

优雅上下线

2. 集群级别生产 ready

监控体系

日志体系

微服务体系

安全体系等


二、 生产集群与应用部署—集群创建

1. 集群创建

  • Minikube不具备生产环境使用的能力
  • 直接创建生产集群—阿里云托管 Kubernetes

打开阿里云的容器服务,创建标准的专有集群

集群名称open-classl

地域:华北2(北京)

Kubernetes版本1.16.9-aliyun.1

容器运行时:Docker 19.03.5

专有网络:(vpc-

虚拟交换机:switch_az_h

网络插件:Flannel

配置SNAT:为专有网络配置SNAT

公网访问:打开

安全组:自动创建企业级安全组

付费类型: 按量付费

Master 实例数量: 3

实力规格:高主频通用型hfg6

操作系统:默认

密码:********

选择配套组件,可以选默认的。之后勾选同意协议。

集群创建过程为10到15分钟之间。

使用集群

在集群的详情中有连接信息,连接集群的凭证,保存到本地,创建自己的环境。

  • 通过控制台创建集群

2. 生产集群与应用部署—应用部署

按照上一节课程里面的步骤来进行部署︰

(1) 生产环境的 mysql、redis 等数据库不建议放在 K8s 里面,就目前行业的程度来说这种存有业务数据比较危险的存储应用没有一个很成熟的管理体系来做,就目前的程度来说还不够成熟提前构建对应实例,并通过 external 类型的 svc 来指向对应实例

数据初始化脚本: https://github.comlwonderflow/gin-vue-admin/blob/master/server/db/qmplus.sql

Mysql:变成 eternal name 类型的 service,然后还叫 mysql,然后,内容实际上是指向一个现有的 mysql 实例

Redis在这里面基本上处于一个缓存的状态,所以保留它原来的样子。

Web-server这个部分主要改革就是对应的数据库的这些参数,其他部分,基本没有动弹。

使用Kubectl apply,先将Mysql apply处理,得到一个servers,然后把Redis apply处理,得到另一个servers以及一的deploy。之后把Web-server apply处理,得到一的svc,此时的svc还处于pending状态,即在等到一个external-ip,等待之后得到一个external-ip,之后到登录页看该应用是否正常即可。

(2) 应用的部署与之前保持一致

$ k apply -f https://raw.githubusercontent.com/wonderflow/gin-vue-admin/master/k8s/web-server.yaml


三、应用-资源声明

资源的声明是什么。

  • 很多学员在使用 K8S 的时候,想做到更高的资源率的目标,但讲师优先保证系

统的稳定性。问题QS 是 QS 里面本身的一个服务等级的保障等级的一个描述当 request 小于 limit,或者不设置的时,QS 等级是 Burstable

只有 request limit 全设置等级才是 Guaranteed。然后,对应的 Pod 来说,当你的 Container 全都Guaranteed 的时候,Pod 等级才是 Guaranteed,如果说,其中有两个都是 Burstable,Pod 等级是 best effort,其他的,这个 POD 等级都是 boss 的。等级生效就是当业务高峰来的时候,POD 的压力就会变大的,,POD 压力变大, node 的压力就会变大, 压力变大的时候,node 就会按照从上到下的设计去驱逐POD。

  • 如果核心应用不设置requestlimit,等级会变成Burstable,当业务高峰来

时,就可能第一个时间被驱逐掉

  • 驱逐:把这个POD原理进行重启。
  • 重启相当于在业务高峰期的时候,把核心重启一次,本身服务的压力变得更

大。

  • 建议在刚开始的时候,对这些应用不太熟悉的时候,把request limit全都设置

起来,而且要设置成request等于limit,这样可以把POD等级推Guaranteed类型。这种类级别,基本上是不会被取掉达到一个稳定运行的这个状态

  • 一段时间,对运行的业务、程序熟悉了,可以非核心业务,设置

request limit一些差异,进行一些超慢,进而拿到整个集群高资源使用率等这个实际上就是对应的自然生命的一种方式。


四、应用-优雅上下线

1. 为什么在容器时代更重要?

  • 更多的弹性:云原生就是要充分发挥云的弹性。实际上要做到尽可能多的,随

着业务的峰值和谷值,对 photoshop 进行分解,这样就带来了更多的 pod 的增删。

  • 声明式的 API比如声明需要三个副本,副本数高于这个会减少这个会

加,这个过程都是自动化的。如果说上下限不优雅的话,每一个 pod 的牺牲和消亡过程中,都会对用户造成影响,在容器这个时间,会放大这个效果。

2. 优雅上线分为优雅上线,优雅下线

  • 优雅上线Liveness 即失败重启和 readiness 即失败摘除服务。
  • 优雅下线: 服务端负载均衡和客户端负载均衡两部分

image.png

服务端负载均衡类似于 K8s svc 模式:当一个 pod 正在运行的时候收到要pod 销毁的这个消息,接收消息之后。会先从对应 service 的 end point 列表里面,把这个 point 对应 endpoint 摘除,然后,把这个信息同步到所有的kubeproxy 里面去。就不会有新的流量,再往这一台 pod 上进行转发。之后,把pod 之前进入的流量处理完成。

客户端负载均衡类似于 dubbo、springcloud 模式:收到一个 pop 要销毁的消息时,大部分的动作需要手动来完成首先要服务注销,也就是反注册。我先从 K8s double 的体系里,把本身的 pod 对应的IP摘掉,阻止新流量进来之后把现有的流量优雅地执行完之后,做一个 Q 的信号,把这个 code 真正的销毁掉。

3.非优雅下线

  • 注释掉优雅上下线的配置

kubectl apply -f web-server.yaml

kubectl get svc

k scale --replicas 3 deployment web-server

  • 给应用压力

ab -c 2 -n 5000 http://182.92  8888/admin/#/login

  • 在此过程中缩小副本数,模拟下线或者是滚动升级中pod下线的过程

k scale --replicas 1 deployment web-server

  • 压力端断开

实验:

使用力压一遍服务用 ab-C 射程为2-射程5000-,然后,我们的 url,直接是之前的 last year url。

简单的压测每500次打印一下,然后,看到里面没有对personal进行设置。然后,设置 requests limits,把脚本保留注释掉,先压一个非优雅下线

模拟过程,首先,open-class 输入 k scale –replicas 3 depioym,观察效果,同时给压力时,把副本3调到1,给完压力就会立刻断开。

4. 优雅下线

  • 打开优雅上下线的配置

kubectl apply -f web-server.yaml

k scale --replicas 3 deployment web-server

  • 给应用压力

ab -c 2 -n 5000 http://182.92  8888/admi

  • 在此过程中缩小副本数,模拟下线或者是滚动升级中 pod 下线的过程

k scale --replicas 1 deployment web-server

  • 压力端正常压测

打开 perstop 对应的脚本打开并更新,把脚本数设置为3,等待3个 pod 准备完成,压力数值与之前操作一致,把副本3调到1,等待程序执行完成,未观察到突然断开,为进行巩固,把副本数调到3,等待程序结束,输入脚本并设为1,按照之前的步骤重复一遍。即为优雅下线。


五、集群级生产准备介绍

集群级别的生产 ready

微服务体系

日志体系

监控体系

安全体系

弹性体系

  • K8s集群是微服务的,需加入微服务体系,包括你的微服务中心服务的限流降

级等等能力,都需要在微服务体系里面构建。

  • 日志体系需要可以做到收集日志分析日志分析制作高级等等。
  • 监控体系,要从上到下做每一层的监控,然后,要从应用到业务,从数据到入

口,都是要完成的。

  • 安全体系,弹性体系,以及AI相关的体系,都要去完成对应的设计。
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 Kubernetes API
K8S上生产环境后,90%都会遇到这个故障
K8S上生产环境后,90%都会遇到这个故障
645 0
|
11月前
|
Kubernetes 监控 API
深入解析Kubernetes及其在生产环境中的最佳实践
深入解析Kubernetes及其在生产环境中的最佳实践
573 93
|
8月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
318 12
|
8月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
Prometheus Kubernetes 网络协议
k8s学习笔记之CoreDNS
k8s学习笔记之CoreDNS
|
存储 Kubernetes 数据安全/隐私保护
k8s学习笔记之ConfigMap和Secret
k8s学习笔记之ConfigMap和Secret
|
Kubernetes jenkins 持续交付
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
|
存储 运维 Kubernetes
k8s学习笔记之StorageClass+NFS
k8s学习笔记之StorageClass+NFS
|
存储 运维 Kubernetes
在k8S中,生产环境的pv回收策略该如何选择?
在k8S中,生产环境的pv回收策略该如何选择?
|
Kubernetes 调度 Docker
Ubantu docker学习笔记(十一)k8s基本操作
Ubantu docker学习笔记(十一)k8s基本操作

推荐镜像

更多