400块钱3小时上门服务,同城附近人100米,怎么找同城的人服务,夜场女都是为了钱吗

    <strike id="t98gp"></strike>

    1. <code id="t98gp"></code>

      <nav id="t98gp"></nav>
    2. <object id="t98gp"></object>
      首頁 運維干貨Minikube 入門初體驗

      Minikube 入門初體驗

      運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
      領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

      我使用Docker Desktop在Mac中啟用Docker和Kubernetes已經有一段時間了。盡管它瘋狂地吞噬著CPU和內存,讓粉絲們瘋狂。但隨著“當面”彈出強制升級Docker的彈窗和軟件許可的變更,是時候為本地Kubernetes開發尋找其他替代品了。

      Minikube 入門初體驗插圖

      這篇文章只會專注于Mac平臺。如果你在Linux上嘗試過,請告訴我情況如何。

      卸載Docker Desktop

      讓我們先從刪除Docker Desktop開始。

      brew uninstall docker
      

      這不僅會擺脫Docker,還會擺脫Hyperkit以及Docker守護進程。Docker守護進程允許我們構建鏡像并適用交互式的Docker CLI與之對話。當然還包括Kubernetes集群和kubectl二進制(除非你有單獨部署)。如果你沒有使用Homebrew,那么就需要相應地卸載這些工具。

      然后,讓我們把這些工具逐一找回來。

      安裝Hyperkit

      Hyperkit仍然是在Mac上本地運行Kubernetes集群的一個可行的選擇,我們先來安裝它。

      brew install hyperkit
      

      確認安裝正確。

      ? hyperkit -v  
      hyperkit: 0.20200908Homepage:https://github.com/docker/hyperkit  
      License: BSD
      

      安裝Docker CLI

      我們是想擺脫Docker Desktop,但并不是Docker本身。Docker仍然是一個很有用的、開源的容器管理工具,如果你有一堆Dockerfiles需要處理,Docker CLI會很有用。

      brew install docker
      

      注意:千萬不要運行brew install –cask docker。這會安裝Docker Desktop集成版本,我們又要重頭來過。

      這僅僅會安裝Docker CLI,但不會安裝Docker守護程序dockerd。你可以通過運行docker info看到這一點。

      ? docker info  
      Client:  
       Context:    default  
       Debug Mode: falseServer:  
      ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
      

      安裝Kubectl

      brew install kubectl
      

      這一點沒什么可說的。

      安裝Minikube(和Docker守護進程)

      隨著Hyperkit的部署,我們已經準備好部署Kubernetes集群了。并且,在這個過程中啟動了一個Docker守護程序。

      brew install minikube
      

      在我們開始使用Kubernetes集群之前,這里有一些小知識需要了解。

      使用哪一種驅動?

      換句話說,我們是將Kubernetes部署在虛擬機、容器還是直接部署在裸金屬服務器上?根據操作系統的不同,這里有多種選擇[1]。我們將使用Mac的Hyperkit驅動。

      使用哪一種容器運行時?

      可用的選項:Docker、containerd和cri-o。鑒于Kubernetes本身正在遠離Docker而轉向Containerd,Containerd是一個不錯的選擇。但由于我們希望Docker守護程序能夠構建Docker鏡像,所以我們還是使用Docker吧。

      設定CPU和內存限制

      和Docker Desktop一樣,設置正確的CPU和內存限制總是明智,特別是如果你打算運行許多Pod。

      minikube config set cpus 6  
      minikube config set memory 12g
      

      最后,啟動Kubernetes集群。

      ? minikube start --kubernetes-version=v1.19.14 --driver=hyperkit --container-runtime=docker
      

      使用命令行選項-kubernetes-version來部署特定版本的Kubernetes。不用這個標志的話,默認部署最新的版本。我需要部署一個較早的版本來滿足我的需要。

      以下是上述命令的輸出。

      ??  minikube v1.23.0 on Darwin 11.5.2  
          ? MINIKUBE\_ACTIVE\_DOCKERD=minikube  
      ?  Using the hyperkit driver based on user configuration  
      ??  Starting control plane node minikube in cluster minikube  
      ??  Downloading Kubernetes v1.19.14 preload ...       
          > preloaded-images-k8s-v12-v1...: 470.78 MiB / 470.78 MiB  100.00% 6.17 MiB  
      ??  Creating hyperkit VM (CPUs=6, Memory=12288MB, Disk=20000MB) ...  
      ?  This VM is having trouble accessing https://k8s.gcr.io  
      ??  To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/  
      ??  Preparing Kubernetes v1.19.14 on Docker 20.10.8 ...  
          ? Generating certificates and keys ...  
          ? Booting up control plane ...  
          ? Configuring RBAC rules ...  
      ??  Verifying Kubernetes components...  
          ? Using image gcr.io/k8s-minikube/storage-provisioner:v5  
      ??  Enabled addons: storage-provisioner, default-storageclass  
      ?  /usr/local/bin/kubectl is version 1.22.1, which may have incompatibilites with Kubernetes 1.19.14.  
          ? Want kubectl v1.19.14? Try 'minikube kubectl -- get pods -A'  
      ??  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
      

      如果你在本地運行dnsmasq,在集群中可能會出現DNS解析失敗。你可以卸載它或者在dnsmasq.conf中添加listen-address=192.168.64.1。更多信息可以在這里[2]找到。

      Kube Config的上下文已經設置好了。我們可以用 kubectl來檢查集群,如下所示。

      ? minikube kubectl get nodes  
      NAME       STATUS   ROLES    AGE    VERSION  
      minikube   Ready    master   7m6s   v1.19.14
      

      由于我們已經安裝了kubectl二進制程序,我們可以直接使用它。

      此時,我們已經有了一個Kubernetes集群,由于我們使用了Docker驅動,Docker守護程序也在運行。所以在我們使用守護進程之前,讓我們先設置環境變量。

      eval $(minikube docker-env)
      

      確認Docker守護進程是正常工作的。

      ? docker info  
      Client:  
       Context:    default  
       Debug Mode: falseServer:  
       Containers: 14  
        Running: 14  
        Paused: 0  
        Stopped: 0  
       Images: 10  
       Server Version: 20.10.8  
       Storage Driver: overlay2  
        Backing Filesystem: extfs  
       ...
      

      下面是我們的Minikube集群在K9S中的樣子。

      Minikube 入門初體驗插圖1

      新安裝的Minikube集群的K9S截圖

      需要Docker Compose

      用以下命令安裝Docker-Compose。

      brew install docker-compose
      

      暴露Services到Minikube外部

      對于本地開發,通常是通過瀏覽器或CLI從電腦訪問服務。端口轉發總是一個選擇,但有時Ingress或負載均衡器也是有用的。讓我們看看它們是如何與Minikube一起工作的。

      處理Ingress資源

      我們現在有了一個Kubernetes集群,也可以在上面部署應用程序。但我們如何訪問Ingress資源呢?Minikube有一個答案,就是addons(附加組件)。

      ? minikube addons enable ingress  
          ? Using image k8s.gcr.io/ingress-nginx/controller:v1.0.0-beta.3  
          ? Using image k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0  
          ? Using image k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0  
      ??  Verifying ingress addon...
      

      這會部署Nginx Ingress控制器。更重要的是,它會把Nginx服務部署以 NodePort的形式部署,并將Minikube的IP直接指向Ingress。讓我們先找到這個IP。

      ? minikube ip  
      192.168.64.12
      

      我們在80端口調用上述IP,我們應該可以從Nginx得到響應。

      ? curl http://192.168.64.12  
      <html>  
      <head><title>404 Not Found</title></head>  
      <body>  
      <center><h1>404 Not Found</h1></center>  
      <hr><center>nginx</center>  
      </body>  
      </html>
      

      記住,Ingress依賴于DNS工作,它應該被解析到Minikube的IP上。如果后端服務之一調用該DNS,除非明確配置了,否則會解析失敗。這個時候,另一個附加組件可以來拯救你。

      ? minikube addons enable ingress-dns  
          ? Using image cryptexlabs/minikube-ingress-dns:0.3.0
      

      這將在Kubernetes集群內啟動一個DNS服務器,監聽在Minikube的IP上。此外,還需要一個自定義的解析器,以強制自定義頂級域名(如.test,不要使用.local)的DNS解析被重定向到上面啟動的DNS服務器。Minikube Ingress DNS[3]文檔很好地解釋了這一點。按照文檔里描述的步驟操作,你將會部署成功一個帶有自定義DNS的Ingress。

      負載均衡類型的Service

      部署負載均衡器類型的服務,并從主機上訪問它,就像你在云端部署時一樣,這不是很好嗎?多虧了metalb插件,讓這變得很簡單。

      minikube addons enable metallb
      

      這將部署另外兩個Pod,負責為負載均衡器類型的Service分配一個外部IP。如果不這樣做,這些服務的外部IP將始終處于“pending”狀態。

      在使用metallb之前,還有一個步驟。默認情況下,metallb沒有辦法知道哪個范圍的IP可以分配給負載均衡器的服務。運行下面的命令來提供一個范圍。

      ? minikube addons configure metallb  
      -- Enter Load Balancer Start IP: 192.168.64.5  
      -- Enter Load Balancer End IP: 192.168.64.15  
          ? Using image metallb/speaker:v0.9.6  
          ? Using image metallb/controller:v0.9.6  
      ?  metallb was successfully configured
      

      基于你的Minikube IP,分配一個小范圍的IP,包括Minikube IP?,F在,每當你部署一個負載均衡器服務時,這個范圍內的一個IP將被分配。

      其他問題

      登錄到遠程鏡像倉庫

      你可能仍然有舊的~/.docker/config.json,其中credsStore設置為osxkeychain或desktop。這在新的配置中不會起作用。為了解決這個問題,我們來安裝Docker Credential Helper。

      brew install docker-credential-helper
      

      密鑰憑證還是會像以前一樣存儲在MacOS Keychain中。如果這不起作用,一個快速的解決方法是刪除~/.docker/config.json文件,然后再次登錄到鏡像倉庫。

      保留Docker鏡像和持久化存儲卷聲明

      Added 7th Sept 2021

      Docker Desktop的一個好處是,你可以關閉Kubernetes集群,以后再啟動它,用相同的Docker鏡像和持久化卷運行你的Pod。例如,在Kubernetes中運行本地數據庫時,這就很有用。能夠在多次重啟中仍然保持有效的持久化卷是很方便的。

      在Minikube中,如果我用minikube stop關閉集群(和Hyperkit虛擬機),它會刪除Docker鏡像和所有持久化卷,這很麻煩。但幸運的是,Minikube提供了一種防止刪除的方法。我們可以暫停Kubernetes集群和Hyperkit VM,而不是停止它。

      minikube pause
      

      該命令會終止Kubernetes集群,但不會刪除Hyperkit虛擬機。這就釋放了更多的CPU,同時仍然保留了所有的Docker鏡像和持久化卷。但是,等一下,它變得更好!它不會停止dockerd守護進程。所以你可以繼續使用Docker CLI,只是別忘了用eval $(minikube docker-env)設置一下docker環境。

      當你想恢復在Kubernetes集群上的工作時,可以運行以下命令。

      minikube unpause
      

      而你將擁有所有的系統Pod,包括附加組件Addons。這甚至在筆記本電腦重新啟動后,也能正常工作!

      在Docker容器中綁定掛載

      Added 7th Sept 2021

      一些在Reddit[4]上的好心人指出,Docker容器中的綁定掛載(-v)在Minikube和Docker的配置中并不能工作。這是Docker容器的一個常見操作,他理論上應該可以正常工作。

      由于存在Hyperkit作為中間層,掛載一個卷其實是分成兩步操作的。首先,讓我們把筆記本上的磁盤掛載到Hyperkit VM上。

      minikube mount /myvolume:/test
      

      這將把本地文件夾/myvolume掛載到Hyperkit VM的/test路徑下。這個進程仍然是活躍的,所以你不應該關閉這個終端。

      在另一個終端上,運行Docker容器,并將/test卷綁定到容器內的一個路徑上。

      docker run --rm -it -v /test:/inside busybox /bin/sh
      

      這將在容器內的Hyperkit VM上掛載/test卷,路徑為/inside。實際上,這會使得筆記本電腦上/myvolume下的所有處在容器內的文件和文件夾處于讀寫模式。很好!

      總結

      在周日下午花了幾個小時后,我對這個新的配置相當滿意。我們擺脫了Docker Desktop,用Hyperkit和Minikube取代了它。我們仍然可以使用Docker API來管理Docker文件,并在本地Kubernetes集群中部署應用程序。最重要的是,我的筆記本可以愉快地運行,額外的資源可以用來運行Slack、Notion和其他Electron應用程序;-)

      相關鏈接:

      1.https://minikube.sigs.k8s.io/docs/drivers/

      2.https://minikube.sigs.k8s.io/docs/drivers/hyperkit/

      3.https://minikube.sigs.k8s.io/docs/handbook/addons/ingress-dns/

      4.https://www.reddit.com/r/kubernetes/comments/pjlt52/goodbye_docker_desktop_hello_minikube/hbyi4m5?utm_source=share&utm_medium=web2x&context=3

      原文鏈接:https://itnext.io/goodbye-docker-desktop-hello-minikube-3649f2a1c469

      本文鏈接:http://www.605748.com/40562.html

      下一篇:

      iptables 詳解

      網友評論comments

      發表評論

      您的電子郵箱地址不會被公開。

      暫無評論

      Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
      掃二維碼
      掃二維碼
      返回頂部
      400块钱3小时上门服务,同城附近人100米,怎么找同城的人服务,夜场女都是为了钱吗