目錄
1. 安裝 / 卸載
1 .1 前提條件
-
homebrew安裝kubectl
-
docker本身設置鏡像加速
-
以下操作如果失敗,開啟ssr的全局模式進行再次操作
1.2 安裝方式
-
homebrew【不好使】
-
二進制【參照如下的鏈接】
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的方式
- kubectl expose deployment/{depoly_name} --type="NodePort" --port 80【這個port是docker容器內部的端口】
- kubectl create service nodeport codepie --tcp=80: 80 【create這個 80 : 80 】
- kubectl create -f xxx.yaml 【不推薦】
- 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 更新應用
- 多個實例的情況下可以滾動不停機更新,且允許以下操作:
- 通過更新docker image,更新應用程序
- 回顧到以前的版本
- 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