每天打卡5分钟,学习k8s 第5章 运行应用

683 阅读3分钟

从今天开始,我们将通过实践深入学习k8s的各种特效。作为容器编排引起,最重要也是最基本的功能当然是容器化的运行啦,

前面我们已经了解到,k8s通过controller来管理pod的生命周期,未来满足不一样的场景,还提供了ReplicaSet、DaemonSet、StatefuleSet、Job多种Controller

Deployment

kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2

图片.png

通过 kubectl get deployment查看nginx-deployment的状态。输出显示两个正常的副本运行。

通过 kubectl describe deployment了解更详细的信息。

kubectl describe deployment nginx-deployment

图片.png 大部分的内容都是自解析的,重点看这一块的内容。创建了一个ReplicaSet容器,Events是Deployment的日志, 用来记录ReplicaSet的启动过程。也就是说Deployment是通过ReplicaSet来管理Pod。

我们执行kubeclt describe replicaset查看详细信息。

图片.png

图片.png

Controlled By指明此ReplicaSet是有Deployment nginx-deployment创建的。是两个Pod创建的日志,我们再看看pod,执行kubectl get pod

图片.png

两个副本都在running状态。

然后用kubectl describe pod查看过多信息

图片.png

图片.png

也校验了一个过程

  1. 用户通过kubectl创建Deployment
  2. Deployment创建ReplicaSet
  3. ReplicatSet创建Pod

图片.png

命令 vs 配置文件

我们创建容器的时候有两个方式,一种是kubectl这种方式,执行这个命令后,会给我生成一份yml配置文件。这中文件会记录你的操作的过程。

命令行,简单上手快,如果你需要像代码一样管理你的容器,或者多部署的话,那么配置会比较适合这种场景。

Deployment配置文件简介

搭建都是做Java开发的那,那就不说yml的语法了

Deployment配置里面有几个比较重要的参数

  • apiVserion:当前配置的版本
  • kind是要创建资源类型
  • metadata 是资源的元数据,name 是必须的元数据,至少有一个label,label的key和value可以任意
  • spec 是deplyment的规格说明
  • replicas: 副本数
  • template 定义pod模板,比较重要的一个部分

拥有了配置文件,我们只需要用kubectl apply -f xxxx.yml 执行就可以把容器运行到k8s中

伸缩

伸缩其实也就是对pod的副本数进行增加/减少操作

现在有了配置文件,我们只需要在配置文件修改 replicas 参数即可

图片.png

再执行kubectl apply

图片.png

k8s出于安全问题,默认不会把pod调度到master节点上。

Failover

我们把k8s-node2节点关机

那么过一点时间k8s心跳检查的时候,就会标记k8s-node2不可用,k8s-node2上的pod也会标记Unknown状态,并在k8s-node1上创建两个新的pod,把总副本书维持在配置的副本数。

图片.png

等到k8s-node2回复后,unknown的pod会被直接删掉,不会在调度到k8s-node2上了。

图片.png

删除容器的方法 图片.png

用lable控制pod的位置

默认配置下,Scheduler会将pod调度到所有的Node。不过有时候老板们不这么想,希望分配到指定的node上,比如大量i/o的部署在ssd的node;cpu计算的部署到计算主机上

这个时候就可以使用lable的方式实现,先创建一个label

kubectl lable node k8s-node1 disktype=ssd

你想查看所有的lable

kubectl get node --show-lables

也可以通过容器配置文件查看

图片.png