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