4.Pod控制器 一、Pod控制器 二、ReplicaSet 三、Deployment 四、DaemonSet 五、Tips

Controller-manager:

       Kube-controller-manager

       Cloud-controller-manager:在K8S上启用CloudProvider的时候才需要,用来配合云服务提供商的控制(NodeController,RouteController,ServiceController)

ReplicationController

ReplicaSet:是新一代的ReplicationController。帮助用户管理无状态的资源,并确保能够精确反映用户定义的目标数量。

       核心组件:用户期望的副本数,标签选择器,pod资源模板

Deployment:建立在ReplicaSet之上。支持扩缩容,支持滚动更新,回滚等,提供声明式定义资源。是目前管理无状态应用的最好的控制器。

DaemonSet:用于确保集群的每一个节点只运行一个特定的Pod副本,或者仅在满足条件的节点上,运行一个Pod副本。通常用来实现系统级别的后台任务(以守护进程形式运行),托管到K8S上,。不用定义pod的期望数量,因为副本数量取决于集群规模。

Job:是否重建Pod取决于任务是否完成。只能执行一次性的任务。

CronJob:周期性运行任务。

StatefulSet:管理有状态应用。把需要手动做的运维操作步骤封装成脚本,放在pod模板中,让控制器按脚本去做。  --- 有状态应用托管到K8S很难,因为有状态应用,无法抽取共同特点,并定义出一种模式来,只能每一种应用都单独对待。

二、ReplicaSet

 4.Pod控制器
一、Pod控制器
二、ReplicaSet
三、Deployment
四、DaemonSet
五、Tips

[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   # 历史版本数

4.Pod控制器
一、Pod控制器
二、ReplicaSet
三、Deployment
四、DaemonSet
五、Tips

[kubelet@master yaml]$ vim deploy-demo.yaml  # 直接修改yaml文件replicas
[kubelet@master yaml]$ kubectl apply -f deploy-demo.yaml  # 再次apply,得到如下效果。

 4.Pod控制器
一、Pod控制器
二、ReplicaSet
三、Deployment
四、DaemonSet
五、Tips

4.Pod控制器
一、Pod控制器
二、ReplicaSet
三、Deployment
四、DaemonSet
五、Tips

[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 #回滚到版本1(不指定默认回滚为上一版本)

查看使用的是v1版本:

4.Pod控制器
一、Pod控制器
二、ReplicaSet
三、Deployment
四、DaemonSet
五、Tips

[kubelet@master yaml]$  kubectl delete pod myapp-ds-ljlh5 --force --grace-period=0 #强制删除pod,当pod长时间处于Terminating状态时可使用。

四、DaemonSet

也支持滚动更新

4.Pod控制器
一、Pod控制器
二、ReplicaSet
三、Deployment
四、DaemonSet
五、Tips

kubelet@master yaml]$ kubectl expose deployment redis --port=6379  #暴露端口

4.Pod控制器
一、Pod控制器
二、ReplicaSet
三、Deployment
四、DaemonSet
五、Tips

[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的动态变化