首頁 > 軟體

Minikube搭建Kubernetes叢集

2022-03-31 13:08:17

Minikube

開啟 https://github.com/kubernetes/minikube/releases/tag/v1.19.0 下載最新版本的二進位制軟體包(deb、rpm包),再使用 apt 或 yum 安裝。

或者直接下載 minikube 最新版本二進位制檔案(推薦)。

curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.19.0/minikube-linux-amd64
# 上面的是阿里雲構建的版本,如果使用 google 構建的,需要翻qiang。
#linux版本 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
#win版本 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin

通過 minikube version 命令可以檢視 minikube 的版本,接下來我們使用 minikube start 命令,可以直接建立一個 kubernetes 叢集。minikube 會自動下載 kubeadm、kubectl、kubelet。

如果啟動不起來,可以建立一個 docker 使用者。

    useradd -m docker
    passwd docker
    # 修改密碼後,加入使用者組
    gpasswd -a docker docker

開啟 /etc/sudoers 檔案,在 root ALL=(ALL:ALL) ALL 下 增加新的一行:

docker ALL=(ALL)ALL

然後切換為 docker 使用者:su docker 。

筆者注:如果使用 root 使用者啟動 minikube 命令,會提示錯誤,需要使用非 root 使用者(一般為docker)。如果你不想切換為別的使用者,可以使用 --driver==none

minikube start --driver=none
* Pulling base image ...
* Downloading Kubernetes v1.20.2 preload ...
    > preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB  100.00% 60.04 Mi
    > gcr.io/k8s-minikube/kicbase...: 357.67 MiB / 357.67 MiB  100.00% 7.41 MiB
* Creating docker container (CPUs=2, Memory=4000MB) .../  

接下來 minikube 會拉取各種映象,需要一些時間。minikube 完成初始化後,開啟新的終端視窗,執行 minikube dashboard 啟動面板,根據 URL 地址,可以存取面板。

PS:如果報 X Exiting due to GUEST_MISSING_CONNTRACK: Sorry, Kubernetes 1.20.2 requires conntrack to be installed in root's path,則需要安裝 constrack ,apt install constrack

正常的話,執行 docker ps 後是這樣的。

指令碼

如果覺得麻煩。。。可以用指令碼。。。

新建一個 start.sh,檔案內容如下:

echo -n "Starting Kubernetes..."

minikube version
minikube start --wait=false
sleep 2
n=0
until [ $n -ge 10 ]
do
   minikube addons enable dashboard && break
   n=$[$n+1]
   sleep 1
done
sleep 1
n=0
until [ $n -ge 10 ]
do
   kubectl apply -f /opt/kubernetes-dashboard.yaml &>/dev/null  && break
   n=$[$n+1]
   sleep 1
done

echo "Kubernetes Started"

新建一個 kubernetes-dashboard.yaml ,檔案內容如下:

apiVersion: v1
kind: Namespace
metadata:
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/minikube-addons: dashboard
  name: kubernetes-dashboard
  selfLink: /api/v1/namespaces/kubernetes-dashboard
spec:
  finalizers:
  - kubernetes
status:
  phase: Active
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard-katacoda
  namespace: kubernetes-dashboard
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9090
    nodePort: 30000
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort

把 kubernetes-dashboard.yaml 放到 /opt 目錄中。

然後啟動 啟動 start.sh 即可。

建立 Deployment

Kubernetes Deployment 可以檢查 Pod 的健康狀況,並在 Pod 中的容器終止的情況下重新啟動新的容器。

deployment 可以部署應用並管理範例數量,它提供了一種故障的自我修復機制,當應用掛了後,deployment 可以自動啟動一個新的範例,維護固定數量的 pod。

kubectl create 命令建立管理 Pod 的 Deployment。

kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
# k8s.gcr.io/echoserver:1.4 是映象名稱,hello-node 是 node 名稱

k8s.gcr.io/echoserver 映象暴露了 8080 埠。

檢視 Deployment:

kubectl get deployments

檢視 pod :

kubectl get pods

檢視叢集事件:

kubectl get events

檢視 kubectl 設定:

kubectl config view

建立 Service

預設情況下,pod 只能在 kubernetes 叢集的內部網路存取,如果要外部網路存取,則需要暴露 pod 為 kubnetes service。這裡我們把上一小節的 hello-node 節點暴露出去。

kubectl expose deployment hello-node --type=LoadBalancer --port=8080

然後檢視剛剛建立的 service:

kubectl get services
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-node   LoadBalancer   10.96.194.154   <pending>     8080:31686/TCP   85s
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          22m

然後試用 minikube service 提供一個 ip 供外界存取。

minikube service hello-node
root@instance-1:~# minikube service hello-node
|-----------|------------|-------------|-------------------------|
| NAMESPACE |    NAME    | TARGET PORT |           URL           |
|-----------|------------|-------------|-------------------------|
| default   | hello-node |        8080 | http://10.170.0.2:31686 |
|-----------|------------|-------------|-------------------------|
* Opening service default/hello-node in default browser...
  http://10.170.0.2:31686

清理叢集資源

首先生成 service、deployment 。

kubectl delete service hello-node
kubectl delete deployment hello-node

然後停止 Minikube 虛擬機器器(VM):

minikube stop

接著刪除 Minikube 虛擬機器器(VM):

minikube delete

到此這篇關於Minikube搭建Kubernetes叢集的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com