十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
//創(chuàng)建一個deployment資源對象。(pod控制器)
[root@master ~]# kubectl run test --image=httpd --port=80 --replicas=2
//刪除控制器:
[root@master ~]# kubectl delete deployments. test
//刪除所有pod:
[root@master ~]# kubectl delete deployments. --all
//查看deployment資源對象
[root@master ~]# kubectl get deployments.
//查看pod運行在哪個節(jié)點之上
[root@master ~]# kubectl get pod -o wide
//查看service映射出來的資源對象
[root@master ~]# kubectl get svc
//查看一個資源(service)的詳細信息。
[root@master ~]# kubectl describe svc test
//刪除資源對象:
[root@master ~]#kubectl delete services test
//查看deployment資源的詳細信息:
[root@master ~]# kubectl describe deployments. test-web
//查看一個pod的詳細信息:
[root@master ~]# kubectl describe pod test-web-8697566669-52tq
//查看replicas的詳細信息
[root@master ~]# kubectl get replicasets.
replicas:和controller manager都是一種控制器
//編輯一個資源對象(servie,pod,namespace都可以進行編輯):
[root@master ~]# kubectl edit deployments. test-web
//把輸出json格式的信息導入(轉(zhuǎn)為)yaml格式的文本中:(反之也是相同的)
[root@master ~]# kubectl get deployments. test-web -o json > test2.yaml
方法一:命令行的方式:
創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設與策劃設計,洛寧網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十余年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:洛寧等地區(qū)。洛寧做網(wǎng)站價格咨詢:13518219792
1)創(chuàng)建一個deployment的資源對象:
[root@master ~]# kubectl run test --image=httpd --port=80 --replicas=2
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/test created
//回車后會有正常提示(如上所示),提示這種deployment控制器會在將來的版本中移除,以后會有pod來代替。
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
test 2/2 2 2 68s test httpd run=test2)進行擴容操作
//將資源對象的副本擴容為4個:
[root@master ~]# kubectl scale deployment test --replicas=4
deployment.extensions/test scaled//查看是否擴容成功:
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
test 4/4 4 4 3m40s test httpd run=test3)進行縮容操作(跟擴容相同,減少即可)
//將資源對象的副本縮容為3個:
[root@master ~]# kubectl scale deployment test --replicas=3
deployment.extensions/test scaled
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
test 3/3 3 3 7m14s test httpd run=test方法二:也可以利用edit編輯器:
//將該deployment的副本數(shù)量擴容為4個:
[root@master ~]# kubectl edit deployments. test 
//再次查看副本數(shù)量,已經(jīng)擴容成功:
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
test 4/4 4 4 11m test httpd run=test
1)搭建registry私有倉庫,上傳自定義鏡像:
搭建私有倉庫過程略,可以參考之前的博文點擊鏈接。
//鏡像重命名:
[root@master ~]# docker tag nginx:latest 172.16.1.30:5000/nginx:v1.0
[root@master ~]# docker tag nginx:latest 172.16.1.30:5000/nginx:v2.0
[root@master ~]# docker tag nginx:latest 172.16.1.30:5000/nginx:v3.0
//上傳鏡像:
[root@master ~]# docker push 172.16.1.30:5000/nginx:v1.0
[root@master ~]# docker push 172.16.1.30:5000/nginx:v2.0
[root@master ~]# docker push 172.16.1.30:5000/nginx:v3.0 2)創(chuàng)建一個deployment:[root@master ~]# kubectl run mynginx --image=172.16.1.30:5000/nginx:v1.0 --replicas=4
//查看鏡像版本信息:
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
mynginx 4/4 4 4 4m51s mynginx 172.16.1.30:5000/nginx:v1.0 run=mynginx##如果pod沒有正常運行,排錯思路:
1,通過describe命令進行查看詳細信息。
[root@master ~]# kubectl describe pod bdqn-web-7ff466c8f5-p6wcw
2,通過查看kubelet的日志信息。
[root@master ~]# cat /var/log/messages | grep kubelet更新服務的鏡像版本
//更新鏡像為nginx:v2.0
[root@master ~]# kubectl set image deployment mynginx mynginx=172.16.1.30:5000/nginx:v2.0
deployment.extensions/mynginx image updated
//查看是否更新成功:
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
mynginx 4/4 4 4 11m mynginx 172.16.1.30:5000/nginx:v2.0 run=mynginx可以看到鏡像已經(jīng)更新成功。
##############方法二:同樣可以通過edit編輯器進行修改:
//將鏡像版本更新為nginx:v3.0
[root@master ~]# kubectl edit deployments. mynginx 
//保存退出后(與vim編輯器操作相同),查看鏡像版本:
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
mynginx 4/4 4 4 16m mynginx 172.16.1.30:5000/nginx:v3.0 run=mynginx進行回滾鏡像操作
//執(zhí)行回滾操作:
[root@master ~]# kubectl rollout undo deployment mynginx
deployment.extensions/mynginx rolled back
[root@master ~]# kubectl get deployments. -o wide #可以看到已經(jīng)回滾成功
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
mynginx 4/4 4 4 18m mynginx 172.16.1.30:5000/nginx:v2.0 run=mynginx
//二次執(zhí)行回滾操作:
[root@master ~]# kubectl rollout undo deployment mynginx
deployment.extensions/mynginx rolled back
//查看回滾后的鏡像版本:
[root@master ~]# kubectl get deployments. -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
mynginx 4/4 4 4 20m mynginx 172.16.1.30:5000/nginx:v3.0 run=mynginx可以很清楚的看到,k8s默認的回滾操作跟docker swarm集群的是一樣,只在前后兩個版本之間進行回滾。
創(chuàng)建資源清單必須要知道并且記住以下幾個必寫的一級字段:
1,查看api所有的版本:(每個版本都有各自的功能,當然你還可以自己添加版本)
[root@master ~]# kubectl api-versionsadmissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
2,幫助你編寫yaml文件的工具(explain):
一定要用熟悉,非常有用。
//比如創(chuàng)建pod,需要用到那些字段以及對應的版本和提示:
[root@master ~]# kubectl explain pod 
//查看幫助deployment的metadata字段是怎樣寫的:
[root@master ~]# kubectl explain deploy.metadata #部分資源對象名可以簡寫,也可以補全
它會給予一些相對應的子字段,比如name名稱,namespace名稱空間等。
3,接下來我們編寫一個簡單的部署nginx的yaml文件
提示:編寫yaml文件時一定要注意格式(縮進)[root@master yaml]# vim nginx.yaml #注意,要以.yaml結尾
kind: Deployment #類型為deployment
apiVersion: extensions/v1beta1 #對應的版本為v1beta1
metadata:
name: nginx-deploy #定義該資源對象的名稱
spec:
replicas: 2 #副本數(shù)量為2
template: #定義模板
metadata:
labels: #在模板中定義標簽,標簽的作用用于后面連接service使用
app: web-server
spec:
containers:
- name: nginx #定義pod名稱(自定義)
image: nginx #指定鏡像
//運行yaml文件:(有以下兩種方法)
[root@master yaml]# kubectl apply -f nginx.yaml #推薦使用該種方法
deployment.extensions/nginx-deploy created或者:[root@master yaml]# kubectl create nginx.yaml
//查看pod是否運行成功:
[root@master yaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deploy-56558c8dc7-pjdkk 1/1 Running 0 117s
nginx-deploy-56558c8dc7-rxbpb 1/1 Running 0 117s
//如果需要通過yaml文件將資源對象進行刪除:
[root@master yaml]# kubectl delete -f nginx.yaml
deployment.extensions "nginx-deploy" deleted該種方法也是常用的,不用自己手動去一個一個的將pod刪除。
4,創(chuàng)建一個service的資源對象,用于關聯(lián)上述的deployment
service的作用主要用于提供一個訪問服務的統(tǒng)一接口。k8s集群維護service和endpoint的映射關系。
//編寫service的yaml文件:
[root@master yaml]# vim nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort #定義service的類型為nodeport
selector: #標簽選擇器,用于關聯(lián)deployment
app: web-server #注意,該標簽必須要deployment的標簽一致,不然無法與deployment進行關聯(lián)
ports: #定義端口
- protocol: TCP #協(xié)議為TCP
port: 8080 #定義cluster ip對應的端口
targetPort: 80 #定義容器內(nèi)的端口
nodePort: 30000 #暴露給外網(wǎng)的端口//執(zhí)行yaml文件:
[root@master yaml]# kubectl apply -f nginx-svc.yaml
service/nginx-svc created
//查看service的信息:
解釋:
service默認為Cluster ip的類型。Cluster ip僅支持集群內(nèi)部的訪問,且集群內(nèi)部每一個節(jié)點都可以通過該ip地址相互訪問。
而nodeport的類型是暴露給外網(wǎng)的端口,外網(wǎng)可以通過宿主機的ip地址+映射的端口來進行訪問。
//測試訪問nginx頁面:
我們k8s架構中知道,集群中的master節(jié)點默認是不參加工作的,如果需要master參加工作,該怎么做呢?
1)執(zhí)行以下命令設置處于工作狀態(tài):
[root@master yaml]# kubectl taint node master node-role.kubernetes.io/master-
node/master untainted
2)修改上面的yaml文件,將副本數(shù)量改為3個。
[root@master yaml]# vim nginx.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: nginx-deploy
spec:
replicas: 3
template:
metadata:
labels:
app: web-server
spec:
containers:
- name: nginx
image: nginx
3)重新執(zhí)行yaml文件:
[root@master yaml]# kubectl apply -f nginx.yaml
deployment.extensions/nginx-deploy configured
4)驗證pod會分配給master:(默認是不會分配給master的)
[root@master yaml]# kubectl get pod -o wide
可以看到會均勻的分配給集群中每個節(jié)點,以實現(xiàn)負載均衡。
[root@master yaml]# kubectl taint node master node-role.kubernetes.io/master="":NoSchedule
node/master tainted
//重新運行yaml文件,查看pod是否還會分配給master
[root@master yaml]# kubectl delete -f nginx.yaml
deployment.extensions "nginx-deploy" deleted
[root@master yaml]# kubectl apply -f nginx.yaml
deployment.extensions/nginx-deploy created
注意:我這上面的pod,已經(jīng)是新的pod了,跟docker swarm一樣,原來分配在master上的pod還會存在,只是后生成的pod會隨機分配給其他節(jié)點。
我們知道pod是通過kube-proxy組件隨機分配給節(jié)點的,但如果要指定pod運行在哪個節(jié)點上,該怎么做?
跟docker swarm一樣,我們可以通過給節(jié)點打標簽的方式來實現(xiàn)。
1)//定義標簽:
[root@master yaml]# kubectl label nodes node01 test=123 #標簽自定義
node/node01 labeled
//如果要刪除標簽:
[root@master yaml]# kubectl label nodes node01 disktype-
2)//驗證節(jié)點標簽,并顯示它們的標簽狀態(tài):
[root@master yaml]# kubectl get nodes --show-labels 
我們查看node01,可以查看到剛剛定義的標簽。
3)//修改yaml文件:
[root@master yaml]# vim nginx.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: nginx-deploy
spec:
replicas: 6
template:
metadata:
labels:
app: web-server
spec:
containers:
- name: nginx
image: nginx
nodeSelector: #添加節(jié)點選擇器
test: '123' #指定剛剛自定義的標簽,如果有數(shù)字則需要用單引或者雙引號括起來
//重新執(zhí)行yaml文件:
[root@master yaml]# kubectl apply -f nginx.yaml
deployment.extensions/nginx-deploy configured
4)//查看pod是否會運行在指定的node01上:
[root@master yaml]# kubectl get pod -o wide 
注意:會將原來運行在該節(jié)點上的pod進行替換。
———————— 本文至此結束,感謝閱讀 ————————