Kubernetes kubeadm在Linux下的安裝


實踐環境

CentOS-7-x86_64-DVD-1810

開始之前

確保每台機器2G內存或以上

確保每台機器雙核CPU或以上

確保所有機器網絡互連

確認每個結點(node)的hostnameMACproduct_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

如果檢測到Dockercontainerd同時存在,則優先使用containerd。除此之外,如果還存在其它運行時,則kebeadm會報錯。

kubelet通過dockershim CRI實現Docker的集成

這里選擇安裝 Docker 19.03.9,安裝過程略

安裝kubeadm, kubeletkubectl

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, kubeletkubectl並添加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驅動

如果使用Dockerkubeadm會自動檢測cgroup驅動,並在運行時,自動配置/var/lib/kubelet/config.yaml中對應驅動配置

如果使用其它CRI,需要傳遞cgroupDriverkubeadm init,形如以下

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: <value>

查看更多,請查看 Using kubeadm init with a configuration file.

注意,僅CRI驅動不是cgroupfs時才需要傳遞cgroupDriver ,因為cgroupfs為kubelet的默認驅動。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM