K8S之ReplicaSet详解
如果我們都人工的去解決遇到的pod重啟問題,似乎又回到了以前刀耕火種的時代了是吧,如果有一種工具能夠來幫助我們管理Pod就好了,Pod不夠了自動幫我新增一個,Pod掛了自動幫我在合適的節(jié)點上重新啟動一個Pod,這樣是不是遇到重啟問題我們都不需要手動去解決了。
幸運的是,Kubernetes就為我們提供了這樣的資源對象:
- Replication Controller:用來部署、升級Pod
- Replica Set:下一代的Replication Controller
- Deployment:可以更加方便的管理Pod和ReplicaSet
本節(jié)先講ReplicaSet和ReplicationController。
一、ReplicationController
Replication Controller簡稱RC,RC是Kubernetes系統(tǒng)中的核心概念之一,簡單來說,RC可以保證在任意時間運行Pod的副本數(shù)量,能夠保證Pod總是可用的。如果實際Pod數(shù)量比指定的多那就結(jié)束掉多余的,如果實際數(shù)量比指定的少就新啟動一些Pod,當Pod失敗、被刪除或者掛掉后,RC都會去自動創(chuàng)建新的Pod來保證副本數(shù)量,所以即使只有一個Pod,我們也應該使用RC來管理我們的Pod。可以說,通過ReplicationController,Kubernetes實現(xiàn)了集群的高可用性。
- 開始演示
- 查看rc_nginx.yml
上面的YAML文件:
- kind:ReplicationController
- spec.replicas: 指定Pod副本數(shù)量,默認為1
- spec.selector: RC通過該屬性來篩選要控制的Pod
- spec.template: 這里就是我們之前的Pod的定義的模塊,但是不需要apiVersion和kind了
- spec.template.metadata.labels: 注意這里的Pod的labels要和spec.selector相同,這樣RC就可以來控制當前這個Pod了。
- 刪除一個看看效果如何
通過delete pods 的方式刪除一個容器,立刻就有一個新的容器起來
kubectl get rc kubectl get pod kubectl delete pods nginx-h2qbt kubectl get pods kubectl get rc- scale 水平擴展的數(shù)量
二、ReplicaSet
Replication Set簡稱RS,隨著Kubernetes的高速發(fā)展,官方已經(jīng)推薦我們使用RS和Deployment來代替RC了,實際上RS和RC的功能基本一致,目前唯一的一個區(qū)別就是RC只支持基于等式的selector(env=dev或environment!=qa),但RS還支持基于集合的selector(version in (v1.0, v2.0)),這對復雜的運維管理就非常方便了。
kubectl命令行工具中關(guān)于RC的大部分命令同樣適用于我們的RS資源對象。不過我們也很少會去單獨使用RS,它主要被Deployment這個更加高層的資源對象使用,除非用戶需要自定義升級功能或根本不需要升級Pod,在一般情況下,我們推薦使用Deployment而不直接使用Replica Set。
這里總結(jié)下關(guān)于RC/RS的一些特性和作用:
- 大部分情況下,我們可以通過定義一個RC實現(xiàn)的Pod的創(chuàng)建和副本數(shù)量的控制
- RC中包含一個完整的Pod定義模塊(不包含apiversion和kind)
- RC是通過label selector機制來實現(xiàn)對Pod副本的控制的
- 通過改變RC里面的Pod副本數(shù)量,可以實現(xiàn)Pod的擴縮容功能
- 通過改變RC里面的Pod模板中鏡像版本,可以實現(xiàn)Pod的滾動升級功能(但是不支持一鍵回滾,需要用相同的方法去修改鏡像地址)
?
- 查看rc_nginx.yml
?
#刪除ReplicationController創(chuàng)建的pod kubectl delete -f rc_nginx.yml #創(chuàng)建一個ReplicationController的橫向擴展 kubectl create -f rs_nginx.yml kubectl get pods -o wide kubectl get pods kubectl get rc- 刪除一個看看效果如何
通過delete pods 的方式刪除一個容器,立刻就有一個新的容器起來
kubectl get rs kubectl get pod kubectl delete pods nginx-h2qbt kubectl get pods kubectl get rs- scale 水平擴展的數(shù)量
通過這次了解了pod的擴展,ReplicaSet和ReplicationController的方式,基本上可以拋棄上次的直接pod的方式創(chuàng)建app了。下次說說Deployment。
?
總結(jié)
以上是生活随笔為你收集整理的K8S之ReplicaSet详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: level1和level2行情的区别
- 下一篇: 质量改进与可靠性提升,硬核案例学习在这里