使用Minikube來運行kubernetes集群是最簡單、快捷的途徑。Minikube是一個構建單節點集群的工具,對於測試Kubernetes和本地開發應用都非常有用。官方安裝minikube教程請參考:Install Minikube (github地址)
實驗環境:VM中的CentOS7
一、安裝前的准備工作
檢查是否支持虛擬化,輸出非空說明支持。
grep -E --color 'vmx|svm' /proc/cpuinfo
注意:如果是在虛擬機中操作,比如Vmware,則Vmware默認是將虛擬化關閉的,需要手動將其打開。
二、安裝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=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包管理器安裝
不再贅述,只是包管理器不同而已,與第②種差不多。
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,選擇安裝VirtualBox或KVM之一即可(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,最后開始拉取鏡像。需要耐性等待。
查看集群是否正常工作,使用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=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