书接上文,上回说到了在Linux系统搭建K8s环境,通过脚本一键处理,具体可参考《入门K8s:一键脚本搭建Linux服务器集群》。
虽然Linux系统很不错,而且也推荐都买一个做练习,但是不可避免的会遇到一些小问题,比如:
1、开发阶段,频繁生成镜像,用来测试;
2、局域网内多台电脑快速实现集群操作;
3、暂时不想买服务器;
那我们就在本地Windows系统中,快速的部署一个K8s集群,用来短时间的看到效果和测试用例,还是方便很多的,不过如果想要好好研究的话,还是要搞一个Linux服务器,从头慢慢的搭建吧。
PS:如果想要在本地搭建环境,只有一个要求,电脑内存尽量在18G以上,我的电脑是32G。
Part 1
安装Docker Desktop
如果你之前安装过,现在K8s不能用了,或者之前本地都没有安装过,那可以从官网下载,然后直接安装即可,过程很简单,一直Next就行。
有一点需要注意就是要看好对应的版本,因为后边涉及到版本的问题。
https://www.docker.com/products/docker-desktop
安装完成,双击图标,打开桌面程序,就可以看到左下角有一个绿色的鲸鱼标识,注意,这个时候只有一个:
中间的打马赛克的默认也是没有的,这是我已经安装好的。
安装好Docker服务以后,K8s默认是关闭状态的,需要我们手动打开:
请注意!
这个时候不要轻易的打开它,除非你有VPN,且网速比较好。
因为开启K8s,主要是启动对应的服务,大概有七八个服务,镜像是很麻烦的,特别是没有配置本地加速的情况下(加速可以用阿里云或者中科大的地址,百度即可)。所以需要从远程仓库把镜像拉下来,过程很慢,即便我用VPN了,也一个小时未成功,无奈只能重装,换了第二种方案。
Part 2
安装K8s服务
上边直接手动启动的方式已经放弃,换成了阿里的本地镜像:
https://github.com/AliyunContainerService/k8s-for-docker-desktop
直接clone代码,切换到当前Docker Desktop对应版本的分支,然后根据他们的README操作即可,比较简单,镜像拉取完成后,就可以看到多了一些镜像:
请好好对照下镜像,如果少了,就手动拉取,不然是启动不了K8s的,这里有一个坑,阿里仓库给的ingress的版本比较低,是0.26.1的,这个版本有bug,建议用官方最新的1.0版本:
相应的v1.0版本的ingress的yml文件可以直接从官方GitHub中找到:
https://github.com/kubernetes/ingress-nginx/blob/main/deploy/static/provider/cloud/deploy.yaml
只要保证上边的镜像都有了,就可以开启K8s了!
过程可能会持续1~3分钟,但是肯定不会很长,要是时间超过20分钟,那就只能重新搞了。
假设你已经弄好了,K8s也启动了,如何查看效果呢,比如节点信息,Pod信息,service信息等,平时使用最多的就是开启admin看板,查看所有的信息,不过操作不便,还需要登录,这里安利一个工具,比admin更方便——Lens。
Part 3
用Lens连接集群
去Lens官网下载并安装:
https://github.com/lensapp/lens
安装完成后,配置上下文,开启连接:
过程很简单,功能很丰富。
安装完成软件,来一个完整的前端的ingress部署吧。
Part 4
部署一个完整的VUE项目
过程其实很简单,就是准备好一个镜像,然后部署deployment、pod、service、ingress,直接来yml吧,有问题一起讨论:
apiVersion: apps/v1
kind: Deployment
metadata:name: blog-h5namespace: defaultlabels:app: blog-h5
spec:replicas: 1selector:matchLabels:app: blog-h5 # has to match .spec.template.metadata.labelstemplate:metadata:labels:app: blog-h5 # has to match .spec.selector.matchLabelsspec:containers:- name: blog-h5image: blog.coreimagePullPolicy: IfNotPresentports:- containerPort: 80name: blog-h5---
apiVersion: v1
kind: Service
metadata:name: blog-h5namespace: defaultlabels:app: blog-h5
spec:ports:- port: 80targetPort: 80name: blog-h5selector:app: blog-h5---
#ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: blog-h5-ingressannotations:kubernetes.io/ingress.class: "nginx"
spec:rules:- host: h5.cxt.ycsure.comhttp:paths:- backend:service:name: blog-h5port:number: 80path: /pathType: Prefix