Win10環境的minikube的kubernetes操作

※本文檔適用於下面的參考文檔學習及配置後,再進行學習。

參考文檔:
1.Windows10 環境下的 Docker
2.Windows 10 Kubernetes(minikube)搭建

官方文檔:
學習 Kubernetes 基礎知識
Kubernetes核心概念

1.概念一覽

  1. Kubernetes Master(Kubernetes主節點)
    集羣的主節點機器。
  2. Node(節點)
    集羣的節點機器。
  3. Service(svc)(服務)
    多個相同名稱的POD副本 使用不同的IP地址,Service提供DNS服務,通過指定的名稱對多個POD對象進行軟件級負載均衡訪問。
  4. Replication Controller(複製控制器)
    使用控制器,可以快速創建指定個數的相同POD副本,並且對已經創建的POD副本進行監聽,當POD副本對象不足指定個數或者POD副本不響應,控制器會自動創建POD副本來保證指定個數的相同POD副本可以訪問。
  5. Label(label)(標籤)
    POD副本進行名稱及類型的標記,例如:frontend(前端),backend(後端)
  6. Pod
    多個docker容器和 卷(Volumes) 在同一個POD中,且多個容器見可以使用localhost進行訪問。
    Pod是短暫的,卷(Volumes) 是持久的,當創建新的POD副本時,可以快速的從卷中獲取數據。
  7. Deployment(部署)
    代替 Replication Controller,Deployment 用來ReplicaSet,用來實現POD擴容,升級,回滾等作業。
  8. ReplicaSet
    用來創建指定個數的POD對象及擴容POD個數,並且監聽POD狀態,當POD異常時,自動銷燬異常POD,並創建新的POD來保持整體的POD副本數目。

2.網絡框架

https://www.kubernetes.org.cn/img/2016/10/20161028141542.jpg
1.kubectl是kubernetes的命令行工具,用於創建,查詢,刪除kubernetes及容器相關的對象。
2.kubelet是用來Pod 管理,容器健康檢查 ,容器監控

3.kubectl命令

3.1創建nginx POD對象

創建nginx的deployment對象有兩種命令格式
命令格式1:kubectl run -> 該方式已被kubectl create取代

kubectl run nginx --image=nginx
解釋:kubectl run 部署對象名稱 --image=docker鏡像名稱
缺省參數:
--port 容器的訪問端口號,默認爲80,例如:--port=8080
--labels 容器的名稱標籤,格式app=名稱,env=環境,例如:--labels="app=hazelcast,env=prod"
--replicas POD的副本數量,例如:--replicas=5

在這裏插入圖片描述
命令格式2:kubectl create

kubectl create deployment nginx --image=nginx
解釋:kubectl create deployment 部署對象名稱 --image=docker鏡像名稱

在這裏插入圖片描述

3.2查看 POD對象列表

kubectl get pods

列表中NAME字段的含義:
當創建多個副本的POD時,docker name的前綴相同
STATUS字段的含義:
ImagePullBackOff :鏡像無法下載
解決方案參考2.Windows 10 Kubernetes(minikube)搭建 中的 3.14 配置minikube的docker鏡像加速
在這裏插入圖片描述
Running :下載並且啓動docker鏡像成功
在這裏插入圖片描述
在minikube的機器中,使用docker ps命令,可以看到nginx服務器正常啓動
在這裏插入圖片描述

3.3查看 deployment 對象創建的配置log

方式1:命令行

 kubectl describe pod nginx
 解釋:kubectl describe pod deployment對象的名稱

在這裏插入圖片描述
方式2:瀏覽器
在kubernetes-dashboard的網頁中,也可以看到deployment的對象的信息
在這裏插入圖片描述

3.4 刪除deployment的對象(POD和ReplicaSet)

kubectl delete -n default deployment nginx
解釋:kubectl delete -n 命名空間 deployment deployment名稱

在這裏插入圖片描述

3.5 訪問POD對象

1.查詢當前POD的詳細信息,查找到IP地址

kubectl get pod -o wide

在這裏插入圖片描述
2.登錄到minikube服務器中,使用curl命令獲取nginx的index文件內容

minikube ssh
$ curl IP地址/index.html

在這裏插入圖片描述

3.6 擴展POD副本的數量

1.擴展POD副本

kubectl scale deployment nginx --replicas=4
解釋:kubectl scale deployment POD名稱--replicas=擴展後的POD副本總數量

在這裏插入圖片描述
2.查看POD副本的狀態
在POD狀態中可以看到相同POD正在被創建。

kubectl get pod

在這裏插入圖片描述
3.所有POD副本被創建完成
在這裏插入圖片描述

3.7 驗證ReplicaSet的POD監聽

1.關閉多個POD副本中的某一個Docker容器
例如:
副本1:nginx-86c57db685-4k7bn
副本2:nginx-86c57db685-5qmjm
副本3:nginx-86c57db685-6ds9q
副本4:nginx-86c57db685-t7kxf

登錄到minikube服務器,關閉副本4(nginx-86c57db685-t7kxf)的docker 對象

minikube ssh
$ docker ps
獲取到容器的名稱前綴爲nginx-86c57db685-t7kxf的容器ID
$ docker stop 容器ID

在這裏插入圖片描述
2.查詢pod的信息
RESTARTS的次數加1,ReplicaSet自動恢復了POD副本

kubectl get pod

在這裏插入圖片描述
3.刪除POD副本

kubectl delete pod nginx-86c57db685-t7kxf
解釋:kubectl delete pod POD副本名稱

在這裏插入圖片描述
4.再次查詢POD副本
副本4被刪除,ReplicaSet自動創建了新的POD副本,保持整體的POD數量

kubectl get pod -o wide

在這裏插入圖片描述

3.8 創建services(svc),訪問POD副本

1.查詢pod副本的詳細信息

kubectl get pod -o wide

在這裏插入圖片描述
發現每一個POD副本有獨立的IP地址,如果想訪問它們,就需要添加負載均衡,並且當添加或者刪除POD副本時,POD副本的IP地址會發生變更,需要維護負載均衡。
services是一組提供相同服務的POD副本對外的訪問接口,且支持輪播的負載均衡,在添加或者刪除POD副本時,自動進行負載均衡設定。
2.創建services
這裏只介紹services的2種常用類型
集羣內部訪問:ClusterIP:使用一個集羣固定IP,這個是默認選項
集羣外部訪問:NodePort:使用一個集羣固定IP,並且會暴露一個端口給外部網絡進行訪問,端口的範圍(默認是30000-32767)
ClusterIP模式
1.創建services

kubectl expose deployment nginx --port=31000 --target-port=80
解釋:kubectl expose deployment 部署名稱 --port=集羣內訪問的端口號 --target-port=容器的端口號

在這裏插入圖片描述
2.查詢services

kubectl get svc

在這裏插入圖片描述
3.使用deployment的service的集羣IP訪問POD副本

1.登錄到minikube服務器中
minikube ssh
2.訪問nginx的index.html文件
curl 10.97.91.225:31000/index.html

在這裏插入圖片描述

3.9 刪除services(svc)

kubectl delete svc nginx
解釋:kubectl delete svc service名稱

在這裏插入圖片描述

3.10 創建NodePort類型的services(svc)

NodePort
方式1:
a.從ClusterIP方式修改爲NodePort
修改service的配置

kubectl edit svc nginx
解釋:kubectl edit svc service名稱

修改前:在這裏插入圖片描述
修改後:
在這裏插入圖片描述

b.保存退出
在這裏插入圖片描述
c.再次查詢service

kubectl get svc

TYPE變更成NodePort,並且生成一個外網訪問的端口
在這裏插入圖片描述

d.獲取minikube服務器集羣的主機IP地址
注:由於切換的hyper-v的虛擬交換機的類型,導致了IP變更
查詢minikube服務器的IP地址
方式1:

1.登錄minikube服務器
minikube ssh
2.查詢IP地址
$ ifconfig

在這裏插入圖片描述

方式2:

minikube ip

在這裏插入圖片描述
e.瀏覽器訪問

http://minikube服務器IP:30302

在這裏插入圖片描述
方式2:

a.創建services,並指定類型爲NodePort

kubectl expose deployment nginx --port=32000 --type=NodePort --target-port=80
解釋:kubectl expose deployment 部署名稱 --port=集羣內訪問的端口號 --target-port=容器的端口號

在這裏插入圖片描述
b.再次查詢service

kubectl get svc

在這裏插入圖片描述
e.瀏覽器訪問

http://minikube服務器IP:30140

在這裏插入圖片描述

4 資源清單

k8s使用資源清單式進行相關組件的構建,即yaml文件格式配置文件創建POD,service等。

注意:YAML文件中不支持使用tab

獲取幫助文檔

kubectl explain pod

4.1 公共配置

apiVersion: v1  #kubernetes的API版本號
kind: <string> #資源類型 例如Pod,service
metadata: <Object> #元數據,資源的主要信息,例如命名,所在空間等
  name: <string> #資源名稱 例如Pod名稱
  namespace: <string> #資源所屬命名空間 如Pod的默認值 default
  labels: <map[string]string> #標籤列表 資源類型添加標籤
    key1: value1  #例如 version: v1
    key2: value2  #例如 app: myfirstnginxapp

4.2 Pod類型配置的spec設定

spec: <Object> #必選,期望的狀態
  containers: <[]Object> -required- #pod中的容器列表,可以有多個容器
  - name: <string> -required- #容器名稱
    image: <string> -required- #容器的鏡像名稱及版本號,例如
    imagePullPolicy: <string>  #獲取鏡像的策略(Always, Never, IfNotPresent)
    #1.Alawys表示總是下載鏡像 
    #2.IfnotPresent表示優先使用本地鏡像,如果本地不存在,則下載鏡像 
    #3.Nerver表示僅使用本地鏡像,如果不存在,不進行下載。
    #注:默認策略爲IfNotPresent,當版本號爲lastest,則策略爲Always
    command: <[]string> #容器的啓動命令列表

4.2.1 使用資源文件-創建Pod

1.創建Deployment對象

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  namespace: default
  labels:
    app: k8s-nginx
spec:
  replicas: 2            #生成複本數量爲2
  selector:
    matchLabels:
      app: k8s-nginx
  template:
    metadata:
      labels:
        app: k8s-nginx
      annotations: #用於選擇對象並查找滿足某些條件的對象集合 Annotations不會被Kubernetes直接使用,其主要目的是方便用戶閱讀查找
        app: nginx-clouster
    spec:
      containers:
      - name: nginx
        image: docker.io/nginx
        livenessProbe:       #livenessProbe(可用性/存活探針) 對Pod內個容器健康檢查的設置,當探測無響應幾次後將自動重啓該容器,檢查方法有exec、httpGet和tcpSocket,對一個容器只需設置其中一種方法即可,另一種探針 
                             #readiness probe(就緒探針)就緒探針的作用是控制哪些pod可以作爲svc的後端,如果pod不是就緒狀態,就把它從svc load balancer中移除.
            httpGet:         #通過httpget檢查健康,返回200-399之間,則認爲容器正常
              path: /        #URI地址
              port: 80       #端口號
              #host: 127.0.0.1 #主機地址
              scheme: HTTP  #支持的協議,http或者https
            initialDelaySeconds: 5  #容器啓動後第一次執行探測是需要等待多少秒。
            timeoutSeconds: 1   #探測超時時間。默認1秒,最小1秒。
        imagePullPolicy: IfNotPresent  #[Always | Never | IfNotPresent] #獲取鏡像的策略 Alawys表示下載鏡像 IfnotPresent表示優先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像
        resources: #資源限制和請求的設置
            limits:
              cpu: 1 #CPU最大限制
              memory: 3000Mi  #內存限制,單位可以爲Mib/Gib,將用於docker run --memory參數
            requests:
              cpu: 0.2  #Cpu請求,容器啓動的初始可用數量,副本個數*cpu的總數量不可超過kubernetes安裝時系統設定的上限
              memory: 100Mi   #內存請求,容器啓動的初始可用數量
        ports:
        -    containerPort: 80   #容器需要監聽的端口號

2.創建Service對象

apiVersion: v1
kind: Service
metadata:
  labels:
    run: nginx
  name: nginx
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 88  #這裏的端口和clusterIP對應,即clusterIP:80,供內部訪問。
    targetPort: 80 #端口一定要和container暴露出來的端口對應,nginx暴露出來的端口是8081,所以這裏也應是8081
    protocol: TCP
    nodePort: 30060   # 所有的節點都會開放此端口,此端口供外部調用。有效範圍30000-32767
  selector:
    app: k8s-nginx

查詢pod狀態

kubectl get pods -o wide

在這裏插入圖片描述
瀏覽器訪問

http://minikube服務器IP:30060

在這裏插入圖片描述
3.查看POD日誌

 kubectl logs Deployment的POD對象

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章