搭建本地集群并开始使用 kubectl
用 minikube 运行单节点集群,用 kubectl 连接它,并学习你每天都会用到的命令。
生产集群有许多节点,但为了学习,你需要一个在自己机器上的集群。常见的选择有 minikube、kind,以及 Docker Desktop 内置的 Kubernetes 选项。本指南使用带 Docker 驱动的 minikube。kubectl 命令在它们上面都是相同的,在任何真实集群上也是如此。
安装容器工具、minikube 和 kubectl
minikube 需要容器运行时或虚拟机来承载它的节点。Docker 是最常见的选择,所以请先安装 Docker Desktop(或在 Linux 上安装 Docker Engine),并确保它正在运行。然后安装 minikube 和 kubectl。在使用 Homebrew 的 macOS 上:
brew install minikube kubectl
对于其他系统,请遵循 minikube 安装页面和 kubectl 安装文档,它们提供了适用于每种操作系统的最新说明。minikube 大约需要 2 个 CPU、2 GB 空闲内存和 20 GB 磁盘。
启动集群
minikube start --driver=docker
minikube status
第一次启动较慢,因为 minikube 要下载它需要的镜像。驱动设置意味着整个 minikube 节点在你的机器上作为一个 Docker 容器运行。在该节点内部,Kubernetes 用它自己的容器运行时运行你的 Pod,所以有两层容器。这起初看起来可能令人困惑,但不影响你使用集群的方式。
确认 kubectl 能连上它
kubectl cluster-info
kubectl get nodes
你应该会看到一个具有 control-plane 角色且状态为 Ready 的节点。这个单一节点同时运行控制平面和你的工作负载,这正是架构指南中所描述的本地开发捷径。
理解 kubeconfig 与 context
为了让 kubectl 与集群通信,它需要集群的地址和凭据。它从一个 kubeconfig 文件中读取它们,默认是 ~/.kube/config,minikube start 会为你添加一个条目。每个条目将一个集群、一个用户,以及可选的一个默认命名空间组合成一个 context:
kubectl config get-contexts
kubectl config current-context
kubectl config use-context minikube
在运行任何破坏性操作之前,请检查当前的 context。如果你的 kubeconfig 还包含 staging 或 production 集群,当前的 context 决定了你的命令会作用到哪一个。
学习日常命令
kubectl get pods # list Pods in the current namespace
kubectl get pods -A # list Pods in all namespaces
kubectl describe pod NAME # details and recent events for one Pod
kubectl logs NAME # a container's output
kubectl delete pod NAME # remove a Pod
kubectl api-resources # every resource type the cluster knows
kubectl explain pod.spec # built-in reference for any field
kubectl get --help # help for any command
kubectl explain 值得记住:它直接从集群的 API 中,文档化每个资源的每个字段,所以你很少需要离开终端去查某个字段。
当你一天的工作结束时,minikube stop 会暂停集群,而 minikube delete 会将其完全删除。
热门指南
-
Kubernetes 是什么,以及它解决的问题 为什么仅靠容器无法继续扩展,以及 Kubernetes 如何把一组机器变成一个平台。 -
Kubernetes 集群如何工作:控制平面与节点 让集群运转的各个组件,以及从 kubectl apply 到运行中的容器之间发生了什么。 -
Deployment:扩缩、自愈与滚动更新 运行一个 Pod 的多个副本,无停机地更新它们,并在发布出问题时回滚。 -
Service:为短暂的 Pod 提供稳定的网络 给 Pod 一个稳定的地址,在集群内外暴露它们,并限制谁可以与谁通信。 -
调试失败的 Pod:describe、logs、exec 与 port-forward 一份可重复的清单,用来找出 Pod 为什么是 Pending、崩溃或没有响应。