.Net微服務實戰之技術選型篇
.Net微服務實戰之技術架構分層篇
.Net微服務實戰之DevOps篇
.Net微服務實戰之負載均衡(上)
.Net微服務實戰之CI/CD
說到微服務就得扯到自動化運維,然後别人就不得不問你用沒用上K8S。無論是概念上還是在實施搭建時,K8S的門檻比Docker Compose、Docker Swarm高了不少。我自己也經過了多次的實踐,整理出一套順利部署的流程。
我這次搭建花了一共整整4個工作實踐與一個工作日寫部落格,中間有一個網絡問題導緻reset了叢集重新搭了一次,完成後結合了Jenkins使用,還是成就感滿滿的。如果對大家有用,還請點個推薦與關注。
kubectl用于運作Kubernetes叢集指令的管理工具,Kubernetes kubectl 與 Docker 指令關系可以檢視這裡
kubeadm 是 kubernetes 的叢集安裝工具,能夠快速安裝 kubernetes 叢集,相關指令有以下:
kubelet是主要的節點代理,它會監視已配置設定給節點的pod,具體功能:
安裝Pod所需的volume。
下載下傳Pod的Secrets。
Pod中運作的 docker(或experimentally,rkt)容器。
定期執行容器健康檢查。
Pod是Kubernetes建立或部署的最小(最簡單)的基本機關,一個Pod代表叢集上正在運作的一個程序,它可能由單個容器或多個容器共享組成的資源。
一個Pod封裝一個應用容器(也可以有多個容器),存儲資源、一個獨立的網絡IP以及管理控制容器運作方式的政策選項。
Pods提供兩種共享資源:網絡和存儲。
網絡
每個Pod被配置設定一個獨立的IP位址,Pod中的每個容器共享網絡命名空間,包括IP位址和網絡端口。Pod内的容器可以使用localhost互相通信。當Pod中的容器與Pod 外部通信時,他們必須協調如何使用共享網絡資源(如端口)。
存儲
Pod可以指定一組共享存儲volumes。Pod中的所有容器都可以通路共享volumes,允許這些容器共享資料。volumes 還用于Pod中的資料持久化,以防其中一個容器需要重新啟動而丢失資料。
一個應用服務在Kubernetes中可能會有一個或多個Pod,每個Pod的IP位址由網絡元件動态随機配置設定(Pod重新開機後IP位址會改變)。為屏蔽這些後端執行個體的動态變化和對多執行個體的負載均衡,引入了Service這個資源對象。
Kubernetes ServiceTypes 允許指定一個需要的類型的 Service,預設是 ClusterIP 類型。
Type 的取值以及行為如下:
ClusterIP:通過叢集的内部 IP 暴露服務,選擇該值,服務隻能夠在叢集内部可以通路,這也是預設的 ServiceType。
NodePort:通過每個 Node 上的 IP 和靜态端口(NodePort)暴露服務。NodePort 服務會路由到 ClusterIP 服務,這個 ClusterIP 服務會自動建立。通過請求 <NodeIP>:<NodePort>,可以從叢集的外部通路一個 NodePort 服務。
LoadBalancer:使用雲提供商的負載局衡器,可以向外部暴露服務。外部的負載均衡器可以路由到 NodePort 服務和 ClusterIP 服務。
ExternalName:通過傳回 CNAME 和它的值,可以将服務映射到 externalName 字段的内容(例如, foo.bar.example.com)。 沒有任何類型代理被建立,這隻有 Kubernetes 1.7 或更高版本的 kube-dns 才支援。
其他詳細的概念請移步到 http://docs.kubernetes.org.cn/227.html
在所有需要用到kubernetes伺服器上安裝docker-ce
解除安裝舊版本 docker
更新系統軟體
安裝必要的一些系統工具
添加docker-ce軟體源
更新并安裝 docker-ce
添加docker國内鏡像源
啟動服務
所有需要用到kubernetes的伺服器都執行以下指令。
添加阿裡kubernetes源
安裝并啟動
啟動kubelet
在Master設定環境變量,在/etc/profile中配置
在最後添加如下配置
執行指令使其起效
在master節點(server-a)進行初始化叢集
開放端口
關閉swap
設定iptables規則
初始化
pod-network-cidr參數的為pod網段:,apiserver-advertise-address參數為本機IP。
如果中途執行有異常可以通過 kubeadm reset 後重新init。
初始化成功執行下面指令
檢視node和pod資訊
在master節點(server-a)安裝flannel元件
找個梯子下載下傳kube-flannel.yml檔案
下載下傳不了也沒關系,我複制給到大家:
View Code
先拉取依賴鏡像
把上面檔案儲存到伺服器然後執行下面指令
在master節點(server-a)安裝dashboard元件
繼續用梯子下載下傳recommended.yml檔案
沒梯子的可以複制下方原檔案
第39行修改,端口範圍30000-32767
第137行開始,修改賬戶權限,主要三個參數,kind: ClusterRoleBinding,roleRef-kind: ClusterRole,roleRef-name: cluster-admin
儲存到伺服器後執行以下指令
等待一段時間啟動成功後,https://ip+nodePort,檢視UI
Token通過下面指令擷取
在server-b與server-c執行下面操作
把上面init後的那句join拷貝過來,如果忘記了可以在master節點執行下面指令:
通過傳回的資料拼裝成下面指令
檢視節點資訊
在master節點(sever-a)執行下面操作
部署應用前建議有需要的朋友到【.Net微服務實戰之CI/CD】看看如何搭建docker私有倉庫,後面需要用到,搭建後私有庫後執行下面指令
docker-server就是docker私有倉庫的位址
下面是yaml模闆,注意imagePullSecrets-name與上面的命名的一緻,其餘的可以檢視yaml裡的注釋
把yaml檔案儲存到伺服器後執行下面指令
整個搭建部署的過程基本上到這裡結束了。
可以通過指令kubectl get service得到ClusterIP,分别在server-c和sever-b執行curl 10.10.184.184
也可以通過執行kubectl get pods -o wide得到pod ip,在server-c執行curl 10.122.2.5 和 server-b執行curl 10.122.1.7
也可以在外部通路 server-c和server-b的 ip + 31221
如果節點有異常可以通過下面指令排查
如果Pod無法正常running可以通過下面指令檢視
作 者:
陳珙
出 處:http://www.cnblogs.com/skychen1218/
關于作者:專注于微軟平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。
聲援部落客:如果您覺得文章對您有幫助,可以點選文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!