一,引言
上一節,我們使用Azure CLI 建立了Azure Resource Group 和 Azure Container Registry 資源,並且將本地的一個叫 “k8s.net.demo”的 images 推送到遠端建立的私有的Docker Image Repo,今天接著上一篇我們學習一下Azure Kubernetes 服務,通過 Azure Portal 建立 Azure Kubernetes Service,並且希望將 Push 上去的Docker Image 部署到Azure Kubernetes 叢集中
Azure Kubernetes Service 簡稱AKS,它託管的Kubernetes 環境,可以使我們在Azure中很輕鬆的部署和管理容器話的應用程式。AKS環境啟用了自動更新,自愈和自動縮放等功能。Kubernetes 的叢集主機由Azure 免費管理,建立AKS服務的時候,我們可以將叢集主機交由Aure進行託管,另外一種是我們在建立的時候,將我們自己建立好的VMSS掛載到AKS服務上。我們只需要為節點所在其上執行的VM付費即可。
接下來,我們看看當前基礎設施架構圖
--------------------我是分割線--------------------
--------------------我是分割線--------------------
Azure Command Line 建立 Azure Container Registry 服務
二,正文
1,建立Azure Kubernetes Service
Azure Portal 點選 “Create a resource”,在搜尋框中輸入 “Kubernetes Service”,進行搜尋,點選 “Create”
Resource group 選擇建立一個新的 “Web_Test_AKS_RG”
Kubernetes cluster name:“cnbateblogwebCluster”
Region 選擇:“East Asia”
Node count 改為 “1”
點選 “Next:Node pools >”,進行設定節點池等資訊
我們如果想增加多個工作節點的話,可以選擇 點選 “Add node pool”
VM scale sets 選擇:“Enabled”
點選 “Next:Authentication >”
關於 “Authentication method” 我們選擇預設的 “Service principal”
其他的都選擇預設選項,點選 “Next:Networking >”
接下來我們進行配置網路資訊,我們可以選擇預設,也可以選擇自定義的網路設計
Network configuration 選擇:“Advanced”
Virtual network 選擇建立新的,如下圖所示
Name:“CnBateBlogWeb_VNET”
Address space:“10.0.0.0/8”
Subnet name:“CnBateBlogWeb_AKS_SubNET”
點選 “OK”,繼續配置其他資訊
Kubernetes service address range:“10.0.2.0/24”
Kubernetes DNS service IP address:“10.0.2.10”
其他的配置選擇預設即可,點選“Next:Integrations >”
開啟容器監控,繼續點選 “Review + create”,進行建立前的預校驗
我們可以看到 驗證已通過,點選 “Create” 進行建立 AKS 服務
建立成功後,我們可以跳轉到該資源
2,為Azure Kubernetes Service 配置 Azure Container Registry 整合
找到上次建立好的叫 “cnbateblogwebACR” 的 Azure Container Registry
點選 “Access control(IAM)” ,選擇 “Role assignments”,點選 “Add”,新增一個角色分配
Role 選擇:“AcrPull”
Assign access to 選擇:“Azure AD user,group,or service principal”
Select 選擇剛剛建立AKS 的時候,在AD中自動註冊的App
我們點選 ”Save“,進行儲存操作
最後一步,我們使用kubectl連線到叢集上
az aks get-credentials --resource-group Web_Test_AKS_RG --name cnbateblogwebCluster
3,Azure Portal 中建立pod
Azure Portal 中找到建立好的 aks 服務,選擇 “Workloads(preview)” ,切換到 “Pods” 的Tab頁,我們可以看到一些預設的pod,當然這些pod的名稱空間都是kube-system,不是我們需要的default的命令空間。
同時,我們也可以通過kubectl 客戶端命令進行檢視
我們點選 “+Add ” 進行建立pod資訊
輸入建立 pod 的描述檔案,點選 “Add” 按鈕
完整yaml檔案
apiVersion: v1
kind: Pod
metadata:
name: k8s-net-demo
labels:
app: k8s-net-demo
spec:
containers:
- name: k8s-net-demo
image: cnbateblogwebacr.azurecr.io/k8s.net.demo:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
回到Azure Portal 中,我們可以看到已經建立好的 k8s-net-demo 的pod 已經建立好了,狀態也是 running
4,訪問 pod 中的容器
想要與pod 進行通訊,可以通過 kubectl port-forward 配置埠轉發
kubectl port-forward k8s-net-demo 8080:80
瀏覽器訪問 http://127.0.0.1:8080,如下圖所示
至此,我們成功的將 pod 跑起來了
5,使用service描述檔案將 Pod 進行暴露
選擇“Services and ingresses(preview)”,點選 “Add”
我們繼續使用 service 藐視檔案進行建立,這次 Kind(定義Kubernetes資源型別為Service)的型別為 “Service”,type 為 “LoadBalancer”
我們可以看到 名字叫 “k8s-net-service1” 的 Type 為 LoadBalancer,External-ip 為 52.184.83.143 cluster-ip 為 10.0.2.134
我們可以在叢集內部使用 10.0.2.134:30000,如果是在叢集外部,可以使用 52.184.83.143:80 進行訪問
瀏覽器訪問 http://52.184.83.143:80,效果如下顯示
bingo,撒花,今天的分析到此完結。
三,結尾
本文,我們建立了AKS服務,並且使用在Azure Portal 上建立屬於自己的 pod,並且使用配置埠轉發供外界訪問,到最後的到了 Service,基本上大家對K8s熟悉的話,上手AKS是非常快的,今天基本上演示了對AKS有了一個基本的認指,下一篇,我們具體講解以下本篇中使用的一個YAML配置,以及暴露Service的時候,關於LoadBalancer的一些問題。
作者:Allen
版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。