前言
上一篇我們講述了使用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