作者:半身风雪
上一节:Kubernetes 概述
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
minikube dashboard
运行之后,会为我们打开一个Web 浏览器界面
在这里,我们可以在仪表板上创建 Kubernetes 资源,例如 Deployment 和 Service。
kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
kubectl get deployments
输出结果:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 0/1 1 0 23s
kubectl get pods
输出结果:
NAME READY STATUS RESTARTS AGE
hello-node-6b89d599b9-6bbjk 1/1 Running 0 4m54s
kubectl get events
这里会输出集群的所有事件
kubectl config view
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
这里的 --type=LoadBalancer 参数表明你希望将你的 Service 暴露到集群外部。
输出结果:
service/hello-node exposed
镜像 k8s.gcr.io/echoserver 中的应用程序代码仅监听 TCP 8080 端口。 如果你用 kubectl expose 暴露了其它的端口,客户端将不能访问其它端口。
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
minikube stop
minikube delete
本节我们学习如何使用 Minikube 和 Katacoda 在 Kubernetes 上运行一个程序应用。Katacoda 提供免费的浏览器内 Kubernetes 环境。