上一篇咱們講述了使用Kubectl管理k8s集羣,那麼接下來,咱們將使用kubeadm來啓動k8s集羣。html
部署k8s集羣存在必定的挑戰,尤爲是部署高可用的k8s集羣更是頗爲複雜(後續會講)。所以本教程會在部署的過程當中穿插講解一些部署相關知識、原理和步驟,好比kubeadm、kubelet以及啓動集羣時的實際部署動做等等。整個部署過程所有腳本化,以便各位參考和學習。node
因整個集羣部署教程篇幅較長,所以會拆分紅幾篇進行說明。linux
使用Kubeadm建立k8s集羣docker
Kubeadm概述 json
Kubelet概述 centos
定義集羣部署目標和規劃 api
部署規劃bash
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 的主要功能就是定時獲取節點上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