kubernetes之二 使用minikube创建单节点k8s本地集群

时间:2024-01-13 23:06:50

使用Minikube来运行kubernetes集群是最简单、快捷的途径。Minikube是一个构建单节点集群的工具,对于测试Kubernetes和本地开发应用都非常有用。官方安装minikube教程请参考:Install Minikube  (github地址)

实验环境:VM中的CentOS7

一、安装前的准备工作

检查是否支持虚拟化,输出非空说明支持。

grep -E --color 'vmx|svm' /proc/cpuinfo

注意:如果是在虚拟机中操作,比如Vmware,则Vmware默认是将虚拟化关闭的,需要手动将其打开。

kubernetes之二 使用minikube创建单节点k8s本地集群

二、安装kubectl

要与Kubernetes进行交互,需要由kubectl客户端。参考官方kubectl安装教程:Install and Set Up kubectl

1.安装kubectl

Linux下有三种安装方式,其它操作系统请见官方教程。

①使用curl的方式安装

如果使用curl无法下载,则可以在浏览器地址栏中直接输入链接手动进行下载。

# 下载最新版k8s
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
# 下载指定版k8s
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.6.4/bin/linux/amd64/kubectl # 使kubectl可执行
chmod +x ./kubectl # 将kubectl移动到可以全局访问的目录下
sudo mv ./kubectl /usr/local/bin/kubectl # 在任意目录执行,验证安装
kubectl version

②使用原生包管理器安装

官方给的源地址同样无法下载,但只需修改成国内源,比如阿里源,就可以下载了。

使用阿里kubernetes镜像源下载

# Debian/Ubuntu
apt-get update && apt-get install -y apt-transport-https
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl # CentOS/RHEL/Fedora
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=
gpgcheck=
repo_gpgcheck=
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce
yum install -y kubelet kubeadm kubectl

这里会同时安装上kubelet,kubeadm和kubectl。

安装完成后,检查是否安装成功

kubectl version

③使用snap包管理器安装

不再赘述,只是包管理器不同而已,与第②种差不多。

2.配置kubectl

为了kubectl发现和访问kubernetes集群,需要一个kubeconfig文件,该文件会在使用kube-up.sh创建集群时或者在成功部署Minikube集群时自动创建。默认情况下,kubectl配置文件在~/.kube/config目录下。

#通过获取集群的状态,来检查kubectl是否成功配置。
kubectl cluster-info

如果收到了一个URL响应,说明配置合理,能够访问集群。否则,如果收到的响应类似如下信息,说明kubectl没有合理地进行配置,不能连接到kubernetes集群

The connection to the server <server-name:port> was refused - did you specify the right host or port?

例如,如果你打算在你的电脑本地环境运行kubernetes集群,你需要先安装一个如Minikube这样的工具,然后重新运行上面的命令。如果响应能返回一个url但不能访问集群,可以使用下面的命令检查一下是否配置正确。

kubectl cluster-info dump

配置shell自动完成

可以通过以下命令来产生Bash下的kubectl自动完成脚本。在shell中source一下该自动完成脚本使自动完成功能生效。

#使用该命令来产生Bash下的kubectl自动完成脚本
kubectl completion bash

然而,自动完成脚本依赖于bash-completion,我们得先安装bash-completion。

①安装bash-completion

先检测是否已经安装。

type _init_completion

如果检测未安装,则进行安装。安装会创建/usr/share/bash-completion/bash_completion脚本,这是bash-completion的核心脚本。

#ubuntu
apt-get install bash-completion
#centos
yum install bash-completion

创建后需要在~/.bashrc文件中手动source下配置,这取决于包管理器是否需要这样做。

可以使用以下方式来验证是否需要手动进行source配置。

重启shell,然后运行下面命令,如果命令成功,说明已经设置好了。

type _init_completion

否则需要添加以下内容到~/.bashrc文件

source /usr/share/bash-completion/bash_completion

然后重启shell,然后再次使用type _init_completion命令验证bash-completion正确地进行了安装。

②启用kubectl autocompletion

你需要确保在所有shell环境下kubectl 自动完成脚本都被source了,有两种方式。

第一种方式:在~/.bashrc文件手动source自动完成脚本

echo 'source <(kubectl completion bash)' >>~/.bashrc

第二种方式:添加自动完成脚本到/etc/bash_completion.d目录下。

注意:bash-completion会source  /etc/bash_completion.d目录下所有的自动完成脚本(bash-completion sources all completion scripts in /etc/bash_completion.d)

kubectl completion bash >/etc/bash_completion.d/kubectl

这两种方式是等价的。重新打开(reload)shell后,kubectl自动完成功能应该就可以使用了。

三、安装minikube

1.确定上面的kubectl已经安装好

2.安装虚拟机驱动(官网称为Hypervisor)

对于Linux,选择安装VirtualBoxKVM之一即可(github上推荐使用kvm)

注意:minikube也支持--vm-driver=none可选参数的方式在主机上而非虚拟机中运行kubernetes组件。使用这个驱动选项要求docker和linux环境,而非hypervisor。

如果安装virtualBox驱动(注意版本以保证与系统的兼容性)

#下载源
cd /etc/yum.repos.d/
wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo #安装(注意,我的centos7在安装6.0版本会不兼容。)
yum install VirtualBox-6.0

如果安装kvm2驱动,参考github上的教程

下面记录我的安装过程:

#先安装依赖libvirt 1.3.1 or higher和qemu-kvm
Debian/Ubuntu 18.x: sudo apt install libvirt-clients libvirt-daemon-system qemu-kvm
Ubuntu 16.x及之前版本: sudo apt install libvirt-bin libvirt-daemon-system qemu-kvm
Fedora/CentOS/RHEL: sudo yum install libvirt-daemon-kvm qemu-kvm #检查已经安装的virsh版本
virsh --version #安装docker-machine-driver-kvm2
(如果virsh版本号>1.3.1,执行下面命令。如果小于该版本号,操作不同,看原文档。) 【如果下载不了,看底下的说明】
curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 \
&& sudo install docker-machine-driver-kvm2 /usr/local/bin/ #开启,启动,验证libvirtd服务
sudo systemctl enable libvirtd.service
sudo systemctl start libvirtd.service
sudo systemctl status libvirtd.service #将当前用户添加到组
sudo usermod -a -G libvirt $(whoami) #将当前用户session加入到组
newgrp libvirt

说明:

①如果在下载docker-machine-driver-kvm2时下载不了,可以到这里下载:AUR for Arch Linux,然后手动安装。(我之前在ubuntu物理机下可以下载,但后来在虚拟机centos7中下载不了)

②我在检查virsh这一步提示没有该命令,执行下面命令解决了。

#https://blog.csdn.net/weixin_37136725/article/details/78044272
yum install qemu-kvm -y
yum install libvirt -y
yum install virt-install -y
yum install bridge-utils -y

3.完成了上面的步骤。接下来,就可以安装minikube了。

安装minikube也不止一种方式,kubenetes官网文档中列举的是直接下载静态二进制的方式来安装minikube的。这里要直接访问google地址,很可能无法直接访问。

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo cp minikube /usr/local/bin

当然,我们也可以使用阿里云提供的修改版的minikube (教程地址)。下载后将其放入/usr/local/bin目录(阿里云镜像地址)

curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.0.1/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/

4.安装完成后,就可以启动minikube了。

#启动minikube,默认使用virtualBox。
minikube start #启动minikube,指定使用kvm2驱动,而非virtualbox
minikube start --vm-driver kvm2 #或者可以将kvm2设为minikube启动时的默认驱动
minikube config set vm-driver kvm2

说明:我在启动minikube时,控制台显示Configuring environment for Kubernetes v1.14.3 on Docker 18.09.6,等待了较长时间,我还以为卡死了,后来才动起来了,又开始下载kubeadm,最后开始拉取镜像。需要耐性等待。

kubernetes之二 使用minikube创建单节点k8s本地集群

查看集群是否正常工作,使用kubectl cluster-info命令来查看。

kubectl cluster-info

5.简单使用minikube和kubectl

安装好了kubectl和minikube后,可以按照官方的可交互教程:Interactive Tutorial - Creating a Cluster来简单的使用一下。

minikube version

$ minikube version
minikube version: v1.3.0
commit: 43969594266d77b555a207b0f3e9b3fa1dc92b1f

minikube start

$ minikube start
* minikube v1.3.0 on Ubuntu 18.04
* Running on localhost (CPUs=, Memory=2461MB, Disk=47990MB) ...
* OS release is Ubuntu 18.04. LTS
* Preparing Kubernetes v1.15.0 on Docker 18.09. ...
- kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
* Pulling images ...
* Launching Kubernetes ...
* Waiting for: apiserver proxy etcd scheduler controller dns
* Done! kubectl is now configured to use "minikube"

kubectl version

$ kubectl version
Client Version: version.Info{Major:"", Minor:"", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"", Minor:"", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:32:14Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}

kubectl cluster-info

$ kubectl cluster-info
Kubernetes master is running at https://172.17.0.23:8443
KubeDNS is running at https://172.17.0.23:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

kubectl get nodes

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 3m17s v1.15.0