Kubernetes(三)—— Learn kubernetes basics

kubernetes

kubernetes是一個(gè)開源的容器管理平臺(tái),幫助我們更方便進(jìn)行容器應(yīng)用的部署和維護(hù)。

1、創(chuàng)建一個(gè)集群cluster

image.png

集群包含兩種資源:

  • Master:負(fù)責(zé)管理集群,只有一個(gè)

  • Nodes:節(jié)點(diǎn)是運(yùn)行容器服務(wù)的機(jī)器,可以有多個(gè),可以是虛擬機(jī)或者物理機(jī)

節(jié)點(diǎn)與master之間通過k8s API進(jìn)行通信。

2、部署應(yīng)用deploy

image.png
  • Deployment

負(fù)責(zé)創(chuàng)建和更新容器應(yīng)用實(shí)例,創(chuàng)建時(shí)需要聲明用哪個(gè)鏡像、副本數(shù)量

  • Deployment Controller

負(fù)責(zé)監(jiān)控實(shí)例狀態(tài),提供了一種自我恢復(fù)機(jī)制,如果有節(jié)點(diǎn)down或者被刪除了,會(huì)自動(dòng)啟另一個(gè)節(jié)點(diǎn)來替代。

  • kubectl

kubectl是k8s集群的命令行工具,通過API與集群通信。

常用命令:


#查看版本

kubectl version

#查看nodes

kubectl get nodes

# 創(chuàng)建deployment

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

#查看deployments

kubectl get deployments

3、探索應(yīng)用

Pod

image.png

pod是容器實(shí)例運(yùn)行的地方,一個(gè)pod可以承載單個(gè)或多個(gè)容器實(shí)例,它們將共享存儲(chǔ)(數(shù)據(jù)卷)、網(wǎng)絡(luò)(集群內(nèi)部IP)等資源。

一個(gè)pod中的多個(gè)容器通常是需要協(xié)同工作的,它們將共用一個(gè)IP。

pod是k8s集群的最小單元

pod運(yùn)行在node上,一個(gè)node可運(yùn)行一個(gè)或多個(gè)pod

Nodes

image.png

一個(gè)node可以是虛擬機(jī)或物理機(jī),每個(gè)node正常運(yùn)行都需要2個(gè)部分:

  • kubelet:一個(gè)進(jìn)程,負(fù)責(zé)node和master通信,并負(fù)責(zé)管理該node上的pods與containers

  • a container runtime:負(fù)責(zé)拉取鏡像、解包容器、運(yùn)行容器實(shí)例,e.g.docker

  • kubectl get - list resources

  • kubectl describe - show detailed information about a resource

  • kubectl logs - print the logs from a container in a pod

  • kubectl exec - execute a command on a container in a pod


`kubectl get pods`

`kubectl describe pods`

`kubectl logs $pod_name`

4、對(duì)外服務(wù)service

Service

pod是有生命周期的,node不在的話,上面的pods跟著消亡。雖然ReplicaSet會(huì)驅(qū)使集群動(dòng)態(tài)的創(chuàng)建新的pods以滿足預(yù)期的狀態(tài),但新pods的IP是會(huì)改變的(即使在同一個(gè)node上),這無法保證服務(wù)的持續(xù)可用性。為了解決這一問題,出現(xiàn)了service的概念。

image.png

service使用yaml/json格式定義一組邏輯上的pods集合,并向外部暴露服務(wù),這些pods通常被?LabelSelector?指定。

type

service有幾種類型,需要在ServiceSpec指定?type?:

  • ClusterIP(default):暴露集群內(nèi)部IP,這樣的service只在集群內(nèi)部可訪問

  • NodePort:暴露node節(jié)點(diǎn)本身的IP和端口,集群外部可通過?<NodeIP>:<NodePort>?訪問service

  • NodeBalancer:對(duì)外部負(fù)載均衡,該service擁有固定的外部IP端口

  • ExternalName:通過任意外部名稱(spec中?externalName?定義)暴露服務(wù),要求v1.7及以上版本的?kube-dns?

labels

標(biāo)簽是為了方便標(biāo)識(shí)、識(shí)別對(duì)象,它們是關(guān)聯(lián)到對(duì)象的鍵值對(duì)組合,可以在對(duì)象創(chuàng)建時(shí)就指定,也可以后面隨時(shí)添加、更改。

image.png
kubectl get pods

kubectl get services

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

kubectl describe services/kubernetes-bootcamp

# using labels

kubectl describe deployment

kubectl get pods -l run=kubernetes-bootcamp

kubectl get services -l run=kubernetes-bootcamp

kubectl label pod $POD_NAME app=v1

kubectl get pods -l app=v1

kubectl delete service -l run=kubernetes-bootcamp

5、擴(kuò)容scale

擴(kuò)容通過改變Deployment中的replicas副本數(shù)實(shí)現(xiàn)。


image.png
$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           36s
$ kubectl scale deployments/kubernetes-bootcamp --replicas=4
deployment.extensions/kubernetes-bootcamp scaled
$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4/4     4            4           70s

6、更新應(yīng)用update

Rolling update:通過增量的以新pods實(shí)例替換老pods的方式,實(shí)現(xiàn)“零停機(jī)”發(fā)布。
k8s中的發(fā)布都是有版本控制的,Deployment可以回退到之前的穩(wěn)定版本。


image.png
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
kubectl rollout status deployments/kubernetes-bootcamp
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容