Kubernetes 入門(mén):運(yùn)行無(wú)狀態(tài)服務(wù)

本文以 ANOYI-BLOG 這個(gè)博客系統(tǒng)為例,演示在 Kubernetes 集群中運(yùn)行無(wú)狀態(tài)服務(wù),以及相關(guān)命令的用法介紹。

先決條件

確保 kubernetes 集群處于運(yùn)行狀態(tài) 【Kubernetes 環(huán)境搭建 - MacOS

kubectl cluster-info

輸出如下:

Kubernetes master is running at https://192.168.99.100:8443

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

確保 Minikube addon 中的 kube-dns 正常運(yùn)行 【Minikube 基礎(chǔ)插件 addons

kubectl get po,svc -n kube-system

輸出如下

NAME                                        READY     STATUS    RESTARTS   AGE
pod/kube-addon-manager-minikube             1/1       Running   0          2d
pod/kube-dns-6dcb57bcc8-dq8th               3/3       Running   0          13h
pod/kubernetes-dashboard-5498ccf677-487xw   1/1       Running   0          13h
pod/storage-provisioner                     1/1       Running   0          13h

NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
service/kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP   13h
service/kubernetes-dashboard   NodePort    10.102.82.122   <none>        80:30000/TCP    13h

創(chuàng)建 Deployment

Kubernetes Pod 是一個(gè)或多個(gè)容器的組合,為了方便管理容器和容器間的通信而捆綁在一起。本教程中的 Pod 只有一個(gè)容器。Kubernetes Deployment 檢查 Pod 的健康狀況,并在 Pod 容器終止時(shí)重新啟動(dòng)它。推薦使用 Deployment 是管理 Pod 的創(chuàng)建和伸縮。

創(chuàng)建 Deployment

kubectl run blog-node --image=registry.cn-hangzhou.aliyuncs.com/anoy/blog \
  --port=8080 \
  --env="JIANSHU_ID=7b7ec6f2db21" \
  --env="BLOG_TITLE=Hello Kubernetes" \
  --env="BLOG_DESC=本博客正運(yùn)行在 Kubernetes 環(huán)境中"

查看 Deployment

kubectl get deployments

輸出如下:

NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
blog-node   1         1         1            1           2m

查看 Pod

kubectl get pods

輸出如下:

NAME                         READY     STATUS    RESTARTS   AGE
blog-node-7dff65b564-gxkkn   1/1       Running   0          2m

查看 events

kubectl get events

更多詳細(xì)信息使用命令 kubectl get --help 查看

創(chuàng)建 Service

默認(rèn)情況下,只能通過(guò) Kubernetes 群集內(nèi)部的 IP 地址訪問(wèn) Pod。 要使 Kubernetes 虛擬網(wǎng)絡(luò)外部可以訪問(wèn) blog-node,必須將 Pod 作為 Kubernetes service 暴露。

對(duì)外暴露 Deployment

kubectl expose deployment blog-node --type=LoadBalancer

查看服務(wù)

kubectl get services

輸出如下:

NAME         TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
blog-node    LoadBalancer   10.96.38.7   <pending>     8080:31818/TCP   23s
kubernetes   ClusterIP      10.96.0.1    <none>        443/TCP          16h

--type=LoadBalancer 表示在群集外部公開(kāi)這個(gè)服務(wù)。在支持負(fù)載平衡器的云提供商上,將提供一個(gè)外部 IP 地址來(lái)訪問(wèn)該服務(wù)。在 Minikube 上,通過(guò) minikube service 命令訪問(wèn)該服務(wù)。

minikube service blog-node

執(zhí)行后,會(huì)自動(dòng)打開(kāi)瀏覽器,并訪問(wèn)到服務(wù)的首頁(yè)。

博客演示

更新應(yīng)用

構(gòu)建新版本鏡像

docker build -t registry.cn-hangzhou.aliyuncs.com/anoy/blog:[新版本號(hào)] .

更新 Deployment 中的鏡像

kubectl set image deployment/blog-node blog-node=registry.cn-hangzhou.aliyuncs.com/anoy/blog:[新版本號(hào)]

重新訪問(wèn)服務(wù)

minikube service blog-node

刪除 Service 及 Deployment

kubectl delete service blog-node

kubectl delete deployment blog-node
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容