使用minikube部署k8s

警告
本文最后更新于 2022-07-01,文中内容可能已过时。

Minikube 是一个易于在本地运行 Kubernetes 的工具,可在你的笔记本电脑上的虚拟机内轻松创建单机版 Kubernetes 集群。便于尝试 Kubernetes 或使用 Kubernetes 日常开发。

关闭防火墙,selinux

安装过程本文不再赘述 minikube 安装是需要开启虚拟化支持的,如果不开启,也可以用docker来支持。

Minikube 还支持使用一个 --driver=none 选项,让 Kubernetes 组件运行在主机上,而不是在 VM 中。 使用这种驱动方式需要 Docker 和 Linux 环境,但不需要 hypervisor。

1
2
3
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
mv ./kubectl /usr/local/bin/kubectl

下载失败使用以下命令

1
2
3
curl -Lo kubectl http://rancher-mirror.cnrancher.com/kubectl/v1.18.9/linux-amd64-v1.18.9-kubectl
chmod +x ./kubectl
mv ./kubectl /usr/local/bin/kubectl

本文以CentOS7为例,其他机器参考minikube-Installation

这里使用阿里minikube

1
2
3
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.13.0/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/

安装conntrack-tools

1
yum -y install conntrack-tools

启动集群

1
minikube start --driver=none --registry-mirror=https://registry.docker-cn.com --kubernetes-version=v1.18.9

常见参数

  • --driver=none Minikube使用无驱动程序的方式来创建Kubernetes本地环境
  • --registry-mirror=***为了拉取Docker Hub镜像,需要为 Docker daemon 配置镜像加速,参考阿里云镜像服务
  • --kubernetes-version=***: minikube 虚拟机将使用的 kubernetes 版本

Minikube利用本地虚拟机环境部署Kubernetes,其基本架构如下图所示。

minikue的工作原理

看到如下内容表示启动成功

状态

创建一个名为hello-minikube的Deployment,使用e2eteam/echoserver:2.2镜像,暴露8000端口,副本pod数为3

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# API 版本号
apiVersion: apps/v1
# 类型,如:Pod/ReplicationController/Deployment/Service/Ingress
kind: Deployment
metadata:
  # Kind 的名称
  name: hello-minikube
spec:
  selector:
    matchLabels:
      # 容器标签的名字,发布 Service 时,selector 需要和这里对应
      app: hello
  # 部署的实例数量
  replicas: 3
  template:
    metadata:
      labels:
        app: hello
    spec:
      # 配置容器,数组类型,说明可以配置多个容器
      containers:
      # 容器名称
      - name: hello-minikube
        # 容器镜像
        image: e2eteam/echoserver:2.2
        # 只有镜像不存在时,才会进行镜像拉取
        imagePullPolicy: IfNotPresent
        ports:
        # Pod 端口
        - containerPort: 8080

执行命令

1
kubectl apply -f hello.yaml

查看创建的对象

1
2
kubectl get deployment
kubectl get po

创建svc,通过Nodeport方式暴露服务

1
kubectl expose deployment hello-minikube --type=NodePort

查看svc,可以看到NodePort随机分配的端口为30216

1
kubectl get svc

image-20210205113549220

接下来,在用户操作系统就可以通过minikube虚拟机的ip地址:30216来访问这个hello-minikube svc了,svc会把8080口的请求再负载均衡到实际的hello-minikube pod上。

更方便的,可以使用minikube server命令直接获取到svc的访问地址:

1
minikube service hello-minikube --url

测试访问

1
curl $(minikube service hello-minikube --url)

可以看到,每次的访问请求是都进入不同的pod,与kubectl get po命令所示的pod一致。

image-20210205114129665

删除svc

1
kubectl delete service hello-minikube

删除deployment

1
kubectl delete deployment hello-minikube

停止minikube

1
minikube stop