【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

官网:minikube start

这里列举的是直接下载二进制可执行文件的方式。使用包管理器安装方式直接参考官方文档。

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
不积跬步,无以至千里。不积小流,无以成江海!
原文地址:https://www.cnblogs.com/rouqinglangzi/p/10853998.html