kubernetes系列(二) - kubectl的入門操作


1. 安裝 / 卸載

1 .1 前提條件

  • homebrew安裝kubectl

  • docker本身設置鏡像加速

  • 以下操作如果失敗,開啟ssr的全局模式進行再次操作

1.2 安裝方式

  • homebrew【不好使】

  • 二進制【參照如下的鏈接】

Minikube - Kubernetes本地實驗環境

1.3 卸載

# 停止集群
minikube stop
 ​
# 清理minikube本地狀態
minikube delete

# 通過homebrew卸載
brew uninstall minikube

2. 通過 minikube 學習 k8s 實操基礎

2.1 創建集群

# 二進制安裝minikube
curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.9.2/minikube-darwin-amd64 \
&& chmod +x minikube && sudo mv minikube /usr/local/bin/

# 創建minikube集群【使用阿里的鏡像】
# !!這一句之后,kubectl還會被配置為默認使用minikube!!
minikube start --image-mirror-country cn \
--iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.9.0.iso \
--registry-mirror=https://rnbhv8m8.mirror.aliyuncs.com

# 完成后,查看minikube狀態
minikube status

# 打開本地dashboard
minikube dashboard

2.2 部署應用

  • deployment會幫我們創建pod

  • pod運行在一個私有的,隔離的網絡上。默認情況下可以被同一個集群的其他【pod】和【service】所訪問到,但是外部網絡無法訪問,需要通過service來暴露給外部

# 創建第一個deployment【deployment會自動創建一個pods】
kubectl create deployment codepie --image=lzw5399/codepiefe:20200423.

# 獲取deployments信息
kubectl get deploy【或者全稱deployments】

# 獲取deploy創建的pod信息
kubectl get pods

# 臨時地,允許通過api訪問api-server
# 通過以下鏈接訪問具體的pod:
# [http://localhost:8001/api/v1/namespaces/default/pods/具體的pod_name/proxy/](http://localhost:8001/api/v1/namespaces/default/pods/具體的pod_name/proxy/)
kubectl proxy
 【Starting to serve on 127.0.0.1:8001】

2.3 探索當前應用【故障排除】

1 # 獲取資源
2 kubectl get pods
3 # 顯示當前pod的詳細狀態信息
4 kubectl describe pods
5 # 顯示當前pod的日志
6 kubectl logs codepie-677c5c9c56-wk4qn【pod名字】
7 # 針對某個pod執行一個命令
8 # 顯示當前pod內部的環境變量
9 kubectl exec codepie-677c5c9c56-wk4qn -- env
10 # 進入到pod內部
11 kubectl exec -ti codepie-677c5c9c56-wk4qn -- bash

2.4 公開暴露應用

  • 思路就是創建service來將pod轉發出去

  • 創建service的方式

  1. kubectl expose deployment/{depoly_name} --type="NodePort" --port 80【這個port是docker容器內部的端口】
  2. kubectl create service nodeport codepie --tcp=80: 80 【create這個 80 : 80 】
  3. kubectl create -f xxx.yaml 【不推薦】
  4. kubectl apply -f xxx.yaml【推薦】
# 通過上面的方式之一來建立起service

# 訪問, 或者直接在瀏覽器中直接訪問下面的地址
# minikube ip是minikube幫我們創建的虛擬機的ip,對應着正式k8s中的pod所在node的外網ip
curl $(minikube ip):{向外暴露的端口}

2.5 使用label

# 打label
kubectl label pod {pod_name} {key}={value}

# 根據label來獲取
kubectl get po -l {key}={value}

2.6 擴容應用

  • 適用於無狀態應用,將一個應用擴容多個實例

  • 擴容后,service會有一個均衡負載的功能,將請求發送到相同實例的不同的pod

  • 還支持自動縮放,但是超出了本教程的范圍

  • 一旦運行了多個應用程序的多個實例,就可以在不停機的情況下滾動更新

# 獲取所有的deploy部署的容器實例個數
# 【DESIRED】期望的個數 【CURRENT】實際的個數
kubectl get rs 【ReplicaSet】

# 將deploy/codepie 的實例擴容成四個
# 縮容就改一下 replicas 的數值就好了
kubectl scale deploy/codepie --replicas= 4

# 以下幾個都可以查看到實例變成四個
kubectl get po -o wide
kubectl get rs
kubectl get deploy

2.7 更新應用

  • 多個實例的情況下可以滾動不停機更新,且允許以下操作:
  1. 通過更新docker image,更新應用程序
  2. 回顧到以前的版本
  3. CI/CD, 停機時間為 0
  • 默認情況下,在更新過程中的【不可用pod的最大數量】和【可以創建新的pod的最大數量】都為 1。這兩個選項都可以配置為數字或者百分比
  • 更新過程中,service會僅將流量負載到【可用的pod】
# 更新deploy對應的image
# 格式 kubectl set image deploy/{depoly_name} {docker鏡像的后半部分名字}={新的image} kubectl set image deploy/codepie codepiefe=lzw5399/codepiefe:20200410.

# 打印滾動更新中的狀態信息
kubectl rollout status deploy/codepie

# 回滾到指定版本,不加--to-version則回滾到上一個版本
kubectl rollout undo deploy/codepie --to-revision= 2

# 查看狀態
kubectl describe po

其他章節
Kubernetes系列(一) - kubernetes入門基本概念


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM