首頁>技術>

最近在學習#Kubernetes#, 主要是想打一個基礎開發環境, 從最基本、最簡單的#minikube#開始搭起吧, 順便也學習一下搭建過程.

誰知道這個minikube 環境, 在目前的國內環境下, 還真是不容易自己從頭搭建啊! 記錄一下自己的過程, 最後和大家分享一個已經配置好的Minikube 環境, 安裝在Virtualbox 裡的一個虛擬機器, 大家以後可以直接使用, 少走彎路哇!

一、 Minikube 簡介

#minikube#是一種可以在本地輕鬆執行Kubernetes的工具。minikube在膝上型電腦的VM中執行單節點Kubernetes叢集,供希望嘗試Kubernetes或日常開發的使用者測試使用。特點是不能啟動生產叢集,沒有高可用性的單節點機器。

Minikube 實際上就是在本機啟動一個虛擬環境, 在虛擬環境裡面安裝Kubernetes 的各種元件

二、minikube 搭建過程以及遇到的各種坑

在本機(Macbook Pro , macOS 11.2.2) 上安裝minikube, 真是遇到了各種坑! 感覺最主要的是, 在當前國內的環境下, 是無法訪問谷歌的一些地址, 尤其是各種repository源, 這就造成安裝上的困難!

而且, 國內的文件吧, 參差不齊, 沒有一個特別好的、系統性強的文件供參考, 可能是我沒有找到特別合適的文件, 但是從百度上搜到的文件, 大多如此, 隻言片語居多.

下載minikube 沒啥難度, homebrew 就搞定了:

brew install minikube

按說, 對於Minikube , 目前最簡單的應該是使用Docker 作為driver, 也就是在啟動Minikube 時候, 指定:

minikube start --driver=docker

但是不知道為啥, 我Mac上面的Docker Desktop , 在啟動Kubernetes 時候始終是失敗的, 原因尚未查明, 畢竟對於K8S的理解和使用還不是那麼深入......

所以, 我在啟動minikube 的時候, 指定了virtualbox:

minikube start --driver=virtualbox

這個時候, 主要是提示訪問不了谷歌的image 源k8s.gcr.io.

現在國內形勢如此, 對於外網的訪問就是艱難, 也不排除國外的"卡脖子"的因素, 作為一名程式設計師也只能是默默開啟公司的vpn, 但是在實際執行的時候, 使用vpn 方案也不太行得通, 裡面會提示說api server 沒有啟動, 導致最後的失敗.

折騰很久, 就是在這個VM 裡面安裝Kubernetes 的時候, 兜兜轉轉, 錯誤很多, 實在是令人氣餒.

三、開箱即用的Minikube 環境介紹

最後沒辦法, 看著Virtualbox 裡面的這個VM, 心想別人應該有分享的VM 吧, 於是到Vagrant Box 市場裡面搜尋了一下,還真的是有, 那就不自己折騰了, 下載下來直接用現成的吧!

Box 市場上的這個環境, 原始碼是在Github 的這個位置:Q24/vagrant-box-centos7-minikube

https://github.com/Q24/vagrant-box-centos7-minikube

作者在基於Centos 7 精簡版之上, 配置了minikube 的環境, 虛擬機器裡面已經安裝有:

ansibleminikubedockerhelmkubectlkubetail

我們作為Vagrant 的終端使用者, 只需要下載這個Vagrantfile 就好了, 這是我在本機啟動好之後的介面, 增加了GNOME 桌面.

在使用預設的vagrant 賬號和密碼登入VM 之後, 啟用桌面環境即可:

startx

minikube 桌面

簡單檢查一下, 可以看到minikube 的狀態是正常而且完整的:

minikube status

minikube status

Minikube的dashboard 也很簡單的開啟:

minikube dashboard
四、透過hello world來快速學習

來一個Hello world的小例子:

        apiVersion: apps/v1        kind: Deployment        metadata:          name: hello-world        spec:          selector:            matchLabels:              run: load-balancer-example          replicas: 2          template:            metadata:              labels:                run: load-balancer-example            spec:              containers:                - name: hello-world                  image: registry.cn-hangzhou.aliyuncs.com/aliyun_google/google-sample-node-hello:1.0                  ports:                    - containerPort: 8080                      protocol: TCP

該檔案簡單描述了一個k8s deployment 資源的屬性, 包含一個deployment, 一個replicaSets 每一個replicaSets 包含兩個Pod.

每個Pod中執行一個容器, 容器的映象源是registry.cn-hangzhou.aliyuncs.com/aliyun_google/google-sample-node-hello:1.0, 容器埠8080.

啟動應用儲存該檔案為 hello-application.yaml, 執行如下命令:

kubectl apply -f ./hello-application.yaml 

檢視deploymen 狀態如下:

kubectl get deployment

kubectl get deployment

暴露應用訪問入口執行如下命令 服務暴露方式為NodePort

 kubectl expose deployment hello-world --type NodePort --name node-service

檢視node-service:

kubectl get service node-service

kubectl get service node-service

kubectl describe service node-service

kubectl describe service node-service

可以看到 服務透過33557 埠對映到容器的8080埠,這樣我們就可以透過 33557埠訪問容器內的web應用了. 如下響應正常

瀏覽器訪問

五 虛擬機器分享

最後, 直接把我本地的這個Virtualbox 虛擬機器分享給大家吧, 使用虛擬機器可以免去配置環境的過程, 加快學習的腳步!

檔案3.7G 左右, 可以直接在某度雲盤下載:

連結:https://pan.baidu.com/s/1pq-sYaWEUOxNipUqnRbp7A

2
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 基於Rancher的ElasticSearch K8S搭建