从今天开始,我们将通过实践深入学习k8s的各种特效。作为容器编排引起,最重要也是最基本的功能当然是容器化的运行啦,
前面我们已经了解到,k8s通过controller来管理pod的生命周期,未来满足不一样的场景,还提供了ReplicaSet、DaemonSet、StatefuleSet、Job多种Controller
Deployment
kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
通过 kubectl get deployment查看nginx-deployment的状态。输出显示两个正常的副本运行。
通过 kubectl describe deployment了解更详细的信息。
kubectl describe deployment nginx-deployment
大部分的内容都是自解析的,重点看这一块的内容。创建了一个ReplicaSet容器,Events是Deployment的日志,
用来记录ReplicaSet的启动过程。也就是说Deployment是通过ReplicaSet来管理Pod。
我们执行kubeclt describe replicaset查看详细信息。
Controlled By指明此ReplicaSet是有Deployment nginx-deployment创建的。是两个Pod创建的日志,我们再看看pod,执行kubectl get pod
两个副本都在running状态。
然后用kubectl describe pod查看过多信息
也校验了一个过程
- 用户通过kubectl创建Deployment
- Deployment创建ReplicaSet
- ReplicatSet创建Pod
命令 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 参数即可
再执行kubectl apply
k8s出于安全问题,默认不会把pod调度到master节点上。
Failover
我们把k8s-node2节点关机
那么过一点时间k8s心跳检查的时候,就会标记k8s-node2不可用,k8s-node2上的pod也会标记Unknown状态,并在k8s-node1上创建两个新的pod,把总副本书维持在配置的副本数。
等到k8s-node2回复后,unknown的pod会被直接删掉,不会在调度到k8s-node2上了。
删除容器的方法
用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
也可以通过容器配置文件查看