VirtualBox+Ubuntu16搭建Kubernetes集群的實(shí)現(xiàn)
Kubernetes 運(yùn)維之路 的開(kāi)始當(dāng)然少不了集群環(huán)境的搭建,這篇文章記錄了我在一臺(tái)機(jī)器使用 VirtualBox + Ubuntu 16 搭建 Kubernetes 的整個(gè)過(guò)程,包括其中遇到的一些問(wèn)題以及解決辦法。
關(guān)于 Kubernetes
下面是一段來(lái)自維基百科的關(guān)于 Kubernetes 的解釋?zhuān)?/p>
Kubernetes(常簡(jiǎn)稱(chēng)為 K8s)是用于自動(dòng)部署、擴(kuò)展和管理「容器化(containerized)應(yīng)用程序」的開(kāi)源系統(tǒng)。該系統(tǒng)由 Google 設(shè)計(jì)并捐贈(zèng)給 Cloud Native Computing Foundation(今屬 Linux 基金會(huì))來(lái)使用。
它旨在提供“跨主機(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ī)軟件,而且是開(kāi)源免費(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ī)的過(guò)程也是比較簡(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)地址,可以通過(guò) 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)名稱(chēng)是由主機(jī)名決定的,所以我們可以分別設(shè)置三臺(tái)虛擬機(jī)的主機(jī)名為 master、node1 和 node2,通過(guò)修改 /etc/hosts 文件來(lái)修改主機(jī)名,需要重啟虛擬機(jī):
# /etc/hosts 10.0.2.4 master 10.0.2.5 node1 10.0.2.6 node2
SSH 無(wú)密連接
在虛擬機(jī)運(yùn)行起來(lái)后,我們要做的第一件事就是要連通這三臺(tái)虛擬機(jī),即配置 SSH 無(wú)密連接。
首先在其中的一臺(tái)虛擬機(jī)上生成 SSH 的公私鑰:
ssh-keygen -t rsa -C 'k8scat@gmail.com' -f ~/.ssh/id_rsa -q -N ''
關(guān)于 ssh-keygen 的參數(shù)說(shuō)明:
- -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)容寫(xiě)進(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
配置完成后,我們將可以通過(guò)以下方式在其中一個(gè)虛擬機(jī)上連接另一臺(tái)虛擬機(jī)了:
# 在 master 節(jié)點(diǎn)上 ssh root@node1
Kubernetes 集群搭建
在弄好三臺(tái)虛擬機(jī)后,我們便可以開(kāi)始搭建一個(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 公開(kāi)簽名秘鑰 # 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)建出來(lái)的鏡像就是我們要的 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ī)安裝Ubuntu詳細(xì)教程(圖文)
這篇文章主要介紹了VirtualBox虛擬機(jī)安裝Ubuntu詳細(xì)教程(圖文),具有一定的參考價(jià)值,有興趣的可以了解一下。2016-11-11
VirtualBox主機(jī)虛擬機(jī)互通的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了VirtualBox主機(jī)虛擬機(jī)互通的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Virtualbox 安裝centos7虛擬機(jī)的圖文教程詳解
這篇文章主要介紹了Virtualbox 安裝centos7虛擬機(jī),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
ubuntu 下VirtualBox 如何實(shí)現(xiàn)共享設(shè)置
這篇文章主要介紹了ubuntu 下VirtualBox 如何實(shí)現(xiàn)共享設(shè)置的相關(guān)資料,這里對(duì)實(shí)現(xiàn)共享設(shè)置做了詳解,具有參考價(jià)值,需要的朋友可以參考下2016-11-11
虛擬機(jī)VirtualBox中centos6.5網(wǎng)絡(luò)設(shè)置圖文詳解
這篇文章主要介紹了虛擬機(jī)VirtualBox中centos6.5網(wǎng)絡(luò)設(shè)置圖文詳解,具有一定的參考價(jià)值,有需要的朋友可以了解一下。2016-10-10
virtualbox下osx系統(tǒng)盤(pán)擴(kuò)容方法
這篇文章主要為大家詳細(xì)介紹了virtualbox下osx系統(tǒng)盤(pán)擴(kuò)容方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
VirtualBox軟件下載安裝及Linux環(huán)境安裝部署圖文教程詳解
這篇文章主要介紹了VirtualBox軟件下載安裝及Linux環(huán)境安裝部署的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
VirtualBox 虛擬機(jī)中安裝 Ubuntu 12.04(圖文教程)
這篇文章主要介紹了VirtualBox 虛擬機(jī)中安裝 Ubuntu 12.04(圖文教程),有需要的可以了解一下。2016-11-11
擴(kuò)展VirtualBox已分配磁盤(pán)的方法
VBox中創(chuàng)建來(lái)Ubuntu虛擬機(jī),隨著慢慢使用,后面開(kāi)始提示磁盤(pán)空間不足了,這篇文章主要介紹了擴(kuò)展VirtualBox已分配磁盤(pán)的方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08

