VirtualBox+Ubuntu16搭建Kubernetes集群的實(shí)現(xiàn)
Kubernetes 運(yùn)維之路 的開始當(dāng)然少不了集群環(huán)境的搭建,這篇文章記錄了我在一臺(tái)機(jī)器使用 VirtualBox + Ubuntu 16 搭建 Kubernetes 的整個(gè)過程,包括其中遇到的一些問題以及解決辦法。
關(guān)于 Kubernetes
下面是一段來自維基百科的關(guān)于 Kubernetes 的解釋:
Kubernetes(常簡(jiǎn)稱為 K8s)是用于自動(dòng)部署、擴(kuò)展和管理「容器化(containerized)應(yīng)用程序」的開源系統(tǒng)。該系統(tǒng)由 Google 設(shè)計(jì)并捐贈(zèng)給 Cloud Native Computing Foundation(今屬 Linux 基金會(huì))來使用。
它旨在提供“跨主機(jī)集群的自動(dòng)部署、擴(kuò)展以及運(yùn)行應(yīng)用程序容器的平臺(tái)”。它支持一系列容器工具,包括Docker等。
Kubernetes 可以為我們提供 服務(wù)發(fā)現(xiàn)和負(fù)載均衡、存儲(chǔ)編排、自動(dòng)部署和回滾、自動(dòng)完成裝箱計(jì)算、自我修復(fù) 和 密鑰與配置管理 的能力。
基礎(chǔ)環(huán)境準(zhǔn)備
安裝 VirtualBox
VirtualBox 是一種功能強(qiáng)大的虛擬機(jī)軟件,而且是開源免費(fèi)的,這是下載地址,安裝 VirtualBox 非常簡(jiǎn)單,這里我就不贅述了。
下載 Ubuntu 16 系統(tǒng)鏡像
這里我選擇了 Ubuntu 16 作為系統(tǒng)鏡像,當(dāng)然你也可以使用其他系統(tǒng),比如 CentOS 等,Ubuntu 16 的下載地址。
虛擬機(jī) x3
安裝好了 VirtualBox,下載了 Ubuntu 16 的鏡像后,我們首先需要搭建三臺(tái) Ubuntu 16 的虛擬機(jī)。這個(gè)新建虛擬機(jī)的過程也是比較簡(jiǎn)單的,一步一步往下走就可以了。新建完成后,我們需要對(duì)每臺(tái)虛擬機(jī)進(jìn)行相應(yīng)的配置,配置時(shí)使用的用戶應(yīng)該是 root 用戶。
虛擬機(jī) IP
由于我們使用的是虛擬機(jī),我們會(huì)給每臺(tái)虛擬機(jī)配置網(wǎng)卡,讓每臺(tái)虛擬機(jī)都可以上網(wǎng)的,這里有兩種方式:
- 使用 橋接網(wǎng)卡,每臺(tái)虛擬機(jī)的 IP 將會(huì)是宿主機(jī)網(wǎng)段的,支持虛擬機(jī)上網(wǎng)
- 使用 NAT 網(wǎng)絡(luò) + 端口轉(zhuǎn)發(fā),網(wǎng)段自行設(shè)置,支持虛擬機(jī)上網(wǎng)
大家可以使用其中任意一種方式給虛擬機(jī)配置網(wǎng)卡,從而讓虛擬機(jī)可以上網(wǎng)。
需要注意的是,在集群搭建完成后,集群中的每個(gè)節(jié)點(diǎn)的 IP 要求保持不變,否則節(jié)點(diǎn)需要重新加入。
簡(jiǎn)單的方式就是讓虛擬機(jī)不關(guān)機(jī),而是進(jìn)入睡眠狀態(tài),下次只需喚醒即可。
在集群中,我們使用的是內(nèi)網(wǎng)地址,可以通過 ifconfig 或者 ip addr 找到每臺(tái)虛擬機(jī)對(duì)應(yīng)的內(nèi)網(wǎng)地址:
> ifconfig enp0s3 Link encap:Ethernet HWaddr 08:00:27:6f:23:2a inet addr:10.0.2.4 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe6f:232a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3277016 errors:0 dropped:0 overruns:0 frame:0 TX packets:3385793 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1084480916 (1.0 GB) TX bytes:2079122979 (2.0 GB)
這臺(tái)虛擬機(jī)(master)的地址就是 10.0.2.4。
配置主機(jī)名
Kubernetes 的節(jié)點(diǎn)名稱是由主機(jī)名決定的,所以我們可以分別設(shè)置三臺(tái)虛擬機(jī)的主機(jī)名為 master、node1 和 node2,通過修改 /etc/hosts 文件來修改主機(jī)名,需要重啟虛擬機(jī):
# /etc/hosts 10.0.2.4 master 10.0.2.5 node1 10.0.2.6 node2
SSH 無密連接
在虛擬機(jī)運(yùn)行起來后,我們要做的第一件事就是要連通這三臺(tái)虛擬機(jī),即配置 SSH 無密連接。
首先在其中的一臺(tái)虛擬機(jī)上生成 SSH 的公私鑰:
ssh-keygen -t rsa -C 'k8scat@gmail.com' -f ~/.ssh/id_rsa -q -N ''
關(guān)于 ssh-keygen 的參數(shù)說明:
- -t rsa 指定加密算法為 RSA
- -C 'k8scat@gmail.com' 用于提供一個(gè)備注,表明私鑰的生成者
- -f ~/.ssh/id_rsa 指定私鑰生成的位置
- -q -N '' 表示不對(duì)私鑰加密碼,以及使用靜默的方式
將公私鑰分發(fā)給另外兩臺(tái)虛擬機(jī),并在三臺(tái)虛擬機(jī)上都將公鑰(~/.ssh/id_rsa.pub)的內(nèi)容寫進(jìn) ~/.ssh/authorized_keys 文件中,同時(shí)設(shè)置 ~/.ssh/authorized_keys 文件的權(quán)限為 400:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 400 ~/.ssh/authorized_keys
配置完成后,我們將可以通過以下方式在其中一個(gè)虛擬機(jī)上連接另一臺(tái)虛擬機(jī)了:
# 在 master 節(jié)點(diǎn)上 ssh root@node1
Kubernetes 集群搭建
在弄好三臺(tái)虛擬機(jī)后,我們便可以開始搭建一個(gè)擁有三個(gè)節(jié)點(diǎn)的 Kubernetes 的集群了。
安裝 Docker
apt-get update -y apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # INSTALL DOCKER ENGINE apt-get update -y apt-get install -y docker-ce docker-ce-cli containerd.io # Configure Docker to start on boot systemctl enable docker.service systemctl enable containerd.service # Start Docker systemctl start docker
安裝 kubeadm、kubelet 和 kubectl
這里使用的是阿里云的鏡像源:
# 更新 apt 包索引并安裝使用 Kubernetes apt 倉(cāng)庫(kù)所需要的包 apt-get update -y apt-get install -y apt-transport-https ca-certificates curl # 下載 Google Cloud 公開簽名秘鑰 # curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - # 添加 Kubernetes apt 倉(cāng)庫(kù) # echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list # 更新 apt 包索引,安裝 kubelet、kubeadm 和 kubectl,并鎖定其版本 apt-get update -y apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl
關(guān)閉 SWAP
編輯 /etc/fstab 文件并注釋掉 swap 分區(qū)的配置:
#/dev/mapper/master--vg-swap_1 none swap sw 0 0
預(yù)先下載鏡像
獲取 kubeadm init 需要使用到的鏡像列表:
> kubeadm config images list k8s.gcr.io/kube-apiserver:v1.21.1 k8s.gcr.io/kube-controller-manager:v1.21.1 k8s.gcr.io/kube-scheduler:v1.21.1 k8s.gcr.io/kube-proxy:v1.21.1 k8s.gcr.io/pause:3.4.1 k8s.gcr.io/etcd:3.4.13-0 k8s.gcr.io/coredns/coredns:v1.8.0
k8s 的鏡像源對(duì)于國(guó)內(nèi)用戶是可望而不可即的,但我們可以先拉到國(guó)內(nèi)的鏡像倉(cāng)或者可以使用的鏡像倉(cāng),比如阿里云的容器鏡像服務(wù) ACR 和 Docker 的官方鏡像倉(cāng) DockerHub。
我們可以新建一個(gè) GitHub 代碼倉(cāng),里面只有一個(gè) Dockerfile,其內(nèi)容如下:
FROM k8s.gcr.io/kube-apiserver:v1.21.0
然后在阿里云的容器鏡像服務(wù) ACR 中新建一個(gè)鏡像,并關(guān)聯(lián)這個(gè) GitHub 代碼倉(cāng),構(gòu)建出來的鏡像就是我們要的 k8s 鏡像,比如上面的 k8s.gcr.io/kube-apiserver:v1.21.1,但在使用的時(shí)候需要重新給鏡像打標(biāo)簽。
在 ACR 中構(gòu)建好了所有需要的鏡像后,使用下面這個(gè)腳本可以快速處理給鏡像打標(biāo)簽的任務(wù):
# Pull images from aliyun registry kubeadm config images list | sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#registry.cn-shenzhen.aliyuncs.com/k8scat#g' -e 's#/coredns/coredns#/coredns#g' | sh -x # Tag images docker images | grep k8scat | awk '{print "docker tag",$1":"$2,$1":"$2}' | sed -e 's#registry.cn-shenzhen.aliyuncs.com/k8scat#k8s.gcr.io#2' | sh -x docker tag k8s.gcr.io/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0 # Remove images docker images | grep k8scat | awk '{print "docker rmi",$1":"$2}' | sh -x
初始化 master 節(jié)點(diǎn)
10.0.2.4 是 master 節(jié)點(diǎn)的 IP 地址,設(shè)置 pod 網(wǎng)段為 192.168.16.0/20:
> kubeadm init --apiserver-advertise-address=10.0.2.4 --pod-network-cidr=192.168.16.0/20 kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \ --discovery-token-ca-cert-hash sha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065
加入 node 節(jié)點(diǎn)
kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \ --discovery-token-ca-cert-hash sha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065
分發(fā) kubectl 配置文件
scp master:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf echo 'export KUBECONFIG="/etc/kubernetes/admin.conf"' >> /etc/profile source /etc/profile
安裝網(wǎng)絡(luò)插件
這里我們使用的是 Weave Net:
# curl -L "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" > weave-net.yaml # With IPALLOC_RANGE kubectl apply -f https://gist.githubusercontent.com/k8scat/c6a1aa5a1bdcb8c220368dd2db69bedf/raw/da1410eea6771c56e93f191df82206be8e722112/k8s-weave-net.yaml
到此這篇關(guān)于VirtualBox+Ubuntu16搭建Kubernetes集群的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)VirtualBox+Ubuntu16搭建Kubernetes集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解VirtualBox中與主機(jī)共享文件夾的方法(圖文)
這篇文章主要介紹了詳解VirtualBox中與主機(jī)共享文件夾的方法(圖文),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10VirtualBox的Linux虛擬機(jī)文本模式和圖形模式的切換問題
這篇文章主要介紹了VirtualBox的Linux虛擬機(jī)文本模式和圖形模式的切換問題的相關(guān)資料,需要的朋友可以參考下2017-02-02VirtualBox創(chuàng)建的Debian虛擬機(jī)與Windows宿主共享文件
這篇文章主要介紹了VirtualBox創(chuàng)建的Debian虛擬機(jī)與Windows宿主共享文件 的相關(guān)資料,需要的朋友可以參考下2019-05-05詳解VirtualBox + CentOS 虛擬機(jī)網(wǎng)卡配置
要學(xué)好Linux,還是得自己搭建虛擬機(jī). VirtualBox比較小巧簡(jiǎn)單,在配合CentOS 6.4使用時(shí),首要的問題就是網(wǎng)卡配置,有興趣的可以了解一下。2016-12-12使用Virtualbox搭建一個(gè)虛擬機(jī)的詳細(xì)過程
這篇文章主要介紹了如何用Virtualbox搭建一個(gè)虛擬機(jī),今天先介紹下這個(gè)軟件如何安裝及如何新建一個(gè)虛擬電腦,后面有時(shí)間再寫寫如何在虛擬機(jī)里面安裝CentOS系統(tǒng)和一些配置,需要的朋友可以參考下2022-10-10virtualbox虛擬機(jī)NAT模式下不能連接外網(wǎng)的解決方法
這篇文章主要為大家詳細(xì)介紹了virtualbox虛擬機(jī)NAT模式下不能連接外網(wǎng)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03VirtualBox實(shí)現(xiàn)虛擬機(jī)中共享本地目錄的方法
VirtualBox 是一款開源虛擬機(jī)軟件。VirtualBox 是由德國(guó) Innotek 公司開發(fā),由Sun Microsystems公司出品的軟件,使用Qt編寫,在 Sun 被 Oracle 收購(gòu)后正式更名成 Oracle VM VirtualBox這篇文章主要介紹了VirtualBox實(shí)現(xiàn)虛擬機(jī)中共享本地目錄的方法,需要的朋友可以參考下2017-11-11vitualbox虛擬機(jī)安裝centos 7 及ssh訪問、自啟動(dòng)等配置方法
這篇文章主要介紹了vitualbox虛擬機(jī)安裝centos 7 及ssh訪問、自啟動(dòng)等配置方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04