几种简单安装 Kubernetes 集群的方法

Kubernetes 学习笔记(一) - 初上手 中一上手就尝试了最原始级的安装 Kubernetes 的方式,花了不少时间,好处是能更好的理解 Kubernete 的组成以及各节点是如何协同工作的。从《Kubernetes in Action》第二版中了解了几种简单的方法,为什么要把以下几种方式列出来呢?为了让看到上篇的同学们不至于对 Kubernetes 的安装过程望而却步。下面的前两种方式都是创立的单节点的 Kubernetes 集群。

一:启用 Docker Desktop 的 Kubernetes 特性

Docker Desktop 的 Community 版本从  18.06.0-ce-mac70 2018-07-25 开始加入了对 Kubernetes 的支持,在 2018-11-19 后,Docker Desktop 开始用 2.0.0.0 这样的版本。当前的 Docker Desktop Community 版是 2.2.0.4,所带的 Kubernetes 是 v1.15.5,要启用它只要进到它的 Preferences...,

选择 Enable Kubernetes 就行,选上 Show system container(advanced) 将决定在 docker ps 能否看到 Kubernetes 所需的容器,例如 dns, proxy 相关的。Apply & Restart 后稍等一会,初始化完成可以查看一下 Nodes 和 Pods

完成。就这么简单。

在 Docker Desktop 下节点 docker-desktop 是一个虚拟机,可用如下命令进入后查看机器名来验证一下

$ docker run --net=host --ipc=host --uts=host --pid=host --privileged \
--security-opt=seccomp=unconfined -it --rm -v /:/host alpine chroot /host
/ # hostname
docker-desktop

这涉及到了 Docker 与 Namespace 的话题,详情请参考前一篇 Docker 容器内进程与 Namespace

二:Minikube 集群安装

Minikube 支持 macOS, Linux 和 Windows, 它是一个单二进制文件,在 Mac 下可由 brew install minikube 安装。安装后启动一个 Kubernetes 会集群十分容易

$ minikube start
😄 minikube v1.9.0 on Darwin 10.14.4
✨ Using the hyperkit driver based on existing profile
🔄 Retarting existing hyperkit VM for "minikube" ...
🐳 Preparing Kubernetes v1.18.0 on Docker 19.03.8 ...
🌟 Enabling addons: default-storageclass, storage-provisioner
🏄 Done! kubectl is now configured to use "minikube"
❗ /usr/local/bin/kubectl is v1.15.5, which may be incompatible with Kubernetes v1.18.0.
💡 You can also use 'minikube kubectl -- get pods' to invoke a matching version

如果是在 Mac 或 Windows 上运行 minikube,它也会创建一个虚拟机,在 Linux 下可用  minikube start --vm-driver none 以当前主机系统为宿主机。

检查一下节点和 Pod 的运行情况:

它的状态可由  minikube status 查看,minikube ssh 能直接登陆到它创建的中间虚拟机中

它还有一个更诱人的功能是执行 minikube dashboard 后马上给你打开浏览器进到 Kubernetes Dashboard,登陆也免了。

$ minikube dashboard
🔌 Enabling dashboard ...
🤔 Verifying dashboard health ...
🚀 Launching proxy ...
🤔 Verifying proxy health ...
🎉 Opening http://127.0.0.1:56889/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

停止集群用 minikube stop

$ minikube stop
✋ Stopping "minikube" in hyperkit ...
🛑 Node "m01" stopped.

三:用 kind(Kubernetes in Docker) 运行本地集群

这种方式下 Kubernetes 节点也是由 Docker 容器来运行,启动多个 Docker 容器也就很容易创建的多建了多节点的 Kubernetes 集群。kind  也是一个单一可以可执行文件。在 Mac 下也可用 brew install kind 安装,安装后运行 kind create cluster 创建 Kubernetes 集群

$ kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.17.0) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a nice day! 👋

查看一下

删除集群的命令是 kind delete cluster

它还能创建多节点的集群,需要用一个 yaml 文件来描述,如创建一个 kind-multi-node.yaml 文件,内容如下

kind create cluster --config kind-multi-node.yaml 命令就能创建一个 Master 和两个 worker 的 Kubernetes 集群。

$ kind create cluster --config kind-multi-node.yaml
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.17.0) 🖼
✓ Preparing nodes 📦 📦 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
✓ Joining worker nodes 🚜
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂

检查节点,Pod

kind 未内置 Dashboard 支持,需要的自己安装。

小结一下三种安装简单安装 Kubernete 的简单方法

  1. Docker Desktop Kubernetes: 单节点集群,当前最新的 Docker Desktop 2.2.0.4 所带的 Kubernetes 仍然是 v1.15.5。节点为 Docker 的宿主虚拟机
  2. minikube:单节点集群,当前 minikube v1.9.0, 所带 Kubernetes 是新的 1.18.0。并且自带 Dashboard, 只要 minikube dashboard 就能打开,非常的便利。节点为 minikube 新建的虚拟机
  3. kind(Kubernetes in Docker): 支持多节点集群,目前 kind v0.7.0 所带的 Kubernetes 是 v1.17.0。每个节点都是一个 Docker 容器。 

链接:

  1. kubernetes/minikube on github
  2. kind Quick Start

类别: Kubernetes. 标签: , . 阅读(66). 订阅评论. TrackBack.
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x