十年河东,十年河西,莫欺少年穷
学无止境,精益求精
1、Pod控制器介绍
- 在kubernetes中,按照Pod的创建方式可以将其分为两类:
- 自主式Pod:kubernetes直接创建出来的Pod,这种Pod删除后就没有了,也不会重建。
- Pod控制器:Pod控制器是管理Pod的中间层,使用了Pod控制器之后,我们只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它就会创建出满足条件的Pod并确保每一个Pod处于用户期望的状态,如果Pod在运行中出现故障,控制器会基于指定的策略重启或重建Pod。
- 在kubernetes中,有很多类型的Pod控制器,每种都有自己的适合的场景,常见的有下面这些:
- ReplicationController:比较原始的Pod控制器,已经被废弃,由replicaset替代。
- replicaset:保证指定数量的Pod运行,并支持Pod数量变更,镜像版本变更。
- Deployment:通过控制replicaset来控制Pod,并支持滚动升级、版本回退。
- DaemonSet:在集群中的指定Node上都运行一个副本,一般用于守护进程类的任务。
- Job:它创建出来的Pod只要完成任务就立即退出,用于执行一次性任务。
- CronJob:它创建的Pod会周期性的执行,用于执行周期性的任务。
- StatefulSet:管理有状态的应用
2、replicaset(RS)
- replicaset的主要作用是保证一定数量的Pod能够正常运行,它会持续监听这些Pod的运行状态,一旦Pod发生故障,就会重启或重建。同时它还支持对Pod数量的扩缩容和版本镜像的升级。
- replicaset的资源清单文件:
apiVersion: apps/v1 # 版本号 kind: replicaset # 类型 Metadata: # 元数据 name: # rs名称 namespace: # 所属命名空间 labels: #标签 controller: rs spec: # 详情描述 replicas: 3 # 副本数量 selector: # 选择器,通过它指定该控制器管理哪些po matchLabels: # Labels匹配规则 app: Nginx-pod matchExpressions: # Expressions匹配规则 - {key: app, operator: In, values: [Nginx-pod]} template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本 Metadata: labels: app: Nginx-pod spec: containers: - name: Nginx image: Nginx:1.17.1 ports: - containerPort: 80
- 在这里,需要新了解的配置项就是spec下面几个选项:
- template:模板,就是当前控制器创建Pod所使用的模板,里面其实就是前面学过的Pod的定义。
3、创建replicaset控制器
-
创建pc-replicaset.yaml文件,内容如下:
apiVersion: apps/v1 # 版本号 kind: replicaset # 类型 Metadata: # 元数据 name: pc-replicaset # rs名称 namespace: dev # 命名类型 spec: # 详细描述 replicas: 3 # 副本数量 selector: # 选择器,通过它指定该控制器可以管理哪些Pod matchLabels: # Labels匹配规则 app: Nginx-pod template: # 模块 当副本数据不足的时候,会根据下面的模板创建Pod副本 Metadata: labels: app: Nginx-pod spec: containers: - name: Nginx # 容器名称 image: Nginx:1.17.1 # 容器需要的镜像地址 ports: - containerPort: 80 # 容器所监听的端口
资源清单中,apiVersion 为 apps/v1 ,为什么是这个值?可通过如下指令查询
[root@master ~]# kubectl explain rs #ReplicationSet 简称为 rs KIND: replicaset VERSION: apps/v1
-
创建rs:
kubectl apply -f pc-replicaset.yaml
-
查看dev命名空间下 pod 和 rs:
kubectl get pod,rs -n dev
-
查看具体名称的 rs:
kubectl get rs pc-replicaset -n dev -o wide
可通过编辑的模式、命令两种方式进行扩缩
编辑模式:
kubectl edit rs pc-replicaset -n dev
进入编辑器后
再次查看Rs
命令模式
kubectl scale rs pc-replicaset --replicas=2 -n dev
执行上述命令后,再次查看
镜像升级
编辑模式,直接编辑rs
kubectl edit rs pc-replicaset -n dev
命令模式
kubectl set image rs pc-replicaset Nginx=Nginx:1.17.2 -n dev
删除RS
- 使用kubectl delete rs 命令会删除replicaset和其管理的Pod。
# 在kubernetes删除replicaset前,会将replicaset的replicas调整为0,等到所有的Pod被删除后,再执行replicaset对象的删除 kubectl delete rs pc-replicaset -n dev
- 如果希望仅仅删除replicaset对象(保留Pod),只需要在使用kubectl delete rs命令的时候添加--cascade=false选项(不推荐):
kubectl delete rs pc-replicaset -n dev --cascade=false
- 使用yaml直接删除(推荐)Pod不会保留:
kubectl delete -f pc-replicaset.yaml
@天才卧龙的博客
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。