乐趣区

关于kubernetes:纯小白从0搭建k8s-minikube版

纯小白从 0 搭建 k8s minikube 版

minikube 是本地化的 kubernetes,对于大部分没有多台服务器又想实际 k8s 的同学来说,minikube 是比拟好入门的学习工具。

这篇文章也是从 minikube 动手,讲讲如何搭建 k8s 集群。

环境

一台服务器

  • 2 个 CPU 或更多
  • 2GB 可用内存
  • 20GB 可用磁盘空间
  • 网络连接
  • 容器或虚拟机管理器,例如:Docker、Hyperkit、Hyper-V、KVM、Parallels、Podman、VirtualBox 或 VMware Fusion/Workstation
    我自己是在 linux 服务器上操作,上面的实际也是针对 linux 零碎的。

装置

装置 minikube

在这里依据本人的服务器状况查问下应该装置哪个版本的 minikube
https://minikube.sigs.k8s.io/…

我的服务器是 Linux, x86-64,抉择装置稳固版本的 minikube

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

注: linux 下能够用 uname -m 查问处理器架构(Architecture)

装置容器 Docker

k8s 是为编排容器而搭建的集群,所以要求有容器。

这里我抉择了 Docker 做为集群容器

  1. 装置之前,查看下 linux 内核:官网倡议 3.10 以上

    uname -r 
    # 5.10.60-9.al8.x86_64
  2. 更新 yum 包

    yum -y update

    这一步不是必须的,能够略过,前面呈现不兼容的状况时就必须 update 了

注:

# 降级所有包同时也降级软件和零碎内核;​ 
yum -y update
# 只降级所有包,不降级软件和零碎内核
yum -y upgrade
  1. 装置须要的软件包,yum-util 提供 yum-config-manager 性能,另两个是 devicemapper 驱动依赖

    yum install -y yum-utils device-mapper-persistent-data lvm2
  2. 设置 yum 源
  3. 地方仓库

    yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
  4. 阿里仓库

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  5. 查看 docker 版本并装置
  6. 查看可装置版本

    yum list docker-ce --showduplicates | sort -r
  7. 装置

    # yum install docker-ce- 版本号
    yum install docker-ce-19.03.13
  8. 查看是否装置胜利

    docker version
  9. 启动 docker 服务

    <!-- 启动 docker -->
    systemctl start docker
    <!-- 设置开机自启动 -->
    systemctl enable docker

    minikube start

    装置完 miniKube 和 docker 后,执行 minikube start,启动集群服务

  • 问题:

    当以 root 身份执行时,会有报错

    ❌  Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.

    意思是,思考到安全性问题,不倡议以 root 身份启动,docker 文档上有阐明:

    Docker allows you to share a directory between the Docker host and a guest container; and it allows you to do so without limiting the access rights of the container. This means that you can start a container where the /host directory is the / directory on your host; and the container can alter your host filesystem without any restriction.

📢 当我在网上搜寻解决方案时,有个计划是强制应用 root 身份执行

minikube start --force --driver=docker

尽管能够解决问题,但不举荐这个做法 ⚠️

  • 解决方案:
    创立新账号

    adduser newUser
    passwd newUser
    su newUser

    再次 minikube start, 报错:

  • 倡议:Add your user to the ‘docker’ group: ‘sudo usermod -aG docker $USER && newgrp docker’
  • 文档:https://docs.docker.com/engin…

  • 解决:
    创立 docker group,增加 newUser 到 docker group, 激活对组的更改

    su root
    # 创立 docker group
    sudo groupadd docker
    # 增加 newUser 到 docker group
    sudo usermod -aG docker newUser
    # 激活对组的更改
    newgrp docker

应用 newUser 来执行 minikube start --driver=docker

su newUser
# `--driver=docker` 示意用 docker 作为容器,不指定的话默认 docker
minikube start --driver=docker

FQA 可能遇到的问题

  1. 问题 1:

    Exiting due to PROVIDER_DOCKER_NOT_RUNNING: "docker version --format -" exit staus 1: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    • 起因:之前是用 root 账号启动的 docker,
    • 解决:先用 root 敞开 docker 服务,在以 newUser 身份启动 docker 即可
    systemctl stop docker
    su newUser
    systemctl start docker
    minikube start --driver=docker
  2. 问题 2:

    ❌  Exiting due to GUEST_START: Failed kubeconfig update: writing kubeconfig: Error creating directory: /etc/kubernetes: mkdir /etc/kubernetes: permission denied
  3. 起因:$KUBECONFIG 变量被占用了
  4. 解决:重置 $KUBECONFIG 变量

    unset KUBECONFIG

    胜利启动 🎉

    [josefa@xxx ~]$ minikube start
      minikube v1.24.0 on Alibaba 3 (amd64)
    ✨  Using the docker driver based on existing profile
      Starting control plane node minikube in cluster minikube
      Pulling base image ...
      Restarting existing docker container for "minikube" ...
    ❗  This container is having trouble accessing https://k8s.gcr.io
      To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
      Preparing Kubernetes v1.22.3 on Docker 20.10.8 ...
      Verifying Kubernetes components...
     ▪ Using image kubernetesui/dashboard:v2.3.1
     ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
     ▪ Using image kubernetesui/metrics-scraper:v1.0.7
      Enabled addons: storage-provisioner, default-storageclass, dashboard
      Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

装置 kubectl

kubectl 是治理 k8s 集群的命令行管理工具,在 minikube 中,同样也应用 kubectl 来进行治理。

下一步就是装置 kubectl,可参考 https://kubernetes.io/zh/docs…

  1. 下载

    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
  2. 验证该可执行文件(可选步骤)

    # 下载 kubectl 校验和文件:curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
    # 基于校验和文件,验证 kubectl 的可执行文件
    echo "$(<kubectl.sha256) kubectl" | sha256sum --check

    验证通过时,输入为:

    kubectl: OK
  3. 装置

    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
    # 查看
    kubectl version --client
    # 查看集群信息
    kubectl get po -A
    # 或者
    minikube kubectl -- get po -A

    minikube dashboard

    minikube dashboard 是 minikube 的仪表盘,方便管理

  4. 启动

    [josefa@xxx ~]$ minikube dashboard
    樂  Verifying dashboard health ...
      Launching proxy ...
    樂  Verifying proxy health ...
      Opening http://127.0.0.1:34179/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
      http://127.0.0.1:34179/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

    此时曾经启动了 dashboard, 但无奈通过浏览器拜访

  5. 实现近程拜访
    kubectr proxy 能够帮咱们实现近程拜访 dashboard 服务

    kubectl proxy --port=8002 --address='1xx.0.xxx' --accept-hosts='^.*'

    1xx.0.xxx 是宿主机内网地址, 如此便能够通过 http://127.0.0.1:34179/api/v1…,将 127.0.0.1 替换为宿主机外网地址即可拜访。

到此为止,咱们曾经胜利启动了 minikube 服务,并且能够通过 dashboard 察看到服务状况

未完待续..

退出移动版