MicroK8s 1.20.2 安装实践-基于Ubuntu 20.04

原创
2021/03/12 20:27
阅读数 2.3K

MicroK8s是目前最小、最快与Kubernetes全面兼容的集群系统,主要用于工作站和小型团队,但是目前镜像并没有与snap打包在一起,还在gcr.io上,国内下载上还是有问题。MicroK8s适合离线开发、原型开发和测试,尤其是运行VM作为小、便宜、可靠的k8s用于CI/CD。支持arm架构,也适合开发 IoT 应用,通过 MicroK8s 部署应用到小型Linux设备上。

1、安装MicroK8s

通过snap进行安装:

sudo snap install microk8s --classic

试一下:

microk8s status

#输出如下
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    dashboard            # The Kubernetes dashboard
    dns                  # CoreDNS
    ha-cluster           # Configure high availability on the current node
    ingress              # Ingress controller for external access
    metallb              # Loadbalancer for your Kubernetes cluster
    metrics-server       # K8s Metrics Server for API access to service metrics
    storage              # Storage class; allocates storage from host directory
  disabled:
    ambassador           # Ambassador API Gateway and Ingress
    cilium               # SDN, fast with full network policy
    fluentd              # Elasticsearch-Fluentd-Kibana logging and monitoring
    gpu                  # Automatic enablement of Nvidia CUDA
    helm                 # Helm 2 - the package manager for Kubernetes
    helm3                # Helm 3 - Kubernetes package manager
    host-access          # Allow Pods connecting to Host services smoothly
    istio                # Core Istio service mesh services
    jaeger               # Kubernetes Jaeger operator with its simple config
    keda                 # Kubernetes-based Event Driven Autoscaling
    knative              # The Knative framework on Kubernetes.
    kubeflow             # Kubeflow for easy ML deployments
    linkerd              # Linkerd is a service mesh for Kubernetes and other frameworks
    multus               # Multus CNI enables attaching multiple network interfaces to pods
    portainer            # Portainer UI for your Kubernetes cluster
    prometheus           # Prometheus operator for monitoring and logging
    rbac                 # Role-Based Access Control for authorisation
    registry             # Private image registry exposed on localhost:32000
    traefik              # traefik Ingress controller for external access

准备Microk8s需要的镜像:

MicroK8s的Kubernetes基础服务是通过systemd的多个服务来提供的(参考/etc/systemd/system目录下的服务名称)。但是目前(1.20.2)的pause服务(3.0)还是在gcr.io上,因此需要单独抓取下来离线部署,否则就会出现各种服务运行正常,但是kubelet服务运行时出错的情况。

#针对Microk8s 1.20.2

MY_REGISTRY=registry.cn-hangzhou.aliyuncs.com/google_containers

microk8s ctr images pull ${MY_REGISTRY}/pause:3.1
microk8s ctr images tag ${MY_REGISTRY}/pause:3.1 k8s.gcr.io/pause:3.1

microk8s ctr images pull docker.io/pollyduan/ingress-nginx-controller:v0.35.0
microk8s ctr images tag docker.io/pollyduan/ingress-nginx-controller:v0.35.0 k8s.gcr.io/ingress-nginx/controller:v0.35.0

microk8s ctr images pull docker.io/faizanofc/metrics-server-amd64:v0.3.6
microk8s ctr images tag docker.io/faizanofc/metrics-server-amd64:v0.3.6 k8s.gcr.io/metrics-server-amd64:v0.3.6

2、安装基础服务

安装dns和本地存储服务:

microk8s dns storage

安装gpu支持:

microk8s enable gpu

3、安装metallb服务

metallb提供一个本地的LoadBalancer服务,可以自动分配IP给服务,从而让外部可以访问。

microk8s enable metallb

3.1 配置

接下来我们要生成一个 Configmap 文件,为 Metallb 设置网址范围以及协议相关的选择和配置,这里以一个简单的二层配置为例:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: my-ip-space
      protocol: layer2
      addresses:
      - 10.211.55.240/28

注意:这里的 IP 地址范围需要跟集群实际情况相对应。

使用 kubectl apply 命令应用之后,使用 microk8s.kubectl logs -f [metallb-controller-pod] 会看到配置更新过程。

3.2 使用测试

创建一个 Nginx 的服务,服务类型为 LoadBalancer

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1
        ports:
        - name: http
          containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

4、安装Dashboard

4.1 安装

microk8s enable dashboard

4.2 配置服务

配置dashboard服务可以外部访问,可以是proxy、NodePort、LoadBalancer。我还是喜欢用NodePort,把ClusterType改为NodePort,然后port部分增加一个30000-32768之间的端口号。如下:

microk8s.kubectl edit svc/dashboard -n kube-system

如果编辑有问题,先安装vim。

sudo apt install vim

再执行上面的kubectl edit命令,按 i 进入编辑模式,esc 退出,按 : 进入命令行,按 wq写入后退出,强制退出按q!。

4.3 获取服务端口

microk8s.kubectl get svc -n kube-system

根据上面显示的dashboard的外部端口,输入浏览器。

4.4 获取token

通过下面的方法获取登录的token:

token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
microk8s kubectl -n kube-system describe secret $token

然后,在dashboard中选择使用token登录,并把上面的token复制到输入框中,出现dashboard界面。

5、安装KubeFlow

执行:

microk8s enable kubeflow

最后失败,安装回滚。

%%bash
export PATH=$PATH:/snap/bin/
microk8s status

或者将/snap/bin加入到启动时的profile之中。

6、更多参考

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部