k8s最佳实践

简介: 构建小的镜像 通过下面两种方式可以减小构建镜像大小: Small Base Images:有些base镜像有非常齐全的工具链,考虑考虑是否需要这些工具链,还是只需要精简镜像版镜像并补充所需的工具 Builder Pattern:对于一些go、c语言项目,使用docker提供的builder pat.

构建小的镜像 

通过下面两种方式可以减小构建镜像大小:

  1. Small Base Images:有些base镜像有非常齐全的工具链,考虑考虑是否需要这些工具链,还是只需要精简镜像版镜像并补充所需的工具
  2. Builder Pattern:对于一些go、c语言项目,使用docker提供的builder pattern,先构建一个容器用来编译代码,并将编译结果拷贝到最终镜像中,最终镜像就是一个精简版linux镜像+可执行文件

小镜像可以提升两点:

  1. 性能:提升构建、上传、下载镜像的时间,可以极大降低新加宿主机的负载
  2. 安全性:镜像越小代表容器越小,容器越小代表容器可以被攻击的地方就越少,也就越安全

使用namespace

使用namespace将集群资源切分成多块,可以提高集群内部隔离性、管理效率和性能

使用Readiness和Liveness Probes做health check

k8s提供了两种容器的health check机制:

  1. Readiness:用来check容器是否可以接收流量,如果check失败,就不让容器接收流量
  2. Liveness:用来check容器是否存活,如果check失败,就重启容器

默认,k8s认为Liveness Check成功的容器,Readiness Check也成功,于是可以直接接收流量

k8s提供三种Probe用来check容器是否health

  1. Http Probes:发送http请求,如果返回200 ~ 300,表明health
  2. Command Probes:在容器中执行命令,如果返回0,表明health
  3. TCP Probes:与指定port建立连接,如果成功连接,则表明health

给资源设置request和limit

k8s在调度的时候,会以request作为参考依据,并以limit限制资源使用

  • ResourceQuotas:限制namespace的总cpu、mem等资源的request和limit
  • LimitRanges:限制namespace中每个pod的cpu、mem等资源的request和limit,避免超小或者超大的pod,并提供pod的cpu、mem默认值

通过使用request和limit进行超售,cpu是可压缩资源,推荐超售,内存是不可压缩资源,不可超兽

优雅退出

当pod被删除或者杀死的时候,会走优雅退出流程:

  1. 给pod设置Terminating状态,并等待pod中容器退出
  2. 执行pod的preStop Hook逻辑。可以是一个发送给容器的command或者http请求,可以帮助那些没有优雅退出逻辑的容器,提前做一些预清理操作
  3. 发送SIGTERM给pod
  4. 当容器成功退出后,或等待时间超过优雅退出的最大时间(默认30s),发送SIGKILL给pod,pod被彻底清理

映射外部服务

当希望在k8s集群中访问外部服务时,需要知道外部服务的域名、或者ip+port。通常域名这种比较固定,可以hard code,但是ip+port变化比较频繁,需要保证这些信息可配置化

  1. 使用ConfigMap:需要在deployment中引入ConfigMap,并且当ConfigMap中配置的Endpoint变化时,还需要重启deployment中的container才能生效
  2. 使用Static kubernetes Service:一种后端没有映射任何pod的Service,可以用来映射kubernetes Endpoints,并在Endpoint中配置外部服务的ip+port。通过将访问Service Name来映射到该Service后端的Endpoint,最后映射到具体的ip+port。每次ip+port有变动,直接修改Endpoint中信息即可

zero downtime升级集群

集群分master和node,先升级master,再升级node

  • master:将新版本master部署在单独的zone,保证multi-zone集群共同工作,并通过vip分流,将老版本zone停服,流量自动转移到新版本zone
  • node:提前部署好新版本node节点,组织成node pool。按node为粒度,将老版本node中pod逐步rolling update到新版本node上
本文转移开源中国-k8s最佳实践 
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
26天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
2月前
|
存储 Kubernetes 容灾
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
|
2月前
|
消息中间件 Kubernetes NoSQL
「译文」K8S 及 OpenShift 上应用程序的 Labels 和 Annotations 最佳实践
「译文」K8S 及 OpenShift 上应用程序的 Labels 和 Annotations 最佳实践
|
2月前
|
Kubernetes 监控 安全
「译文」在 K8S/OpenShift 上开发应用程序的 14 种最佳实践
「译文」在 K8S/OpenShift 上开发应用程序的 14 种最佳实践
|
7月前
|
弹性计算 运维 Cloud Native
阿里云罗晶分享 | X86+ARM,容器服务 ACK 多架构应用部署最佳实践
2023年8月31日,系列课程第五节《X86+ARM,容器服务ACK多架构应用部署最佳实践》正式上线,由阿里云云原生应用平台产品专家罗晶主讲,内容涵盖:容器服务ACK简介;ACK支持倚天ARM实例;ACK多架构应用部署最佳实践。
|
4月前
|
Kubernetes 网络协议 API
kubernetes资源命名约束和最佳实践
kubernetes资源命名约束和最佳实践
140 0
|
6月前
|
Kubernetes 前端开发 Cloud Native
《使用 Helm 管理 Kubernetes 应用程序的最佳实践》
《使用 Helm 管理 Kubernetes 应用程序的最佳实践》
104 0
|
6月前
|
Kubernetes Dubbo Cloud Native
精进云原生 – Dubbo Kubernetes 最佳实践
精进云原生 – Dubbo Kubernetes 最佳实践
|
6月前
|
Kubernetes Dubbo Cloud Native
精进云原生 – Dubbo Kubernetes 最佳实践
本文将从开发、部署、监控、运维等多维度视角分析,详细的介绍如何基于 Dubbo 在Kubernetes 体系下构建高效、可靠的微服务应用。为期望在 Kubernetes 下开发微服务的用户提供了可以复制且大规模部署的样板。
精进云原生 – Dubbo Kubernetes 最佳实践
|
9月前
|
Kubernetes 监控 NoSQL
Gitlab on k8s最佳实践
Gitlab on k8s最佳实践
490 1

推荐镜像

更多