Kubernetes 環境搭建

入坑第一天,差點沒爬起來😂😂😂html

1.  Kubernetes是什麼linux

Kubernetes (K8s)是一個用於自動化部署自動擴縮容管理容器化應用程序的開源系統。git

關於Kubernetes,說得最多的就是自動容器部署彈性伸縮應用管理。(Automated container deployment , scaling , and management)github

Kubernetes將組成應用程序的容器分組爲邏輯單元,以便於管理和發現。Kubernetes基於在谷歌上運行生產工做負載的15年經驗,結合了來自社區的最佳思想和實踐。是工業生產級別的容器編排系統。docker

2.  Kubernetes特性json

  • 服務發現和負載均衡
    • 不須要修改應用程序來使用不熟悉的服務發現機制。Kubernetes爲Pods提供它們本身的IP地址和一組Pods的單個DNS名稱,而且能夠在它們之間實現負載平衡。
  • 自動打包
    • 在不犧牲可用性的狀況下,根據容器的資源需求和其餘約束條件自動放置容器。混合關鍵工做負載和最佳工做負載,以提升利用率並節省更多資源
  • 自動修復
    • 從新啓動失敗的容器,在節點死亡時替換和從新調度容器,殺死那些不響應用戶定義的健康檢查的容器,而且在它們準備好提供服務以前不會向客戶端通知它們。
  • 自動向前滾動和回滾
    • Kubernetes會逐步放開對應用程序或其配置的更改,同時監視應用程序的運行情況,以確保它不會同時殺死全部實例。若是出現問題,Kubernetes將爲您回滾更改。利用不斷增加的部署解決方案生態系統
  • 祕鑰和配置管理
    • 部署和更新祕鑰和應用程序配置,而無需從新構建映像,也無需在堆棧配置中公開祕鑰
  • 水平擴展
    • 使用簡單的命令、UI或基於CPU使用狀況,自動擴大或縮小應用程序
  • 可移植性強
    • Kubernetes是開源的,它容許你自由地利用本地、混合或公共雲基礎設施,讓你輕鬆地將工做負載轉移到對你重要的地方

3.  搭建Kubernetes學習環境bootstrap

初學Kubernetes,建議使用基於docker的解決方案:Kubernetes社區支持的工具,或者在本地機器上配置Kubernetes集羣的生態系統中的工具。api

若是是生產環境的話,有不少解決方案和供應商可供選擇,推薦:阿里雲app

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/

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 

 

真實案例

 

相關文章
相關標籤/搜索