4.Pod控制器
Controller-manager:
Kube-controller-manager
Cloud-controller-manager:在K8S上启用CloudProvider的时候才需要,用来配合云服务提供商的控制(NodeController,RouteController,ServiceController)
一、Pod控制器
ReplicationController:
ReplicaSet:是新一代的ReplicationController。帮助用户管理无状态的资源,并确保能够精确反映用户定义的目标数量。
核心组件:用户期望的副本数,标签选择器,pod资源模板
Deployment:建立在ReplicaSet之上。支持扩缩容,支持滚动更新,回滚等,提供声明式定义资源。是目前管理无状态应用的最好的控制器。
DaemonSet:用于确保集群的每一个节点只运行一个特定的Pod副本,或者仅在满足条件的节点上,运行一个Pod副本。通常用来实现系统级别的后台任务(以守护进程形式运行),托管到K8S上,。不用定义pod的期望数量,因为副本数量取决于集群规模。
Job:是否重建Pod取决于任务是否完成。只能执行一次性的任务。
CronJob:周期性运行任务。
StatefulSet:管理有状态应用。把需要手动做的运维操作步骤封装成脚本,放在pod模板中,让控制器按脚本去做。 --- 有状态应用托管到K8S很难,因为有状态应用,无法抽取共同特点,并定义出一种模式来,只能每一种应用都单独对待。
二、ReplicaSet
[kubelet@master yaml]$ cat rs-demo.yaml
[kubelet@master ~]$ kubectl get pods --show-labels
[kubelet@master yaml]$ kubectl edit rs myapp ## 在线修改yaml,动态扩容缩容(更改replicas);动态更新(更改container的image版本),已存在的pod版本不会改变,只有重建的才会是新版本。
三、Deployment
一个deployment管理多个ReplicaSet。只有一个是处于活动状态。可以提供声明式更新创建。通常用apply,而不使用create。提供滚动式自定义自控制更新;可以实现控制更新逻辑和更新节奏,更新粒度。
[kubelet@master yaml]$ kubectl explain deployment.spec.strategy # 更新策略
[kubelet@master yaml]$ kubectl explain deployment.spec.revisionHistoryLimit # 历史版本数
[kubelet@master yaml]$ vim deploy-demo.yaml # 直接修改yaml文件replicas
[kubelet@master yaml]$ kubectl apply -f deploy-demo.yaml # 再次apply,得到如下效果。
[kubelet@master yaml]$ kubectl rollout history deployment myapp-deploy # 查看滚动更新的历史
[kubelet@master yaml]$ kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}' # 打补丁
[kubelet@master yaml]$ kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}' #修改更新策略
[kubelet@master yaml]$ kubectl set image deployment myapp-deploy myapp-container=ikubernetes/myapp:v3 && kubectl rollout pause deployment myapp-deploy #更新,然后暂停更新。金丝雀发布
[kubelet@master yaml]$ kubectl rollout resume deployment myapp-deploy # 恢复操作,继续进行更新。
[kubelet@master yaml]$ kubectl rollout status deployment myapp-deploy # 查看更新进度
[kubelet@master yaml]$ kubectl rollout undo deployment myapp-deploy --to-revision= #回滚到版本1(不指定默认回滚为上一版本)
查看使用的是v1版本:
[kubelet@master yaml]$ kubectl delete pod myapp-ds-ljlh5 --force --grace-period= #强制删除pod,当pod长时间处于Terminating状态时可使用。
四、DaemonSet
也支持滚动更新
kubelet@master yaml]$ kubectl expose deployment redis --port= #暴露端口
[kubelet@master yaml]$ kubectl explain pods.spec.hostNetwork #共享宿主机的网络命名空间,daemonset可以使用,就不需要用service单独暴露端口
日志收集是节点级别的,需要收集所有Pod的日志。
五、Tips
TPR:Third Party Resources 第三方资源 1.2+ 1.7废弃了
CDR:Custom Defined Resources 1.8+ 用户自定义资源
Operator:
Helm:类似于Yum
[kubelet@master yaml]$ kubectl explain deploy # 文档是落后于k8s集群本身的,所以此命令获得的群组可能是不正确的。
[kubelet@master yaml]$ kubectl get pods -l app=myapp –w # 查看pod的动态变化
最新文章
- word20161128
- 20145206邹京儒《Java程序设计》第5周学习总结
- mybatis java.lang.UnsupportedOperationException
- jQuery对html进行Encode和Decode
- PV3D学习笔记-导入DAE模型
- 新闻类App使用的组件
- 跨过slf4j和logback,直接晋级log4j 2
- 解决mac上Android开发时出现的ADB server didn't ACK
- jQuery插入节点的方法
- xfs文件系统磁盘配额
- eclipse 使用问题
- position的absolute与fixed共同点与不同点
- 优化eclipse
- ASP.NET MVC 重写RazorViewEngine实现多主题切换
- 浅谈linux线程切换问题
- C和C指针小记(十八)-使用结构和指针-双向链表
- 通过进程link路径(快捷方式路径)得到进程完整路径
- 洛谷P1636学画画
- A+ B
- CentOS6.5下安装Oracle11g
热门文章
- 一、Jmeter启动报错:Could not initialize class org.apache.jmeter.gui.util.MenuFactory
- Spring 缓存注解 SpEL 表达式解析
- python - DBUtils 连接池减少oracle数据库的连接数
- redis--迁库操作
- 我在DBGridEh增加一栏复选框及对应操作的解决方案
- wpf 非窗体类中 异步调用窗体与控件
- flutter 处理dialog点击事件回调
- Linux 后台执行python或者java代码的命令
- vue封装一些常用组件loading、switch、progress
- IIS7下配置web.config隐藏index.php