快速上手k8s——minikube最小實(shí)現(xiàn)

前言

最近在研究k8s,就來寫一個關(guān)于k8s快速上手,并記錄采坑的點(diǎn)。
需要的前置知識點(diǎn):docker、k8s的一些基本概念,下面這個可能對你有幫助。
https://juejin.im/post/5d1b2a656fb9a07edc0b7058

什么是k8s

我們知道,我們可以將項(xiàng)目制作成docker鏡像,然后利用docker去部署我們的項(xiàng)目,這樣可以解決很多服務(wù)器環(huán)境所帶來的問題;
但是容器多了,容器與容器之間就需要訪問,之間就需要網(wǎng)絡(luò)配置等等,從而就有了docker-compose;
但是當(dāng)我們的服務(wù)進(jìn)行升級,或者服務(wù)需要進(jìn)行調(diào)度,擴(kuò)容等等,這個時候就需要一個大管家來管所有的東西;
這個大管家就是 - Kubernetes

初學(xué)會遇到的問題

因?yàn)閗8s的東西太多了,所以學(xué)習(xí)成本現(xiàn)在越來越高,好在k8s已經(jīng)很多教程。我說一下現(xiàn)在學(xué)的時候肯定會遇到的大問題:

  • 國內(nèi)的問題(國內(nèi)環(huán)境很多鏡像拉不到)
  • 本地搭建環(huán)境(原來搭建k8s需要一些服務(wù)器)
  • 電腦環(huán)境的問題(windows和mac都有坑點(diǎn))

最小實(shí)現(xiàn)

現(xiàn)在我們就來在本機(jī)實(shí)現(xiàn)一個最小的k8s的實(shí)現(xiàn),給出一個hello-world
k8s提供了minikube,這個東西可以讓你本機(jī)一臺機(jī)器就可以搭建起這個環(huán)境。擁有和線上一樣的命令行操作和模式,但是不需要你再去創(chuàng)建很多虛擬機(jī)來搞事情了。超級方便也。
https://minikube.sigs.k8s.io/
我們就利用這個來實(shí)現(xiàn),下面來說說步驟:
我的本機(jī)環(huán)境:

  • macOS
  • minikube version: v1.5.2
  • Docker version 18.03.1-ce

安裝環(huán)境

大致步驟:https://minikube.sigs.k8s.io/docs/start/macos/

  • brew install minikube
  • brew install docker-machine-driver-vmware
  • minikube start --vm-driver=vmware --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

成功之后:

  • minikube status 查看minikube的狀態(tài)
  • minikube ip 查看minikube的ip
  • minikube dashboard 打開dashboard展示k8s的狀態(tài)

安裝坑點(diǎn)

  • HyperKit最新版本可能存在問題,所以我使用VMware Fusion實(shí)現(xiàn)虛擬化的依賴
  • 國內(nèi)k8s.gcr.io的相關(guān)鏡像國內(nèi)拉取不到,使用mirrorgooglecontainers也無法拉取到,所以使用阿里云的倉庫 https://github.com/kubernetes/minikube/issues/3860
  • 如果之前已經(jīng)使用過minikube start命令,建議先minikube delete,并刪除rm -rf ~/.minikube/,然后重新start

進(jìn)行部署

首先描述一下部署要做的事情:linkinstar/mini-go:v1.0 是我已經(jīng)上傳到 docker-hub 里面的一個已經(jīng)做好的最簡單的項(xiàng)目,會暴露一個8080端口的web服務(wù);
最終的目標(biāo),在k8s創(chuàng)建一個pod,pod中運(yùn)行一個我們的容器,最終我們在外部可以訪問到這個服務(wù)

首先創(chuàng)建兩個文件

# deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mini-go
  labels:
    app: mini-go
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mini-go
  template:
    metadata:
      labels:
        app: mini-go
    spec:
      containers:
      - name: mini-go
        image: linkinstar/mini-go:v1.0
        ports:
        - containerPort: 8080

# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mini-go-service
spec:
  selector:
    app: mini-go
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30008

執(zhí)行

  • kubectl create -f service.yaml
  • kubectl create -f deploy.yaml

查看

執(zhí)行成功可以再dashboard中查看執(zhí)行狀態(tài)


image

image

最終訪問地址查看到服務(wù)是否正常:http://192.168.231.146:30008/
其中的ip是通過 minikube ip 命令查看的

服務(wù)操作

水平伸縮

在現(xiàn)實(shí)的業(yè)務(wù)環(huán)境中,當(dāng)用戶的訪問增多,我們需要擴(kuò)展我們的應(yīng)用,也就是水平的去多部署幾個容器,有了k8s之后這件事就變得非常的容易了。

  • 修改 deploy.yaml 文件中的 replicas: 2 改成2個
  • 使用命令:kubectl apply -f deploy.yaml 使配置生效

然后我們就可以看到,原來的一個pod變成了兩個,而k8s會將我們的請求負(fù)載均衡到每個pod中。整個過程可以說是非常的優(yōu)雅了。

image

同樣的,當(dāng)我們需要減少服務(wù)的數(shù)量時也是相同的道理

版本升級

對于應(yīng)用的版本升級也是同樣的道理

  • 修改 deploy.yaml 文件中的 image: linkinstar/mini-go:v2.0 改成2.0
  • 使用命令:kubectl apply -f deploy.yaml 使配置生效

版本回退

當(dāng)我們發(fā)現(xiàn)發(fā)布的服務(wù)問題,想要進(jìn)行版本回退的時候,就可以使用
kubectl rollout undo deployments/mini-go
進(jìn)行版本回退,下面是版本回退過程中

image

讓minikube的dashboard能外網(wǎng)訪問

當(dāng)我們使用minikube搭建一個k8s的環(huán)境時,如何使用的時候服務(wù)器并不是使用本機(jī)進(jìn)行搭建,那么會遇到dashboard頁面沒有辦法被外部訪問的問題。解決方式如下:

啟動

首先使用minikube dashboard命令啟動

# minikube dashboard
??  Verifying dashboard health ...
??  Launching proxy ...
??  Verifying proxy health ...
http://127.0.0.1:42968/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

然后記住最下面的訪問地址:http://127.0.0.1:42968/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

設(shè)置代理

再打開一個sh窗口
使用 kubectl proxy --port=[需要暴露的端口號] --address='[服務(wù)器IP]' --accept-hosts='^[外部訪問服務(wù)器的IP]$' 添加k8s集群對外的訪問代理。

# kubectl proxy --port=8887 --address='172.31.251.45' --accept-hosts='^.*'

這里的port是你后面通過外網(wǎng)訪問的端口,如果使用云服務(wù)器記得設(shè)置防火墻規(guī)則,其中的address為服務(wù)器ip地址可以使用minikube ip命令獲得,我這里允許的是任意機(jī)器

瀏覽器訪問

http://192.168.1.101:8887/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/cronjob?namespace=default

  • 其中的ip為服務(wù)器的ip
  • 端口為代理設(shè)置的端口
  • 剩下的地址為dashboard啟動時顯示的地址

如果上述測試沒有問題使用 nohup 后臺啟動就可以了

總結(jié)

  • 使用minikube可以快速讓新手感受到k8s到底是如何使用的
  • 環(huán)境配置過程中會有很多問題,需要你耐心解決
  • k8s在服務(wù)編排上面除了以上提到的用法以外還有很多牛逼的功能等著你去發(fā)現(xiàn)
  • 學(xué)習(xí)過程中需要保持一個原則,先用著看看 -> 搞清楚架構(gòu) -> 嘗試各種功能 -> 學(xué)習(xí)各個模塊的實(shí)現(xiàn) -> 最終實(shí)踐
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 容器技術(shù)是微服務(wù)技術(shù)的核心技術(shù)之一,并隨著微服務(wù)的流行而迅速成為主流。Docker是容器技術(shù)的先驅(qū)和奠基者,它出現(xiàn)...
    倚天碼農(nóng)閱讀 1,233評論 1 4
  • k8s容器編排 [TOC] 1:k8s集群的安裝 1.1 k8s的架構(gòu) 除了核心組件,還有一些推薦的Add-ons...
    Zh_bd92閱讀 992評論 0 0
  • 公司給配的工作機(jī)器是Win10電腦,閑來無事想體驗(yàn)一下K8S的魔力,到處搜了攻略文章最終成功,記錄一下過程和中間遇...
    無式閱讀 6,868評論 0 7
  • 昨天半夜里小妹妹起來玩,我和媽媽都在旁邊守著。小妹妹被哄睡著了,媽媽也睡著了,我沒睡著,一直熬到天亮才睡的覺...
    冷晨樂閱讀 85評論 0 0
  • 讀書是能用最小成本獲取最大價值的一件事。 剛開始讀書要泛讀,不是泛泛的讀,而是廣泛的讀。讀的多了,思維就更寬泛了,...
    我還是個孩子呢閱讀 146評論 0 0

友情鏈接更多精彩內(nèi)容