kubernetes之二 使用minikube創建單節點k8s本地集群


使用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,選擇安裝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,最后開始拉取鏡像。需要耐性等待。

查看集群是否正常工作,使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM