一、简述

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 搭建的更多相关文章

  1. MicroK8s及KubeFlow安装文档

    安装简单的k8s大约有三种思路:minikube,microk8s,kubeadm.minikube 虽然是官方出品,但主要还是基于虚拟机做的设计.在 Linux 生产环境下,microk8s 可能是 ...

  2. Online Judge(OJ)搭建(第一版)

    搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...

  3. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

  4. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  5. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  6. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  7. 一起学微软Power BI系列-使用技巧(4)Power BI中国版企业环境搭建和帐号问题

    千呼万唤的Power BI中国版终于落地了,相信12月初的微软技术大会之后已经铺天盖地的新闻出现了,不错,Power BI中国版真的来了,但还有些遗憾,国际版的一些重量级服务如power bi emb ...

  8. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  9. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

随机推荐

  1. x64内核强删文件.

    目录 x64内核中强删文件的实现 一丶简介 1.步骤 2.Nt驱动代码 x64内核中强删文件的实现 一丶简介 说道删除文件.有各种各样的方法. 有ring3 也有ring0. 而且也有许多对抗的方法. ...

  2. windows sh.exe 中文乱码

    idea 需要重启 export LANG=zh_CN.utf-8 alias ls='ls --show-control-chars --color=auto'

  3. SpringBoot:关于默认连接池Hikari的源码剖析

    1.起因 因为这两天在给公司的一个项目升级SpringBoot版本,遇到了一些坑,升级项目版本:SpringBoot1.5.x到SpringBoot2.0.x 今天早上双库操作遇到一个问题:jdbcU ...

  4. HttpClient 发送请求和参数

    发送请求 没有参数 private static void getData() { String timeStamp = String.valueOf(System.currentTimeMillis ...

  5. [C++] explicit关键字使用方法

    C++中,构造函数可以用作自动类型转换,但是这种转换不一定是程序所需要的,有时会导致错误的类型转换. 下面的代码,在mian函数中,将一个整形赋值为对象类型. #include "iostr ...

  6. 第09组 Alpha冲刺(1/4)

    队名:软工9组 组长博客: https://www.cnblogs.com/cmlei/ 作业博客: 组员进度 ● 组员一(组长) 陈明磊 ​ ○过去两天完成了哪些任务 ​ ●文字/口头描述 ​ 初步 ...

  7. Qt中文编码和QString类Unicode编码转换

      版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/g423tgl234/article ...

  8. MySQL事务隔离级别(一)

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

  9. 搭建阿里云服务 FTP 折中方案

    该配置的服务都配置了,端口也都打开了 ,但是ftp  就是连接不上 就是打不开目录 8uftp  出现以下情况 配置文件逐条检查,端口逐个检查 都没有问题,还是出现这种情况,实在没辙,蛋疼...... ...

  10. PostgreSQL体系架构与内存结构

    PostgreSQL体系架构 PostgreSQL的内存结构