實踐環境
CentOS-7-x86_64-DVD-1810
開始之前
確保每台機器2G內存或以上
確保每台機器雙核CPU或以上
確保所有機器網絡互連
確認每個結點(node
)的hostname
,MAC
,product_uuid
唯一,Kubernetes
用這些數值唯一確定集群中的結點
禁用Swap
,以便kubelet
正常工作
檢查網絡適配器
如果擁有多個網絡適配器,無法通過默認路由訪問Kubernetes
組件,推薦給指定適配器添加到Kubernetes
集群IP路由。
確保橋接通信(bridged traffic
)對iptables
可見
確保br_netfilter
模塊已加載,可通過執行``lsmod | grep br_netfilter查看是否已加載,如果沒有,可通過執行命令
sudo modprobe br_netfilter`加載
檢查必備端口
確保以下必備端口未被占用
Control-plane node(s)
Protocol | Direction | Port Range | Purpose | Used By |
---|---|---|---|---|
TCP | Inbound | 6443* | Kubernetes API server | All |
TCP | Inbound | 2379-2380 | etcd server client API | kube-apiserver, etcd |
TCP | Inbound | 10250 | kubelet API | Self, Control plane |
TCP | Inbound | 10251 | kube-scheduler | Self |
TCP | Inbound | 10252 | kube-controller-manager | Self |
Worker node(s)
Protocol | Direction | Port Range | Purpose | Used By |
---|---|---|---|---|
TCP | Inbound | 10250 | kubelet API | Self, Control plane |
TCP | Inbound | 30000-32767 | NodePort Services† | All |
禁用Swap
臨時禁用
# swapoff -a
避免重啟機器后失效,編輯etc/fstab
,注釋掉swap所在記錄行
# vi /etc/fstab
#UUID=2a2ac056-92c2-4cb9-9525-0291498f3d62 swap swap defaults 0 0
如果不禁用,運行kubeadm
時,會提示如下錯誤
[ERROR Swap]: running with swap on is not supported. Please disable swap
安裝運行時
Kubernetes
使用容器運行時在Pod
中運行容器。Linux結點,Kubernetes
使用CRI
(Container Runtime Interface )同所選擇的的容器運行時交互。
如果不指定運行時,kubeadm
通過掃描熟知的Unix
域名socket
列表自動檢測已安裝容器運行時
以下列出了容器運行時及關聯的的socket路徑
Docker /var/run/dockershim.sock
containerd /run/containerd/containerd.sock
CRI-O /var/run/crio/crio.sock
如果檢測到Docker
和containerd
同時存在,則優先使用containerd
。除此之外,如果還存在其它運行時,則kebeadm
會報錯。
kubelet
通過dockershim
CRI實現Docker
的集成
這里選擇安裝 Docker
19.03.9,安裝過程略
安裝kubeadm
, kubelet
和 kubectl
kubeadm
: 提供引導集群命令
kubelet
: 提供在集群中運行所有機器組件的能力,以及其它事情,比如啟動pod和容器
kubectl
: 提供同集群交互的命令行工具
安裝CNI
插件(為大多數pod
網絡所需)
CNI_VERSION="v0.8.2"
sudo mkdir -p /opt/cni/bin
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz
定義用於存放命令文件的目錄
DOWNLOAD_DIR=/usr/local/bin
sudo mkdir -p $DOWNLOAD_DIR
注意:DOWNLOAD_DIR
目錄必須可寫
安裝crictl
(為kubeadm/Kubelet CRI)
所需)
CRICTL_VERSION="v1.17.0"
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz
安裝kubeadm
, kubelet
和 kubectl
並添加kubelet
系統服務
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
cd $DOWNLOAD_DIR
sudo curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl}
sudo chmod +x {kubeadm,kubelet,kubectl}
RELEASE_VERSION="v0.4.0"
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service
sudo mkdir -p /etc/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
設置允許開機啟動kubelet
,並立即啟動
systemctl enable --now kubelet
配置供kubelet使用的cgroup驅動
如果使用Docker
,kubeadm
會自動檢測cgroup
驅動,並在運行時,自動配置/var/lib/kubelet/config.yaml
中對應驅動配置
如果使用其它CRI
,需要傳遞cgroupDriver
給 kubeadm init
,形如以下
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: <value>
查看更多,請查看 Using kubeadm init with a configuration file.
注意,僅CRI
驅動不是cgroupfs
時才需要傳遞cgroupDriver
,因為cgroupfs
為kubelet的默認驅動。