入坑第一天,差點沒爬起來😂😂😂
1. Kubernetes是什么
Kubernetes (K8s)是一個用於自動化部署、自動擴縮容和管理容器化應用程序的開源系統。
關於Kubernetes,說得最多的就是自動容器部署、彈性伸縮、應用管理。
(Automated container deployment , scaling , and management)
Kubernetes將組成應用程序的容器分組為邏輯單元,以便於管理和發現。Kubernetes基於在谷歌上運行生產工作負載的15年經驗,結合了來自社區的最佳思想和實踐。是工業生產級別的容器編排系統。
2. Kubernetes特性
- 服務發現和負載均衡
- 不需要修改應用程序來使用不熟悉的服務發現機制。Kubernetes為Pods提供它們自己的IP地址和一組Pods的單個DNS名稱,並且可以在它們之間實現負載平衡。
- 自動打包
- 在不犧牲可用性的情況下,根據容器的資源需求和其他約束條件自動放置容器。混合關鍵工作負載和最佳工作負載,以提高利用率並節省更多資源
- 自動修復
- 重新啟動失敗的容器,在節點死亡時替換和重新調度容器,殺死那些不響應用戶定義的健康檢查的容器,並且在它們准備好提供服務之前不會向客戶端通知它們。
- 自動向前滾動和回滾
- Kubernetes會逐步放開對應用程序或其配置的更改,同時監視應用程序的運行狀況,以確保它不會同時殺死所有實例。如果出現問題,Kubernetes將為您回滾更改。利用不斷增長的部署解決方案生態系統
- 秘鑰和配置管理
- 部署和更新秘鑰和應用程序配置,而無需重新構建映像,也無需在堆棧配置中公開秘鑰
- 水平擴展
- 使用簡單的命令、UI或基於CPU使用情況,自動擴大或縮小應用程序
- 可移植性強
- Kubernetes是開源的,它允許你自由地利用本地、混合或公共雲基礎設施,讓你輕松地將工作負載轉移到對你重要的地方
3. 搭建Kubernetes學習環境
初學Kubernetes,建議使用基於docker的解決方案:Kubernetes社區支持的工具,或者在本地機器上配置Kubernetes集群的生態系統中的工具。
如果是生產環境的話,有很多解決方案和供應商可供選擇,推薦:阿里雲
https://kubernetes.io/docs/setup/
3.1. Minikube
Minikube是一個工具,它使我們能夠很容易地在本地運行Kubernetes。Minikube在你的筆記本的虛擬機中運行一個單節點的Kubernetes集群。
更多關於Minikube的用法請參見 https://minikube.sigs.k8s.io/
安裝Minikube
首先,檢查Linux上是否支持虛擬化
grep -E --color 'vmx|svm' /proc/cpuinfo
其次,確保已經安裝了kubectl
kubectl version
具體安裝步驟參見 https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux
安裝完kubectl以后,接下來請確保已經安裝了 Hypervisor 或者 VirtualBox 或者 KVM
注意,Minikube支持 --vm-driver=none選項,這樣的話就會安裝到主機上,而不是主機上虛擬處理的虛擬機上。
最后,安裝Minikube
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/
Minikube基本命令
然而,理想很豐滿,現實很骨感
當你運行 minikube start的時候,你就會發現從k8s.gcr.io拉取鏡像失敗
pingk8s.gcr.io
ping k8s.gcr.io發現全部超時
Soga,國內無法訪問 k8s.gcr.io
於是換個思路,從國內的鏡像倉庫去下載,不要慌,阿里雲已經給出了解決方案
https://github.com/AliyunContainerService/minikube
https://yq.aliyun.com/articles/221687
https://yq.aliyun.com/articles/672675?spm=a2c4e.11153940.0.0.7dd54cec4rOx87
首先,如果minikube下載都下載不下來的話,可以改成以下地址
curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.5.0/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/
以下摘自雲棲社區的一篇博客:
於是,在啟動的時候指定了一些參數:
minikube start --image-mirror-country cn \
--vm-driver=virtualbox \
--iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.5.0.iso \
--registry-mirror=https://xxxx.mirror.aliyuncs.com
有的朋友可能會疑惑,鏡像地址中的xxxx是什么?其實,這個是阿里雲的鏡像加速器地址,每個阿里雲賬號都有一個專屬的鏡像加速器。如圖:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
其實也可以不指定--iso-url選項,不指定的話,默認下載最新的 minikube v1.5.2 版本
接下來用一個已經存在的鏡像來創建一個部署
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
這里用到的命令是kubectl,基本命令如下:
部署是可以創建成功,然而當你啟動這個服務的時候就會發現怎么都啟不起來,正常情況下看到Running狀態表示啟動成功
吸取前面的經驗,這里將 k8s.gcr.io 換成 registry.cn-hangzhou.aliyuncs.com/google_containers
完整的命令是這樣的:
kubectl create deployment hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10
部署服務
# 創建部署
kubectl create deployment hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10
# 將部署暴露為服務
kubectl expose deployment hello-minikube --type=NodePort --port=8080
# 查看服務
kubectl get pod
# 獲取服務URL
minikube service hello-minikube --url
# 刪除服務
kubectl delete services hello-minikube
# 刪除部署
kubectl delete deployment hello-minikube
# 停止Minikube集群
minikube stop
# 刪除Minikube集群
minikube delete
# 查看儀表盤
minikube dashboard
演示
3.2. 集群管理
啟動集群
containerd是一個行業標准的容器運行時,它強調簡單性、健壯性和可移植性。它可以作為Linux和Windows的守護進程,以管理其主機系統的完整容器生命周期。
# 指定Kubernetes版本
minikube start --kubernetes-version v1.16.0
# 指定VM驅動
minikube start --vm-driver=<driver_name>
# 為了用containerd作為容器運行時
minikube start --network-plugin=cni \
--enable-default-cni \
--container-runtime=containerd \
--bootstrapper=kubeadm
配置集群
為了應用Minikube的一些特性,在minikube start命令的時候可以通過--extra-config選項來指定
格式為: component.key=value,其中component可以是下列之一的字符串
- kubelet
- apiserver
- proxy
- controller-manager
- etcd
- scheduler
例如:
--extra-config=kubelet.MaxPods=5
--extra-config=scheduler.LeaderElection.LeaderElect=true
--extra-config=apiserver.authorization-mode=RBAC
集群交互
minikube dashboard
4. 其它
Docker中國官方鏡像加速 https://registry.docker-cn.com
國內Kubernetes的容器鏡像倉庫 registry.cn-hangzhou.aliyuncs.com/google_containers
更改docker默認倉庫地址
/etc/docker/daemon.json
{ "registry-mirrors": ["https://registry.docker-cn.com"] # registry.docker-cn.com是國內的鏡像網站 }
如果是Docker Desktop的話,可以這樣修改
5. 文檔
Kubernetes
https://kubernetes.io/docs/setup/learning-environment/minikube/
https://kubernetes.io/docs/tasks/tools/install-minikube/
https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux
https://github.com/containerd/containerd
https://github.com/kubernetes/kubernetes
https://www.jianshu.com/p/b10c0d7f7d18
阿里雲
https://cr.console.aliyun.com/cn-hangzhou/instances/images
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
https://help.aliyun.com/video_detail/54770.html
https://yq.aliyun.com/articles/221687
https://yq.aliyun.com/articles/672675
https://github.com/AliyunContainerService/minikube
真實案例