天天看點

.Net微服務實戰之Kubernetes的搭建與使用

.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
.Net微服務實戰之Kubernetes的搭建與使用

在所有需要用到kubernetes伺服器上安裝docker-ce

解除安裝舊版本 docker

更新系統軟體

安裝必要的一些系統工具

添加docker-ce軟體源

更新并安裝 docker-ce

添加docker國内鏡像源

啟動服務

.Net微服務實戰之Kubernetes的搭建與使用

所有需要用到kubernetes的伺服器都執行以下指令。

添加阿裡kubernetes源

安裝并啟動

啟動kubelet

.Net微服務實戰之Kubernetes的搭建與使用

在Master設定環境變量,在/etc/profile中配置

在最後添加如下配置

執行指令使其起效

在master節點(server-a)進行初始化叢集

開放端口

關閉swap

設定iptables規則

初始化

  pod-network-cidr參數的為pod網段:,apiserver-advertise-address參數為本機IP。

  如果中途執行有異常可以通過 kubeadm reset 後重新init。

.Net微服務實戰之Kubernetes的搭建與使用

初始化成功執行下面指令

檢視node和pod資訊

.Net微服務實戰之Kubernetes的搭建與使用

在master節點(server-a)安裝flannel元件

找個梯子下載下傳kube-flannel.yml檔案

下載下傳不了也沒關系,我複制給到大家:

.Net微服務實戰之Kubernetes的搭建與使用
.Net微服務實戰之Kubernetes的搭建與使用

View Code

先拉取依賴鏡像

把上面檔案儲存到伺服器然後執行下面指令

.Net微服務實戰之Kubernetes的搭建與使用

在master節點(server-a)安裝dashboard元件

繼續用梯子下載下傳recommended.yml檔案

沒梯子的可以複制下方原檔案

.Net微服務實戰之Kubernetes的搭建與使用
.Net微服務實戰之Kubernetes的搭建與使用

第39行修改,端口範圍30000-32767

第137行開始,修改賬戶權限,主要三個參數,kind: ClusterRoleBinding,roleRef-kind: ClusterRole,roleRef-name: cluster-admin

儲存到伺服器後執行以下指令

 等待一段時間啟動成功後,https://ip+nodePort,檢視UI

.Net微服務實戰之Kubernetes的搭建與使用

Token通過下面指令擷取

.Net微服務實戰之Kubernetes的搭建與使用

在server-b與server-c執行下面操作

把上面init後的那句join拷貝過來,如果忘記了可以在master節點執行下面指令:

.Net微服務實戰之Kubernetes的搭建與使用

通過傳回的資料拼裝成下面指令

.Net微服務實戰之Kubernetes的搭建與使用

檢視節點資訊

.Net微服務實戰之Kubernetes的搭建與使用
.Net微服務實戰之Kubernetes的搭建與使用

在master節點(sever-a)執行下面操作

  部署應用前建議有需要的朋友到【.Net微服務實戰之CI/CD】看看如何搭建docker私有倉庫,後面需要用到,搭建後私有庫後執行下面指令

  docker-server就是docker私有倉庫的位址

  下面是yaml模闆,注意imagePullSecrets-name與上面的命名的一緻,其餘的可以檢視yaml裡的注釋

.Net微服務實戰之Kubernetes的搭建與使用
.Net微服務實戰之Kubernetes的搭建與使用

  把yaml檔案儲存到伺服器後執行下面指令

.Net微服務實戰之Kubernetes的搭建與使用
.Net微服務實戰之Kubernetes的搭建與使用

  整個搭建部署的過程基本上到這裡結束了。

  可以通過指令kubectl get service得到ClusterIP,分别在server-c和sever-b執行curl 10.10.184.184

  

.Net微服務實戰之Kubernetes的搭建與使用

  也可以通過執行kubectl get pods -o wide得到pod ip,在server-c執行curl 10.122.2.5 和 server-b執行curl 10.122.1.7

.Net微服務實戰之Kubernetes的搭建與使用

  也可以在外部通路 server-c和server-b的 ip + 31221

.Net微服務實戰之Kubernetes的搭建與使用

  如果節點有異常可以通過下面指令排查

  如果Pod無法正常running可以通過下面指令檢視

作  者:

陳珙

出  處:http://www.cnblogs.com/skychen1218/

關于作者:專注于微軟平台的項目開發。如有問題或建議,請多多賜教!

版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。

聲援部落客:如果您覺得文章對您有幫助,可以點選文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!

繼續閱讀