为什么要搭建本地K8S集群
- 资源节省:相较于在云环境中创建集群,本地运行可以节省云资源费用。
- 离线工作:可以在没有互联网连接的情况下进行开发和测试,适合某些特定场景。
- 简易部署:本地环境可以快速在启动 Kubernetes 集群,无需登录云环境快速拉起各种资源。
- 快速迭代:开发者可以快速修改和测试应用程序,而不必等待云端资源的配置。
minikbe的优点
- 学习和实验:对于学习 Kubernetes 的新手,Minikube 提供了一个安全的环境来实验和学习各种功能。
- 多种驱动支持:Minikube 支持多种虚拟化驱动(如 VirtualBox、Docker 等),用户可以根据自己的环境选择合适的驱动。
- 社区支持:Minikube 拥有活跃的社区和丰富的文档,方便用户获取帮助和资源。
- 集成工具:可以与其他开发工具(如 Helm、Kubectl 等)无缝集成,提升开发效率。
minkube安装与配置
- 安装docker
Minikube 支持多种虚拟化驱动,我们这里选择docker。
brew install --cask docker
- 安装minkbe
使用Curl的方式下载minikube执行程序
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && sudo install minikube-darwin-amd64 /usr/local/bin/minikube
3.启动minikube
首次启动需要指定一些配置,建议用国内的镜像地址
minikube start --image-mirror-country='cn' \
--image-repository=gcr.lank8s.cn \
--driver='docker' \
--kubernetes-version=v1.28.12
minikube start常用的选项
- --image-mirror-country 地区
- --driver 虚拟化驱动
- --image-repository 镜像仓库地址
- --kubernetes-version k8s版本
4.设置kubectl别名
alias kubectl="minikube kubectl --"
尝试使用 kubectl
➜ ~ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6554b8b87f-r5dp9 1/1 Running 0 106s
kube-system etcd-minikube 1/1 Running 0 119s
kube-system kube-apiserver-minikube 1/1 Running 0 119s
kube-system kube-controller-manager-minikube 1/1 Running 0 119s
kube-system kube-proxy-6vzr4 1/1 Running 0 106s
kube-system kube-scheduler-minikube 1/1 Running 0 119s
kube-system storage-provisioner 1/1 Running 0 118s
部署和测试简单的服务
1.部署服务
创建Kubernetes部署、服务类型NodePort
kubectl create deployment hello-minikube1 --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube1 --type=NodePort --port=8080
2.启用本地访问
minikube服务hello-minikube1作为进程运行,创建到集群的隧道。该命令将服务直接暴露给主机操作系统上运行的任何程序。
➜ ~ minikube service hello-minikube1 --url
http://127.0.0.1:52106
➜ ~ curl http://127.0.0.1:52106/test
Request served by hello-minikube1-5f7945679-md6vs
HTTP/1.1 GET /test
Host: 127.0.0.1:52106
Accept: */*
User-Agent: curl/8.4.0
配置访问apiserver
1.创建token配置文件
mkdir -p ~/.minikube/files/etc/ca-certificates
cd ~/.minikube/files/etc/ca-certificates
#分别对应`token`, `user`, `uid`, and `groups`
cat > tokens.csv << EOF
token1,user1,1,"admin,dev"
token2,user2,2,dev
EOF
2.创建ClusterRoleBinding配置
cat > admin-binding.yaml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin
subjects:
- kind: User
name: user1
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
EOF
➜ ~ kubectl apply -f admin-binding.yaml
3.启动minikube
minikube start --extra-config=apiserver.token-auth-file=/etc/ca-certificates/tokens.csv
4.访问apiserver
找到apiserver映射到本机的端口53403
~ docker port minikube
22/tcp -> 127.0.0.1:53398
2376/tcp -> 127.0.0.1:53399
32443/tcp -> 127.0.0.1:53400
5000/tcp -> 127.0.0.1:53402
8443/tcp -> 127.0.0.1:53403
这样就可以访问到apiserver了
curl --header "Authorization: Bearer token1" --cacert ~/.minikube/ca.crt https://127.0.0.1:53403/api/
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "192.168.49.2:8443"
}
]
}