教你在virtualBox搭建一個(gè)本地kubernets集群?jiǎn)栴}
1. 虛擬機(jī)準(zhǔn)備工作
1.1 下載centos7的鏡像
注意centos8不支持kubeadm,血淚教訓(xùn)。也不要下mini會(huì)無法使用界面。http://mirrors.aliyun.com/centos/7/isos/x86_64/
安裝不要使用最小化安裝,不然接下來安裝增強(qiáng)功能不方便。
systemctl stop firewalld && systemctl disable firewalld
1.2 關(guān)閉sawp內(nèi)存空間
在安裝K8S集群時(shí),Linux的Swap內(nèi)存交換機(jī)制是一定要關(guān)閉的,否則會(huì)因?yàn)閮?nèi)存交換而影響性能以及穩(wěn)定性。這里,我們可以提前進(jìn)行設(shè)置:
- 執(zhí)行swapoff -a可以臨時(shí)關(guān)閉,但系統(tǒng)重啟后會(huì)恢復(fù)
- 編輯/etc/fstab,注釋掉包含swap那一行就可以永久關(guān)閉了,可以執(zhí)行如下命令注釋掉該行:
sed -i '/ swap / s/^/#/' /etc/fstab
1.3 關(guān)閉 SeLinux
- 執(zhí)行setenforce 0可以臨時(shí)關(guān)閉
- 永久關(guān)閉需要修改/etc/sysconfig/selinux的文件設(shè)置
sed -i '/SELINUX=e\|SELINUX=p\|SELINUX=d/c\SELINUX=disabled' /etc/sysconfig/selinux
1.4 配置橋接模式
橋接模式相當(dāng)于假設(shè)了一個(gè)虛擬網(wǎng)卡,把虛擬機(jī)加入宿主機(jī)所在的網(wǎng)卡區(qū)域,所以界面名稱是宿主機(jī)的網(wǎng)卡名字。
可以在網(wǎng)絡(luò)和internet設(shè)置
然后查看現(xiàn)在正在使用的網(wǎng)卡
通過關(guān)閉網(wǎng)卡發(fā)現(xiàn),實(shí)際上是ens8在做網(wǎng)橋,和外界通訊。
其中centos的網(wǎng)卡配置文件目錄:cd /etc/sysconfig/network-scripts/
,我們需要改的是vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
,把下面的內(nèi)容輸入。(經(jīng)測(cè)試無關(guān))
BOOTPROTO="static" IPADDR=192.168.0.50 GATEWAY=192.168.0.1 DNS1=192.168.0.1 DNS2=8.8.8.8 NETMASK=255.255.255.0
宿主機(jī)可以ping虛擬機(jī),但是虛擬機(jī)無法ping宿主機(jī)。
1.5 安裝增強(qiáng)功能
參考我上一篇博客: http://www.dbjr.com.cn/article/234291.htm
1.6 XSHELL連接SSH
為了防止需要x11,所以需要去vi /etc/sudoers
增加一個(gè)修改Defaults env_keep="DISPLAY XAUTHORITY"
2. 安裝docker
2.1 卸載舊的docker版本
首先是參考官網(wǎng)的步驟https://docs.docker.com/engine/install/centos/#prerequisites
先卸載舊版本:
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2.2 配置阿里的鏡像倉庫
sudo yum install -y yum-utils yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3 安裝最新版本的 Docker Engine 和 containerd
這一步可能會(huì)遇到問題和podman沖突,podman是redhat用來取代docker的打包工具,因此直接移除就好:
yum erase podman buildah sudo yum install docker-ce docker-ce-cli containerd.io
2.4 啟動(dòng)docker并且用helloWord測(cè)試,如果成功可以在結(jié)果看到提示你正確安裝:
sudo systemctl start docker sudo docker run hello-world
設(shè)計(jì)開啟啟動(dòng),并且測(cè)試完移除容器
systemctl enable docker
2.5 避免和kubelet的沖突
docker info|grep cgroup
檢視,如果docker使用的Cgroup Driver為cgroupfs。則有可能跟kubelet沖突,需要改為一致的systemd
,先vi /etc/docker/daemon.json
,在檔案中新增如下程式碼,重啟docker即可systemctl restart docker
{ "exec-opts": ["native.cgroupdriver=systemd"] }
3. 安裝kubernetes
我們利用kubernetes官方提供的kubeadm工具來安裝kubernetes集群,官方文檔可以參考:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
3.2 配置kubernetes的yum源
這里使用阿里云的鏡像倉庫,之前使用過騰訊的鏡像倉庫,報(bào)過404的錯(cuò)誤,其實(shí)應(yīng)該是鏡像倉庫源錯(cuò)誤。
Errors during downloading metadata for repository 'kubernetes':
- Status code: 404 for https://mirrors.cloud.tencent.com/kubernetes/yum/repos/kubernetes-el7-x86_64/repodata/repomd.xml.asc (IP: 120.196.204.237)
- Status code: 404 for https://mirrors.cloud.tencent.com/kubernetes/yum/doc/yum-key.gpg (IP: 120.196.204.75)
錯(cuò)誤:為倉庫 'kubernetes' 獲取 GPG 密鑰失敗 : Status code: 404 for https://mirrors.cloud.tencent.com/kubernetes/yum/doc/yum-key.gpg (IP: 120.196.204.75)
還有就是阿里云的倉庫參考的博主的也是失敗的,最新的找到了這個(gè):
# 配置k8s阿里云源 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
安裝組件(需要指定版本,我試過最新的版本或者1.18.4鏡像倉庫都下載失?。?/p>
yum install kubectl-1.20.0 kubeadm-1.20.0 kubelet-1.20.0 -y
3.3 啟動(dòng) kubelet
systemctl enable kubelet && systemctl start kubelet
3.4 設(shè)置主機(jī)名
然后復(fù)制若干份,給每個(gè)主機(jī)設(shè)置名字:
hostnamectl set-hostname k8s-master2
3.5 規(guī)劃集群網(wǎng)絡(luò)
注意這里hosts的名字要和上面的主機(jī)名一致,不然待會(huì)兒建設(shè)集群會(huì)報(bào)錯(cuò)Could not resolve host: mirrors.aliyun.com; 未知的錯(cuò)誤
vi /etc/hosts 192.168.0.104 k8s-master1 192.168.0.105 k8s-master2 192.168.0.106 k8s-node1 192.168.0.107 k8s-node2
然后給每個(gè)節(jié)點(diǎn)設(shè)置靜態(tài)IP,不然每次重啟都不一樣,再重啟網(wǎng)絡(luò)組件,注意我這里的內(nèi)核版本是centos8.0,所以網(wǎng)絡(luò)組件不是network,改動(dòng)的加進(jìn)去的靜態(tài)IP部分都是根據(jù)我本機(jī)電腦的IP得來的。DNS要設(shè)置,不然可能會(huì)出現(xiàn)之后使用鏡像下載失敗的問題。
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 DNS1=8.8.8.8 DNS2=8.8.4.4 IPV6_PRIVACY=no OXY_METHOD="none" BROWSER_ONLY="no" ############改動(dòng)部分開始############ #動(dòng)態(tài)IP #BOOTPROTO="dhcp" #靜態(tài)IP BOOTPROTO="static" IPADDR=192.168.0.104 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 DNS1=192.168.0.1 ############改動(dòng)部分結(jié)束############ DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp0s3" UUID="73ab5a69-9070-4c5a-a0b9-c5a6250af943" DEVICE="enp0s3" ONBOOT="yes" nmcli c reload nmcli c up enp0s3
此時(shí)集群的主機(jī)可以互相ping通,但是虛擬機(jī)ping主機(jī)無法ping通。
1.依次打開【控制面板】-【W(wǎng)indows Definder防火墻】-【高級(jí)設(shè)置】-【入站規(guī)則】-【按配置文件篩選】-【按公有配置文件篩選】
2.拉到最下面,找到并啟用文件類型為“公用”的“文件和打印共享(回顯請(qǐng)求 – ICMPv4-In)”規(guī)則,此時(shí)就可以ping通了。
3.6 初始化一臺(tái)機(jī)器的master節(jié)點(diǎn)
驗(yàn)收標(biāo)準(zhǔn): kubectl get node -n kube-system
可以看到輸出的結(jié)果
安裝方式: kubeadm init \ --apiserver-advertise-address=192.168.0.104\ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.20.0 \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16
可以在后面跟上:--ignoer-preflight-errors=all
安裝之前的驗(yàn)證:
kubeadm init --dry-run
,可以不需要實(shí)際部署但是走一遍init的流程,可以看看有沒有錯(cuò)誤并且看到官方推薦的版本,也可以看到安裝之后下一步要做什么,看到會(huì)給我們創(chuàng)建CA證書和通過yaml創(chuàng)建etcd等資源,/etc/kubernetes下面可以看到正常的資源。- 通過
kubeadm config images list --kubernetes-version 1.18.4 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
驗(yàn)證資源能不能正常拉下來,注意備注kubernets版本是為了避免從墻外拉。國(guó)內(nèi)鏡像地址參考
- 選項(xiàng)–pod-network-cidr=10.244.0.0/16,指定了pod的子網(wǎng)劃分地址。因?yàn)楹竺嬉褂胒lannel網(wǎng)絡(luò)插件,所以這里要指定flannel規(guī)定的cidr地址。
- 選項(xiàng)–image-repository=“registry.cn-hangzhou.aliyuncs.com/google_containers”,指定了容器鏡像的倉庫地址。
- 選項(xiàng)–apiserver-advertise-address=192.168.0.12,表示api-server綁定的網(wǎng)卡地址,這里就是當(dāng)前k8s-master這個(gè)節(jié)點(diǎn)的IP地址.
或者將配置文件保存下來kubeadm config print init-defaults > kubeadm.conf
,方便修改和查看。然后主要也是改images-repository,驗(yàn)證的話kubeadm config images pull --config kubeadm.conf
安裝錯(cuò)版本了需要撤銷init才能重新部署,此時(shí)通過kubeadm reset
完成,重置過程不會(huì)重置或清除 iptables 規(guī)則或 IPVS 表,可以看重置后的提示,不過我們剛剛初始化直接reset就行。
配置kubeconfig:
To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf
3.7 讓子節(jié)點(diǎn)加入
3.71 加入子節(jié)點(diǎn)
只需要在子節(jié)點(diǎn)跑下面的命令就行啦,這個(gè)是上面init提示的:
kubeadm join k8smaster.com:6443 --token pdas2m.fkgn8q7mz5u96jm6 --discovery-token-ca-cert-hash sha256:6fd9b1bf2d593d2d4f550cd9f1f596865f117fef462db42860228311c2712b8b
如果沒有記錄可以通過kubeadm token list
查看,如果沒有輸出說明上個(gè)token已經(jīng)過期了,直接生成新的kubeadm token create --print-join-command
,默認(rèn)有效期24小時(shí),若想久一些可以結(jié)合–ttl參數(shù),設(shè)為0則用不過期
kubeadm join k8smaster.com:6443 --token pdas2m.fkgn8q7mz5u96jm6 --discovery-token-ca-cert-hash sha256:6fd9b1bf2d593d2d4f550cd9f1f596865f117fef462db42860228311c2712b8b
如果有輸出,比如下面,此時(shí)發(fā)現(xiàn)只有token沒有CA:
還需要解密獲得證書:openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
那么結(jié)果是6fd9b1bf2d593d2d4f550cd9f1f596865f117fef462db42860228311c2712b8b
,也就是-discovery-token-ca-cert-hash sha256:的值。
如果報(bào)錯(cuò):
error execution phase preflight: couldn’t validate the identity of the
API Server: could not find a JWS signature in the cluster-info
ConfigMap for token ID “ecqb8f”
是因?yàn)榱钆七^期了,重新生成一個(gè)即可
3.72 子節(jié)點(diǎn)正確使用kubelet
無法正常使用kubelet get nodes,報(bào)錯(cuò)如下:
The connection to the server localhost:8080 was refused - did you
specify the right host or port?
先使用root用戶, 發(fā)現(xiàn)還是不行。
mkdir $HOME/.kube/ cp -i /etc/kubernets/kubelet.conf $HOME/.kube/config chown 1000:1000 $HOME/.kube/config
3.8 配置flannel
# 下載flannel.yaml https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f kube-flannel.yml
鏡像:quay.io/coreos/flannel:v0.11.0-amd64可能拉取很慢,可以提前下載已導(dǎo)出的鏡像包在節(jié)點(diǎn)上執(zhí)行docker load完成鏡像導(dǎo)入(.docker)或者docker import(.tar)
flannel起來后,cosedns也會(huì)起來
到此這篇關(guān)于virtualBox搭建一個(gè)本地kubernets集群的文章就介紹到這了,更多相關(guān)virtualBox本地kubernets集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
virtualbox虛擬機(jī)網(wǎng)絡(luò)設(shè)置原理解析
這篇文章為大家詳細(xì)主要介紹了virtualbox虛擬機(jī)網(wǎng)絡(luò)設(shè)置原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10Virtualbox 下 Ubuntu 22.04 網(wǎng)絡(luò)互通/固定IP 
這篇文章主要介紹了Virtualbox 下 Ubuntu 22.04 網(wǎng)絡(luò)互通/固定IP 配置方法,包括配置virtual box全局網(wǎng)絡(luò)及配置虛擬機(jī)網(wǎng)絡(luò)的方法,感興趣的朋友跟隨小編一起看看吧2022-10-10配置?VirtualBox?虛擬機(jī)的網(wǎng)絡(luò)模式
這篇文章主要介紹了配置?VirtualBox?虛擬機(jī)的網(wǎng)絡(luò)模式,主要以 VirtualBox 為例梳理一下虛擬機(jī)的網(wǎng)絡(luò)設(shè)置,具有一的參考價(jià)值,需要的朋友可以參考一下2022-04-04VirtualBox CentOS7.7.1908 Python3.8 搭建Scrapy開發(fā)環(huán)境【圖文教程】
這篇文章主要介紹了VirtualBox CentOS7.7.1908 Python3.8 搭建Scrapy開發(fā)環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10在Virtualbox下為Ubuntu16.04開機(jī)自動(dòng)掛載共享目錄的最佳方法
這篇文章主要介紹了在Virtualbox下為Ubuntu16.04開機(jī)自動(dòng)掛載共享目錄的最佳方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09Virtual Box的host-only網(wǎng)絡(luò),文件共享
這篇文章主要介紹了Virtual Box使用Host-only建立一個(gè)內(nèi)部局域網(wǎng),以及VirtualBox文件共享功能的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06VirtualBox 共享文件夾設(shè)置及開機(jī)自動(dòng)掛載詳細(xì)教程
本篇文章主要介紹了VirtualBox 共享文件夾設(shè)置及開機(jī)自動(dòng)掛載詳細(xì)教程,感興趣的同學(xué)可以了解一下。2016-11-11利用virtualbox虛擬機(jī)實(shí)現(xiàn)端口轉(zhuǎn)發(fā)
這篇文章主要為大家詳細(xì)介紹了利用virtualbox虛擬機(jī)實(shí)現(xiàn)端口轉(zhuǎn)發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06