【Kubernetes】Pod学习(七)Pod调度:Deployment调度入门

此文为学习《Kubernetes权威指南》的相关笔记

学习笔记:

       Pod是可以创建和管理Kubernetes计算的最小可部署单元,在初步学习Pod的组成和创建后,紧接着将要探寻的就是,如何对Pod进行批量的生成和调度,生成Pod的上层抽象,在K8s中,这项任务交由各类副本控制器进行。

      在实际部署中,很少直接去定义一个Pod,而是使用诸如Repliction Controller、ReplicaSet、Deployment、Job等副本控制器去创建,这些控制器根据目标功能的不同担任不同的作用,但都具有对一组Pod副本的创建、调度及生命周期的自动控制功能。后续对于Pod的学习,将集中在这几类副本控制器上,包括他们的功能、使用场景和创建方法。

       最早的K8s中只有Replication Controller(CA)一种副本控制器,他通过标签选择器(Label Selector)这个松耦合关联关系控制目标Pod实例的创建和销毁,而随后出现的ReplicaSet(RS)在RC的基本功能之上增加了集合式的标签选择器,使得RS对于Pod副本的管理具有更强的灵活性,而Deployment的出现可以说是对上述两种副本控制器的一种升级,他在内部使用RS来实现,也就是说创建一个Deployment会自动生成一个他下属的RS,相比RC,Deployment最大提升在于可以随时知道当前Pod的部署进度。

阿里云大学云原生公开课上,对Deployment给出的介绍如下:

这套课程暂时并没有对RS和RC做任何介绍,可以猜测当前工业应用中基本以Deployment作为主要控制器方案。

接下来新建一个Deployment实例

1、创建配置文件nginx-deployment.yaml

在nginx-deployment的创建中,与其他资源对象一样,首先定义apiversion、kind、metadata

在资源对象特征spec中,指明Pod副本个数replicas,随后定义标签选择器

这里需要注意,在第四版书中,没有对这个Deployment定义标签选择器,运行因缺失selector对象而失败

推测在后续的版本更新中,已经强制在Deployment的定义中必须加入标签选择器

与RC不用,RS和Deployment的selector域下不可以直接写出Label键值对,而是必须通过matchLabes和matchExpressions来配置标签选择器

最后,在template域下定义本副本控制器属下的Pod信息,这里与单独定义Pod的写法基本相同,不过不需要apiVersion和Kind

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 3
 selector:
  matchLabels:
   app: nginx

 template:   #模板域定义
  metadata:
   labels:
    app: nginx
  spec:
   containers:
   - name: nginx
     image: nginx
     ports:
     - containerPort: 80

2、创建并查看nginx-deployment相关信息

创建deployment,通过yaml文件创建K8s资源对象的方式基本都相同。

# kubectl create -f nginx-deployment.yaml
deployment.apps/nginx-deployment created

分别查看当前的deployment列表、RS列表、Pod列表,可以看到建立的Deployment和其属下的RS以及他建立的三个Pod副本

注意观察Deployment到RS到Pod的命名方式

Deployment列表中给出了目前Pod副本的版本更新情况(UP-TO-DATE)

# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           6m16s
# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-85ff79dd56   3         3         3       6m23s   # RS名称以所属RC为前缀
# kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE          #Pod名称以所属RS为前缀
nginx-deployment-85ff79dd56-6qs5f   1/1     Running   0          6m29s
nginx-deployment-85ff79dd56-j6ptn   1/1     Running   0          6m29s
nginx-deployment-85ff79dd56-qh82q   1/1     Running   0          6m29s

3、RC、RS、Deployment都支持使用kubectl scale命令进行动态缩放Pod副本数量

# kubectl scale deployment nginx-deployment --replicas=4
deployment.apps/nginx-deployment scaled
[root@MiWiFi-R4CM-srv learn-pod]# kubectl get pods
NAME                                READY   STATUS              RESTARTS   AGE
nginx-deployment-85ff79dd56-4sf4x   1/1     Running             0          36s
nginx-deployment-85ff79dd56-8d2p9   1/1     Running             0          36s
nginx-deployment-85ff79dd56-knbm4   0/1     ContainerCreating   0          3s
nginx-deployment-85ff79dd56-t7jzz   1/1     Running             0          36s

# kubectl scale deployment nginx-deployment --replicas=2
deployment.apps/nginx-deployment scaled
[root@MiWiFi-R4CM-srv learn-pod]# kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-85ff79dd56-8d2p9   1/1     Running   0          100s
nginx-deployment-85ff79dd56-t7jzz   1/1     Running   0          100s

删除nginx-deployment ,其下属的RS和Pod副本都将一起被删除

就Deployment的使用仍有很多特性和命令等待学习

以上

发布了27 篇原创文章 · 获赞 0 · 访问量 957

猜你喜欢

转载自blog.csdn.net/qq_38093301/article/details/103514556