您好,登錄后才能下訂單哦!
Kubernetes概述
Kubernetes是Google開源的一個(gè)容器編排引擎,它支持自動(dòng)化部署、大規(guī)模可伸縮、應(yīng)用容器化管理。在生產(chǎn)環(huán)境中部署一個(gè)應(yīng)用程序時(shí),通常要部署該應(yīng)用的多個(gè)實(shí)例以便對(duì)應(yīng)用請(qǐng)求進(jìn)行負(fù)載均衡。
在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ù)雜的手工配置和處理。
Kubernetes 特點(diǎn)
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可擴(kuò)展: 模塊化,插件化,可掛載,可組合
自動(dòng)化: 自動(dòng)部署,自動(dòng)重啟,自動(dòng)復(fù)制,自動(dòng)伸縮/擴(kuò)展
Kubernetes 組件
1Master 組件
1.1kube-apiserver
1.2ETCD
1.3kube-controller-manager
1.4cloud-controller-manager
1.5kube-scheduler
1.6插件 addons
1.6.1DNS
1.6.2用戶界面
1.6.3容器資源監(jiān)測(cè)
1.6.4Cluster-level Logging
2節(jié)點(diǎn)(Node)組件
2.1kubelet
2.2kube-proxy
2.3docker
2.4RKT
2.5supervisord
2.6fluentd
創(chuàng)建資源的兩種方式
1用命令行的方式創(chuàng)建:
了解*
?json格式
[root@master manifests]# pwd
/etc/kubernetes/manifests
[root@master manifests]# vim etcd.yaml
17行:
1.3臺(tái)導(dǎo)入鏡像:nginx.tar httpd.tar
docker load < httpd.tar && docker load < nginx.tar
全部更新鏡像:
docker pull nginx
//創(chuàng)建pod控制器,deployment
[root@master ~]# kubectl run web --image=nginx --replicas=5
//查看控制器情況
[root@master ~]# kubectl get deployments.
[root@master ~]# kubectl get pod
//查看資源詳細(xì)信息
[root@master ~]# kubectl describe deployments. web
//查看命名空間
[root@master ~]# kubectl get namespaces 簡(jiǎn)寫: kubectl get ns
[root@master ~]# kubectl get pod --all-namespaces
Ps:查看某種資源對(duì)象,沒有指定名稱空間,默認(rèn)是在defaule名稱空間??梢约由?n選項(xiàng),查看指定名稱空間的資源。
例如:查看本地資源的名稱空間:
[root@master ~]# kubectl get pod -n kube-system
//刪除pod,但是還會(huì)有
[root@master ~]# kubectl delete pod web-59765d756f-45zp6
//刪除控制器,pod也沒了
[root@master ~]# kubectl delete deployments. test-web
//查看詳細(xì)信息:
[root@master ~]# kubectl get pod -o wide
[root@master ~]# kubectl describe pod web-59765d756f-bctvr
[root@master ~]# kubectl get rs
[root@master ~]# kubectl describe rs web-59765d756f
注意:直接運(yùn)行創(chuàng)建的Deployment資源對(duì)象,時(shí)經(jīng)常使用的一個(gè)控制器資源類型,除了deployment,還有rc,rs等pod控制器,Deployment是一個(gè)高級(jí)的pod控制器。
[root@master ~]# kubectl get pod -o wide
[root@master ~]# curl 10.244.2.4
創(chuàng)建service資源類型
[root@master ~]# kubectl get deployments.
[root@master ~]# kubectl expose deployment web --name=web-svc --port=80 --type=NodePort
//查看service資源類型
[root@master ~]# kubectl get svc
[root@master ~]# curl 127.0.0.1:31351
[root@master ~]# curl 10.102.189.154
PS:如果想要外網(wǎng)能夠訪問服務(wù),可以暴露deployment資源,得到service資源,但svc資源的類型必須為NodePort。
映射端口:3000-32767
服務(wù)的擴(kuò)容與縮容
[root@master ~]# kubectl scale deployment web --replicas=8
輸出為json和yaml格式
[root@master ~]# kubectl get deployments. -o json
[root@master ~]# kubectl get deployments. -o yaml
導(dǎo)出:
[root@master ~]# kubectl get deployments. -o yaml > web.yaml
[root@master ~]# kubectl edit deployments. web
服務(wù)的升級(jí)與回滾:
//升級(jí):
[root@master ~]# docker pull nginx:1.15
[root@master ~]# docker pull nginx:1.14
[root@master ~]# docker tag nginx:latest nginx:v1
[root@master ~]# kubectl set image deployment web web=nginx:1.15
[root@master ~]# kubectl get deployments. -o wide
[root@master ~]# kubectl get pod
[root@master ~]# kubectl get pod -o wide
[root@master ~]# kubectl get deployments. -o wide
[root@master ~]# kubectl describe pod web-ccc7c5cd6-7jlnx
[root@master ~]# kubectl edit deployments. web
//回滾:
[root@master ~]# kubectl rollout undo deployment web
實(shí)驗(yàn):
sha作業(yè):
1)基于httpd制作自己的鏡像,需要3個(gè)版本,v1,v2,v3.并且對(duì)應(yīng)的版本鏡像,訪問的主目錄內(nèi)容不一樣,分別為v1:
<h2>xxx | test-web | httpd | v1<h2>
[root@master ~]# mkdir {v1,v2,v3}
[root@master ~]# cd v1
[root@master v1]# echo "<h2>songkaixiong | test-web | httpd | v1<h2>" >> index.html
[root@master v1]# cat index.html
<h2>songkaixiong | test-web | httpd | v1<h2>
[root@master v1]# cat Dockerfile
FROM httpd:latest
COPY index.html /usr/local/apache2/htdocs/index.html
[root@master v1]# docker build -t 192.168.1.10:5000/httpd:v1 .
[root@master ~]# cd ../v2/
[root@master v2]# echo "<h2>songkaixiong | test-web | httpd | v2<h2>" >> index.html
[root@master v2]# cat index.html
<h2>songkaixiong | test-web | httpd | v2<h2>
[root@master v2]# cat Dockerfile
FROM httpd:latest
COPY index.html /usr/local/apache2/htdocs/index.html
[root@master v2]# docker build -t 192.168.1.10:5000/httpd:v2 .
[root@master v2]# cd ../v3
[root@master v3]# echo "<h2>songkaixiong | test-web | httpd | v3<h2>" >> index.html
[root@master v3]# cat index.html
<h2>songkaixiong | test-web | httpd | v3<h2>
[root@master v3]# cat Dockerfile
FROM httpd:latest
COPY index.html /usr/local/apache2/htdocs/index.html
[root@master v3]# docker build -t 192.168.1.10:5000/httpd:v3 .
2)在k8s集群內(nèi)啟用私有倉庫registry或Harbor。
[root@master v3]# docker pull registry:2
[root@master v3]# docker run -itd --name registry --restart=always -p 5000:5000 registry:2
[root@master v3]# vim /usr/lib/systemd/system/docker.service
13行:
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.10:5000
[root@master v3]# systemctl daemon-reload
[root@master v3]# systemctl restart docker
[root@master v3]# scp /usr/lib/systemd/system/docker.service node02:/usr/lib/systemd/system
[root@master v3]# scp /usr/lib/systemd/system/docker.service node03:/usr/lib/systemd/system
[root@node02 ~]# systemctl daemon-reload
[root@node02 ~]# systemctl restart docker
[root@node03 ~]# systemctl daemon-reload
[root@node03 ~]# systemctl restart docker
[root@master v3]# docker push 192.168.1.10:5000/httpd:v1
[root@master v3]# docker push 192.168.1.10:5000/httpd:v2
[root@master v3]# docker push 192.168.1.10:5000/httpd:v3
3)部署一個(gè)Deployment資源對(duì)象,要求鏡像使用上述私有鏡像v1版本。6個(gè)副本Pod。
[root@master ~]# kubectl run httpdtest --image=192.168.1.10:5000/httpd:v1 --replicas=6
4)將上述Deployment暴露一個(gè)service資源對(duì)象,使外網(wǎng)能否訪問服務(wù)。
[root@master ~]# kubectl expose deployment httpdtest --name=httpd-svc --port=80 --type=NodePort
5)將上述Deployment進(jìn)行擴(kuò)容和縮容操作,擴(kuò)容為8個(gè)副本Pod,然后縮容為4個(gè)副本Pod。
[root@master ~]# kubectl scale deployment httpdtest --replicas=8
[root@master ~]# kubectl scale deployment httpdtest --replicas=4
6)將上述Deployment進(jìn)行升級(jí)與回滾操作,將v1版本,升級(jí)到v2版本。
[root@master ~]# kubectl set image deployment httpdtest httpdtest=192.168.1.10:5000/httpd:v2
[root@master ~]# kubectl rollout undo deployment httpdtest
2配置清單:
apiVersion:api版本信息
kind:資源對(duì)象的類別
metadata:元數(shù)據(jù)。名稱字段必寫。
spec:用戶期望的狀態(tài)。
status:資源現(xiàn)在處于什么樣的狀態(tài)。
使用yaml文件的方式創(chuàng)建一個(gè)Deployment資源對(duì)象,要求鏡像使用個(gè)人私有鏡像v1版本。replicas為3個(gè)。
[root@master ~]# vim skx.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: web
spec:
replicas: 3
template:
metadata:
labels:
app: web_server
spec:
containers:
使用yaml文件的方式創(chuàng)建一個(gè)Service資源對(duì)象,要與上述Deployment資源對(duì)象關(guān)聯(lián),type類型為: NodePort,端口為:30123.
[root@master ~]# vim skx-svc.yaml
kind: Service
apiVersion: v1
metadata:
name: skx-svc
spec:
type: NodePort
selector:
app: web_server
ports:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。