2.1 使用 Minikube 部署

Minikube 是一个创建单机 Kubernetes 集群的 工具,它可以在一台服务器上快速创建一个学习环境,单机集群也可以学习到大多数入门的 Kubernetes 知识以及上手练习。CKAD 认证并不要求掌握 Minikube,不过我们可以初步学习练习,后面再使用 kubeadm 部署多节点集群。

本篇内容较为简单,可供读者练手使用,除了会使用 minikube 部署 kubernetes 外,也会部署应用,对于本章的内容,读者可快速练习一遍,后面再详细介绍各方面的知识。

Minikube

Minikube 是一个二进制工具,项目源码或文档等内容可以在 https://github.com/kubernetes/minikube 中找到,已经编译好的二进制可执行文件,可以在仓库的 Release 中下载,Minikube 支持 Windows 、Linux、MacOS。

直接下载 minikube 最新版本的二进制文件。

可以通过官方 Github 仓库下载,也可以使用国内代理下载。

下载地址(Linux版本):

注:如果要下载 Win 版本,把 minkube-linux-amd64 改成 minkube-windows-amd64.exe 即可;如果是 MacOS 则是 minikube-darwin-amd64。另外要注意下载的版本号 。

阿里云源下载的二进制工具,本身可以使用国内镜像,不需要代理,可以到仓库了解 https://github.com/AliyunContainerService/minikube

你也可以看官方文档,按照文档安装 https://minikube.sigs.k8s.io/docs/start/

curl -Lo minikube {下载地址}
chmod +x minikube
sudo mv minikube /usr/local/bin

部署

直接执行 minikube start 命令即可进行部署,但是国内会被墙,可能拉取不了镜像,需要设置代理,可参考 2.4 章设置镜像代理

# 国外服务器
minikube start
# 使用阿里云版本时,指定国内源
minikube start --image-mirror-country=cn
# 使用阿里云版本时,指定镜像源
minikube start --image-mirror=registry.cn-hangzhou.aliyuncs.com/google_containers

注:虚拟机安装或其他方式,需要配置安装驱动,请参考官方文档。还是无法拉取镜像的话,打开文档看看 https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/ ,配置代理试试。

接下来 minikube 会拉取各种镜像,需要一些时间。

* Pulling base image ...
* Downloading Kubernetes v1.20.2 preload ...
    > preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB  100.00% 60.04 Mi
    > gcr.io/k8s-minikube/kicbase...: 357.67 MiB / 357.67 MiB  100.00% 7.41 MiB
* Creating docker container (CPUs=2, Memory=4000MB) .../

通过 minikube version 命令可以查看 minikube 的版本,接下来我们使用 minikube start 命令,可以直接创建一个 kubernetes 集群。

问题一

如果启动不起来提示没有 docker 用户,这是因为默认不应该使用 root 用户执行命令和启动程序,可以创建一个 docker 用户,也可以使用 --driver=none 指定不用 docker 用户。

如果要用 docker 用户:

    groupdel docker
    useradd -m docker
    passwd docker
    # 修改密码后,加入用户组
    gpasswd -a docker docker

打开 /etc/sudoers 文件,在 root ALL=(ALL:ALL) ALL 下 增加新的一行:

docker ALL=(ALL)ALL

然后切换为 docker 用户:su docker

如果不用 docker 用户,只需要在初始化集群时加上 --driver=none

minikube start --driver=none

问题二

PS:如果报 X Exiting due to GUEST_MISSING_CONNTRACK: Sorry, Kubernetes 1.20.2 requires conntrack to be installed in root's path,则需要安装 constrack ,apt install conntrack

如果没有问题,会自动进行安装。

minikube部署

minikube 完成初始化后,打开新的终端窗口,执行 minikube dashboard 启动面板,根据 URL 地址,可以访问面板。

正常的话,执行 docker ps 后是这样的。

docker_ps

查看集群状态

本身 minikube 带有一些简单的 kubectl 命令,可以查看集群状态信息。

获取集群所有节点(机器):

minikube kubectl get nodes

获取集群所有命名空间:

minikube kubectl get namespaces

查看集群所有 Pod:

minikube kubectl -- get pods -A

minikube命令

创建资源

由于 minikube 不会自动下载 kubectl、kubelet 等工具,我们需要手动安安装,你可以参考 2.2 章的安装方法, 关于 kubectl 、kubelet ,后面的章节会详细介绍。最简单的安装方法:

# 仅供 ubuntu 参考
snap install kubectl --classic
snap install kubelet --classic

本节的内容供简单练习,不会详细说明命令的作用和相关知识,待读者阅读后面的章节时,可以学习到更多内容。

创建 Deployment

Deployment 可以部署应用并管理实例数量,它提供了一种故障的自我修复机制,当应用挂了后,Deployment 可以自动启动一个新的实例,维护固定数量的 Pod。

kubectl create deployment命令创建管理 Pod 的 Deployment。

# 格式 kubectl create deployment {deployment名称} {参数}
kubectl create deployment hello --image=nginx:latest

查看 Deployment:

kubectl get deployments
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
hello   1/1     1            1           6m39s

查看 Pod :

kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
hello-b8d95ff4c-x67zr   1/1     Running   0          7m8s

查看集群事件:

kubectl get events

查看 kubectl 配置:

kubectl config view

创建 Service

Service 为 Pod 提供了一种外网访问能力,默认情况下,Pod 只能在 Kubernetes 集群的同一节点访问,如果要外部网络访问,则需要为 Pod 暴露一个 Kubnetes Service,Service 为 Pod 提供了外网访问能力。这里我们把上一小节的 hello 暴露出去。

nginx 镜像会暴露一个 80 端口,通过 80 端口我们可以访问到 nginx 服务。但是在 Kubernetes 中,则可能有些麻烦。

每个 Pod 在集群中都有一个唯一 IP,我们可以查看详细的 Pod 信息:

kubectl get pods -o wide

minikube_pod

我们可以直接访问它:

curl 172.17.0.3

minikube\_访问nginx

为了能够在外网访问,我们创建 Service:

kubectl expose deployment hello --type=LoadBalancer --port=80

然后查看刚刚创建的 service:

kubectl get service hello
# 或
minikube service hello
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
hello        LoadBalancer   10.102.73.188   <pending>     80:31286/TCP   5s
|-----------|-------|-------------|-------------------------|
| NAMESPACE | NAME  | TARGET PORT |           URL           |
|-----------|-------|-------------|-------------------------|
| default   | hello |          80 | http://10.170.0.5:31286 |
|-----------|-------|-------------|-------------------------|
* Opening service default/hello in default browser...
  http://10.170.0.5:31286

此时,在集群内,通过 http://10.170.0.5:31286 可以访问此 Pod,或者在外网访问 31286 端口。

清理集群资源

由于 Minikube 创建的资源只是单机的,同时会产生很多 Docker 容器,我们练习完毕后,就要清除环境,以免影响后续实践环境。

首先清除 service、deployment (可以跳过这个步骤)。

kubectl delete service hello
kubectl delete deployment hello

然后停止 Minikube 虚拟机(VM):

minikube stop

接着删除 Minikube 虚拟机(VM):

minikube delete
Copyright © 痴者工良 2021 all right reserved,powered by Gitbook文档最后更新时间: 2021-11-17 07:17:23

results matching ""

    No results matching ""