您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何在virtualBox搭建一個本地kubernets集群的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
注意centos8不支持kubeadm,血淚教訓。也不要下mini會無法使用界面。http://mirrors.aliyun.com/centos/7/isos/x86_64/
安裝不要使用最小化安裝,不然接下來安裝增強功能不方便。
systemctl stop firewalld && systemctl disable firewalld
在安裝K8S集群時,Linux的Swap內存交換機制是一定要關閉的,否則會因為內存交換而影響性能以及穩定性。這里,我們可以提前進行設置:
執行swapoff -a可以臨時關閉,但系統重啟后會恢復
編輯/etc/fstab,注釋掉包含swap那一行就可以永久關閉了,可以執行如下命令注釋掉該行:
sed -i '/ swap / s/^/#/' /etc/fstab
執行setenforce 0可以臨時關閉
永久關閉需要修改/etc/sysconfig/selinux的文件設置
sed -i '/SELINUX=e\|SELINUX=p\|SELINUX=d/c\SELINUX=disabled' /etc/sysconfig/selinux
橋接模式相當于假設了一個虛擬網卡,把虛擬機加入宿主機所在的網卡區域,所以界面名稱是宿主機的網卡名字。
可以在網絡和internet設置
然后查看現在正在使用的網卡
通過關閉網卡發現,實際上是ens8在做網橋,和外界通訊。
其中centos的網卡配置文件目錄:cd /etc/sysconfig/network-scripts/
,我們需要改的是vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
,把下面的內容輸入。(經測試無關)
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
宿主機可以ping虛擬機,但是虛擬機無法ping宿主機。
參考我上一篇博客: http://www.neiyidaogou.com/article/234291.htm
為了防止需要x11,所以需要去vi /etc/sudoers
增加一個修改Defaults env_keep="DISPLAY XAUTHORITY"
首先是參考官網的步驟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
sudo yum install -y yum-utils yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
這一步可能會遇到問題和podman沖突,podman是redhat用來取代docker的打包工具,因此直接移除就好:
yum erase podman buildah sudo yum install docker-ce docker-ce-cli containerd.io
2.4 啟動docker并且用helloWord測試,如果成功可以在結果看到提示你正確安裝:
sudo systemctl start docker sudo docker run hello-world
設計開啟啟動,并且測試完移除容器
systemctl enable docker
docker info|grep cgroup
檢視,如果docker使用的Cgroup Driver為cgroupfs。則有可能跟kubelet沖突,需要改為一致的systemd
,先vi /etc/docker/daemon.json
,在檔案中新增如下程式碼,重啟docker即可systemctl restart docker
{ "exec-opts": ["native.cgroupdriver=systemd"] }
我們利用kubernetes官方提供的kubeadm工具來安裝kubernetes集群,官方文檔可以參考:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
這里使用阿里云的鏡像倉庫,之前使用過騰訊的鏡像倉庫,報過404的錯誤,其實應該是鏡像倉庫源錯誤。
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)
錯誤:為倉庫 'kubernetes' 獲取 GPG 密鑰失敗 : Status code: 404 for https://mirrors.cloud.tencent.com/kubernetes/yum/doc/yum-key.gpg (IP: 120.196.204.75)
還有就是阿里云的倉庫參考的博主的也是失敗的,最新的找到了這個:
# 配置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鏡像倉庫都下載失敗):
yum install kubectl-1.20.0 kubeadm-1.20.0 kubelet-1.20.0 -y
systemctl enable kubelet && systemctl start kubelet
然后復制若干份,給每個主機設置名字:
hostnamectl set-hostname k8s-master2
注意這里hosts的名字要和上面的主機名一致,不然待會兒建設集群會報錯Could not resolve host: mirrors.aliyun.com; 未知的錯誤
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
然后給每個節點設置靜態IP,不然每次重啟都不一樣,再重啟網絡組件,注意我這里的內核版本是centos8.0,所以網絡組件不是network,改動的加進去的靜態IP部分都是根據我本機電腦的IP得來的。DNS要設置,不然可能會出現之后使用鏡像下載失敗的問題。
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" ############改動部分開始############ #動態IP #BOOTPROTO="dhcp" #靜態IP BOOTPROTO="static" IPADDR=192.168.0.104 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 DNS1=192.168.0.1 ############改動部分結束############ 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
此時集群的主機可以互相ping通,但是虛擬機ping主機無法ping通。
1.依次打開【控制面板】-【Windows Definder防火墻】-【高級設置】-【入站規則】-【按配置文件篩選】-【按公有配置文件篩選】
2.拉到最下面,找到并啟用文件類型為“公用”的“文件和打印共享(回顯請求 – ICMPv4-In)”規則,此時就可以ping通了。
驗收標準: kubectl get node -n kube-system
可以看到輸出的結果
安裝方式: 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
安裝之前的驗證:
kubeadm init --dry-run
,可以不需要實際部署但是走一遍init的流程,可以看看有沒有錯誤并且看到官方推薦的版本,也可以看到安裝之后下一步要做什么,看到會給我們創建CA證書和通過yaml創建etcd等資源,/etc/kubernetes下面可以看到正常的資源。
通過kubeadm config images list --kubernetes-version 1.18.4 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
驗證資源能不能正常拉下來,注意備注kubernets版本是為了避免從墻外拉。國內鏡像地址參考
選項–pod-network-cidr=10.244.0.0/16,指定了pod的子網劃分地址。因為后面要使用flannel網絡插件,所以這里要指定flannel規定的cidr地址。
選項–image-repository=“registry.cn-hangzhou.aliyuncs.com/google_containers”,指定了容器鏡像的倉庫地址。
選項–apiserver-advertise-address=192.168.0.12,表示api-server綁定的網卡地址,這里就是當前k8s-master這個節點的IP地址.
或者將配置文件保存下來kubeadm config print init-defaults > kubeadm.conf
,方便修改和查看。然后主要也是改images-repository,驗證的話kubeadm config images pull --config kubeadm.conf
安裝錯版本了需要撤銷init才能重新部署,此時通過kubeadm reset
完成,重置過程不會重置或清除 iptables 規則或 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
只需要在子節點跑下面的命令就行啦,這個是上面init提示的:
kubeadm join k8smaster.com:6443 --token pdas2m.fkgn8q7mz5u96jm6 --discovery-token-ca-cert-hash sha256:6fd9b1bf2d593d2d4f550cd9f1f596865f117fef462db42860228311c2712b8b
如果沒有記錄可以通過kubeadm token list
查看,如果沒有輸出說明上個token已經過期了,直接生成新的kubeadm token create --print-join-command
,默認有效期24小時,若想久一些可以結合–ttl參數,設為0則用不過期
kubeadm join k8smaster.com:6443 --token pdas2m.fkgn8q7mz5u96jm6 --discovery-token-ca-cert-hash sha256:6fd9b1bf2d593d2d4f550cd9f1f596865f117fef462db42860228311c2712b8b
如果有輸出,比如下面,此時發現只有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/^.* //'
那么結果是6fd9b1bf2d593d2d4f550cd9f1f596865f117fef462db42860228311c2712b8b
,也就是-discovery-token-ca-cert-hash sha256:的值。
如果報錯:
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”
是因為令牌過期了,重新生成一個即可
無法正常使用kubelet get nodes,報錯如下:
The connection to the server localhost:8080 was refused - did you
specify the right host or port?
先使用root用戶, 發現還是不行。
mkdir $HOME/.kube/ cp -i /etc/kubernets/kubelet.conf $HOME/.kube/config chown 1000:1000 $HOME/.kube/config
# 下載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可能拉取很慢,可以提前下載已導出的鏡像包在節點上執行docker load完成鏡像導入(.docker)或者docker import(.tar)
flannel起來后,cosedns也會起來
感謝各位的閱讀!關于“如何在virtualBox搭建一個本地kubernets集群”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。