//創(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運(yùn)行在哪個節(jié)點之上
[root@master ~]# kubectl get pod -o wide
//查看service映射出來的資源對象
[root@master ~]# kubectl get svc
//查看一個資源(service)的詳細(xì)信息。
[root@master ~]# kubectl describe svc test
//刪除資源對象:
[root@master ~]#kubectl delete services test
//查看deployment資源的詳細(xì)信息:
[root@master ~]# kubectl describe deployments. test-web
//查看一個pod的詳細(xì)信息:
[root@master ~]# kubectl describe pod test-web-8697566669-52tq
//查看replicas的詳細(xì)信息
[root@master ~]# kubectl get replicasets.
replicas:和controller manager都是一種控制器
//編輯一個資源對象(servie,pod,namespace都可以進(jìn)行編輯):
[root@master ~]# kubectl edit deployments. test-web
//把輸出json格式的信息導(dǎo)入(轉(zhuǎn)為)yaml格式的文本中:(反之也是相同的)
[root@master ~]# kubectl get deployments. test-web -o json > test2.yaml
方法一:命令行的方式:
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=test
2)進(jìn)行擴(kuò)容操作
//將資源對象的副本擴(kuò)容為4個:
[root@master ~]# kubectl scale deployment test --replicas=4
deployment.extensions/test scaled
//查看是否擴(kuò)容成功:
[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=test
3)進(jìn)行縮容操作(跟擴(kuò)容相同,減少即可)
//將資源對象的副本縮容為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ù)量擴(kuò)容為4個:
[root@master ~]# kubectl edit deployments. test
//再次查看副本數(shù)量,已經(jīng)擴(kuò)容成功:
[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沒有正常運(yùn)行,排錯思路:
1,通過describe命令進(jìn)行查看詳細(xì)信息。
[root@master ~]# kubectl describe pod bdqn-web-7ff466c8f5-p6wcw
2,通過查看kubelet的日志信息。
[root@master ~]# cat /var/log/messages | grep kubelet
更新服務(wù)的鏡像版本
//更新鏡像為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編輯器進(jìn)行修改:
//將鏡像版本更新為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
進(jìn)行回滾鏡像操作
//執(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默認(rèn)的回滾操作跟docker swarm集群的是一樣,只在前后兩個版本之間進(jìn)行回滾。
創(chuàng)建資源清單必須要知道并且記住以下幾個必寫的一級字段:
1,查看api所有的版本:(每個版本都有各自的功能,當(dāng)然你還可以自己添加版本)
[root@master ~]# kubectl api-versions
admissionregistration.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,需要用到那些字段以及對應(yīng)的版本和提示:
[root@master ~]# kubectl explain pod
//查看幫助deployment的metadata字段是怎樣寫的:
[root@master ~]# kubectl explain deploy.metadata #部分資源對象名可以簡寫,也可以補(bǔ)全
它會給予一些相對應(yīng)的子字段,比如name名稱,namespace名稱空間等。
3,接下來我們編寫一個簡單的部署nginx的yaml文件
提示:編寫yaml文件時一定要注意格式(縮進(jìn))[root@master yaml]# vim nginx.yaml #注意,要以.yaml結(jié)尾
kind: Deployment #類型為deployment
apiVersion: extensions/v1beta1 #對應(yīng)的版本為v1beta1
metadata:
name: nginx-deploy #定義該資源對象的名稱
spec:
replicas: 2 #副本數(shù)量為2
template: #定義模板
metadata:
labels: #在模板中定義標(biāo)簽,標(biāo)簽的作用用于后面連接service使用
app: web-server
spec:
containers:
- name: nginx #定義pod名稱(自定義)
image: nginx #指定鏡像
//運(yùn)行yaml文件:(有以下兩種方法)
[root@master yaml]# kubectl apply -f nginx.yaml #推薦使用該種方法
deployment.extensions/nginx-deploy created
或者:[root@master yaml]# kubectl create nginx.yaml
//查看pod是否運(yùn)行成功:
[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文件將資源對象進(jìn)行刪除:
[root@master yaml]# kubectl delete -f nginx.yaml
deployment.extensions "nginx-deploy" deleted
該種方法也是常用的,不用自己手動去一個一個的將pod刪除。
4,創(chuàng)建一個service的資源對象,用于關(guān)聯(lián)上述的deployment
service的作用主要用于提供一個訪問服務(wù)的統(tǒng)一接口。k8s集群維護(hù)service和endpoint的映射關(guān)系。
//編寫service的yaml文件:
[root@master yaml]# vim nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort #定義service的類型為nodeport
selector: #標(biāo)簽選擇器,用于關(guān)聯(lián)deployment
app: web-server #注意,該標(biāo)簽必須要deployment的標(biāo)簽一致,不然無法與deployment進(jìn)行關(guān)聯(lián)
ports: #定義端口
- protocol: TCP #協(xié)議為TCP
port: 8080 #定義cluster ip對應(yīng)的端口
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默認(rèn)為Cluster ip的類型。Cluster ip僅支持集群內(nèi)部的訪問,且集群內(nèi)部每一個節(jié)點都可以通過該ip地址相互訪問。
而nodeport的類型是暴露給外網(wǎng)的端口,外網(wǎng)可以通過宿主機(jī)的ip地址+映射的端口來進(jìn)行訪問。
//測試訪問nginx頁面:
我們k8s架構(gòu)中知道,集群中的master節(jié)點默認(rèn)是不參加工作的,如果需要master參加工作,該怎么做呢?
1)執(zhí)行以下命令設(shè)置處于工作狀態(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:(默認(rèn)是不會分配給master的)
[root@master yaml]# kubectl get pod -o wide
可以看到會均勻的分配給集群中每個節(jié)點,以實現(xiàn)負(fù)載均衡。
[root@master yaml]# kubectl taint node master node-role.kubernetes.io/master="":NoSchedule
node/master tainted
//重新運(yùn)行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會隨機(jī)分配給其他節(jié)點。
我們知道pod是通過kube-proxy組件隨機(jī)分配給節(jié)點的,但如果要指定pod運(yùn)行在哪個節(jié)點上,該怎么做?
跟docker swarm一樣,我們可以通過給節(jié)點打標(biāo)簽的方式來實現(xiàn)。
1)//定義標(biāo)簽:
[root@master yaml]# kubectl label nodes node01 test=123 #標(biāo)簽自定義
node/node01 labeled
//如果要刪除標(biāo)簽:
[root@master yaml]# kubectl label nodes node01 disktype-
2)//驗證節(jié)點標(biāo)簽,并顯示它們的標(biāo)簽狀態(tài):
[root@master yaml]# kubectl get nodes --show-labels
我們查看node01,可以查看到剛剛定義的標(biāo)簽。
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' #指定剛剛自定義的標(biāo)簽,如果有數(shù)字則需要用單引或者雙引號括起來
//重新執(zhí)行yaml文件:
[root@master yaml]# kubectl apply -f nginx.yaml
deployment.extensions/nginx-deploy configured
4)//查看pod是否會運(yùn)行在指定的node01上:
[root@master yaml]# kubectl get pod -o wide
注意:會將原來運(yùn)行在該節(jié)點上的pod進(jìn)行替換。
———————— 本文至此結(jié)束,感謝閱讀 ————————
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
標(biāo)題名稱:k8s資源的創(chuàng)建方式之命令行&資源清單(yaml)-創(chuàng)新互聯(lián)
文章分享:http://aaarwkj.com/article16/dohggg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站排名、域名注冊、小程序開發(fā)、響應(yīng)式網(wǎng)站、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容