microk8s 搭建

1、简述

microk8s不经过虚拟机但与主机隔离方式,快速轻巧安装Kubernetes。经过在单个快照包中打包Kubernetes,Docker.io,iptables和CNI的全部上游二进制文件来实现此隔离。 snap包是一个应用程序容器 - 您能够将其想象为Docker容器的轻量级版本。它使用了许多相同的底层技术进行隔离,而没有网络隔离的全部开销。最终结果是一种超越任何一个发行版的包格式,由于快照能够安装在大多数Linux操做系统上,同时还利用原子更新,升级失败回滚以及来自用户主机的软件限制级别等功能。html

 

microk8s能够说是minikube在Linux平台上的一个替代品。node

 

2、安装

环境说明

配置 操做系统 ip地址
1核2G ubuntu-16.04.5-server-amd64 192.168.0.162

 

 

 

经过 microk8s 能够很是快速的搭建起一个 Kubernetes 单机环境,安装极其很是方便,经过 snap 命令一键安装:mysql

ubuntu 自带 snap 命令,能够直接执行,centos 须要先安装 snapnginx

 

安装docker

apt-get install -y docker.io
apt-get clean all

 

注意:microk8s依赖于docker,不然执行microk8s命令,会卡顿,甚至报错!git

 

安装 1.12版本

sudo snap install microk8s --classic --channel=1.12/stable
# 如需卸载,使用命令:
# sudo snap remove microk8s

 

注意:安装最新版本,使用命令:sudo snap install microk8s --classic github

可是这里并无安装最新版本,为何呢?由于新版没有microk8s.docker命令。sql

若是没有这个命令。必须使用代理方式,下载镜像!docker

下文,会提到,如何使用microk8s.docker命令,来避免访问gfw问题。json

 

3、经常使用操做

// 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.ubuntu

为了方便,能够为 microk8s.kubectl 添加一个 别名:

snap alias microk8s.kubectl kubectl

 

kubectl 命令自动补全

echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

 

中止 启动 microk8s

microk8s.stop
 
microk8s.start
 
microk8s.status

 

4、开启DNS服务

microk8s.enable dns

 

查看dns运行状态

root@ubuntu:~# kubectl get pods -n kube-system
NAME                        READY   STATUS    RESTARTS   AGE
kube-dns-67b548dcff-75hgc   0/3     ContainerCreating   0          45

 

查看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.7
microk8s.docker tag mirrorgooglecontainers/k8s-dns-kube-dns-amd64:1.14.7 gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.7
 
microk8s.docker pull mirrorgooglecontainers/k8s-dns-sidecar-amd64:1.14.7
microk8s.docker tag mirrorgooglecontainers/k8s-dns-sidecar-amd64:1.14.7 gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.7
 
microk8s.docker pull mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64:1.14.7
microk8s.docker tag mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64:1.14.7 gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.7

 

查看镜像

root@ubuntu:~# microk8s.docker images
REPOSITORY                                             TAG                 IMAGE ID            CREATED             SIZE
mirrorgooglecontainers/pause-amd64                     3.1                 da86e6ba6ca1        17 months ago       742kB
k8s.gcr.io/pause                                       3.1                 da86e6ba6ca1        17 months ago       742kB
gcr.io/google_containers/k8s-dns-sidecar-amd64         1.14.7              db76ee297b85        19 months ago       42MB
mirrorgooglecontainers/k8s-dns-sidecar-amd64           1.14.7              db76ee297b85        19 months ago       42MB
mirrorgooglecontainers/k8s-dns-kube-dns-amd64          1.14.7              5d049a8c4eec        19 months ago       50.3MB
gcr.io/google_containers/k8s-dns-kube-dns-amd64        1.14.7              5d049a8c4eec        19 months ago       50.3MB
gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64   1.14.7              5feec37454f4        19 months ago       41MB
mirrorgooglecontainers/k8s-dns-dnsmasq-nanny-amd64     1.14.7              5feec37454f4        19 months ago       41MB

 

删除掉dns pod

kubectl delete po kube-dns-67b548dcff-75hgc -n kube-system --grace-period=0 --force

 

再次查看dns pod,状态就正常了

root@ubuntu:~# kubectl get pods -n kube-system
NAME                        READY   STATUS    RESTARTS   AGE
kube-dns-67b548dcff-75hgc   3/3     Running   0          45m

 

5、部署Nginx

下载nginx镜像

microk8s.docker pull nginx:1.7.9

 

新建service文件 

vim nginx-service.yaml

 

内容以下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-deployment
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: http
      nodePort: 30080
  selector:
    name: nginx

 

新建rc文件 

vim nginx-rc.yaml

内容以下:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      name: nginx
  replicas: 1 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

 

启动应用

kubectl apply -f nginx-service.yaml
kubectl apply -f nginx-rc.yaml

 

使用浏览器访问

http://192.168.0.162:30080/

 

效果以下:

 

6、开启registry

对于非公网的镜像,不能使用 microk8s.docker 命令来下载镜像。这个时候,须要使用私有仓库了!

开启自带的registry

microk8s.enable registry

 

访问私有库地址

wget http://localhost:32000/

若是输出:

--2019-06-14 15:28:09--  http://localhost:32000/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:32000... connected.
HTTP request sent, awaiting response...

表示没法链接!!!

 

那么使用如下命令

microk8s.docker tag nginx:1.7.9 localhost:32000/nginx:1.7.9
microk8s.docker push localhost:32000/nginx:1.7.9

就会报错:

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

注释掉这一行

#::1     localhost ip6-localhost ip6-loopback

 

再次使用wget命令,就正常了!

root@ubuntu:/root/mysql# wget http://localhost:32000/
--2019-06-14 15:28:42--  http://localhost:32000/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:32000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 0
Saving to: ‘index.html’

index.html                      [ <=>                                      ]       0  --.-KB/s    in 0s      

2019-06-14 15:28:42 (0.00 B/s) - ‘index.html’ saved [0/0]

 

下载别的私有库

对于下载别的私有库,必须修改文件

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  20.15MB/43.02MB
08cdc197aeb5: Download complete 
87da4a64f82f: Download complete 
1f15cc32d2ec: Download complete 
3184f9337a95: Download complete 
5586ed3c006c: Downloading  11.09MB/111.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

相关文章
相关标签/搜索