microk8s 搭建
一、简述
microk8s不通过虚拟机但与主机隔离方式,快速轻巧安装Kubernetes。通过在单个快照包中打包Kubernetes,Docker.io,iptables和CNI的所有上游二进制文件来实现此隔离。 snap包是一个应用程序容器 - 您可以将其想象为Docker容器的轻量级版本。它使用了许多相同的底层技术进行隔离,而没有网络隔离的所有开销。最终结果是一种超越任何一个发行版的包格式,因为快照可以安装在大多数Linux操作系统上,同时还利用原子更新,升级失败回滚以及来自用户主机的软件限制级别等功能。
microk8s可以说是minikube在Linux平台上的一个替代品。
二、安装
环境说明
| 配置 | 操作系统 | ip地址 |
| 1核2G | ubuntu-16.04.5-server-amd64 | 192.168.0.162 |
通过 microk8s 可以非常快速的搭建起一个 Kubernetes 单机环境,安装极其非常方便,通过 snap 命令一键安装:
ubuntu 自带 snap 命令,可以直接执行,centos 需要先安装 snap。
安装docker
apt-get install -y docker.io
apt-get clean all
注意:microk8s依赖于docker,否则执行microk8s命令,会卡顿,甚至报错!
安装 1.12版本
sudo snap install microk8s --classic --channel=1.12/stable
# 如需卸载,使用命令:
# sudo snap remove microk8s
注意:安装最新版本,使用命令:sudo snap install microk8s --classic
但是这里并没有安装最新版本,为什么呢?因为新版没有microk8s.docker命令。
如果没有这个命令。必须使用代理方式,下载镜像!
下文,会提到,如何使用microk8s.docker命令,来避免访问gfw问题。
三、常用操作
// 1. 启动
microk8s.start // 2. 关闭
microk8s.stop // 3. kubectl 操作
// --- 查看 cluster
microk8s.kubectl cluster-info // --- 查看 nodes
microk8s.kubectl get nodes // --- 查看 pods
microk8s.kubectl get pods // 4. docker 操作
microk8s.docker ps
microk8s.docker images
可以看到,在 microk8s 环境中执行 kubectl 时,需要在 kubectl 命令前添加前缀 microk8s.
为了方便,可以为 microk8s.kubectl 添加一个 别名:
snap alias microk8s.kubectl kubectl
kubectl 命令自动补全
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
停止 启动 microk8s
microk8s.stop microk8s.start microk8s.status
四、开启DNS服务
microk8s.enable dns
查看dns运行状态
root@ubuntu:~# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
kube-dns-67b548dcff-75hgc / ContainerCreating
查看pod详情
kubectl describe po kube-dns-67b548dcff-75hgc -n kube-system
会提示错误:
pulling image "k8s.gcr.io/pause:3.1"
...
解决gfw问题
在国内,由于gfw的原因, 我们是访问不了google的镜像服务的, 因此很多时候我们会碰到类似这样的错误failed pulling image k8s.gcr.io/pause:3.1。这个问题我们可以通过手动下载镜像来解决。做法如下:
microk8s.docker pull mirrorgooglecontainers/pause-amd64:3.1
microk8s.docker tag mirrorgooglecontainers/pause-amd64:3.1 k8s.gcr.io/pause:3.1
microk8s会自带一个docker, 如果你的系统里已经安装了docker的话, 它还是用自带的那个docker,也就是microk8s.docker。因此,在解决上面提到的镜像问题的时候, 一定要使用microk8s.docker命令来操作, 使用系统原有的docker是不起作用的。能否让microk8s使用系统的docker楼主还没研究出来
除了 k8s.gcr.io/pause:3.1 之外,还需要其他镜像
microk8s.docker pull mirrorgooglecontainers/k8s-dns-kube-dns-amd64:1.14.
microk8s.docker tag mirrorgooglecontainers/k8s-dns-kube-dns-amd64:1.14. gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14. microk8s.docker pull mirrorgooglecontainers/k8s-dns-sidecar-amd64:1.14.
microk8s.docker tag mirrorgooglecontainers/k8s-dns-sidecar-amd64:1.14. gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14. microk8s.docker pull mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64:1.14.
microk8s.docker tag mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64:1.14. gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.
查看镜像
root@ubuntu:~# microk8s.docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mirrorgooglecontainers/pause-amd64 3.1 da86e6ba6ca1 months ago 742kB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 months ago 742kB
gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14. db76ee297b85 months ago 42MB
mirrorgooglecontainers/k8s-dns-sidecar-amd64 1.14. db76ee297b85 months ago 42MB
mirrorgooglecontainers/k8s-dns-kube-dns-amd64 1.14. 5d049a8c4eec months ago .3MB
gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14. 5d049a8c4eec months ago .3MB
gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14. 5feec37454f4 months ago 41MB
mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64 1.14. 5feec37454f4 months ago 41MB
删除掉dns pod
kubectl delete po kube-dns-67b548dcff-75hgc -n kube-system --grace-period= --force
再次查看dns pod,状态就正常了
root@ubuntu:~# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
kube-dns-67b548dcff-75hgc / Running 45m
五、部署Nginx
下载nginx镜像
microk8s.docker pull nginx:1.7.
新建service文件
vim nginx-service.yaml
内容如下:
apiVersion: v1
kind: Service
metadata:
name: nginx-deployment
spec:
type: NodePort
ports:
- port:
targetPort:
protocol: TCP
name: http
nodePort:
selector:
name: nginx
新建rc文件
vim nginx-rc.yaml
内容如下:
apiVersion: apps/v1 # for versions before 1.9. use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
name: nginx
replicas: # tells deployment to run pods matching the template
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.
ports:
- containerPort:
启动应用
kubectl apply -f nginx-service.yaml
kubectl apply -f nginx-rc.yaml
使用浏览器访问
http://192.168.0.162:30080/
效果如下:

六、开启registry
对于非公网的镜像,不能使用 microk8s.docker 命令来下载镜像。这个时候,需要使用私有仓库了!
开启自带的registry
microk8s.enable registry
访问私有库地址
wget http://localhost:32000/
如果输出:
---- ::-- http://localhost:32000/
Resolving localhost (localhost)... ::, 127.0.0.1
Connecting to localhost (localhost)|::|:... connected.
HTTP request sent, awaiting response...
表示无法连接!!!
那么使用以下命令
microk8s.docker tag nginx:1.7. localhost:/nginx:1.7.
microk8s.docker push localhost:/nginx:1.7.
就会报错:
The push refers to repository [localhost:32000/nginx]
Get http://localhost:32000/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
解决方法
vi /etc/hosts
注释掉这一行
#:: localhost ip6-localhost ip6-loopback
再次使用wget命令,就正常了!
root@ubuntu:/root/mysql# wget http://localhost:32000/
---- ::-- http://localhost:32000/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:... connected.
HTTP request sent, awaiting response... OK
Length:
Saving to: ‘index.html’ index.html [ <=> ] --.-KB/s in 0s -- :: (0.00 B/s) - ‘index.html’ saved [/]
下载别的私有库
对于下载别的私有库,必须修改文件
vim /var/snap/microk8s/current/args/docker-daemon.json
增加内网中的私有库地址
{
"insecure-registries" : ["localhost:32000","192.168.0.45:5000"]
}
重启docker
/etc/init.d/docker restart
下载内网中私有库的镜像
root@ubuntu:/root/mysql# microk8s.docker pull 192.168.0.45:5000/mysql5.7.23
Using default tag: latest
latest: Pulling from mysql5.7.23
ad965b2cd940: Downloading .15MB/.02MB
08cdc197aeb5: Download complete
87da4a64f82f: Download complete
1f15cc32d2ec: Download complete
3184f9337a95: Download complete
5586ed3c006c: Downloading .09MB/.7MB
6be3e1b4270e: Download complete
2eb841e4f573: Download complete
6e39824b78a8: Download complete
d9c21a3025f7: Download complete
3c9f6c373477: Download complete
本文参考链接:
https://www.jianshu.com/p/2f5eb7ef1d0f
http://opentutorial.info/kubernetes/k8s/microk8s/
https://itnext.io/microk8s-docker-registry-c3f401faa760
https://github.com/ubuntu/microk8s/issues/196
https://github.com/ubuntu/microk8s/issues/173
microk8s 搭建的更多相关文章
- MicroK8s及KubeFlow安装文档
安装简单的k8s大约有三种思路:minikube,microk8s,kubeadm.minikube 虽然是官方出品,但主要还是基于虚拟机做的设计.在 Linux 生产环境下,microk8s 可能是 ...
- Online Judge(OJ)搭建(第一版)
搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...
- Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境
一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...
- 总结:Mac前端开发环境的搭建(配置)
新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- 一起学微软Power BI系列-使用技巧(4)Power BI中国版企业环境搭建和帐号问题
千呼万唤的Power BI中国版终于落地了,相信12月初的微软技术大会之后已经铺天盖地的新闻出现了,不错,Power BI中国版真的来了,但还有些遗憾,国际版的一些重量级服务如power bi emb ...
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
- 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
随机推荐
- 【区间DP】加分二叉树
https://www.luogu.org/problemnew/show/P1040#sub 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为 ...
- gulp初体验
项目流程 安装nodejs -> 全局安装gulp -> 项目安装gulp以及gulp插件 -> 配置gulpfile.js -> 运行任务 常用命令简介: node -v 查 ...
- nRF51822 硬件复位引脚
nRF51822 有一个硬件复位引脚和Debug 口SWDIO是共用的,名字叫做nReset. 实现硬件复位是怎样子的: 1.这个引脚引出来, 2.给这个引脚低电平, 3.从低电平拉到高电平,即复位. ...
- D3.js的v5版本入门教程(第七章)—— 比例尺的使用
D3.js的v5版本入门教程(第七章) 比例尺在D3.js中是一个很重要的东西,我们可以这样理解d3.js中的比例尺——一种映射关系,从domain映射到range域(为什么会是domain和rang ...
- java.lang.Error: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
有时候出现这种怪异的问题,是由于多个版本的class存在. 比如说:某个java编译成class后,放到classes下面,然后lib目录下,也有这个class所在的jar包,这样就导致classpa ...
- windows如何查看jdk的安装目录
1.检查电脑上是否安装了JDK可以在cmd窗口输入java -version查看是否需安装了JDK 2.查看JDK的安装目录 一种是在cmd窗口输入java -verbose,查看最后一行即为JDK安 ...
- Python执行时间的计算方法
# CPU的执行时间start = time.clock()#end = time.clock()print(end-start) # 程序执行时间:start = datetime.datetime ...
- plsql查询数据库-中文显示问号问题
解决方法: 设置本地环境变量 :NLS_LANG=AMERICAN_AMERICA.ZHS16GBK https://blog.csdn.net/github_38358734/article/det ...
- mysql中的递归
别人问的一个需求: 数据库里面保存的是父子关系结构: 展示出来的需要根据子类一直查到顶类后将名称全部放一个字段里面,如下: 比如输入的code是1099,名称要显示 配料/花椒/ces ...
- [转]使用 curl 发送 POST 请求的几种方式
HTTP 的 POST 请求通常是用于提交数据,可以通过这篇文章来了解各种提交方式:四种常见的 POST 提交数据方式.做 Web 后端开发时,不可避免地要自己给自己发请求来调试接口,这里要记录的内容 ...