主機 | IP地址 | 服務 |
---|---|---|
master | 192.168.1.21 | k8s |
node01 | 192.168.1.22 | k8s |
node02 | 192.168.1.23 | k8s |
基於[ http://www.javashuo.com/article/p-wzdhboob-dy.html]() 的實驗繼續進行前端
用來確保由其管控的Pod對象副本數量,可以知足用戶指望,多則刪除,少則經過模本建立node
一樣,它也能夠經過yaml或json格式的資源清單來建立。其中spec字段通常嵌套如下字段:nginx
與RC相比而言,RS不只支持基於等值的標籤選擇器,並且還支持基於集合的標籤選擇器。web
標籤要作到:見名知意。json
[root@master ~]# vim label.yaml kind: Pod apiVersion: v1 metadata: name: labels labels: env: qa tier: frontend spec: containers: - name: myapp image: httpd
[root@master ~]# kubectl apply -f label.yaml --record
[root@master ~]# kubectl get pod --show-labels //經過--show-labels顯示資源對象的
[root@master ~]# kubectl get po -L env,tier //顯示某個鍵對應的值
[root@master ~]# kubectl get po -l env,tier //經過-l 查看僅包含某個標籤的資源。
[root@master ~]# kubectl label pod labels app=pc //給pod資源添加標籤
[root@master ~]# kubectl label pod labels env=dev --overwrite //修改標籤
[root@master ~]# kubectl get pod -l tier --show-labels //查看標籤
[root@master ~]# vim service.yaml kind: Service apiVersion: v1 metadata: name: service spec: type: NodePort selector: env: qa ports: - protocol: TCP port: 90 targetPort: 80 nodePort: 30123
[root@master ~]# kubectl apply -f service.yaml
[root@master ~]# kubectl describe svc
[root@master ~]# curl 127.0.0.1:30123
若是標籤有多個,標籤選擇器選擇其中一個,也能夠關聯成功。相反,若是選擇器有多個,那麼標籤必須徹底知足條件,才能夠關聯成功。vim
[基於等值關係的(equality-based)]():「=」,「==」,「! =」前面兩個都是相等,最後一個是不等於。後端
[基於集合關係(set-based)]():in、notin、exists三種。選擇器列表間爲「邏輯與」關係,使用ln或者NotIn操做時,其valuas不強制要求爲非空的字符串列表,而使用Exists或DostNotExist時,其values必須爲空api
[root@master ~]# vim selector.yaml selector: matchLabels: app: nginx mathExpressions: - {key: name,operator: In,values: [zhangsan,lisi]} - {key: age,operator: Exists,values:}
它也是一種pod控制器。緩存
RC,RS , deployment , daemonset.都是pod控制器。statfukSet,RBAC架構
若是必須將pod運行在固定的某個或某幾個節點,且要優先於其餘的pod的啓動。一般狀況下,默認會將每個節點都運行,而且只能運行一個pod。這種狀況推薦使用DeamonSet資源對象。
[root@master ~]# kubectl get ds -n kube-system //查看一下DaemonSet
[root@master ~]# vim daemonset.yaml kind: DaemonSet apiVersion: extensions/v1beta1 metadata: name: test-ds spec: template: metadata: labels: name: test-ds spec: containers: - name: test-ds image: httpd
[root@master ~]# kubectl apply -f daemonset.yaml
[root@master ~]# kubectl get ds
Replication Controller
簡稱RC
,RC
是Kubernetes
系統中的核心概念之一,簡單來講,RC
能夠保證在任意時間運行Pod
的副本數量,可以保證Pod
老是可用的。若是實際Pod
數量比指定的多那就結束掉多餘的,若是實際數量比指定的少就新啓動一些Pod
,當Pod
失敗、被刪除或者掛掉後,RC
都會去自動建立新的Pod
來保證副本數量,因此即便只有一個Pod
,咱們也應該使用RC
來管理咱們的Pod
。
被認爲 是「升級版」的RC。RS也是用於保證與label selector匹配的pod數量維持在指望狀態。
實際上
RS
和RC
的功能基本一致,目前惟一的一個區別就是RC
只支持基於等式的selector
(env=dev或app=nginx),但RS
還支持基於集合的selector
(version in (v1, v2)),這對複雜的運維管理就很是方便了。
kubectl
命令行工具中關於RC
的大部分命令一樣適用於咱們的RS
資源對象。不過咱們也不多會去單獨使用RS
,它主要被Deployment
這個更加高層的資源對象使用,除非用戶須要自定義升級功能或根本不須要升級Pod
,在通常狀況下,咱們推薦使用Deployment
而不直接使用Replica Set
。
一、RC只支持基於等式的selector(env=dev或environment!=qa),但RS還支持新的,基於集合的selector(version in (v1.0, v2.0)或env notin (dev, qa)),這對複雜的運維管理很方便。
二、升級方式
若是必須將pod運行在固定的某個或某幾個節點,且要優先於其餘的pod的啓動。一般狀況下,默認會將每個節點都運行,而且只能運行一個pod。這種狀況推薦使用DeamonSet資源對象。
一個DaemonSet對象能確保其建立的Pod在集羣中的每一臺(或指定)Node上都運行一個副本。若是集羣中動態加入了新的Node,DaemonSet中的Pod也會被添加在新加入Node上運行。刪除一個DaemonSet也會級聯刪除全部其建立的Pod。
Kubernetes Deployment提供了官方的用於更新Pod和Replica Set(下一代的Replication Controller)的方法,您能夠在Deployment對象中只描述您所指望的理想狀態(預期的運行狀態),Deployment控制器爲您將如今的實際狀態轉換成您指望的狀態,例如,您想將全部的webapp:v1.0.9升級成webapp:v1.1.0,您只需建立一個Deployment,Kubernetes會按照Deployment自動進行升級。如今,您能夠經過Deployment來建立新的資源(pod,rs,rc),替換已經存在的資源等。
你只須要在Deployment中描述你想要的目標狀態是什麼,Deployment controller就會幫你將Pod和Replica Set的實際狀態改變到你的目標狀態。你能夠定義一個全新的Deployment,也能夠建立一個新的替換舊的Deployment。
Deployment集成了上線部署、滾動升級、建立副本、暫停上線任務,恢復上線任務,回滾到之前某一版本(成功/穩定)的Deployment等功能,在某種程度上,Deployment能夠幫咱們實現無人值守的上線,大大下降咱們的上線過程的複雜溝通、操做風險。
[root@master ~]# vim daemonset.yaml kind: DaemonSet apiVersion: extensions/v1beta1 metadata: name: xgp-ds spec: template: metadata: labels: tier: backend env: dev spec: containers: - name: xgp-ds image: httpd
[root@master ~]# kubectl get pod --show-labels
[root@master ~]# kubectl get pod -L env,tier
[root@master ~]# vim service.yaml kind: Service apiVersion: v1 metadata: name: service spec: type: NodePort selector: env: dev ports: - protocol: TCP port: 90 targetPort: 80 nodePort: 30123
[root@master ~]# kubectl apply -f service.yaml
[root@master ~]# kubectl describe svc
[root@master ~]# curl 127.0.0.1:30123
<1>標籤:解決同類型的資源對象,爲了更好的管理,按照標籤分組。
<2>標籤選擇器:標籤的查詢過濾條件。