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
。
--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