【k8s系列】四、minikube单机版的K8s集群

1,223 阅读3分钟

什么是minikube

Kubernetes 一般都运行在大规模的计算集群上,管理很严格,这就对我们个人来说造成了一定的障碍,没有实际操作环境怎么能够学好用好呢?minikube,可以在本机上运行完整的 Kubernetes 环境,支持 Mac、Windows、Linux 这三种主流平台

minikube最大特点就是“小而美”,可执行文件仅有不到100MB,运行镜像也不过 1GB,但就在这么小的空间里却集成了Kubernetes的绝大多数功能特性,不仅有核心的容器编排功能,还有丰富的插件,例如 Dashboard、GPU、Ingress、Istio、Kong、Registry 等等,综合来看非常完善

搭建minikube环境

官方网站地址
文档 https://minikube.sigs.k8s.io/docs 访问
下载 https://minikube.sigs.k8s.io/docs/start 访问

image.png

linux 版本

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

mac版本

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr/local/bin/minikube

下载成功后,执行minikube version查看版本

minikube version

image.png

不过minikube只能够搭建Kubernetes环境,要操作Kubernetes,还需要另一个专门的客户端工具“kubectl”
kubectl 是一个与 Kubernetes、minikube 彼此独立的项目,所以不包含在 minikube 里,minikube 提供了安装它的简化方式

minikube kubectl

把与当前 Kubernetes 版本匹配的 kubectl 下载下来,存放在内部目录(.minikube/cache/linux/arm64/v1.23.3)

minikube环境示意图

Xnip2022-09-13_19-26-43.jpg

验证minikube环境

使用命令minikube start会从Docker Hub上拉取镜像

minikube start --kubernetes-version=v1.23.3

image.png

可以使用minikube status、minikube node list这两个命令来查看集群的状态

minikube status
minikube node list

查看状态 image.png

查看节点信息 image.png

Kubernetes集群里现在只有一个节点,名字就叫“minikube”,类型是“Control Plane” 这里面一共有三个服务host、kubelet、apiserver
可以使用命令minikube ssh登录到这个节点上,虽然它是虚拟的,但用起来和实机也没什么区别

有了集群,接下来就可以使用 kubectl 来操作一下,初步体会 Kubernetes 这个容器编排系统
kubectl version这条命令还不能直接用,要在前面加上 minikube 的前缀,后面再有个 --,如:minikube kubectl -- version,为了避免这个不大不小的麻烦,使用 Linux 的“alias”功能,创建一个别名写到 .bashrc

alias kubectl="minikube kubectl --"

kubectl 还提供了命令自动补全的功能 source <(kubectl completion bash)

image.png

kubectl get node

image.png

kubectl get pod -n kube-system

image.png

查看kubernetes的api对象

kubectl api-resources

Xnip2022-09-13_21-15-18.jpg

SHORTNAMES 为简写

运行一个nginx 进行测试

暂时先不展开说明yaml如何编写,后续的文章会进行展开说明。本次先运行一个nginx进行测试刚才的minikube环境

创建deploy

生成ngx-deploy.yml

 kubectl create deploy ngx-dep --image=nginx:alpine --dry-run=client -o yaml

image.png

修改 ngx-deploy.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ngx-dep
  name: ngx-dep
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ngx-dep
  template:
    metadata:
      labels:
        app: ngx-dep
    spec:
      containers:
      - image: nginx:alpine
        name: nginx

应用ngx-deploy.yml

kubectl apply -f ngx-deploy.yml

image.png

查看deploy

kubectl get deploy -o wide

image.png

创建services

生成ngx-svc.yml

kubectl expose deploy ngx-dep --port=80 --target-port=80 --dry-run=client -o yaml

image.png

修改ngx-svc.yml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: ngx-dep
  name: ngx-dep
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: ngx-dep

应用ngx-svc.yml

kubectl apply -f  ngx-svc.yml

image.png

查看services

 kubectl get svc -o wide

image.png

使用curl访问nginx

查看节点IP

kubectl get node -o wide

image.png

查看节点IP

minikube node list

image.png

使用curl进行访问

创建services的时候使用了NodePort
会在节点上暴露一个端口,可以通过节点ip:端口号的方式访问services

curl "http://192.168.49.2:30616"

image.png

希望本篇文章对你有所帮助,谢谢。