继续上一篇

3.6Deployment

Deployment是1.2之后引入的新概念,用于更好的解决pod的编排问题。为此,Deployment在内部使用了Replica Set来实现目的,无论从Deployment的作用与目的、YAML的定义,还是从它的具体命令行操作来看,这都是RC的一次升级。

Deployment相对于RC的一个最大升级是我们可以随时知道当前pod部署的进度。

常用的命令:

kubectl get deployments 查看deployment的信息

kubectl get rs 查看对应的Replica Set

kubectl get pods  查看创建的pod

3.7 Horizontal Pod  Autoscaler

pod横向自动扩容  前面我们知道通过kubectl scale命令可以实现pod的扩容和缩容,HPA通过追踪分析指定RC控制的所有目标pod的负载变化情况,来确定是否需要有针对性的调整目标pod 的副本数量。

3.8Stateful Set

k8s中很多的资源对象都是针对于无状态的服务,但是对于一些有状态的服务,就需要用到Stateful Set了,它具有如下特性:

stateful set 中每个pod都有稳定 唯一的网络标识,可以用来发现集群内部的其他成员。

stateful set控制的副本的起停顺序是受控的,操作第n个pod时,n-1个pod是已经运行且准备好的状态

stateful set里的pod采用稳定的持久化存储卷。

3.9Service

核心资源对象之一,它定义了一个服务的访问入口地址,前端的应用pod通过这个入口访问背后的一组pod集群实例,这个过程是通过label selector来实现的。RC的作用实际上是保证service的服务能力和服务质量始终符合预期标准。

service实现的负载均衡机制:每个service都分配了一个全局唯一的虚拟IP地址--cluster ip,这样服务调用就变成了简单的TCP网络通信问题。而且在service的生命周期内,这个ip不会发生变化。

服务发现机制:环境变量 及 之后DNS解析

load balancer 解决外部访问到node ip +node port的负载均衡问题

3.10 Volume

存储卷是pod中能够被多个容器访问的共享目录。kubernetes中的volume定义在pod上,然后被一个pod中的多个容器挂载到具体的文件目录下,该volume与pod的生命周期相同,但与容器的生命周期不相关。

emptyDir:在pod分配到node时创建的,初始内容为空,无需指定宿主机上对应的目录文件,pod从node移除时,自动删除

hostPath:在pod上挂在宿主机上的文件或目录。

NFS:可以定义NFS类型的volume

3.11Persistent volume

PV可以理解成kubernetes集群中的某个网络存储对应的一块存储,与volume的区别如下:

PV只是网络存储,不属于任何的node,但可以在每个node上访问

PV并不是被定义在pod上的,而是独立于pod之外定义的

3.12Namespace

Namespace在很多情况下用于实现多租户的资源隔离。

Kubernetes启动时会创建一个名为default 的Namespace,如果不特别指明Namespace,则用户创建的pod rc service都会建到默认的namespace中。

如果定义了新的namespace那么在创建资源对象时就可以指定对应的namespace。

3.13configmap

存储在etcd中的ConfigMap通过volume映射的方式变成目标pod内的配置文件。