您好,登錄后才能下訂單哦!
小編給大家分享一下如何使用VirtualBox+Ubuntu16搭建Kubernetes集群,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Kubernetes 運維之路 的開始當然少不了集群環境的搭建,這篇文章記錄了我在一臺機器使用 VirtualBox + Ubuntu 16 搭建 Kubernetes 的整個過程,包括其中遇到的一些問題以及解決辦法。
下面是一段來自維基百科的關于 Kubernetes 的解釋:
Kubernetes(常簡稱為 K8s)是用于自動部署、擴展和管理「容器化(containerized)應用程序」的開源系統。該系統由 Google 設計并捐贈給 Cloud Native Computing Foundation(今屬 Linux 基金會)來使用。
它旨在提供“跨主機集群的自動部署、擴展以及運行應用程序容器的平臺”。它支持一系列容器工具,包括Docker等。
Kubernetes 可以為我們提供 服務發現和負載均衡、存儲編排、自動部署和回滾、自動完成裝箱計算、自我修復 和 密鑰與配置管理 的能力。
VirtualBox 是一種功能強大的虛擬機軟件,而且是開源免費的,這是下載地址,安裝 VirtualBox 非常簡單,這里我就不贅述了。
這里我選擇了 Ubuntu 16 作為系統鏡像,當然你也可以使用其他系統,比如 CentOS 等,Ubuntu 16 的下載地址。
安裝好了 VirtualBox,下載了 Ubuntu 16 的鏡像后,我們首先需要搭建三臺 Ubuntu 16 的虛擬機。這個新建虛擬機的過程也是比較簡單的,一步一步往下走就可以了。新建完成后,我們需要對每臺虛擬機進行相應的配置,配置時使用的用戶應該是 root 用戶。
由于我們使用的是虛擬機,我們會給每臺虛擬機配置網卡,讓每臺虛擬機都可以上網的,這里有兩種方式:
使用 橋接網卡,每臺虛擬機的 IP 將會是宿主機網段的,支持虛擬機上網
使用 NAT 網絡 + 端口轉發,網段自行設置,支持虛擬機上網
大家可以使用其中任意一種方式給虛擬機配置網卡,從而讓虛擬機可以上網。
需要注意的是,在集群搭建完成后,集群中的每個節點的 IP 要求保持不變,否則節點需要重新加入。
簡單的方式就是讓虛擬機不關機,而是進入睡眠狀態,下次只需喚醒即可。
在集群中,我們使用的是內網地址,可以通過 ifconfig 或者 ip addr 找到每臺虛擬機對應的內網地址:
> 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)
這臺虛擬機(master)的地址就是 10.0.2.4。
Kubernetes 的節點名稱是由主機名決定的,所以我們可以分別設置三臺虛擬機的主機名為 master、node1 和 node2,通過修改 /etc/hosts 文件來修改主機名,需要重啟虛擬機:
# /etc/hosts 10.0.2.4 master 10.0.2.5 node1 10.0.2.6 node2
在虛擬機運行起來后,我們要做的第一件事就是要連通這三臺虛擬機,即配置 SSH 無密連接。
首先在其中的一臺虛擬機上生成 SSH 的公私鑰:
ssh-keygen -t rsa -C 'k8scat@gmail.com' -f ~/.ssh/id_rsa -q -N ''
關于 ssh-keygen 的參數說明:
-t rsa 指定加密算法為 RSA
-C 'k8scat@gmail.com' 用于提供一個備注,表明私鑰的生成者
-f ~/.ssh/id_rsa 指定私鑰生成的位置
-q -N '' 表示不對私鑰加密碼,以及使用靜默的方式
將公私鑰分發給另外兩臺虛擬機,并在三臺虛擬機上都將公鑰(~/.ssh/id_rsa.pub)的內容寫進 ~/.ssh/authorized_keys 文件中,同時設置 ~/.ssh/authorized_keys 文件的權限為 400:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 400 ~/.ssh/authorized_keys
配置完成后,我們將可以通過以下方式在其中一個虛擬機上連接另一臺虛擬機了:
# 在 master 節點上 ssh root@node1
在弄好三臺虛擬機后,我們便可以開始搭建一個擁有三個節點的 Kubernetes 的集群了。
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
這里使用的是阿里云的鏡像源:
# 更新 apt 包索引并安裝使用 Kubernetes apt 倉庫所需要的包 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 倉庫 # 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
編輯 /etc/fstab 文件并注釋掉 swap 分區的配置:
#/dev/mapper/master--vg-swap_1 none swap sw 0 0
獲取 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 的鏡像源對于國內用戶是可望而不可即的,但我們可以先拉到國內的鏡像倉或者可以使用的鏡像倉,比如阿里云的容器鏡像服務 ACR 和 Docker 的官方鏡像倉 DockerHub。
我們可以新建一個 GitHub 代碼倉,里面只有一個 Dockerfile,其內容如下:
FROM k8s.gcr.io/kube-apiserver:v1.21.0
然后在阿里云的容器鏡像服務 ACR 中新建一個鏡像,并關聯這個 GitHub 代碼倉,構建出來的鏡像就是我們要的 k8s 鏡像,比如上面的 k8s.gcr.io/kube-apiserver:v1.21.1,但在使用的時候需要重新給鏡像打標簽。
在 ACR 中構建好了所有需要的鏡像后,使用下面這個腳本可以快速處理給鏡像打標簽的任務:
# 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
10.0.2.4 是 master 節點的 IP 地址,設置 pod 網段為 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
kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \ --discovery-token-ca-cert-hash sha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065
scp master:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf echo 'export KUBECONFIG="/etc/kubernetes/admin.conf"' >> /etc/profile source /etc/profile
這里我們使用的是 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
以上是“如何使用VirtualBox+Ubuntu16搭建Kubernetes集群”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。