番外篇:使用MicroK8s
在单节点的Kubernetes搭建过程中,一般会采用MiniKube,可是MiniKube会要求宿主机安装虚拟机,在其上完成部署,这个过程会比较麻烦,有没有一种方式,能够提供一种不依赖虚拟机,但是能和宿主机相对隔离的方案来搭建单节点的Kubernetes呢?答案是有的,Canonical 提供了MicroK8s,可以用它来完成不依赖虚拟机的搭建,同时它提供了非常好的安装体验。
MicroK8s的形容是 “Zero-ops Kubernetes for workstations and edge / IoT
A single package of k8s for 42 flavours of Linux. Made for developers, and great for edge, IoT and appliances.” ,可以看到这是一个目标在单节点的Kubernetes部署方案,同时它也通过了Kubernetes认证。
MicroK8s也可以通过add node组成多节点模式,但是它主要是用来完成单节点原型搭建,而非生产环境的构建。网上也有少量搭建教程,但大部分都是摘抄,很多都跑不通。
工具安装
工具安装的环境是Ubuntu 18.04 LTS,接下来开始安装MicorK8s。
先安装MicroK8s本体。
// 安装`MicroK8s`sudo snap install microk8s --classic// 查看一下版本,当前1.18已经发布,目前笔者使用的是1.17.3snap info microk8s// 客户组sudo usermod -a -G microk8s $USER// 防火墙设置sudo ufw allow in on cni0 && sudo ufw allow out on cni0sudo ufw default allow routed// 启动相关的add-onmicrok8s.enable dashboard dns运行完这些命令,假如在国内,不出意外,是无法启动的,假如运行成功是如下输出:
$ microk8s.statusmicrok8s is runningaddons:cilium: disableddashboard: enableddns: enabledfluentd: disabledgpu: disabledhelm3: disabledhelm: disabledingress: disabledistio: disabledjaeger: disabledjuju: disabledknative: disabledkubeflow: disabledlinkerd: disabledmetallb: disabledmetrics-server: disabledprometheus: disabledrbac: disabledregistry: disabledstorage: disabled起因还是gcr镜像无法下载,这里需要先调整一下docker的配置。
sudo vi /etc/docker/daemon.json前提是安装了
Docker
对应的配置下,添加insecure-registries。
{ "registry-mirrors": ["https://heli2ujx.mirror.aliyuncs.com"], "insecure-registries" : ["localhost:32000"]} 无法启动的起因是少量关键的镜像无法下载,在墙那边,所以需要下载后,方可启动。但是其中的POD无法正常启动的起因需要能够查清楚,MicroK8s提供的命令可以帮助查看对应的POD处于的状态。
其实也就是describe命令。
可以使用
microk8s.kubectl get all --all-namespaces来查看所有的POD和SERVICE等资源运行情况。
使用如下命令,可以查看对应的POD相关情况。
microk8s.kubectl describe pod ${pod name} -n kube-system 例如:microk8s.kubectl describe pod monitoring-influxdb-grafana-v4-6d599df6bf-28m97 -n kube-system,假如这个POD运行存在问题,会将问题显示出来,可以跟进排查。
镜像下载
对于 1.17.3 版本的MicroK8s,可以使用如下脚本将镜像从aliyun搬到本地,而后打上对应的tag,这样镜像就在本地存在了。
$ more fetch-image.sh #!/bin/bashimages=(k8s.gcr.io/pause:3.1=gcr.azk8s.cn/google-containers/pause:3.1gcr.io/google_containers/defaultbackend-amd64:1.4=gcr.azk8s.cn/google-containers/defaultbackend-amd64:1.4k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1=registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1k8s.gcr.io/heapster-influxdb-amd64:v1.3.3=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-influxdb-amd64:v1.3.3k8s.gcr.io/heapster-amd64:v1.5.2=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.2k8s.gcr.io/heapster-grafana-amd64:v4.4.3=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-grafana-amd64:v4.4.3)OIFS=$IFS; # 保存旧值for image in ${images[@]};do IFS='=' set $image docker pull $2 docker tag $2 $1 docker rmi $2 docker save $1 > 1.tar && microk8s.ctr --namespace k8s.io image import 1.tar && rm 1.tar IFS=$OIFS; # 复原旧值done sudo ./fetch-image.sh执行后,这些镜像被下载到本地。而后运行microk8s.stop && microk8s.start,等待成功。
运行服务
运行命令创立一个echoserver服务,运行如下命令:
microk8s.kubectl run hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google-containers/echoserver:1.4 --port=8080microk8s.kubectl expose deployment hello-minikube下载完镜像,启动了服务,可以看一下当前的部署情况:
$ microk8s.kubectl get all --all-namespacesNAMESPACE NAME READY STATUS RESTARTS AGEdefault pod/hello-minikube-7dfbb66787-j54tw 1/1 Running 0 4m59skube-system pod/coredns-7b67f9f8c-4bm8b 1/1 Running 2 6d4hkube-system pod/dashboard-metrics-scraper-687667bb6c-lvf85 1/1 Running 2 6d4hkube-system pod/heapster-v1.5.2-5c58f64f8b-wzm6g 4/4 Running 8 6d4hkube-system pod/kubernetes-dashboard-5c848cc544-kq8c7 1/1 Running 2 6d4hkube-system pod/monitoring-influxdb-grafana-v4-6d599df6bf-28m97 2/2 Running 4 6d4hNAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEdefault service/hello-minikube ClusterIP 10.152.183.119 <none> 8080/TCP 4m8sdefault service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 6d5hkube-system service/dashboard-metrics-scraper ClusterIP 10.152.183.120 <none> 8000/TCP 6d4hkube-system service/heapster ClusterIP 10.152.183.135 <none> 80/TCP 6d4hkube-system service/kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 6d4hkube-system service/kubernetes-dashboard NodePort 10.152.183.251 <none> 443:32100/TCP 6d4hkube-system service/monitoring-grafana ClusterIP 10.152.183.84 <none> 80/TCP 6d4hkube-system service/monitoring-influxdb ClusterIP 10.152.183.183 <none> 8083/TCP,8086/TCP 6d4hNAMESPACE NAME READY UP-TO-DATE AVAILABLE AGEdefault deployment.apps/hello-minikube 1/1 1 1 4m59skube-system deployment.apps/coredns 1/1 1 1 6d4hkube-system deployment.apps/dashboard-metrics-scraper 1/1 1 1 6d4hkube-system deployment.apps/heapster-v1.5.2 1/1 1 1 6d4hkube-system deployment.apps/kubernetes-dashboard 1/1 1 1 6d4hkube-system deployment.apps/monitoring-influxdb-grafana-v4 1/1 1 1 6d4hNAMESPACE NAME DESIRED CURRENT READY AGEdefault replicaset.apps/hello-minikube-7dfbb66787 1 1 1 4m59skube-system replicaset.apps/coredns-7b67f9f8c 1 1 1 6d4hkube-system replicaset.apps/dashboard-metrics-scraper-687667bb6c 1 1 1 6d4hkube-system replicaset.apps/heapster-v1.5.2-5c58f64f8b 1 1 1 6d4hkube-system replicaset.apps/kubernetes-dashboard-5c848cc544 1 1 1 6d4hkube-system replicaset.apps/monitoring-influxdb-grafana-v4-6d599df6bf 1 1 1 6d4h接下来请求本地,而后看一下输出:
$ curl http://10.152.183.119:8080/123CLIENT VALUES:client_address=10.1.17.1command=GETreal path=/123query=nilrequest_version=1.1request_uri=http://10.152.183.119:8080/123SERVER VALUES:server_version=nginx: 1.10.0 - lua: 10001HEADERS RECEIVED:accept=*/*host=10.152.183.119:8080user-agent=curl/7.58.0BODY:-no body in request-1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 番外篇:使用MicroK8s