多云和混合云:云原生多集群和应用管理
上QQ阅读APP看书,第一时间看更新

2.1 使用Minikube搭建本地Kubernetes集群

Minikube由Kubernetes开源社区维护,用于搭建本地Kubernetes集群,支持MacOS、Linux、Windows等多种操作系统,旨在帮助开发者学习和开发Kubernetes容器平台。用户可以在这个单机版的Kubernetes集群中学习容器编排管理、权限控制、负载均衡等功能。

本章将使用Linux系统演示如何创建Minikube Kubernetes集群,其他类型操作系统的安装及部署步骤参见https://minikube.sigs.k8s.io/docs/start/。

1. 集群信息和节点配置要求

使用Minikube搭建的集群信息如表2-1所示。

表2-1 Minikube集群信息

027-1

用Minikube搭建Kubernetes集群,对节点规格有以下要求。

  • CPU资源不小于2核。
  • 内存不小于2GB。
  • 磁盘存储空间不小于20GB。
  • 具备公网访问能力。
  • 支持容器技术。

2. 安装和启动Docker

执行如下命令,卸载旧版本Docker。

$ yum remove -y docker \
               docker-client \
               docker-client-latest \
               docker-ce-cli \
               docker-common \
               docker-latest \
               docker-latest-logrotate \
               docker-logrotate \
               docker-selinux \
               docker-engine-selinux \
               docker-engine

执行如下命令,设置yum repo。

$ yum install -y yum-utils
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

执行如下命令,安装并启动Docker。

$ yum install -y docker-ce-19.03.13 docker-ce-cli-19.03.13 containerd.io-1.4.3 conntrack
$ systemctl start docker
$ systemctl enable docker

3. 安装和启动Minikube

下载minikube和kubectl二进制文件到idc-minikube节点。

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
  && chmod +x minikube

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/
$ (curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl \
  && chmod +x kubectl

将minikube可执行二进制文件安装到当前节点的可执行路径下。

$ install minikube /usr/local/bin/
$ install kubectl /usr/local/bin/

安装并启动一个1.19.4版本的Kubernetes集群。

$ minikube start --kubernetes-version v1.19.4 --driver=none
  Centos 7.8.2003 上的 minikube v1.16.0
  根据用户配置使用 none 驱动程序
  Starting control plane node minikube in cluster minikube
  Running on localhost (CPUs=2, Memory=3646MB, Disk=40188MB) ...
  OS release is CentOS Linux 7 (Core)
    > kubelet.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
    > kubeadm.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
    > kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
    > kubeadm: 37.30 MiB / 37.30 MiB [---------------] 100.00% 20.08 MiB p/s 2s
    > kubectl: 41.01 MiB / 41.01 MiB [---------------] 100.00% 18.85 MiB p/s 2s
    > kubelet: 104.92 MiB / 104.92 MiB [-------------] 100.00% 14.19 MiB p/s 8s

    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
  开始配置本地主机环境...

  The 'none' driver is designed for experts who need to integrate with an existing VM
  Most users should use the newer 'docker' driver instead, which does not require root!
  For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/

  kubectl和minikube配置将存储在/root中
  如需以您自己的用户身份使用kubectl或minikube命令,您可能需要重新定位该命令。例如,如需覆    盖您的自定义设置,请运行:

    ▪ sudo mv /root/.kube /root/.minikube $HOME
    ▪ sudo chown -R $USER $HOME/.kube $HOME/.minikube

  此操作还可通过设置环境变量 CHANGE_MINIKUBE_NONE_USER=true 自动完成
  Verifying Kubernetes components...
  Enabled addons: default-storageclass, storage-provisioner
  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

执行如下命令,检查集群节点状态是否就绪。

$ kubectl get no
NAME             STATUS   ROLES    AGE   VERSION
local-minikube   Ready    master   4m    v1.19.4

查看minikube集群中组件的运行状态,可以使用minikube status命令,也可以使用kubectl直接查看系统组件的Pod运行状态。

$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
timeToStop: Nonexistent

$ kubectl -nkube-system get po
NAME                                     READY   STATUS    RESTARTS   AGE
coredns-f9fd979d6-9gw7x                  1/1     Running   0          5m43s
etcd-local-minikube                      1/1     Running   0          5m52s
kube-apiserver-local-minikube            1/1     Running   0          5m52s
kube-controller-manager-local-minikube   1/1     Running   0          5m52s
kube-proxy-mbxnz                         1/1     Running   0          5m43s
kube-scheduler-local-minikube            1/1     Running   0          5m52s
storage-provisioner                      1/1     Running   0          5m58s

4. 部署应用

成功创建Kubernetes集群后,我们可以继续部署一个应用,验证应用在集群中是否正常运行。

使用如下命令部署Nginx应用,服务端口为80。

$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --type=NodePort --port=80

查看Nginx服务映射到集群节点上的端口号。

$ kubectl get svc nginx -o jsonpath="{.spec.ports[0].nodePort}"
30439

Nginx服务启动完毕后,就可以通过http://192.168.0.44:30439/地址访问Nginx了,界面如图2-1所示。

030-1

图2-1 浏览器访问Nginx应用