Microsoft实习手记第一篇 Kubernetes

0x00

在实习的第一个Sprint,了解了组里的业务,我这块主要建立在k8s集群上,在这个之上构建分布式机器学习的平台。
由于之前只接触过本机的docker,一时之间触及k8s集群还是有点懵,这里记录些工具和概念。

0x01 概念

k8s集群中的机器们被分成两种 Master Server 和 Kubernetes Node.

ref: https://www.cnblogs.com/menkeyi/p/7134460.html

“Node是Kubernetes中的工作节点,最开始被称为minion。一个Node可以是VM或物理机。每个Node(节点)具有运行pod的一些必要服务,并由Master组件进行管理,Node节点上的服务包括Docker、kubelet和kube-proxy” ----say by here
这里引入了一个新的概念Pod。
一言以蔽之:“Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程” ----say by here

这里的Pod里面运行着具体的container,终于触碰到我的已有认知了,这里的container就是docker概念里的那个,通过image产生的实例.

Pod: 为什么说Pod是k8s创建或部署的最小单位呢?因为它不直接控制container。一个pod可以包含一个或者多个container,然后k8s直接控制的是pod。在我接触的case中,一个pod包含了多个container,其中一个是负责业务逻辑的,另外的会负责pull data, pull code dependancy..., 以及挂载存储等等。


因为单个pod是一个脆弱的资源,可能因为某些原因crash。对于集群来说需要有个东西来维护它的扩展,重启等等事情。这部分工作不是pod自己来做的,而是交给Controller。
Controller: 可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上。包含一个或者多个Pod的Controller示例:

通常,Controller会用你提供的Pod Template来创建相应的Pod。并且我手头的工作后续也会针对具体业务逻辑cover 这部分的生命周期管理。可能会复写一些controller的逻辑。

Deployment: 这是一个更方便的,和controller做一样事情的,概念。
它为PodReplica Set(升级版的 Replication Controller)提供声明式更新。你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。 ----say from here

ref:


Service: 因为pod是脆弱的,可能因为各种各样的原因挂掉,重启之后它的ip地址又会变化,这点对于pod的用户(可以是其他pod)很不友好所以Kubernetes Service 定义了这样一种抽象: 一个 Pod 的逻辑分组,一种可以访问它们的策略 (通常称为微服务)
一个 Service 在 Kubernetes 中是一个 REST 对象,和 Pod 类似。 像所有的 REST 对象一样, Service 定义可以基于 POST 方式,请求 apiserver 创建新的实例 ----say from here

Namespace: 对于一个k8s的集群而言,它的用户可能是一个公司的不同团队。不同团队可以通过指定自己的namespace来和其他进行区分。大多数Kubernetes资源(例如pod、services、replication controllers或其他)都在某些Namespace中,但Namespace资源本身并不在Namespace中。而低级别资源(如Node和persistentVolumes)不在任何Namespace中。Events是一个例外:它们可能有也可能没有Namespace,具体取决于Events的对象。ref: http://docs.kubernetes.org.cn/242.html#Namespace

0x02 工具

kubectl: 这是一个本地对远端k8s集群的访问和控制工具,其配置文件路径: ~/.kube/config

minikube: 一个用于在本地搭建k8s集群的工具,这个搭起的工具通常作为学习/实验环境。
ref: https://k8smeetup.github.io/docs/home/

kustomize / helm: 配置文件yaml管理工具
https://aisensiy.github.io/2018/11/27/helm-and-kustomize/

Comments

Popular posts from this blog

Malware Report: iauzzy.exe

Malware Report: withme.exe

根因分析之iDice 文章复现