Deployment


无状态服务deployment

Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController 来方便的管理应用。典型的应用场景包括:

  • 定义 Deployment 来创建 Pod 和 ReplicaSet

  • 滚动升级和回滚应用

  • 扩容和缩容

49.png

Deployment 应用示例:

vim deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector...

Read more

资源控制器之RS


RC (ReplicationController )主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 。即如果有容器异常退出,会自动创建新的 Pod 来替代;而如果异常多出来的容器也会自动回收(已经成为过去时)。

Kubernetes 官方建议使用 RS(ReplicaSet ) 替代 RC (ReplicationController ) 进行部署,RS 跟 RC 没有本质的不同,只是名字不一样,并且 RS 支持集合式的 selector。

48.png

RS 用示例:

vim rs.yaml

apiVersion: apps/v1
kind: ReplicaSet
metad...

Read more

Pod 的资源控制器类型


一、Pod 的资源控制器类型

Pod 我们可以分为两类,一种属于自主式 Pod ,还有一种属于控制器管理的 Pod 。

什么是控制器呢?简单来说,控制器就好比是影视剧里面的剧本,演员会根据剧本所写的内容来针对不同的角色进行演绎,而我们的控制器就好比是剧本,Kubernetes 会根据我们所定义的规则,或者是按照我们写好的 “剧本” 来完成创建我们的 Pod 。

控制器类型

1.ReplicationController 与 ReplicaSet

Replicationcontroller 副本控制器 (RC) 用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会...

Read more

Pod 的 NameSpace


一、Pod 的 NameSpace

使用 kubectl 管理命名空间及其包含的资源相当简单。在这一节中,我们将演示一些最常见的命名空间操作,便于你开始有效地分割资源。

在我们进行创建命名空间之前,先说一下 Kubernetes 是如何自动设置它的,在默认情况下,新的集群上有四个命名空间:

要显示集群中可用的所有命名空间,使用 kubectl get namespaces 命令:

40.png

default: 向集群中添加对象而不提供命名空间,这样它会被放入默认的命名空间中。在创建替代的命名空间之前,该命名空间会充当用户新添加资源的主要目的地,无法删除。

kube-public: 此命名空间是自动...

Read more

Pod 的健康检查-探针


一、Pod 的健康检查-探针

Kubernetes 使用探针(Probes)来检查容器的健康状态,并根据检查结果执行相应的操作。探针可以帮助 Kubernetes 确保应用的高可用性和可靠性。

K8s上,强大的自愈能力是这个容器编排引擎的非常重要的一个特性,自愈的默认实现方式是通过自动重启发生故障的容器,使之恢复正常。 除此之外,我们还可以利用Liveness 和 Readiness检测机制来设置更为精细的健康检测指标,从而实现如下的需求:

  • 零停机部署
  • 避免部署无效的服务镜像
  • 更加安全的滚动升级

Kubernetes 支持三种类型的探针:

  1. Liveness Probe(存活探...

Read more

Pod 的 init Containers


一、Pod 的 initContainers

基本概念:

Init Containers(初始化容器)是 Kubernetes 中的一种特殊类型的容器,它们在应用程序容器启动之前运行。Init Containers 用于执行一些初始化任务,例如设置环境变量、准备配置文件、执行数据库迁移、等待其他服务可用等。Init Containers 完成后,应用程序容器才会启动。

以下是 Init Containers 的一些关键特点和用途:

1. 执行顺序

  • Init Containers 按照定义的顺序依次运行。只有在前一个 Init Container 成功完成后,下一个 Init Conta...

Read more

Pod 介绍


一、什么是 Pod

在Kubernetes中,Pod是调度和运行的最小单元,它包含一个或多个容器,并共享网络和存储资源。

Pod 是 kubernetes 集群中最小的部署和管理的基本单元,协同寻址,协同调度。

Pod 是一个或多个容器的集合,是一个或一组服务(进程)的抽象集合。

Pod 中可以共享网络和存储(可以简单理解为一个逻辑上的虚拟机,但并不是虚拟机)。

Docker 是目前 Pod 最常用的容器环境,但仍支持其他容器环境。

27.png

我们可以看到,当我们启动一个 Pod 以后,每个 Pod 内都会有一个 Pause 的容器

每个 Pod 里运行着一个特殊的被称之为 Pause 的容...

Read more

指定pod运行在固定节点


一、指定固定节点:Pod.spec.nodeName

Pod.spec.nodeName 将 Pod 直接调度到指定的 Node 节点上,会跳过 Scheduler 的调度策略,该匹配规则是强制匹配:

vim node-1.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb
spec:
  selector:
    matchLabels:
      app: myweb
  replicas: 6
  template:
    metadata:
      labels:
        app...

Read more

Kubernetes污点和容忍


本文主要快速讲解Kubernetes的污点和容忍度,一句话总结:如果Pod能容忍某个节点上的污点,那么Pod就可以调度到该节点。

在K8S中,如果Pod能容忍某个节点上的污点,那么Pod就可以调度到该节点。如果不能容忍,那就无法调度到该节点。污点和容忍度就像谈恋爱的小情侣,你情我愿,女生知道男生的缺点,却依然选择容忍,这样他们可以生活在一起。如果女生容忍不了男生的缺点,那就没法生活在一起。

1、理论

1.1、污点和容忍度的概念

  • 污点(Taints):定义在节点上,用于拒绝Pod调度到此节点,除非该Pod具有该节点上的污点容忍度。被标记有Taints的节点并不是故障节点。
  • 容忍度(T...

Read more

Kubernetes节点与 Pod 亲和性


首先来个一句话总结:亲和性调度就像关系亲密的闺蜜,你去哪儿我也去哪儿。反亲和性调度就像赌气的两个孩子,赌气永远不在一起玩儿。

1、调度Pod的主要方式

Pod调度到指定Node的方式主要有4种:

  • nodeName调度:直接在Pod的yaml编排文件中指定nodeName,调度到指定name的节点上。
  • nodeSelector调度:直接在Pod的yaml编排文件中指定nodeSelector,调度到带有指定label的节点上。
  • 污点(Taints)和容忍度(Tolerations)调度:主要通过在Node节点上打污点,然后在Pod的yaml编排文件中配置容忍度,来实现调度。
  • 亲和-反...

Read more