Kubernetes的簡單Demo


本文描述一個用Kubernetes搭建的簡單集群的單service案例,基本來源於慕課網。本案例包含兩台主機共個節點,結構如下圖所示。

 

一、安裝

安裝過程參考:https://github.com/gjmzj/kubeasz/blob/master/docs/quickStart.md

其中,針對第三步的安裝,需要將“ssh-copy-id $IP”替換為:

cat id_rsa.pub >> /root/.ssh/authorized_keys

同時,在hosts中將[kube-node]設置為本機ip,將[kube-node]設置為slave節點的ip。這樣就將本機指定為了集群的master節點。

安裝完成后,通過"ssh 本機ip"登錄本機,就可以進行各種操作了。

通過get nodes操作獲取集群節點信息。

kubectl get nodes 

用get pods操作查看集群的pod是否都正常運行:

kubectl get pods --all-namespaces

get操作還能獲得很多其他的集群信息,包括services、pods、deployments等。可以用kubectl get --help查看。

二、部署service

Kubernetes通過yaml文件定義各種對象。部署service也是通過yaml文件進行的。

1.編寫hello-service.yaml:

apiVersion: v1
kind: Service
metadata: 
  name: hello-service
spec:
  type: NodePort
  selector: 
    app: hello-k8s-demo
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30008        

上面是配置部署service的一個標准的yaml文件。

apiVersion即文件使用的api版本。

kind即對象的類型(部署service時為Service)。

metadata是元數據,這里規定了service的名稱。

spec代表對象的具體屬性。

type規定為NodePort時,下面的nodePort需要為節點指定監聽的端口。

selector規定了將請求打到具有標簽app=hello-k8s-demo的pod上。

最后的ports下面規定了一組port的屬性。

port代表service暴露的虛擬端口為80。

targetPort代表后端pod監聽在8080端口。

2.創建service

kubectl create命令創建service:

kubectl create -f hello-service.yaml --record=true

這樣service就創建成功了。可以用kubectl get service查看剛創建的服務,或者用kubectl describe命令查看詳細信息:

kubectl describe service/hello-service

 三、部署Deployment

Kubernetes一般通過部署deployment實現對pod的配置,同樣通過yaml文件。

1.編寫hello-deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deployment
  labels:
    app: hello-k8s-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello-k8s-demo
  template:
    metadata:
      labels:
        app: hello-k8s-demo
    spec:
      containers:
      - name: hello-k8s
        image: bigwhite/hello-kubernetes-demo:v0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

在metadata中為deployment打上了此應用的標簽。

在spec中,規定了replica(即pod的個數)為2。

后面template的意思是,當pod的個數低於前面規定的replica的個數時,要求deployment按照此template創建pod以補全個數。

模板中必須規定label且必須與前面的selector一致。

后面為template定義了容器的信息,即新創建的pod需要封裝哪些容器。這里規定了容器的名字、鏡像、拉取策略、以及pod暴露的端口。

2.創建deployment

仍然通過kubectl create -f創建deployment。之后可以用kubectl get deployment查看基本信息。

再次運行kubectl describe service,可以發現在endpoints欄增加了新創建的兩個pod的ip地址。

這時,從本機或者從機訪問本機或者從機的ip地址的30008端口的hello路由,都可以看到輸出了hello, kubernetes!的字樣:

curl [本機ip或從機ip]:30008/hello

3.監控pod運行情況

通過kubectl get pods命令,可以查看到剛創建的pod信息。發現兩個pod被分配到了兩個節點上。

將pod的名字復制,使用kubectl logs -f [pod名],可以對pod的狀態進行監控。

新建兩個窗口,分別對兩個pod執行logs操作。多次發送curl請求,可以發現,請求被負載均衡到了兩個pod下。

三、擴展pod的數量

修改hello-deployment.yaml文件內容,將replica改為3。

通過kubectl apply -f hello-deployment.yaml命令,使修改生效。

通過get pods查看pod信息,可以發現pod數量已經增加為3個。

四、服務版本升級和回退

修改hello-deployment.yaml文件內容,將鏡像版本改為v0.2,通過apply命令使其生效。

在升級過程中,Kubernetes會用新pod逐一替換舊pod。

可以用rollout undo命令對升級進行快速回滾:

kubectl rollout undo deployment/hello-deployment

 

(主要來源於https://www.imooc.com/learn/978)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM