iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0

kubectl 在k8s的切入點

K8s master 的API Server 提供了Restful風格的CRUD接口來讓client 對 cluster內的 resource object狀態進行查詢或修改, 再把結果存在etcd中; API Server同時也是更新etcd中的resource object 狀態的唯一途徑, 其中最常用的方式是命令列指令: kubectl。
https://ithelp.ithome.com.tw/upload/images/20200907/20129656V6O4E6aDyF.png

圖片參考書:【Kubernetes 進階實踐】

這邊選用minikube作為本機練習K8s的環境, minikube安裝參照Google; kubectl 安裝可參照官網

Minikube 環境確認

  • 啟動Minikube
    https://ithelp.ithome.com.tw/upload/images/20200907/20129656LVoa3WctZd.png
  • 確認 Minikube狀態
    https://ithelp.ithome.com.tw/upload/images/20200907/20129656bc8s8jt9Jt.png
  • 安裝好之後會出現在docker中,下指令時如果本機同時有其他環境要注意切對地方
    https://ithelp.ithome.com.tw/upload/images/20200907/20129656SOR7DlkNtQ.png

簡易部署 YAML 檔說明

因為實際應用多是使用yaml進行部署, 寫成yaml一方面可以讓其他人一起確認內容, 同時在不同的環境部署時也能直接使用同一份yaml。

  • 超精簡範例:
    apiVersion: v1   
    kind: Pod
    metadata:
      name: test-nginx
    spec:
      containers:
      - name: test
        image: nginx
    
    • apiVersion:object api version, 需要根據安裝的K8s版本和資源類型變換。
    • kind: object kind, 可能是 Service, Deployment, Job...等。
    • metadata: 用來描述object的元資料, name為必填, 若是要使用選擇器則要有labels。
    • spec: container,storage,volume, 環境參數等相關設定

YAML檔的設定有很多, 今天先說明有使用到的部分, 過兩天再來深入研究吧!

用 kubectl 測試一下minikube

創建 pod

  • 部署指令
    kubectl create -f <file name.yaml>
  • 編寫一份nginx-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-deploy
      namespace: default
    spec:
      containers:
      - name: nginx-deploy
        image: nginx
    
  • 執行
    kubectl create -f nginx-pod.yaml
    
  • 檢查pod 狀態
    https://ithelp.ithome.com.tw/upload/images/20200907/20129656gTIu8Wtclt.png

創建 service

  • 部署指令
    kubectl create -f <file name.yaml>
  • 編寫一份nginx-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
    spec:
      ports:
      - port: 80
    
  • 執行
    kubectl create -f nginx-service.yaml
    
  • 檢查 service 狀態
    https://ithelp.ithome.com.tw/upload/images/20200907/20129656SRXDLCd9dK.png

創建 deployment

  • 部署指令
    kubectl create -f <file name.yaml>
  • 編寫一份nginx-deployment.yaml, template必填
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx-deploy
          namespace: default
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:latest
            imagePullPolicy: Always
            name: nginx
    
  • 執行
    kubectl create -f nginx-service.yaml
    
  • 檢查 service 狀態
    https://ithelp.ithome.com.tw/upload/images/20200907/20129656MVjr6LroOd.png

今天有用到的指令如下

  1. 查看目前有哪些 object
    kubectl get <object>
    object 可以是 pods, services, deployments ...等
  2. 查看 object 詳細資訊
    kubectl describe <object> <object name>
    • 示範:
      https://ithelp.ithome.com.tw/upload/images/20200907/20129656DAvHEfh6j2.png
  3. 刪除 object
    kubectl delete pod <pod name>
    kubectl delete service <service name>
    kubectl delete deployment <deployment name>

今日小結

先把環境架好, 準備好工具之後才好繼續走下去。
本機練習的話, Minikube應該是最好上手的, 參考資料多, 安裝也很迅速, 但他沒辦法做出真正的cluster,
如果要架設真正的cluster可以參考 kubeadm的相關資訊。


上一篇
day 3 認識 Kubernetes 物件關係(Pod, Controller, Service)
下一篇
day 5 認識 k8s 資源管理概念
系列文
K8S - 30天從擦槍到提槍上陣學習筆記。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言