前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用minikube快速部署单机版k8s

使用minikube快速部署单机版k8s

原创
作者头像
langwu 吴英文
发布2020-05-29 21:53:12
5.2K0
发布2020-05-29 21:53:12
举报
文章被收录于专栏:lang的专栏lang的专栏

本文主要介绍如何基于http代理用minikube部署k8s,并简要说明下涉及到的一些关键实现原理,方便后续问题定位和排查。最终实现通过ingress在浏览器上访问部署在k8s上的dashboard服务。

使用minikube部署k8s非常简单,执行minikube start就可以完成k8s部署,执行minikube delete就可以卸载掉k8s。当然要实现如此快速的部署/卸载k8s操作,是有一些前提工作需要准备的,如果部署机器存在代理,则还需要踩一些坑。

本文主要介绍如何基于http代理使用minikube部署k8s,并最终通过ingress实现在浏览器上访问部署在k8s上的dashboard服务。

部署k8s

minikube部署k8s前会先创建一个虚拟机节点,然后在该节点上部署k8s相关组件。如果机器有配置代理,会影响到宿主机和虚拟机间的通信。

1、minikube不能直接用root账号部署,需要创建一个属于docker组的账号,这里创建一个developer账号

代码语言:txt
复制
#创建developer账号
adduser developer
passwd developer  #修改密码
usermod -aG wheel developer
#创建docker组,并将developer账号添加到docker组中
su - developer
sudo groupadd docker
sudo usermod -aG docker $USER

2、下载并安装minikube。详细见:https://minikube.sigs.k8s.io/docs/start/

代码语言:txt
复制
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

3、安装k8s,如果机子没有配置代理,则不需要--docker-env参数

代码语言:txt
复制
minikube start --docker-env http_proxy=http://$YOURPROXY:PORT --docker-env https_proxy=http://$YOURPROXY:PORT  --driver=docker --preload=false 

如果要查看安装过程中详细的错误日志,可加--alsologtostderr

如果安装失败,想要重新安装,可执行minikube delete清理安装痕迹。

4、下载并安装kubectl,详细见:https://kubernetes.io/docs/tasks/tools/install-kubectl/

代码语言:txt
复制
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
sudo mv ./kubectl /usr/local/bin/kubectl

5、配置环境变量

代码语言:txt
复制
export no_proxy=$no_proxy,$(minikube ip)
export NO_PROXY=$NO_PROXY,$(minikube ip)

6、查看k8s集群各个组件状态

代码语言:txt
复制
minikube status

7、使用kubectl查看minikube创建的虚拟机节点

代码语言:txt
复制
kubectl get node -o wide

可登录到该节点上查看,密码为root

代码语言:txt
复制
ssh root@$(minikube ip)

到这里,已经完成了k8s的安装。

需要特别说明的是,minikube创建的k8s环境使用的docker-daemon与宿主机上的docker-daemon不同,所以你会发现在宿主机上执行docker ps看不到k8s集群中的容器实例。

要想在宿主机上查看k8s集群中的容器实例,可在宿主机上执行eval $(minikube -p minikube docker-env)将docker-daemon切换到minikube创建的docker-daemon。

安装dashboard

minikube提供了dashboard插件,可直接安装使用

代码语言:txt
复制
minikube dashboard

查看dashboard相关pod是否有运行正常

代码语言:txt
复制
kubectl get pods -n kubernetes-dashboard

dashboard创建的service 采用了 ClusterIP 的暴露策略,集群外部没法直接访问,需要设置代理才能访问。

k8s提供了快速创建代理的工具:

代码语言:txt
复制
kubectl proxy  --port=[需要暴露的端口号] --address='[服务器外网IP]' --accept-hosts='^[外部访问服务器的IP]$'

如:kubectl proxy --port=8001 --address='10.1.1.2' --accept-hosts='^.*'

这时可在浏览器上直接访问10.1.1.2:8001地址

如:http://10.1.1.2:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

安装ingress

k8s提供了ingress作为提供外部访问的统一入口。要使用ingress,需要先安装ingress controller。通常采用nginx作为ingress controller。

minikube提供了一些插件可直接安装使用

查看插件列表

代码语言:txt
复制
minikube addons list

安装ingress controller,minikube提供的ingress是以nginx作为ingress controller

代码语言:txt
复制
minikube addons enable ingress

创建ingress配置,通过dashboard.yingww.cn访问dashboard服务,ingress yaml配置如下

代码语言:txt
复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: kubernetes-dashboard
  namespace:  kubernetes-dashboard
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: dashboard.yingww.cn
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 80

创建的ingress会被k8s监听到,并加载到ingress controller的配置中。这里的ingress controller是nginx服务,所以上面的ingrss配置内容会转换为nginx的相关路由配置。如果感兴趣的话,可以进入到ingress controller的实例中查看nginx.conf,可以发现里面包含了上面配置的路由规则。了解ingress这块的工作原理,可以很方便后续路由问题的定位和排查。

查看创建的ingress

代码语言:txt
复制
$ kubectl get ingress  kubernetes-dashboard  -n  kubernetes-dashboard
NAME                   CLASS    HOSTS                 ADDRESS        PORTS   AGE
kubernetes-dashboard   <none>   dashboard.yingww.cn   192.168.10.2   80      86s

从上面可知,访问dashboard的host为dashboard.yingww.cn,对应ip:port为192.168.10.2:80。

因为minikube创建的节点是在linux宿主机上,浏览器没法直接访问ingress。所以需要在宿主机上安装代理,将请求转发到ingress上。

这里以安装nginx为例

代码语言:txt
复制
yum install nginx

修改nginx配置文件nginx.conf,采用四层转发,将宿主机的80端口请求转发到ingress服务,配置如下

代码语言:txt
复制
stream {
        upstream minikube {
            server 192.168.10.2:80 weight=1 max_fails=3 fail_timeout=10s;
        }

        server {
                listen 80;
                proxy_pass minikube;
                proxy_timeout 600s;
                proxy_connect_timeout 30s;
        }
}

需要注意的是,nginx将80端口作为http的默认访问端口,为避免冲突,需要将http中监听的80端口改为其他端口。

修改后重新载入配置文件

代码语言:txt
复制
nginx -s reload

最后在电脑本地配置hosts,将dashboard.yingww.cn解析到linux宿主机的外网ip后,就可以直接在浏览器上访问k8s dashboard服务

image.png
image.png

参考

https://minikube.sigs.k8s.io/docs/start/

https://kubernetes.io/docs/tasks/tools/install-kubectl/

https://kubernetes.io/zh/docs/concepts/services-networking/ingress/

https://kubernetes.github.io/ingress-nginx/deploy/

https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/

https://github.com/kubernetes/minikube/issues/8179

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 部署k8s
  • 安装dashboard
  • 安装ingress
  • 参考
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档