美文网首页
pod的设计与运行

pod的设计与运行

作者: robot_test_boy | 来源:发表于2022-10-23 00:10 被阅读0次

Kubernetes最基本的组成部件是pod:单个容器或者联系紧密的要一起调度到同一台机器上的一组容器。pod是部署的基本单元并且代表的是一个服务实例。由于它是部署的单元,因此也是水平扩展(复制)单元,在扩大或者缩小容量时,就会增加或者移除pod。


为market-data服务定义一组pod。在应用目录下创建一个名称为market-data-replica-set.yml的文件。

---

kind: ReplicaSet    ---  定义一组pod

apiVersion: extensions/v1beta1

metadata:

  name: market-data

spec:

  replicas: 3    ---  包含3个pod副本

  template:    --- 使用该模板创建pod

    metadata:    ---  根据标签区分pod

      labels:

        app: market-data

        tier: backend

        track: stable

    spec:

      containers:

      - name: market-data

        image: <docker id>/market-data:latest    ---  从Docker注册中心拉取的容器

        ports:

        - containerPort: 8000

在Kubernetes中,一般用YAML文件(或者JSON,但YAML更加易读)向调度器声明指令。这些指令定义了一些Kubernetes对象,而pod就是其中一种。这些配置文件代表了所期望的集群状态。将这些配置信息应用于Kubernetes后,调度器会持续工作来维持这一理想状态

使用kubectl命令行工具,将该文件应用于本地集群。在启动Minikube后,它应该会自动配置kubectl命令以操作集群。这个工具和集群主节点开放的API进行交互。

kubectl apply -f market-data-replica-set.yml

Kubernetes会异步创建所定义的对象。可以使用kubectl来观察操作进度。运行kubectl get pods(或kubectl get pods –l  app=market-data)命令会列出已经创建的pod。第一次启动会耗费几分钟的时间,因为节点要下载Docker镜像。


直接创建或者销毁pod都是不正常的;相反,pod是由控制器管理的。控制器负责接受某些期望的状态(比如,总是运行3个market-data pod实例)然后执行一系列操作来达到这一状态。这种观测-比较-执行的循环会持续执行。

最常见的控制器类型:ReplicaSet。复制集的目标是确保在任何时间都有指定数量的pod处于运行状态。比如,假设某个pod消失了——可能是集群中某个节点出现了故障——复制集会察觉到集群的当前状态和期望状态不一致,然后尝试在集群的其他地方重新分配一个pod以进行替换。

可以操作一下看看效果。删除一个之前创建的pod(pod是按名称区分的):$ kubectl delete pod <pod name>。复制集会重新创建一个新的pod来代替已被删除的那个pod。

可见,部署微服务实例应该建立在单个基本操作之上。通过控制器和不可变容器的结合,读者可以随意处理pod,并依赖自动化来维持服务容量,即使是在底层基础设施不可靠的情况下。

摘取自 摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》

相关文章

网友评论

      本文标题:pod的设计与运行

      本文链接:https://www.haomeiwen.com/subject/luejzrtx.html