【kubernetes入门学习】使用minikube创建k8s本地单节点集群
使用Minikube来运行kubernetes集群是最简单、快捷的途径。Minikube是一个构建单节点集群的工具,对于测试Kubernetes和本地开发应用都非常有用。
官方教程:Install Minikube
github地址:官方minikube,阿里云minikube
实验环境:VM环境中的CentOS7。
一、准备工作
由于是在虚拟机下演示,虚拟机需要启用虚拟化功能。可以先用以下命令检查是否支持虚拟化,输出非空说明支持。
grep -E --color 'vmx|svm' /proc/cpuinfo
Vmware默认是将虚拟化关闭的,需要手动将其打开。
二、安装kubectl
要与Kubernetes进行交互,需要由kubectl客户端。参考官方kubectl安装教程:Install and Set Up kubectl
1.安装kubectl
Linux下有三种安装方式,这里只记录CentOS下的步骤,其它操作系统见官方教程。
①使用二进制文件安装
直接使用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=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF setenforce 0 yum install -y kubelet kubeadm kubectl
这里会同时安装上kubelet,kubeadm和kubectl。安装完成后,检查是否安装成功
kubectl version
③使用snap包管理器安装
snap install kubectl --classic kubectl version --client
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.安装minikube
这里列举的是直接下载二进制可执行文件的方式。使用包管理器安装方式直接参考官方文档。
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 chmod +x minikube sudo cp minikube /usr/local/bin
但是,这里要访问google地址,很可能无法直接访问。可以参考:AliyunContainerService/minikube
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.18.1/minikube-linux-amd64 chmod +x minikube sudo mv minikube /usr/local/bin/
3.安装驱动
官网:Drivers
Linux下,官方推荐docker方式和KVM2虚拟机的方式。注意:minikube也支持--vm-driver=none可选参数的方式在主机上而非虚拟机中运行kubernetes组件。使用这个驱动选项要求docker和linux环境,而非hypervisor。
(1)如果使用Docker方式
直接使用minikube来启动集群时,指定docker方式就行了。
#使用docker驱动来启动集群 minikube start --driver=docker #将docker设置默认驱动 minikube config set driver docker
(2)如果使用kvm2方式
需要先安装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
4.启动minikube
#启动minikube minikube start (docker方式) #使用docker驱动来启动 minikube start --driver=docker #将docker设为默认驱动 minikube config set driver docker (kvm2方式) #指定使用kvm2驱动方式启动 minikube start --vm-driver kvm2 #将kvm2设为默认驱动 minikube config set vm-driver kvm2
下面是使用kvm2方式启动的截图。说明:这个步骤需要等待较长时间,因为要下载一些文件,拉取镜像,所以需要耐性等待。
下面是我后来在ubuntu下使用docker驱动方式启动的截图。
集群启动之后,可以使用使用下面命令来查看集群是否正常工作
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=2, Memory=2461MB, Disk=47990MB) ... * OS release is Ubuntu 18.04.2 LTS * Preparing Kubernetes v1.15.0 on Docker 18.09.5 ... - 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:"1", Minor:"15", 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:"1", Minor:"15", 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