07 K8S 之命令行应用编排
无状态(stateless)应用的部署和控制通常使用Deployment控制器,而有状态应用则需要使用StatefulSet控制器或扩展的Operator。
在Kubernetes集群上自主运行的Pod对象在非计划内终止后,其生命周期也随之终结,用户需要再次手动创建类似的Pod对象才能确保其再次可用。对于Pod数量众多的场景,尤其是对微服务业务来说,用户必将疲于应付此类需求。自动化应用编排是Kubernetes的核心价值之一,将应用托管给控制器编排才是发挥Kubernetes作用的根本所在。
Deployment资源对象是通过ReplicaSet控制器对象作为中间层实例完成对Pod对象的控制,各Pod的名称也是由ReplicaSet对象名称后跟几个随机字符构成。
每个字段代表Pod资源对象一个方面的属性,主要字段的作用如下:
READY:m/n格式,m表示Pod中就绪状态的容器数量,n表示Pod中总的容器数量。
STATUS:Pod的当前状态,其值可能是Pending、Running、Succeeded、Failed和Unknown等其中之一,并存在某些类型的中间状态(容器状态)。
RESTARTS:Pod对象可能会因容器进程崩溃、超出资源限额等故障而被重启,此字段记录了它重启的次数。
IP:Pod的IP地址,通常由网络插件自动分配。
NODE:该Pod对象绑定的Node,目标Node由Scheduler负责挑选。
Service对象就是一组Pod的逻辑组合,它通过称为ClusterIP的地址和服务端口接收客户端请求,并将这些请求代理至使用标签选择器来过滤一个符合条件的Pod对象。
CLUSTER-IP字段为Service的IP地址,它是一个虚拟IP,并没有配置在集群中任何主机的任何接口之上,但每个Node上的kube-proxy都会为CLUSTER-IP所在的网络创建用于转发的iptables或ipvs规则。
kubectl scale命令就是专用于变动控制器应用规模的命令,它支持对Deployment、ReplicaSet、StatefulSet等类型资源对象的扩容和缩容操作。应用规模缩容的方式和扩容相似,只不过是将Pod副本的数量调至比原来小的数字。
有些命令是kubectl edit命令某一部分功能的二次封装,例如kubectl scale命令不过是专用于修改资源对象的replicas属性值而已,而kubectl set image通常用于修改工作负载型控制器资源规范中Pod模板的容器镜像,这两个命令同样直接作用于活动对象。
需要注意的是,受控于控制器的Pod对象在删除后会被重建,因而删除此类对象需要直接删除其控制器对象。默认情况下,删除Deployment一类的工作负载型控制器资源会级联删除相关的所有Pod对象,若要禁用该功能,需要在删除命令中使用--cascade=false选项。