使用KVM在CentOS 8/CentOS 7上安装Minikube Kubernetes
本教程旨在在带有KVM Hypervisor的CentOS 8/CentOS 7上安装Minikube。 Minikube是一个开放源代码工具,旨在使开发人员和系统管理员可以在几分钟内在其本地计算机Laptops,Desktop工作站中引导单个节点Kubernetes集群。这是用于开发和POC的理想选择,但不适用于运行生产工作负载。
简而言之,Minikube打包并配置了Linux VM,然后将Docker和所有Kubernetes组件安装到其中。我们可以通过主机系统中运行的kubectl管理和部署应用程序。
Kubernetes支持的功能
我们可以从在Minikube中运行的Kubernetes运行的一些功能包括:
DNSNodePortsConfigMaps和SecretsDashboards容器运行时:Docker,CRI-O和容器化启用CNI(容器网络接口)IngressPersistenthostPath类型的卷
Minikube支持VirtualBox和KVM虚拟机管理程序。但是,本指南适用于在CentOS 8/CentOS 7 Linux机器上运行带有KVM的Minikube。
更新系统
运行以下命令以将所有系统软件包更新到最新版本:
sudo yum -y update
安装KVM虚拟机监控程序
如前所述,最好将KVM用作Minikube VM的首选Hypervisor。这是我们在CentOS/RHEL 8上安装KVM的完整指南。
确认libvirtd服务正在运行。
$systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-01-20 14:33:07 EAT; 1s ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 20569 (libvirtd)
    Tasks: 20 (limit: 32768)
   Memory: 70.4M
   CGroup: /system.slice/libvirtd.service
           ├─ 2653 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
           ├─ 2654 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
           └─20569 /usr/sbin/libvirtd
Jan 20 14:33:07 cent8.localdomain systemd[1]: Starting Virtualization daemon...
Jan 20 14:33:07 cent8.localdomain systemd[1]: Started Virtualization daemon.
Jan 20 14:33:08 cent8.localdomain dnsmasq[2653]: read /etc/hosts - 2 addresses
Jan 20 14:33:08 cent8.localdomain dnsmasq[2653]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Jan 20 14:33:08 cent8.localdomain dnsmasq-dhcp[2653]: read /var/lib/libvirt/dnsmasq/default.hostsfile
如果安装后未运行,请启动并将其设置为在启动时启动。
sudo systemctl enable --now libvirtd
用户应属于libvirt组。
sudo usermod -a -G libvirt $(whoami) newgrp libvirt
打开文件/etc/libvirt/libvirtd.conf进行编辑。
sudo vi /etc/libvirt/libvirtd.conf
将UNIX域套接字组所有权设置为libvirt(在line85附近)
unix_sock_group = "libvirt"
设置R/W套接字的UNIX套接字权限(在第102行附近)
unix_sock_rw_perms = "0770"
进行更改后,重新启动libvirt守护程序。
sudo systemctl restart libvirtd.service
下载minikube
我们需要下载minikube二进制文件。我将把二进制文件放在/usr/local/bin目录下,因为它在$PATH内部。
sudo yum -y install wget wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 chmod +x minikube-linux-amd64 sudo mv minikube-linux-amd64 /usr/local/bin/minikube
确认在系统上安装了Minikube。
$minikube version minikube version: v1.6.2 commit: 54f28ac5d3a815d1196cd5d57d707439ee4bb392
安装kubectl
我们需要kubectl,这是用于在Kubernetes上部署和管理应用程序的命令行工具。
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
给该文件可执行文件位,然后移动到PATH中的某个位置。
chmod +x kubectl sudo mv kubectl /usr/local/bin/
确认安装的kubectl版本。
$kubectl version --client -o json
 {
   "clientVersion": {
     "major": "1",
     "minor": "17",
     "gitVersion": "v1.17.1",
     "gitCommit": "d224476cd0730baca2b6e357d144171ed74192d6",
     "gitTreeState": "clean",
     "buildDate": "2017-01-14T21:04:32Z",
     "goVersion": "go1.13.5",
     "compiler": "gc",
     "platform": "linux/amd64"
   }
 }
启动minikube
现在已经安装了组件,我们可以启动minikube。将为Kubernetes单节点群集下载并配置VM镜像。
有关选项列表,请运行:
$minikube start --help
要使用默认选项创建一个minikube VM,请运行:
$minikube start
要使用的默认容器运行时是docker,但我们也可以使用crio或者containerd:
$minikube start --container-runtime=cri $minikube start --container-runtime=containerd
安装程序将自动检测KVM并下载KVM驱动程序。
* minikube v1.6.2 on Centos 8.1.1911
* Automatically selected the 'kvm2' driver (alternates: [none])
* Downloading driver docker-machine-driver-kvm2:
    > docker-machine-driver-kvm2.sha256: 65 B/65 B [-------] 100.00% ? p/s 0s
    > docker-machine-driver-kvm2: 13.86 MiB/13.86 MiB  100.00% 791.09 KiB p/s
* Downloading VM boot image ...
如果我们有多个管理程序,请指定它。
$minikube start --vm-driver kvm2
请注意,已安装Kubernetes的最新稳定版本。使用--kubernetes-version标志来指定要安装的版本。例:
--kubernetes-version='1.16.5'
等待下载和设置完成,然后确认一切正常。
$minikube start
* minikube v1.6.2 on Centos 8.1.1911
* Automatically selected the 'kvm2' driver (alternates: [none])
* Downloading driver docker-machine-driver-kvm2:
    > docker-machine-driver-kvm2.sha256: 65 B/65 B [-------] 100.00% ? p/s 0s
    > docker-machine-driver-kvm2: 13.86 MiB/13.86 MiB  100.00% 791.09 KiB p/s
* Downloading VM boot image ...
    > minikube-v1.6.0.iso.sha256: 65 B/65 B [--------------] 100.00% ? p/s 0s
    > minikube-v1.6.0.iso: 150.93 MiB/150.93 MiB [] 100.00% 1.27 MiB p/s 2m0s
* Creating kvm2 VM (CPUs=2, Memory=2000MB, Disk=20000MB) ...
* Preparing Kubernetes v1.17.0 on Docker '19.03.5' ...
* Downloading kubelet v1.17.0
* Downloading kubeadm v1.17.0
* Pulling images ...
* Launching Kubernetes ... 
* Waiting for cluster to come online ...
* Done! kubectl is now configured to use "minikube"
Minikube基本操作
kubectl命令行工具配置为使用minikube。
要检查集群状态,请运行:
$kubectl cluster-info Kubernetes master is running at https://192.168.39.2:8443 KubeDNS is running at https://192.168.39.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Minikube配置文件位于~/.minikube/machines/minikube/config.json下
要查看配置,请使用:
$kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /home/jkmutai/.minikube/ca.crt
    server: https://192.168.39.2:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /home/jkmutai/.minikube/client.crt
    client-key: /home/jkmutai/.minikube/client.key
要检查正在运行的节点:
$kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 2m58s v1.17.0
使用ssh访问minikube VM:
$minikube ssh
                         _             _            
            _         _ ( )           ( )           
  ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __  
/' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`___/'(_,__/'`____)
$sudo su 
要停止正在运行的本地kubernetes集群,请运行:
$minikube stop * Stopping "minikube" in kvm2 ... * "minikube" stopped.
要启动VM,请运行:
$minikube start * minikube v1.6.2 on Centos 8.1.1911 * Selecting 'kvm2' driver from existing profile (alternates: [none]) * Tip: Use 'minikube start -p <name>' to create a new cluster, or 'minikube delete' to delete this one. * Starting existing kvm2 VM for "minikube" ... * Waiting for the host to be provisioned ... * Preparing Kubernetes v1.17.0 on Docker '19.03.5' ... * Launching Kubernetes ... * Done! kubectl is now configured to use "minikube"
要删除本地kubernetes集群,请使用:
$minikube delete
启用Kubernetes仪表板
Kubernetes随附有一个Web面板,我们可以在不与命令行交互的情况下管理集群。仪表板插件在minikube上默认安装并启用。
$minikube addons list - addon-manager: enabled - coredns: disabled - dashboard: enabled - default-storageclass: enabled - efk: disabled - freshpod: disabled - heapster: disabled - ingress: disabled - kube-dns: enabled - metrics-server: disabled - registry: disabled - registry-creds: disabled - storage-provisioner: enabled
要直接在默认浏览器上打开,请使用:
$minikube dashboard
获取仪表盘的URL
$minikube dashboard --url http://192.168.39.117:30000
通过在我们喜欢的浏览器上打开URL来访问Kubernetes仪表板。要进一步阅读,请查看:
Hello Minikube系列:https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/
针对新手的Minikube指南:https://kubernetes.io/docs/getting-started-guides/minikube /

