前言
上一篇我們講述了使用Kubectl管理k8s叢集,那麼接下來,我們将使用kubeadm來啟動k8s叢集。
部署k8s叢集存在一定的挑戰,尤其是部署高可用的k8s叢集更是頗為複雜(後續會講)。是以本教程會在部署的過程中穿插講解一些部署相關知識、原理和步驟,比如kubeadm、kubelet以及啟動叢集時的實際部署動作等等。整個部署過程全部腳本化,以便各位參考和學習。
因整個叢集部署教程篇幅較長,是以會拆分成幾篇進行說明。
目錄
使用Kubeadm建立k8s叢集
- Kubeadm概述
- Kubelet概述
- 定義叢集部署目标和規劃
- 部署規劃
Kubeadm概述
Kubeadm 是一個指令行工具,它主要提供了“kubeadm init” 以及 “kubeadm join”這兩個指令來快速建立和初始化kubernetes 叢集。
Kubeadm通過執行必要的操作來啟動和運作一個最小可用的叢集。它被故意設計為隻關心啟動叢集,而不是之前的節點準備工作。同樣的,諸如安裝各種各樣的插件,例如 Kubernetes Dashboard、監控解決方案以及特定雲提供商的插件,這些都不在它負責的範圍。
主要指令
其主要指令和說明如下表所示:
指令 | 說明 |
kubeadm init | 啟動一個Kubernetes主節點 |
kubeadm join | 啟動一個Kubernetes工作節點并且将其加入到叢集 |
kubeadm upgrade | 更新一個 Kubernetes 叢集到新版本 |
kubeadm config | 檢視存儲在叢集中的kubeadm配置,例如“kubeadm config images list”可以列出kubeadm需要的鏡像 |
kubeadm token | 令牌管理 |
kubeadm reset | 重置叢集,也就是将還原kubeadm init 或者 kubeadm join 對主機所做的任何更改 |
kubeadm version | 列印 kubeadm 版本 |
Kubelet概述
kubelet 是在每個節點上運作的主要“節點代理”。簡單地說,kubelet 的主要功能就是定時擷取節點上pod/container 的期望狀态(運作什麼容器、運作的副本數量、網絡或者存儲如何配置等等),并調用對應的容器平台接口達到這個狀态,并確定它們能夠健康的運作。是以,kubelet的主要功能為:
- pod管理
- 容器健康檢查
- 容器監控
注意,不是 Kubernetes建立的容器将不在 kubelet 的管理範圍。
了解了這些,接下來,我們來使用Kubeadm來建立叢集。
定義叢集部署目标和規劃
有目标,我們才能有的放矢。在本節内容中,我們将基于三台虛拟機來搭建一個k8s叢集,其中一台作為主節點,另外兩台作為工作節點。
具體部署架構如下所示:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SMzQTMyQjM5cTL2gjNzQTN0kDM0IzNwkTMwITL0QTNwczLcdDM5EDMy8CX0QTNwczLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
1.安裝規劃
伺服器規劃:
主機名稱 | 作業系統 | IP | 系統配置 | 備注 |
k8s-master | CentOS-7-x86_64 | 172.16.2.201 | 2核2G | 作為主節點 |
k8s-node1 | 172.16.2.202 | 作為工作節點 | ||
k8s-node2 | 172.16.2.203 |
值得注意的是:
- 伺服器最小記憶體不得小于2G,CPU核心數最少為2;
- 群集中所有的計算機之間擁有完全的網絡連接配接(公共或專用網絡);
- 所有機器都有sudo權限;
相關環境的搭建和初始化筆者這裡先行略過。
以下内容均使用root賬戶安裝和配置。
Pod 配置設定 IP 段:10.244.0.0/16
kubernetes-version:v1.15.0
apiserver-advertise-address:172.16.2.201
接下來,我們就開始按規劃進行部署。主體步驟如下所示:
1.主機和IP設定
各節點主機名稱和IP設定如表所示:
接下來我們以master(k8s-master)為例,相關設定步驟如下所示(請注意替換相關參數):
- 設定主機名稱以及修改主機記錄
bash:
#設定Host名稱
hostnamectl set-hostname k8s-master
#檢視host名稱
hostname
#修改Host檔案,給127.0.0.1添加hostname
echo "127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 k8s-master
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6"> /etc/hosts
#檢視修改結果
cat /etc/hosts
- 配置網絡服務以及設定固定IP
bash:
#配置網卡
echo "
DEVICE=eth0
TYPE=Ethernet
IPADDR=172.16.2.201
PREFIX=24
NETMASK=255.255.255.0
NETWORK=172.16.2.0
GATEWAY=172.16.2.254
BROADCAST=172.16.2.255
DEFROUTE=yes
ONBOOT=yes
USERCTL=yes
BOOTPROTO=static
NAME=eth0
IPV4_FAILURE_FATAL=yes
UUID=5ed1bf4a-4be2-4040-ad55-fea853b849d1
"> /etc/sysconfig/network-scripts/ifcfg-eth0
#編輯/etc/sysconfig/network
echo "NETWORKING=yes
HOSTNAME=k8s-master"> /etc/sysconfig/network
#編輯/etc/resolv.conf,設定DNS
echo "nameserver 172.16.2.254
nameserver 114.114.114.114
nameserver 8.8.8.8
"> /etc/resolv.conf
#重新開機網絡服務systemctl restart network.service #重新開機網絡服務
systemctl status network.service #檢視網絡服務狀态
- 系統設定
bash:
#關閉Selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
#永久關閉
Swapswapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
echo "vm.swappiness = 0">> /etc/sysctl.conf
#修改核心參數cat <<EOF > /etc/sysctl.d/k8s.confnet.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
2.Docker安裝
這裡推薦使用以下腳本來安裝官方已經充分測試過的指定版本的Docker-ce以及設定加速器:
# 安裝必須的包
yum install yum-utils device-mapper-persistent-data lvm2
# 添加Docker倉庫
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安裝指定版本的Docker CEyum update &&
yum install docker-ce-18.06.2.ce
# 建立 /etc/docker 目錄
mkdir /etc/docker
# 設定守護程式
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
] ,
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# 重新開機Docker服務
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
3.主機端口設定
- 主節點端口設定:
協定 | 方向 | 端口 | |
TCP | 入站 | 6443* | Kubernetes API server |
2379-2380 | etcd server client API | ||
10250 | Kubelet API | ||
10251 | kube-scheduler | ||
10252 | kube-controller-manager |
- 工作節點端口設定:
30000-32767 | NodePort Services |
CentOS預設沒有安裝防火牆,需要使用以下指令安裝和啟用防火牆:
#安裝iptables服務
yum install iptables-services
systemctl enable iptables.servicesy
stemctl start iptables.service
然後使用編輯器按Demo編輯檔案/etc/sysconfig/iptables設定準入端口即可。
在開發實驗階段,為了友善,大家也可以直接禁用防火牆:
systemctl stop firewalld.service
systemctl disable firewalld.service
往期内容連結
Docker+ Kubernetes已成為雲計算的主流(二十五)
容器化之後如何節省雲端成本?(二十六)
了解Kubernetes主體架構(二十七)
使用Minikube部署本地Kubernetes叢集(二十八)
使用kubectl管理k8s叢集(二十九)
作者:雪雁
出處:http://www.cnblogs.com/codelove/
溝通管道:程式設計交流群<85318032> 産品交流群<897857351>
如果喜歡作者的文章,請關注【麥扣聊技術】訂閱号以便第一時間獲得最新内容。本文版權歸作者和湖南心萊資訊科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
靜聽鳥語花香,漫賞雲卷雲舒。