VirtualBox+Ubuntu16搭建Kubernetes集群的實現(xiàn)

目錄

成都創(chuàng)新互聯(lián)10多年成都企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站建設(shè)及推廣,對成都OPP膠袋等多個領(lǐng)域擁有多年的網(wǎng)站推廣經(jīng)驗的網(wǎng)站建設(shè)公司。

Kubernetes 運維之路 的開始當(dāng)然少不了集群環(huán)境的搭建,這篇文章記錄了我在一臺機器使用 VirtualBox + Ubuntu 16 搭建 Kubernetes 的整個過程,包括其中遇到的一些問題以及解決辦法。

關(guān)于 Kubernetes

下面是一段來自維基百科的關(guān)于 Kubernetes 的解釋:
Kubernetes(常簡稱為 K8s)是用于自動部署、擴展和管理「容器化(containerized)應(yīng)用程序」的開源系統(tǒng)。該系統(tǒng)由 Google 設(shè)計并捐贈給 Cloud Native Computing Foundation(今屬 Linux 基金會)來使用。

它旨在提供“跨主機集群的自動部署、擴展以及運行應(yīng)用程序容器的平臺”。它支持一系列容器工具,包括Docker等。

Kubernetes 可以為我們提供 服務(wù)發(fā)現(xiàn)和負(fù)載均衡、存儲編排、自動部署和回滾、自動完成裝箱計算、自我修復(fù) 和 密鑰與配置管理 的能力。
基礎(chǔ)環(huán)境準(zhǔn)備

安裝 VirtualBox

VirtualBox 是一種功能強大的虛擬機軟件,而且是開源免費的,這是,安裝 VirtualBox 非常簡單,這里我就不贅述了。

下載 Ubuntu 16 系統(tǒng)鏡像

這里我選擇了 Ubuntu 16 作為系統(tǒng)鏡像,當(dāng)然你也可以使用其他系統(tǒng),比如 CentOS 等,Ubuntu 16 的。

虛擬機 x3

安裝好了 VirtualBox,下載了 Ubuntu 16 的鏡像后,我們首先需要搭建三臺 Ubuntu 16 的虛擬機。這個新建虛擬機的過程也是比較簡單的,一步一步往下走就可以了。新建完成后,我們需要對每臺虛擬機進行相應(yīng)的配置,配置時使用的用戶應(yīng)該是 root 用戶。

虛擬機 IP

由于我們使用的是虛擬機,我們會給每臺虛擬機配置網(wǎng)卡,讓每臺虛擬機都可以上網(wǎng)的,這里有兩種方式:

使用 橋接網(wǎng)卡,每臺虛擬機的 IP 將會是宿主機網(wǎng)段的,支持虛擬機上網(wǎng) 使用 NAT 網(wǎng)絡(luò) + 端口轉(zhuǎn)發(fā),網(wǎng)段自行設(shè)置,支持虛擬機上網(wǎng)

大家可以使用其中任意一種方式給虛擬機配置網(wǎng)卡,從而讓虛擬機可以上網(wǎng)。

需要注意的是,在集群搭建完成后,集群中的每個節(jié)點的 IP 要求保持不變,否則節(jié)點需要重新加入。

簡單的方式就是讓虛擬機不關(guān)機,而是進入睡眠狀態(tài),下次只需喚醒即可。

在集群中,我們使用的是內(nèi)網(wǎng)地址,可以通過 ifconfig 或者 ip addr 找到每臺虛擬機對應(yīng)的內(nèi)網(wǎng)地址:

> ifconfigenp0s3 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)

這臺虛擬機(master)的地址就是 10.0.2.4。

配置主機名

Kubernetes 的節(jié)點名稱是由主機名決定的,所以我們可以分別設(shè)置三臺虛擬機的主機名為 master、node1 和 node2,通過修改 /etc/hosts 文件來修改主機名,需要重啟虛擬機:

# /etc/hosts10.0.2.4 master10.0.2.5 node110.0.2.6 node2SSH 無密連接
在虛擬機運行起來后,我們要做的第一件事就是要連通這三臺虛擬機,即配置 SSH 無密連接。

首先在其中的一臺虛擬機上生成 SSH 的公私鑰:

ssh-keygen -t rsa -C 'k8scat@gmail.com' -f ~/.ssh/id_rsa -q -N ''

關(guān)于 ssh-keygen 的參數(shù)說明:

-t rsa 指定加密算法為 RSA -C 用于提供一個備注,表明私鑰的生成者 -f ~/.ssh/id_rsa 指定私鑰生成的位置 -q -N '' 表示不對私鑰加密碼,以及使用靜默的方式

將公私鑰分發(fā)給另外兩臺虛擬機,并在三臺虛擬機上都將公鑰(~/.ssh/id_rsa.pub)的內(nèi)容寫進 ~/.ssh/authorized_keys 文件中,同時設(shè)置 ~/.ssh/authorized_keys 文件的權(quán)限為 400:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keyschmod 400 ~/.ssh/authorized_keys

配置完成后,我們將可以通過以下方式在其中一個虛擬機上連接另一臺虛擬機了:

# 在 master 節(jié)點上ssh root@node1Kubernetes 集群搭建

在弄好三臺虛擬機后,我們便可以開始搭建一個擁有三個節(jié)點的 Kubernetes 的集群了。
安裝 Docker

apt-get update -yapt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-releasecurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho \ "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 ENGINEapt-get update -yapt-get install -y docker-ce docker-ce-cli containerd.io# Configure Docker to start on bootsystemctl enable docker.servicesystemctl enable containerd.service# Start Dockersystemctl start docker安裝 kubeadm、kubelet 和 kubectl

這里使用的是阿里云的鏡像源:

# 更新 apt 包索引并安裝使用 Kubernetes apt 倉庫所需要的包apt-get update -yapt-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.gpgcurl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -# 添加 Kubernetes apt 倉庫# 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.listecho "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 -yapt-get install -y kubelet kubeadm kubectlapt-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 listk8s.gcr.io/kube-apiserver:v1.21.1k8s.gcr.io/kube-controller-manager:v1.21.1k8s.gcr.io/kube-scheduler:v1.21.1k8s.gcr.io/kube-proxy:v1.21.1k8s.gcr.io/pause:3.4.1k8s.gcr.io/etcd:3.4.13-0k8s.gcr.io/coredns/coredns:v1.8.0

k8s 的鏡像源對于國內(nèi)用戶是可望而不可即的,但我們可以先拉到國內(nèi)的鏡像倉或者可以使用的鏡像倉,比如阿里云的容器鏡像服務(wù) ACR 和 Docker 的官方鏡像倉 DockerHub。

我們可以新建一個 GitHub 代碼倉,里面只有一個 Dockerfile,其內(nèi)容如下:

FROM k8s.gcr.io/kube-apiserver:v1.21.0

然后在阿里云的容器鏡像服務(wù) ACR 中新建一個鏡像,并關(guān)聯(lián)這個 GitHub 代碼倉,構(gòu)建出來的鏡像就是我們要的 k8s 鏡像,比如上面的 k8s.gcr.io/kube-apiserver:v1.21.1,但在使用的時候需要重新給鏡像打標(biāo)簽。

在 ACR 中構(gòu)建好了所有需要的鏡像后,使用下面這個腳本可以快速處理給鏡像打標(biāo)簽的任務(wù):

# Pull images from aliyun registrykubeadm 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 imagesdocker 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 -xdocker tag k8s.gcr.io/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0# Remove imagesdocker images | grep k8scat | awk '{print "docker rmi",$1":"$2}' | sh -x初始化 master 節(jié)點

10.0.2.4 是 master 節(jié)點的 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/20kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \ --discovery-token-ca-cert-hash sha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065加入 node 節(jié)點
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.confecho 'export KUBECONFIG="/etc/kubernetes/admin.conf"' >> /etc/profilesource /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_RANGEkubectl apply -f https://gist.githubusercontent.com/k8scat/c6a1aa5a1bdcb8c220368dd2db69bedf/raw/da1410eea6771c56e93f191df82206be8e722112/k8s-weave-net.yaml

到此這篇關(guān)于VirtualBox+Ubuntu16搭建Kubernetes集群的實現(xiàn)的文章就介紹到這了,更多相關(guān)VirtualBox+Ubuntu16搭建Kubernetes集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

本文題目:VirtualBox+Ubuntu16搭建Kubernetes集群的實現(xiàn)
瀏覽路徑:http://muchs.cn/article0/gioo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站內(nèi)鏈外貿(mào)建站、移動網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)