随着容器化、微服务、服务网格、服务编排、DevOps 等云原生技术的风行,咱们也要跟上时代的步调,那么咱们须要怎么上车呢?此时就须要一个易于在本地运行且 Kubernetes 的工具,可在你的笔记本电脑上的虚拟机内轻松创立单机版 Kubernetes 集群,便于咱们应用 Kubernetes 进行日常开发与学习。那么接下让咱们轻松地搭建一个更贴近实在的 K8s 环境。
工具举荐
对于本地试验,还能够应用各种 Kubernetes 实现以运行 Kubernetes 群集,如
- Kind (https://kind.sigs.k8s.io/)
- Minikube (https://minikube.sigs.k8s.io/docs/)
- MicroK8s (https://microk8s.io/)
- 在线体验 K8s (https://labs.play-with-k8s.com/)
- Dockerized (https://github.com/y0ngb1n/dockerized) 举荐我的集体我的项目,欢送 Star
应用下面任一工具的指标都能疾速运行一个本地学习的 Kubernetes 群集,其中我集体最喜爱的是 Kind。
搭建 K8s 集群
上面别离尝试 Kind 与 Minikube 创立单机版 Kubernetes 集群。
先装置 kubectl
无论应用哪个工具,都须要先正确装置 kubectl
Kubernetes 命令行工具,否则装置完 Kind、Minikube 等环境后无奈执行 kubectl
命令。
- 装置文档:https://kubernetes.io/zh/docs...
应用 Kind 创立 K8s 集群
kind is a tool for running local Kubernetes clusters using Docker container “nodes”.
装置 kind
Kind 提供了多种装置形式,反对以下形式:
- On macOS via Homebrew
- On macOS via MacPorts
- On Windows via Chocolatey
- Installing From Release Binaries
- Installing From Source
这里将在 Linux 环境下以 Installing From Release Binaries 形式进行装置:
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64chmod +x ./kind# mv ./kind /some-dir-in-your-PATH/kind
创立 K8s 集群
kind create cluster# kind delete cluster
测验装置环境
️ ~ kind get clusterskind
应用 Minikube 创立 K8s 集群
装置 minikube
抉择不同环境下的装置形式,参考 https://minikube.sigs.k8s.io/docs/start/
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudo install minikube-linux-amd64 /usr/local/bin/minikube
国内网络环境,应用如下命令将主动应用阿里云服务来反对 minikube
的环境配置,参考 https://developer.aliyun.com/article/221687
minikube start --image-mirror-country='cn'# minikube delete
测验装置环境
️ ~ minikube statusminikubetype: Control Planehost: Runningkubelet: Runningapiserver: Runningkubeconfig: Configured
启动 K8s 控制台,参考 https://minikube.sigs.k8s.io/docs/handbook/dashboard/
minikube dashboard# orminikube dashboard --url
查看 minikube
反对的扩大列表,参考 https://minikube.sigs.k8s.io/docs/handbook/deploying/
minikube addons list
测验 K8s 集群
️ ~ kubectl versionClient Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.1", GitCommit:"5e58841cce77d4bc13713ad2b91fa0d961e69192", GitTreeState:"clean", BuildDate:"2021-05-12T14:18:45Z", GoVersion:"go1.16.4", Compiler:"gc", Platform:"linux/amd64"}Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.3", GitCommit:"c92036820499fedefec0f847e2054d824aea6cd1", GitTreeState:"clean", BuildDate:"2021-10-27T18:35:25Z", GoVersion:"go1.16.9", Compiler:"gc", Platform:"linux/amd64"}# 查看以后指向的 k8s 环境,kind/minikube 装置时会主动批改 kubectl 配置️ ~ kubectl config current-contextkind-kind# 如本地有多个 k8s 环境,可手动切换️ ~ kubectl config use-context minikubeSwitched to context "minikube".# 查看服务器节点️ ~ kubectl get noNAME STATUS ROLES AGE VERSIONminikube Ready control-plane,master 36m v1.22.3️ ~ kubectl get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIMEminikube Ready control-plane,master 15m v1.22.3 192.168.49.2 <none> Ubuntu 20.04.2 LTS 5.4.0-42-generic docker://20.10.8# 查看 k8s 集群信息️ ~ kubectl cluster-infoKubernetes control plane is running at https://192.168.49.2:8443CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
K8s 初体验
疾速尝鲜
# 启动单实例 nginx️ ~ kubectl create deployment nginx-depl --image=nginx# 查看运行的实例️ ~ kubectl get podNAME READY STATUS RESTARTS AGEnginx-depl-5c8bf76b5b-zw8ms 1/1 Running 0 70s# 转发一个本地 8080 端口到 Pod 80 端口️ ~ kubectl port-forward nginx-depl-5c8bf76b5b-zw8ms 8080:80# 本地拜访️ ~ curl 127.0.0.1:8080# 革除实例️ ~ kubectl delete deployment nginx-depl
小试牛刀
nginx-pod.yml
apiVersion: v1kind: Podmetadata: name: nginx labels: app: nginxspec: containers: - name: nginx image: nginx
nginx-svc.yml
apiVersion: v1kind: Servicemetadata: name: nginx-svcspec: ports: - name: http port: 80 targetPort: 80 nodePort: 31080 selector: app: nginx type: NodePort
执行命令:
# 一键公布,启动实例️ ~ kubectl apply -f .# 调试 Pod️ ~ kubectl describe pod nginx️ ~ kubectl port-forward nginx 8080:80# 调试 Service️ ~ kubectl describe svc nginx-svc️ ~ kubectl port-forward service/nginx-svc 8080:80# 革除实例️ ~ kubectl delete -f .
注意事项
- 须要先正确装置
kubectl
- 通过 Port-Forward 可本机拜访 Pod,仅限本地调试环境,如
curl 127.0.0.1:8080
- 通过 Service 反向代理时,须要应用 K8s 集群的 IP 进行拜访,应用
kubectl get nodes -o wide
查看 K8s 集群的 IP - Service 是 K8s 提供反向代理的机制,负责反向路由+负载平衡
- NodePort 是 Service 的一种类型,可将 Service 裸露给外网
- NodePort 范畴
30000~32767
- Label 是 K8s 的种打标签机制
- Selector 是 K8s 中的路由抉择定位机制
- 应用 Kind 或 Minikube 部署的 K8s 集群,node 基于容器运行而不是宿主机,应用 Service 反向代理时,只在 node 节点容器中 kube-proxy 失效,应用
docker exec -it kind-control-plane bash
验证这一点,而不是间接映射在宿主机上
K8s 故障排查指南
参考链接
- https://kubernetes.io/zh/docs...
- https://kind.sigs.k8s.io/docs...
- https://developer.aliyun.com/...
- https://learnk8s.io/troublesh...
- https://b23.tv/2yDbtP9
- https://youtube.com/playlist?...