搭建本地Kubernetes集羣與部署微服務

關注“Java藝術”一起來充電吧!

本篇內容:

  • 本地安裝minikube

  • 在本地單節點Kubernetes集羣上部署服務


本地安裝用於學習的單節點Kubernetes集羣

Kubernetes官方文檔有《互動教程》,可以在線學習kubectl的使用,而不需要自己搭建Kubernetes環境,但沒有dashboard,網絡不好會很卡。minikube是一個快速搭建單節點Kubenetes集羣的工具,可以在本地快速的搭建一個單節點的Kubenetes集羣,並且提供dashboard,這對新手比較友好。

也可以在阿里雲上、或者aws購買Kubernetes服務用於學習,服務器按需購買,在搭建項目框架時,還可以先體驗一把的,也更接近生產環境。後續文章也會大家分享如何在阿里雲Kubernetes上部署服務。

下面是分享筆者在學習Kubernetes過程中,在mac os上安裝minikube時留下的筆記。在安裝minikube之前需要先安裝一個虛擬機,如VirtualBoxVMWare Fusion

爲什麼要裝虛擬機呢?因爲安裝minikube只是用來搭建Kubernetes集羣的工具,而minikube是在虛擬機上搭建的Kubernetes集羣。首次啓動minikube的過程很慢,因爲minikube需要下載安裝Kubernetes所需要的鏡像。

如果使用VMWare Fusion,在啓動minikube時可能會遇到一些坑,作爲初學者,我們肯定不想一開始就折騰,卡住學習的進度,因此筆者建議大家安裝VirtualBox

第一步:安裝kubectl

brew install kubernetes-cli

第二步:安裝虛擬機

 VirtualBox的安裝跳過。

第三步:安裝minikube:

brew install minikube

啓動minikube,由minikube在虛擬機上安裝Kubernetes集羣。

首次啓動minikube需要指定虛擬機驅動--vm-driver,並指定拉取安裝Kubernetes時需要拉取的一些鏡像文件的倉庫地址爲阿里雲提供的鏡像倉庫地址,如果你有vpn,那麼可以不考慮。

minikube start --vm-driver=virtualbox \--image-mirror-country='cn' \--image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

每種虛擬機對應的--vm-driver的值可到官網瞭解,這裏列出兩種常用的:

  • VMWare Fusionvmwarefusion

  • VirtualBoxvirtualbox

後續啓動不需要再指定一大堆參數:

minikube start

電腦重啓之後啓動:

minikube start --image-mirror-country='cn' \--image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

查看狀態:

minikube status

啓動dashboard

minikube dashboard

停止minikube:

minikube stop


在本地單節點Kubernetes集羣上部署服務

首先確保本地機器上已經安裝了VirtualBoxminikubeDockerkubectl

mac上安裝docker可下載dmg安裝,非常簡單,還提供一個Docker dashboard可視化界面。下載鏈接:https://download.docker.com/mac/stable/Docker.dmg

第一步:項目打包

執行 mvn clean package -DskipTests 構建打包服務。

第二步:構建應用程序鏡像

執行 docker-compose build 在本地(或jenkins)構建鏡像。

第三步:將鏡像push到鏡像倉庫

執行 docker image tag 打標籤,再將鏡像pushdocker hubpush之前需要先登陸。push到私有倉庫也是一樣的步驟。

第四步:配置kubectl 

使用kubectl之前確保 ~/.kube/config 的配置已修改爲Kubernetes服務提供的憑據。但使用minikube不需要配置,因爲minikube在啓動Kubernetes集羣時就已經配置好了,但如果是使用阿里雲的容器服務就需要修改配置。

第五步:配置secret(看情況,不是必須的步驟) 

如果是使用私有的鏡像倉庫,則需要爲kubernetes容器從私有鏡像倉庫拉取鏡像提供secret

kubectl create --namespace=default secret \
docker-registry my-docker-reg-secret \
--docker-server=registry.cn-shenzhen.aliyuncs.com \
[email protected] \
--docker-password=xxxxx \
[email protected]

其中--namespace用於指定名稱空間,因爲不同名稱空間下,secret是不共享的。

第六步:將服務部署到Kubernetes 

執行 kubectl apply -f [配置文件] 部署服務。

例如:

kubectl apply -f demo-srv.yaml

demo-srv.yaml的配置文件如下:

apiVersion:apps/v1
kind:Deployment
metadata:
  name:demo-srv
  namespace:default
spec:
  replicas:1
  selector:
    matchLabels:
      app:demo-srv
  template:
    metadata:
      labels:
        app:demo-srv
        env:default
    spec:
      containers:
        - name:demo-srv
          image:registry.cn-shenzhen.aliyuncs.com/wujiuye/demo-srv
          # 鏡像拉取策略:Always(總是拉取)、IfNotPresent(默認值,本地有則使用本地鏡像,不拉取)、Never(只使用本地鏡像,從不拉取)
          imagePullPolicy:Always
          ports:
            - name:http-port
              containerPort:8080
          # 指定環境變量的配置文件
          # envFrom:
          #   - configMapRef:
          #     name: ycpay-common-config
      # 配置拉取鏡像的Secret
      imagePullSecrets:
        - name:my-docker-reg-secret
      # 指定ServiceAccount
      # serviceAccountName: pod-configmap-sa
---
apiVersion:v1
kind:Service
metadata:
  name:demo-srv
  namespace:default
spec:
  selector:
    app:demo-srv
    env:default
  ports:
    - protocol:TCP
      port:80
      targetPort:8080

後續在搭建用於學習的Spring Cloud kubernetes項目時,我們再學習如何將服務部署到阿里雲上的kubernetes,會比本篇介紹的部署在本地kubernetes集羣上覆雜一些,包含一些權限的配置文件,以及配置中心的讀權限、日記收集、網絡這些。

公衆號:Java藝術

掃碼關注最新動態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章