本文以 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