主機(jī) | IP地址 | 服務(wù) |
---|---|---|
master | 192.168.1.21 | k8s |
node01 | 192.168.1.22 | k8s |
node02 | 192.168.1.23 | k8s |
基于[ https://blog.51cto.com/14320361/2464655]() 的實驗繼續(xù)進(jìn)行
創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、漠河網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為漠河等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
用來確保由其管控的Pod對象副本數(shù)量,能夠滿足用戶期望,多則刪除,少則通過模本創(chuàng)建
同樣,它也可以通過yaml或json格式的資源清單來創(chuàng)建。其中spec字段一般嵌套以下字段:
與RC相比而言,RS不僅支持基于等值的標(biāo)簽選擇器,而且還支持基于集合的標(biāo)簽選擇器。
標(biāo)簽要做到:見名知意。
[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
//顯示某個鍵對應(yīng)的值
[root@master ~]# kubectl get po -l env,tier
//通過-l 查看僅包含某個標(biāo)簽的資源。
[root@master ~]# kubectl label pod labels app=pc
//給pod資源添加標(biāo)簽
[root@master ~]# kubectl label pod labels env=dev --overwrite
//修改標(biāo)簽
[root@master ~]# kubectl get pod -l tier --show-labels
//查看標(biāo)簽
[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
如果標(biāo)簽有多個,標(biāo)簽選擇器選擇其中一個,也可以關(guān)聯(lián)成功。相反,如果選擇器有多個,那么標(biāo)簽必須完全滿足條件,才可以關(guān)聯(lián)成功。
[基于等值關(guān)系的(equality-based)]():“=”,“==”,“! =”前面兩個都是相等,最后一個是不等于。
[基于集合關(guān)系(set-based)]():in、notin、exists三種。選擇器列表間為“邏輯與”關(guān)系,使用ln或者NotIn操作時,其valuas不強(qiáng)制要求為非空的字符串列表,而使用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運行在固定的某個或某幾個節(jié)點,且要優(yōu)先于其他的pod的啟動。通常情況下,默認(rèn)會將每一個節(jié)點都運行,并且只能運行一個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
系統(tǒng)中的核心概念之一,簡單來說,RC
可以保證在任意時間運行Pod
的副本數(shù)量,能夠保證Pod
總是可用的。如果實際Pod
數(shù)量比指定的多那就結(jié)束掉多余的,如果實際數(shù)量比指定的少就新啟動一些Pod
,當(dāng)Pod
失敗、被刪除或者掛掉后,RC
都會去自動創(chuàng)建新的Pod
來保證副本數(shù)量,所以即使只有一個Pod
,我們也應(yīng)該使用RC
來管理我們的Pod
。
被認(rèn)為 是“升級版”的RC。RS也是用于保證與label selector匹配的pod數(shù)量維持在期望狀態(tài)。
實際上
RS
和RC
的功能基本一致,目前唯一的一個區(qū)別就是RC
只支持基于等式的selector
(env=dev或app=nginx),但RS
還支持基于集合的selector
(version in (v1, v2)),這對復(fù)雜的運維管理就非常方便了。
kubectl
命令行工具中關(guān)于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)),這對復(fù)雜的運維管理很方便。
2、升級方式
如果必須將pod運行在固定的某個或某幾個節(jié)點,且要優(yōu)先于其他的pod的啟動。通常情況下,默認(rèn)會將每一個節(jié)點都運行,并且只能運行一個pod。這種情況推薦使用DeamonSet資源對象。
一個DaemonSet對象能確保其創(chuàng)建的Pod在集群中的每一臺(或指定)Node上都運行一個副本。如果集群中動態(tài)加入了新的Node,DaemonSet中的Pod也會被添加在新加入Node上運行。刪除一個DaemonSet也會級聯(lián)刪除所有其創(chuàng)建的Pod。
Kubernetes Deployment提供了官方的用于更新Pod和Replica Set(下一代的Replication Controller)的方法,您可以在Deployment對象中只描述您所期望的理想狀態(tài)(預(yù)期的運行狀態(tài)),Deployment控制器為您將現(xiàn)在的實際狀態(tài)轉(zhuǎn)換成您期望的狀態(tài),例如,您想將所有的webapp:v1.0.9升級成webapp:v1.1.0,您只需創(chuàng)建一個Deployment,Kubernetes會按照Deployment自動進(jìn)行升級?,F(xiàn)在,您可以通過Deployment來創(chuàng)建新的資源(pod,rs,rc),替換已經(jīng)存在的資源等。
你只需要在Deployment中描述你想要的目標(biāo)狀態(tài)是什么,Deployment controller就會幫你將Pod和Replica Set的實際狀態(tài)改變到你的目標(biāo)狀態(tài)。你可以定義一個全新的Deployment,也可以創(chuàng)建一個新的替換舊的Deployment。
Deployment集成了上線部署、滾動升級、創(chuàng)建副本、暫停上線任務(wù),恢復(fù)上線任務(wù),回滾到以前某一版本(成功/穩(wěn)定)的Deployment等功能,在某種程度上,Deployment可以幫我們實現(xiàn)無人值守的上線,大大降低我們的上線過程的復(fù)雜溝通、操作風(fēng)險。
[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>標(biāo)簽:解決同類型的資源對象,為了更好的管理,按照標(biāo)簽分組。
<2>標(biāo)簽選擇器:標(biāo)簽的查詢過濾條件。