淺入Kubernetes(4):使用Minikube體驗


Minikube

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

PS:買台香港的服務器吧,或者白嫖 Google 、Azure 的試用額度。不然就有 N 種網絡問題。

或者直接下載 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM