自動化整合:Kubernetes容器引擎詳解

知了一笑發表於2022-01-06

前言:該系列文章,圍繞持續整合:Jenkins+Docker+K8S相關元件,實現自動化管理原始碼編譯、打包、映象構建、部署等操作;本篇文章主要描述Kubernetes引擎用法

一、基礎簡介

Kubernetes簡稱K8S,是一個開源的分散式的容器編排引擎,用來對容器化應用進行自動化部署和管理。

Control-Plane-Components:控制平面元件,對叢集做出全域性決策,例如:排程、檢測和事件響應,可以在叢集中的任何節點上執行;

  • api:作為K8S控制面的元件,開放K8S的API,相當於控制面的前端;
  • etcd:兼具一致性和高可用性的鍵值資料庫,作為儲存K8S資料的後臺庫;
  • scheduler:監聽新建未指定執行節點的Pods,併為Pod選擇執行節點;
  • controllermanager:執行控制器程式,邏輯上是一個單獨的程式;

Node:節點元件:每個節點上執行,維護執行的Pod並提供Kubernetes執行環境;

  • kubelet:在每個節點上執行的代理,保證容器都執行在Pod中;
  • kube-proxy:每個節點上執行的網路代理, 維護節點上的網路規則;

Container-Runtime:容器執行時,負責執行容器的軟體,支援Docker、containerd、CRI-O等多個容器執行環境,以及任何實現Kubernetes-CRI容器執行環境介面。

二、環境配置

1、服務搭建

使用Git拉取k8s-docker-desktop-for-mac倉庫,執行load_images.sh指令碼,會拉取本地docker對應的k8s版本,注意這裡要等到指令碼流程執行完畢,可能因為Git連線的問題,耗時較長,下面是指令碼拉取的映象:

docker images
REPOSITORY                           TAG                                                  
docker/desktop-kubernetes            kubernetes-v1.21.5-cni-v0.8.5-critools-v1.17.0-debian
k8s.gcr.io/kube-apiserver            v1.21.5                                              
k8s.gcr.io/kube-proxy                v1.21.5                                              
k8s.gcr.io/kube-controller-manager   v1.21.5                                              
k8s.gcr.io/kube-scheduler            v1.21.5                                              
docker/desktop-vpnkit-controller     v2.0                                                 
docker/desktop-storage-provisioner   v2.0                                                 
k8s.gcr.io/pause                     3.4.1                                                
k8s.gcr.io/coredns/coredns           v1.8.0                                               
k8s.gcr.io/etcd                      3.4.13-0                                             

上述映象下載完成後,通過docker桌面軟體啟動k8s即可,這裡啟動時間相對偏長,啟動成功之後介面左下角K8S顯示綠色狀態:

2、環境檢視

# 檢視版本:kubectl version
Client Version GitVersion:v1.21.5
Server Version GitVersion:v1.21.5

# 檢視叢集:kubectl cluster-info
Kubernetes control plane is running at local-host:6443

# 檢視節點:kubectl get nodes
NAME             STATUS   ROLES                  AGE   VERSION
docker-desktop   Ready    control-plane,master   23h   v1.21.5

三、部署Docker映象

1、核心元件

在執行Docker映象部署之前,首先要理解該流程中幾個核心的概念:

  • Pod:是可以在Kubernetes中建立和管理的、最小的可部署的計算單元;就Docker概念的術語而言,Pod類似於共享名稱空間和檔案系統卷的一組Docker容器;
  • ReplicaSet:目的是維護一組在任何時候都處於執行狀態的Pod副本的穩定集合;通常用來保證一定數量的、完全相同的Pod的可用性;
  • Deployment:為Pods和ReplicaSets提供宣告式的更新能力,可以定義Deployment以建立新的ReplicaSet,或刪除現有Deployment;
  • Service:抽象的方式將執行在一組Pods上的應用程式公開為網路服務,在K8S中邏輯上Pods集合與訪問策略,這種模式被稱為微服務;

2、指令碼檔案

這裡將Deployment與Service放在一個.yaml檔案中;映象載入設定imagePullPolicy:Never即本地讀取;其中服務發現採用的是NodePort型別,並沒有設定具體埠,控制平面會在預設範圍內分配一個埠號;

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cloud-app-deployment
  labels:
    app: cloud-app
spec:
  selector:
    matchLabels:
      app: cloud-app
  template:
    metadata:
      labels:
        app: cloud-app
    spec:
      containers:
      - name: cloud-app
        image: Cloud_Url/cicada-image/cloud-app
        imagePullPolicy: Never
        ports: 
        - containerPort: 8079
---
apiVersion: v1
kind: Service
metadata:
  name: cloud-app-service
  labels:
    app: cloud-app
spec:
  type: NodePort
  ports: 
    - port: 8080
      targetPort: 8079
  selector:
    app: cloud-app

3、資源管理

建立資源

kubectl create -f pod.yaml

檢視資源

# 1、檢視Pod資訊
kubectl get pods -o wide

# 2、檢視Service資訊
kubectl get svc -o wide

# 3、檢視Node資訊
kubectl get nodes -o wide

也可以在K8S的Web控制檯上,檢視資源的視覺化介面,下面截圖幾個指令碼中明確宣告的資源資訊:

刪除資源

# 1、通過檔案刪除
kubectl delete -f pod.yaml

# 2、通過具體資源名刪除
kubectl delete pod cloud-app

4、訪問資源

# 檢視服務的詳細描述
kubectl describe svc cloud-app-service
Name:                     cloud-app-service
NodePort:                 <unset>  30930/TCP
Endpoints:                Pod_IP:Pod_埠

這裡NodePort埠預設分配30930,當外部訪問流量到達Service時,會路由到指定Endpoints(端點),通過上面的資源檢視可知,這裡Endpoints即Pod的IP與埠;

通過:本機IP:分配埠/API方式,即localhost:30930/client訪問到docker容器中應用,也可以在Web介面的Pod模組檢視具體的日誌輸出:

四、控制檯元件

Dashboard是基於Web的Kubernetes使用者介面,可以使用Dashboard將容器應用部署到Kubernetes叢集中,也可以對容器應用排錯,還能管理叢集資源,檢視日誌等。

1、建立名稱空間

kubectl create namespace cm-dev

檢視名稱空間

2、檢視Pod

3、檢視Deployment

4、檢視Service


同系列推薦


五、原始碼地址

GitEE·地址
https://gitee.com/cicadasmile/butte-auto-parent
Wiki·地址
https://gitee.com/cicadasmile/butte-java-note

相關文章