關注“Java藝術”一起來充電吧!
本篇內容:
本地安裝
minikube
在本地單節點Kubernetes集羣上部署服務
本地安裝用於學習的單節點Kubernetes集羣
Kubernetes
官方文檔有《互動教程》,可以在線學習kubectl
的使用,而不需要自己搭建Kubernetes
環境,但沒有dashboard
,網絡不好會很卡。而minikube
是一個快速搭建單節點Kubenetes
集羣的工具,可以在本地快速的搭建一個單節點的Kubenetes集羣,並且提供dashboard
,這對新手比較友好。
也可以在阿里雲上、或者aws
購買Kubernetes
服務用於學習,服務器按需購買,在搭建項目框架時,還是可以先體驗一把的,也更接近生產環境。後續文章也會跟大家分享如何在阿里雲Kubernetes
上部署服務。
下面是分享筆者在學習Kubernetes
過程中,在mac os
上安裝minikube
時留下的筆記。在安裝minikube
之前需要先安裝一個虛擬機,如VirtualBox
、VMWare 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 Fusion
:vmwarefusion
VirtualBox
:virtualbox
後續啓動不需要再指定一大堆參數:
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集羣上部署服務
首先確保本地機器上已經安裝了VirtualBox
、minikube
、Docker
、kubectl
。
在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
打標籤,再將鏡像push
到docker hub
,push
之前需要先登陸。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藝術
掃碼關注最新動態