您好,登錄后才能下訂單哦!
主機 | IP地址 | 服務 |
---|---|---|
master | 192.168.1.21 | k8s |
node01 | 192.168.1.22 | k8s |
node02 | 192.168.1.23 | k8s |
基于[ https://blog.51cto.com/14320361/2464655]() 的實驗繼續進行
用來確保由其管控的Pod對象副本數量,能夠滿足用戶期望,多則刪除,少則通過模本創建
同樣,它也可以通過yaml或json格式的資源清單來創建。其中spec字段一般嵌套以下字段:
與RC相比而言,RS不僅支持基于等值的標簽選擇器,而且還支持基于集合的標簽選擇器。
標簽要做到:見名知意。
[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
如果標簽有多個,標簽選擇器選擇其中一個,也可以關聯成功。相反,如果選擇器有多個,那么標簽必須完全滿足條件,才可以關聯成功。
[基于等值關系的(equality-based)]():“=”,“==”,“! =”前面兩個都是相等,最后一個是不等于。
[基于集合關系(set-based)]():in、notin、exists三種。選擇器列表間為“邏輯與”關系,使用ln或者NotIn操作時,其valuas不強制要求為非空的字符串列表,而使用Exists或DostNotExist時,其values必須為空
[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
。
1、RC只支持基于等式的selector(env=dev或environment!=qa),但RS還支持新的,基于集合的selector(version in (v1.0, v2.0)或env notin (dev, qa)),這對復雜的運維管理很方便。
2、升級方式
如果必須將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>標簽選擇器:標簽的查詢過濾條件。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。