1. 程式人生 > >使用Kubeadm建立k8s叢集之部署規劃(三十)

使用Kubeadm建立k8s叢集之部署規劃(三十)

前言         

上一篇我們講述了使用Kubectl管理k8s叢集,那麼接下來,我們將使用kubeadm來啟動k8s叢集。

部署k8s叢集存在一定的挑戰,尤其是部署高可用的k8s叢集更是頗為複雜(後續會講)。因此本教程會在部署的過程中穿插講解一些部署相關知識、原理和步驟,比如kubeadm、kubelet以及啟動叢集時的實際部署動作等等。整個部署過程全部指令碼化,以便各位參考和學習。

因整個叢集部署教程篇幅較長,因此會拆分成幾篇進行說明。


 

目錄

使用Kubeadm建立k8s叢集

  • Kubeadm概述 

  • Kubelet概述 

  • 定義叢集部署目標和規劃 

  • 部署規劃


 

使用Kubeadm建立k8s叢集

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叢集,其中一臺作為主節點,另外兩臺作為工作節點。

具體部署架構如下所示:

1.安裝規劃

伺服器規劃:

主機名稱

作業系統

IP

系統配置

備註

k8s-master

CentOS-7-x86_64

172.16.2.201

2核2G

作為主節點

k8s-node1

CentOS-7-x86_64

172.16.2.202

2核2G

作為工作節點

k8s-node2

CentOS-7-x86_64

172.16.2.203

2核2G

作為工作節點

值得注意的是:

  • 伺服器最小記憶體不得小於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設定如表所示:

主機名稱

IP

k8s-master

172.16.2.201

k8s-node1

172.16.2.202

k8s-node2

172.16.2.203

接下來我們以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

TCP

入站

2379-2380

etcd server client API

TCP

入站

10250

Kubelet API

TCP

入站

10251

kube-scheduler

TCP

入站

10252

kube-controller-manager

 

  • 工作節點埠設定:

協議

方向

說明

TCP

入站

10250

Kubelet API

TCP

入站

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叢集(二十九)