作者:半身风雪
上一节:Kubernetes 概述
一、创建Minikube
- 上一节我们一起安装了Minikube 集群,接下来我们可以在Docker 控制面板中启动,也可以直接使用命令启动
minikube start
如果这里报错: /etc/kubernetes: mkdir /etc/kubernetes: permission denied
❌ Exiting due to GUEST_START: Failed kubeconfig update: writing kubeconfig: Error creating directory: /etc/kubernetes: mkdir /etc/kubernetes: permission denied
原因:$KUBECONFIG 变量被占用了
解决:重置$KUBECONFIG 变量
unset KUBECONFIG
强制使用root 身份执行:
minikube start --force --driver=docker
😄 Darwin 12.1 上的 minikube v1.26.0 ❗ minikube skips various
validations when --force is supplied; this may lead to unexpected
behavior 🆕 Kubernetes 1.24.1 is now available. If you would like to
upgrade, specify: --kubernetes-version=v1.24.1 ✨ 根据现有的配置文件使用 docker
驱动程序 👍 Starting control plane node minikube in cluster minikube 🚜
Pulling base image …
> index.docker.io/kicbase/sta…: 0 B [_____________________] ?% ? p/s 2m7s 🏃 Updating the running docker “minikube” container … 🐳
正在 Docker 20.10.12 中准备 Kubernetes v1.23.3…
▪ kubelet.housekeeping-interval=5m 🔎 Verifying Kubernetes components…
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
▪ Using image kubernetesui/dashboard:v2.6.0
▪ Using image kubernetesui/metrics-scraper:v1.0.8 🌟 Enabled addons: storage-provisioner, default-storageclass, dashboard 🏄 Done!
kubectl is now configured to use “minikube” cluster and “default”
namespace by default
- 在浏览器中打开 Kubernetes 仪表板(Dashboard)
minikube dashboard
运行之后,会为我们打开一个Web 浏览器界面
在这里,我们可以在仪表板上创建 Kubernetes 资源,例如 Deployment 和 Service。
二、创建Deployment
- 使用 kubectl create 命令创建管理 Pod 的 Deployment。
kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
- 查看 Deployment
kubectl get deployments
输出结果:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 0/1 1 0 23s
- 查看 Pod
kubectl get pods
输出结果:
NAME READY STATUS RESTARTS AGE
hello-node-6b89d599b9-6bbjk 1/1 Running 0 4m54s
- 查看集群事件:
kubectl get events
这里会输出集群的所有事件
- 查看 kubectl 配置:
kubectl config view
kubectl 输出当前的所有配置
三、创建 Service
- 使用 kubectl expose 命令将 Pod 暴露给公网:
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
这里的 --type=LoadBalancer 参数表明你希望将你的 Service 暴露到集群外部。
输出结果:
service/hello-node exposed
镜像 k8s.gcr.io/echoserver 中的应用程序代码仅监听 TCP 8080 端口。 如果你用 kubectl expose 暴露了其它的端口,客户端将不能访问其它端口。
- 查看你创建的 Service:
kubectl get services
输出结果:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.107.63.235 8080:31848/TCP 42s
kubernetes ClusterIP 10.96.0.1 443/TCP 41m
对于支持负载均衡器的云服务平台而言,平台将提供一个外部 IP 来访问该服务。 在 Minikube 上,LoadBalancer 使得服务可以通过命令 minikube service 访问。
- 运行下面的命令:
minikube service hello-node
运行输出结果:
|-----------|------------|-------------|---------------------------| |
NAMESPACE | NAME | TARGET PORT | URL |
|-----------|------------|-------------|---------------------------| |
default hello-node 8080 http://192.168.49.2:31848 🏃 Starting tunnel for service hello-node. ----------- ------------ ------------- ------------------------ NAMESPACE NAME TARGET PORT URL ----------- ------------ ------------- ------------------------ default hello-node http://127.0.0.1:52309 ----------- ------------ ------------- ------------------------ 正通过默认浏览器打开服务 default/hello-node… ❗ Because you are using a Docker driver on darwin, the terminal needs to be open to run it.
并且浏览器会为我们打开当前应用程序服务页面
四、启用插件
- 使用
minikube addons list
查看当前所有支持的插件
- 启动一个插件
minikube addons enable metrics-server
启动成功会有提示
▪ Using image k8s.gcr.io/metrics-server/metrics-server:v0.6.1 🌟 启动 'metrics-server' 插件
-
使用
kubectl get pod,svc -n kube-system
命令,查看创建的 Pod 和 Service -
也可以使用
minikube addons disable metrics-server
命令来禁用插件
五、删除集群
- 上面我完成了创建集群服务,那么怎么删除呢?请看下面的删除命令:
kubectl delete service hello-node
kubectl delete deployment hello-node
- 可以使用stop 停止Minikube 虚拟机
minikube stop
- 删除 Minikube 虚拟机(VM)
minikube delete
总结
本节我们学习如何使用 Minikube 和 Katacoda 在 Kubernetes 上运行一个程序应用。Katacoda 提供免费的浏览器内 Kubernetes 环境。