Kubernetes是Google開源的一個(gè)容器編排引擎,它支持自動(dòng)化部署、大規(guī)??缮炜s、應(yīng)用容器化管理。在生產(chǎn)環(huán)境中部署一個(gè)應(yīng)用程序時(shí),通常要部署該應(yīng)用的多個(gè)實(shí)例以便對(duì)應(yīng)用請(qǐng)求進(jìn)行負(fù)載均衡。
創(chuàng)新互聯(lián)主營神池網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件開發(fā)公司,神池h5小程序制作搭建,神池網(wǎng)站營銷推廣歡迎神池等地區(qū)企業(yè)咨詢在Kubernetes中,我們可以創(chuàng)建多個(gè)容器,每個(gè)容器里面運(yùn)行一個(gè)應(yīng)用實(shí)例,然后通過內(nèi)置的負(fù)載均衡策略,實(shí)現(xiàn)對(duì)這一組應(yīng)用實(shí)例的管理、發(fā)現(xiàn)、訪問,而這些細(xì)節(jié)都不需要運(yùn)維人員去進(jìn)行復(fù)雜的手工配置和處理。
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可擴(kuò)展: 模塊化,插件化,可掛載,可組合
自動(dòng)化: 自動(dòng)部署,自動(dòng)重啟,自動(dòng)復(fù)制,自動(dòng)伸縮/擴(kuò)展
What
,即應(yīng)用最終要達(dá)到的狀態(tài)。主機(jī) | IP地址 | 服務(wù) |
---|---|---|
master | 192.168.1.21 | k8s |
node01 | 192.168.1.22 | k8s |
node02 | 192.168.1.23 | k8s |
在k8s中,一般使用yaml格式的文件來創(chuàng)建符合我們預(yù)期期望的pod,這樣的yaml文件我們一般稱為資源清單
/etc/kubernetes/manifests/ k8s存放(yam、yaml)文件的地方
**kubectl explain deployment(通過explain參數(shù)加上資源類別就能看到該資源應(yīng)該怎么定義)
kubectl explain deployment.metadata 通過資源類別加上帶有Object標(biāo)記的字段,我們就可以看到一級(jí)字段下二級(jí)字段的內(nèi)容有那些怎么去定義等
kubectl explain deployment.metadata.ownerReferences 通過加上不同級(jí)別的字段名稱來看下字段下的內(nèi)容,而且前面的[]號(hào)代表對(duì)象列表
(1) apiVersion:api版本信息
(用來定義當(dāng)前屬于哪個(gè)組和那個(gè)版本,這個(gè)直接關(guān)系到最終提供使用的是那個(gè)版本)
[root@master manifests]# kubectl api-versions
//查看到當(dāng)前所有api的版本
(2) kind: 資源對(duì)象的類別
(用來定義創(chuàng)建的對(duì)象是屬于什么類別,是pod,service,還是deployment等對(duì)象,可以按照其固定的語法格式來自定義。)
(3) metadata: 元數(shù)據(jù) 名稱字段(必寫)
提供以下幾個(gè)字段:
creationTimestamp: "2019-06-24T12:18:48Z"
generateName: myweb-5b59c8b9d-
labels: (對(duì)象標(biāo)簽)
pod-template-hash: 5b59c8b9d
run: myweb
name: myweb-5b59c8b9d-gwzz5 (pods對(duì)象的名稱,同一個(gè)類別當(dāng)中的pod對(duì)象名稱是唯一的,不能重復(fù))
namespace: default (對(duì)象所屬的名稱空間,同一名稱空間內(nèi)可以重復(fù),這個(gè)名稱空間也是k8s級(jí)別的名稱空間,不和容器的名稱空間混淆)
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: myweb-5b59c8b9d
uid: 37f38f64-967a-11e9-8b4b-000c291028e5
resourceVersion: "943"
selfLink: /api/v1/namespaces/default/pods/myweb-5b59c8b9d-gwzz5
uid: 37f653a6-967a-11e9-8b4b-000c291028e5
annotations(資源注解,這個(gè)需要提前定義,默認(rèn)是沒有的)
通過這些標(biāo)識(shí)定義了每個(gè)資源引用的path:即/api/group/version/namespaces/名稱空間/資源類別/對(duì)象名稱
(4) spec: 用戶期望的狀態(tài)
(這個(gè)字段最重要,因?yàn)閟pec是用來定義目標(biāo)狀態(tài)的‘disired state’,而且資源不通導(dǎo)致spec所嵌套的字段也各不相同,也就因?yàn)閟pec重要且字段不相同,k8s在內(nèi)部自建了一個(gè)spec的說明用于查詢)
(5) status:資源現(xiàn)在處于什么樣的狀態(tài)
(當(dāng)前狀態(tài),’current state‘,這個(gè)字段有k8s集群來生成和維護(hù),不能自定義,屬于一個(gè)只讀字段)
[root@master ~]# vim web.yaml
kind: Deployment #資源對(duì)象是控制器
apiVersion: extensions/v1beta1 #api的版本
metadata: #描述kind(資源類型)
name: web #定義控制器名稱
spec:
replicas: 2 #副本數(shù)量
template: #模板
metadata:
labels: #標(biāo)簽
app: web_server
spec:
containers: #指定容器
- name: nginx #容器名稱
image: nginx #使用的鏡像
[root@master ~]# kubectl apply -f web.yaml
[root@master ~]# kubectl get deployments. -o wide
//查看控制器信息
[root@master ~]# kubectl get pod -o wide
//查看pod節(jié)點(diǎn)信息
[root@master ~]# vim web-svc.yaml
kind: Service #資源對(duì)象是副本
apiVersion: v1 #api的版本
metadata:
name: web-svc
spec:
selector: #標(biāo)簽選擇器
app: web-server #須和web.yaml的標(biāo)簽一致
ports: #端口
- protocol: TCP
port: 80 #宿主機(jī)的端口
targetPort: 80 #容器的端口
使用相同標(biāo)簽和標(biāo)簽選擇器內(nèi)容,使兩個(gè)資源對(duì)象相互關(guān)聯(lián)。
創(chuàng)建的service資源對(duì)象,默認(rèn)的type為ClusterIP,意味著集群內(nèi)任意節(jié)點(diǎn)都可訪問。它的作用是為后端真正服務(wù)的pod提供一個(gè)統(tǒng)一的接口。如果想要外網(wǎng)能夠訪問服務(wù),應(yīng)該把type改為NodePort
[root@master ~]# kubectl apply -f web-svc.yaml
[root@master ~]# kubectl get svc
//查看控制器信息
[root@master ~]# curl 10.111.193.168
kind: Service #資源對(duì)象是副本
apiVersion: v1 #api的版本
metadata:
name: web-svc
spec:
type: NodePort #添加 更改網(wǎng)絡(luò)類型
selector: #標(biāo)簽選擇器
app: web_server #須和web.yaml的標(biāo)簽一致
ports: #端口
- protocol: TCP
port: 80 #宿主機(jī)的端口
targetPort: 80 #容器的端口
nodePort: 30086 #指定群集映射端口,范圍是30000-32767
[root@master ~]# kubectl apply -f web-svc.yaml
[root@master ~]# kubectl get svc
基于上一篇博客實(shí)驗(yàn)繼續(xù)進(jìn)行
[root@master ~]# vim www.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: xgp
spec:
replicas: 3
template:
metadata:
labels:
app: www_server
spec:
containers:
- name: web
image: 192.168.1.21:5000/web:v1
[root@master ~]# kubectl apply -f web-svc.yaml
[root@master ~]# kubectl get deployments. -o wide
//查看控制器信息
[root@master ~]# kubectl get pod -o wide
//查看pod節(jié)點(diǎn)信息
[root@master ~]# vim www-svc.yaml
kind: Service
apiVersion: v1
metadata:
name: www-svc
spec:
type: NodePort
selector:
app: www_server
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30123
[root@master ~]# kubectl apply -f www-svc.yaml
[root@master ~]# kubectl get svc
在k8s中pod是最小的管理單位,在一個(gè)pod中通常會(huì)包含一個(gè)或多個(gè)容器。大多數(shù)情況下,一個(gè)Pod內(nèi)只有一個(gè)Container容器。
在每一個(gè)Pod中都有一個(gè)特殊的Pause容器和一個(gè)或多個(gè)業(yè)務(wù)容器,Pause來源于pause-amd64鏡像,Pause容器在Pod中具有非常重要的作用:
- Pause容器作為Pod容器的根容器,其本地于業(yè)務(wù)容器無關(guān),它的狀態(tài)代表了整個(gè)pod的狀態(tài)。
- Pod里的多個(gè)業(yè)務(wù)容器共享Pause容器的IP,每個(gè)Pod被分配一個(gè)獨(dú)立的IP地址,Pod中的每個(gè)容器共享網(wǎng)絡(luò)命名空間,包括IP地址和網(wǎng)絡(luò)端口。Pod內(nèi)的容器可以使用localhost相互通信。k8s支持底層網(wǎng)絡(luò)集群內(nèi)任意兩個(gè)Pod之間進(jìn)行通信。
- Pod中的所有容器都可以訪問共享volumes,允許這些容器共享數(shù)據(jù)。volumes還用于Pod中的數(shù)據(jù)持久化,以防其中一個(gè)容器需要重新啟動(dòng)而丟失數(shù)據(jù)。
Service 是后端真實(shí)服務(wù)的抽象,一個(gè) Service 可以代表多個(gè)相同的后端服務(wù)
Service 為 POD 控制器控制的 POD 集群提供一個(gè)固定的訪問端點(diǎn),Service 的工作還依賴于 K8s 中的一個(gè)附件,就是 CoreDNS ,它將 Service 地址提供一個(gè)域名解析。
clusterIP:指定 Service 處于 service 網(wǎng)絡(luò)的哪個(gè) IP,默認(rèn)為動(dòng)態(tài)分配
NodePort 是在 ClusterIP 類型上增加了一個(gè)暴露在了 node 的網(wǎng)絡(luò)命名空間上的一個(gè) nodePort,所以用戶可以從集群外部訪問到集群了,因而用戶的請(qǐng)求流程是:Client -> NodeIP:NodePort -> ClusterIP:ServicePort -> PodIP:ContainerPort。
可以理解為 NodePort 增強(qiáng)了 ClusterIP 的功能,讓客戶端可以在每個(gè)集群外部訪問任意一個(gè) nodeip 從而訪問到 clusterIP,再由 clusterIP 進(jìn)行負(fù)載均衡至 POD。
我們?cè)趧?chuàng)建完成一個(gè)服務(wù)之后,用戶首先應(yīng)該訪問的是nginx反向代理的ip,然后通過nginx訪問到后端的k8s服務(wù)器(master節(jié)點(diǎn))的“NodePort暴露IP 及 映射的端口“,通過”master節(jié)點(diǎn)“的“ip+映射端口”訪問到后端k8s節(jié)點(diǎn)的信息。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:kubernetes創(chuàng)建資源的方法-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://muchs.cn/article10/cddodo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)公司、搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)公司、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容