上一篇《K8S集群部署》中搭建好了一個最小化的K8S集群,這一篇我們來部署一個ASP.NET Core WebAPI項目來介紹一下整個部署過程的運行機制,然後部署一下Dashboard,完成可視化管理。本篇已加入了《.NET Core on K8S學習實踐系列文章索引》,更多內容請到索引中查看。
01
—
準備一個ASP.NET Core項目
這部分請參考我之前的一篇文章《ASP.NET Core on K8S學習初探(3)》,準備一個簡單的ASP.NET Core WebAPI示例項目。
其中,你可以直接使用我上傳的這個鏡像(edisonsaonian/k8s-demo)。
我們可以通過瀏覽器來驗證一下是否部署成功了。通過訪問兩個Node節點的30409端口,可以得到如下結果:
由於我們的示例WebAPI項目十分簡單,因此能夠訪問到ValuesController的接口就代表我們已經部署到K8S成功了。
02
—
K8S部署過程解析
剛剛我們成功部署了一個ASP.NET Core WebAPI項目到K8S集群中,由於在yaml中我們設置了兩個Pod副本,他們分別運行在了k8s-node1和k8s-node2中:
這裡我們來看看整個部署的過程,大體上過一遍流程,能夠有個大概印象就可以,下圖主要參考自CloudMan的《每天5分鐘玩轉Kubernetes》一書。
(1)Kubectl發送部署請求到API Server
(2)API Server通知Controller Manager創建一個deployment資源
(3)Scheduler執行調度任務,將兩個Pod副本分發到k8s-node1與k8s-node2
(4)k8s-node1和k8s-node2上的kubectl在各自的節點上創建並運行Pod(當然,其中包括了拉取鏡像,創建容器等一系列操作)
另外的補充:
(1)所有應用的配置和當前狀態信息都會保存在etcd中,執行kubectl get pod時API Server會從etcd中讀取這些數據
(2)flannel會為每個pod分配IP,這塊先了解到這裡就好,後面會介紹網絡。
03
—
部署Dashboard
按理說,部署Dashboard就下面一句話:
kubectl apply -f \\https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
But,默認鏡像國內無法訪問,這裡曲線救國:
首先,將這個yaml文件下載下來:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
其次,通過vim編輯yaml文件中默認的鏡像源地址:這裡替換為李振良老師的鏡像地址,感謝李振良老師。
containers: - name: kubernetes-dashboard #image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 image: lizhenliang/kubernetes-dashboard-amd64:v1.10.1
然後,由於默認Dashboard只能集群內部訪問,因此修改Service為NodePort類型,暴露到外部可以訪問:
kind: ServiceapiVersion: v1metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-systemspec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30001 selector: k8s-app: kubernetes-dashboard
最後,我們直接apply本地這個yaml文件來創建Dashboard:
kubectl apply -f kubernetes-dashboard.yaml
看到提示“service/kubernetes-dashboard created”代表Dashboard創建成功了,這時我們通過瀏覽器來訪問一下:
這裡如果你通過Chrome訪問提示證書錯誤無法訪問,可以通過如下步驟解決:
chrome://net-internals/#hsts
找到Delete domain security policies,輸入你的NodeIP地址點擊Delete即可:
接上一步,看到了登錄界面,需要我們配置kubeconfig或輸入token,這裡我們選擇後者,通過以下命令獲取輸出的token:
kubectl create serviceaccount dashboard-admin -n kube-systemkubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-adminkubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
拿到token在登錄界面的令牌區域輸入,然後點擊登錄:
即可進入下圖所示的主界面了:
在Dashboard中,我們通過kubectl所做的操作大部分都可以可視化操作,比如我們可以對deployment做伸縮:
更多內容,請期待後續分享。
04
—
小結
本文通過部署一個ASP.NET Core WebAPI到K8S為例,介紹了K8S部署的詳細過程步驟,最後部署Dashboard從而能夠進行可視化的管理。後續會探索各種應用的運行方式和更多的內容,當然筆者也是初學,有很多不足之處,請多包涵。
(1)CloudMan,《每天5分鐘玩轉Kubernetes》
(2)李振良,《一天入門Kubernets教程》
(3)李振良,《30分鐘部署一個Kubernetes集群》
(4)cao_xiaobo,《K8S部署Dashboard》
恰童鞋騷年,風華不再正茂,仍想揮斥方遒
閱讀更多 心萊科技 的文章