天天看點

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

前言         

上一篇我們講述了使用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叢集,其中一台作為主節點,另外兩台作為工作節點。

具體部署架構如下所示:

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

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      
使用Kubeadm建立k8s叢集之部署規劃(三十)
  • 配置網絡服務以及設定固定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 #檢視網絡服務狀态      
使用Kubeadm建立k8s叢集之部署規劃(三十)
  • 系統設定
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      
使用Kubeadm建立k8s叢集之部署規劃(三十)

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>

如果喜歡作者的文章,請關注【麥扣聊技術】訂閱号以便第一時間獲得最新内容。本文版權歸作者和湖南心萊資訊科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

靜聽鳥語花香,漫賞雲卷雲舒。