快速上手k8s——minikube最小实现

前言

最近在研究k8s,就来写一个关于k8s快速上手,并记录采坑的点。
需要的前置知识点:docker、k8s的一些基本概念,下面这个可能对你有帮助。
https://juejin.im/post/5d1b2a656fb9a07edc0b7058

什么是k8s

我们知道,我们可以将项目制作成docker镜像,然后利用docker去部署我们的项目,这样可以解决很多服务器环境所带来的问题;
但是容器多了,容器与容器之间就需要访问,之间就需要网络配置等等,从而就有了docker-compose;
但是当我们的服务进行升级,或者服务需要进行调度,扩容等等,这个时候就需要一个大管家来管所有的东西;
这个大管家就是 - Kubernetes

初学会遇到的问题

因为k8s的东西太多了,所以学习成本现在越来越高,好在k8s已经很多教程。我说一下现在学的时候肯定会遇到的大问题:

  • 国内的问题(国内环境很多镜像拉不到)
  • 本地搭建环境(原来搭建k8s需要一些服务器)
  • 电脑环境的问题(windows和mac都有坑点)

最小实现

现在我们就来在本机实现一个最小的k8s的实现,给出一个hello-world
k8s提供了minikube,这个东西可以让你本机一台机器就可以搭建起这个环境。拥有和线上一样的命令行操作和模式,但是不需要你再去创建很多虚拟机来搞事情了。超级方便也。
https://minikube.sigs.k8s.io/
我们就利用这个来实现,下面来说说步骤:
我的本机环境:

  • macOS
  • minikube version: v1.5.2
  • Docker version 18.03.1-ce

安装环境

大致步骤:https://minikube.sigs.k8s.io/docs/start/macos/

  • brew install minikube
  • brew install docker-machine-driver-vmware
  • minikube start --vm-driver=vmware --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

成功之后:

  • minikube status 查看minikube的状态
  • minikube ip 查看minikube的ip
  • minikube dashboard 打开dashboard展示k8s的状态

安装坑点

  • HyperKit最新版本可能存在问题,所以我使用VMware Fusion实现虚拟化的依赖
  • 国内k8s.gcr.io的相关镜像国内拉取不到,使用mirrorgooglecontainers也无法拉取到,所以使用阿里云的仓库 https://github.com/kubernetes/minikube/issues/3860
  • 如果之前已经使用过minikube start命令,建议先minikube delete,并删除rm -rf ~/.minikube/,然后重新start

进行部署

首先描述一下部署要做的事情:linkinstar/mini-go:v1.0 是我已经上传到 docker-hub 里面的一个已经做好的最简单的项目,会暴露一个8080端口的web服务;
最终的目标,在k8s创建一个pod,pod中运行一个我们的容器,最终我们在外部可以访问到这个服务

首先创建两个文件

# deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mini-go
  labels:
    app: mini-go
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mini-go
  template:
    metadata:
      labels:
        app: mini-go
    spec:
      containers:
      - name: mini-go
        image: linkinstar/mini-go:v1.0
        ports:
        - containerPort: 8080

# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mini-go-service
spec:
  selector:
    app: mini-go
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30008

执行

  • kubectl create -f service.yaml
  • kubectl create -f deploy.yaml

查看

执行成功可以再dashboard中查看执行状态


image

image

最终访问地址查看到服务是否正常:http://192.168.231.146:30008/
其中的ip是通过 minikube ip 命令查看的

服务操作

水平伸缩

在现实的业务环境中,当用户的访问增多,我们需要扩展我们的应用,也就是水平的去多部署几个容器,有了k8s之后这件事就变得非常的容易了。

  • 修改 deploy.yaml 文件中的 replicas: 2 改成2个
  • 使用命令:kubectl apply -f deploy.yaml 使配置生效

然后我们就可以看到,原来的一个pod变成了两个,而k8s会将我们的请求负载均衡到每个pod中。整个过程可以说是非常的优雅了。

image

同样的,当我们需要减少服务的数量时也是相同的道理

版本升级

对于应用的版本升级也是同样的道理

  • 修改 deploy.yaml 文件中的 image: linkinstar/mini-go:v2.0 改成2.0
  • 使用命令:kubectl apply -f deploy.yaml 使配置生效

版本回退

当我们发现发布的服务问题,想要进行版本回退的时候,就可以使用
kubectl rollout undo deployments/mini-go
进行版本回退,下面是版本回退过程中

image

让minikube的dashboard能外网访问

当我们使用minikube搭建一个k8s的环境时,如何使用的时候服务器并不是使用本机进行搭建,那么会遇到dashboard页面没有办法被外部访问的问题。解决方式如下:

启动

首先使用minikube dashboard命令启动

# minikube dashboard
🤔  Verifying dashboard health ...
🚀  Launching proxy ...
🤔  Verifying proxy health ...
http://127.0.0.1:42968/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

然后记住最下面的访问地址:http://127.0.0.1:42968/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

设置代理

再打开一个sh窗口
使用 kubectl proxy --port=[需要暴露的端口号] --address='[服务器IP]' --accept-hosts='^[外部访问服务器的IP]$' 添加k8s集群对外的访问代理。

# kubectl proxy --port=8887 --address='172.31.251.45' --accept-hosts='^.*'

这里的port是你后面通过外网访问的端口,如果使用云服务器记得设置防火墙规则,其中的address为服务器ip地址可以使用minikube ip命令获得,我这里允许的是任意机器

浏览器访问

http://192.168.1.101:8887/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/cronjob?namespace=default

  • 其中的ip为服务器的ip
  • 端口为代理设置的端口
  • 剩下的地址为dashboard启动时显示的地址

如果上述测试没有问题使用 nohup 后台启动就可以了

总结

  • 使用minikube可以快速让新手感受到k8s到底是如何使用的
  • 环境配置过程中会有很多问题,需要你耐心解决
  • k8s在服务编排上面除了以上提到的用法以外还有很多牛逼的功能等着你去发现
  • 学习过程中需要保持一个原则,先用着看看 -> 搞清楚架构 -> 尝试各种功能 -> 学习各个模块的实现 -> 最终实践
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,326评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,228评论 1 304
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,979评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,489评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,894评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,900评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,075评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,803评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,565评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,778评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,255评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,582评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,254评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,151评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,952评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,035评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,839评论 2 277

推荐阅读更多精彩内容

  • 容器技术是微服务技术的核心技术之一,并随着微服务的流行而迅速成为主流。Docker是容器技术的先驱和奠基者,它出现...
    倚天码农阅读 1,118评论 1 4
  • k8s容器编排 [TOC] 1:k8s集群的安装 1.1 k8s的架构 除了核心组件,还有一些推荐的Add-ons...
    Zh_bd92阅读 872评论 0 0
  • 公司给配的工作机器是Win10电脑,闲来无事想体验一下K8S的魔力,到处搜了攻略文章最终成功,记录一下过程和中间遇...
    無式阅读 6,612评论 0 7
  • 昨天半夜里小妹妹起来玩,我和妈妈都在旁边守着。小妹妹被哄睡着了,妈妈也睡着了,我没睡着,一直熬到天亮才睡的觉...
    冷晨乐阅读 65评论 0 0
  • 读书是能用最小成本获取最大价值的一件事。 刚开始读书要泛读,不是泛泛的读,而是广泛的读。读的多了,思维就更宽泛了,...
    我还是个孩子呢阅读 109评论 0 0