k8s实用知识点总结

本文总结了Kubernetes(k8s)的关键知识点,包括资源配额、探针使用、Pod日志查看、版本管理、Service代理OSS静态、Master节点调度、删除操作、拉取镜像凭证创建、远程debug配置、定向调度、预览chart资源以及解决DNS解析异常等。详细介绍了每个概念的用法和示例,是k8s操作的实用指南。
摘要由CSDN通过智能技术生成

1. 资源配额

1. 预留和限制的概念

  • 预留:即至少需要的资源,对应于requestsCpurequestsMemory
  • 资源限制:最大资源限制,对应于limitsCpulimitsMemory

注:这里提一下个人理解,对于上述2个参数刚接触的时候感觉理解了又不理解,不知道新人是不是也是这种感觉,后来接触多了,感觉这样理解会好一点:requestsXxx表示必须的资源,在K8S对Pod进行调度时,只有节点上的资源至少满足requestsXxx的值,那么这个Pod才有可能调度到这些满足需求的节点上,所以很多相关译文上将requestsXxx翻译为“预留XXX”很到位;而当Pod已经运行在某个节点上时,就没requestsXxx参数什么事了,最终该Pod可以获得宿主机多少资源取决自身,但不会超过limitsXxx限制的值。所以可以粗略地理解为requestsXxx是为了Pod调度,而limitsXxx是为了遏制Pod对宿主机资源的索取最大限度。K8S对于CPU资源管理的策略分为none(默认,通过CFS配额 cgroups-control groups)和static(为节点上具有某些特征的 pod 赋予增强的 CPU 亲和性和独占性,针对配置资源为整数型的POD)

2. 单位的含义

  • 内存:常用的单位为MiBGi,和常规单位的关系如下为:
1 MiB = 2^20 bytes = 1024 kibibytes = 1048576 bytes(以2为底数)
1 MB = 1000KB(以10为底数)
  • CPU:常用单位为毫核(mmilli),或者直接是核(没有单位,如1核直接表示为1),换算关系为:1个核=1000m,当然也可以使用占比来表示,如:1/4个核=0.25,半个核=0.5,1个整核=1。

注:在rancher中部署应用时,经常遇到deployment does not have minimum availability异常,此时适当调大资源限额可以解决大部分的问题,下面是Chart模板中常用的配置:

resources:
  limits:
    memory: {
   {
    .Values.resources.limits.memory }}
    cpu: {
   {
    .Values.resources.limits.cpu }}
  requests:
    memory: {
   {
    .Values.resources.requests.memory }}
    cpu: {
   {
    .Values.resources.requests.cpu }}

2. 关于探针

 K8S中的探针应该是必不可少的一部分,参照文档,理了理,探针主要分为2类:

  • liveness probe:存活探针,它可以决定何时重启容器,比如存活探针在应用运行过程中遇到死锁(应用确实是正在运行的,但无法获取结果),这种情况往往是由于代码中存在bug,尽管如此,但存活探针的存在可以让应用更加具有可用性;
  • readiness probe:就绪探针,它可以决定一个容器何时就绪,准备接受外部的流量。如果说某个Pod已经就绪表示该Pod中的所有容器都已经就绪,当一个Pod处于未就绪的状态,他将会从负载均衡中移除;

实际观测,只有当2类探针同时检测通过,Pod才算启动成功,下面是探针的配置方式:

  readinessProbe:
    enabled: true
    httpGet:
      path: "/healthcheck"
      port: 8080
    periodSeconds: 20
    initialDelaySeconds: 60
    failureThreshold: 3
  
  livenessProbe:
    enabled: true
    httpGet:
      path: "/healthcheck"
      port: 8080
    initialDelaySeconds: 180
    periodSeconds: 30
    failureThreshold: 3

实际开发中,发现后端的Server启动用这套探针没啥问题,但前端的Server(使用node)启动的过程非常不稳定,build和拉取依赖的过程耗时特别长,基本都会重启好几遍容器才能成功,我曾经试图去调节存活探针的initialDelaySeconds参数,但如果这个过程快的话我岂不是要浪费一些时间,最终发现调节失败的阈值failureThreshold会更加方便。

 具体探针的行为可以有如下的一些:

1.HTTP
java中探针往往都是通过调用类似于go的HTTP接口,示例:

    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

2.具体指令
探针检测的具体行为可以自己定义,比如:

    livenessProbe:
      exec:
        command:
        - cat
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值