如何在 Ubuntu 20.04 上安裝 Kubernetes

容器是捆綁和運行我們自己的應用程序的好選擇。 當容器數量快速增加,需要方便的管理時。 這就是 Kubernetes 出現的原因。 Kubernetes (K8s) 是一個開源系統,用於自動化部署、擴展、管理容器化應用程序和服務。

Kubernetes 集群包含主節點和工作節點。 主節點控制和管理一組工作節點。 對於高可用性集群,您可以有多個主節點。

本教程展示瞭如何安裝 Kubernetes集群 使用 kubeadm Ubuntu 20.04。

準備環境

  • 使用 2 台運行 Ubuntu 20.04 的 Linux 主機

為Master節點和Worker節點設置靜態IP地址

– 主節點:192.168.1.11
– 工作節點:192.168.1.12

  • 為每台機器配置主機名

我們將使用 node-1 作為主節點,使用 node-2 作為工作節點。

$ sudo hostnamectl set-hostname node-1
$ sudo hostnamectl set-hostname node-2

  • 在每個 ubuntu 節點上禁用交換內存

$ sudo swapoff -a

添加 Kubernetes 存儲庫

Kubernetes 在 Ubuntu 的默認存儲庫中不可用,因此必須手動添加。

在主節點和工作節點上 執行以下操作:

添加Kubernetes簽名密鑰如下:

$ sudo -i
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

然後,添加 Kubernetes 存儲庫,運行:

$ echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list
$ sudo mv ~/kubernetes.list /etc/apt/sources.list.d
$ sudo apt update

安裝 Kubernetes 工具

在本節中,我們將安裝 Kubeadm、cri-o、Kubelet 和 Kubernetes-cni。 所有這些工具都需要安裝在 主節點和工作節點.

確保安裝推薦和支持的版本。 在這裡,我們正在安裝 Kubernetes 和 crio 的 1.18 版。

安裝 Kubeadm

Kubeadm 是 Kubernetes 項目中的一個工具,它有助於初始化 Kubernetes 集群。

在本教程中,我們將安裝 kubeadm 版本 1.18.0-00,輸入:

$ sudo apt install -y kubeadm=1.18.0-00 --allow-unauthenticated

筆記: 您可以通過以下命令找到特定版本:

$ curl -s https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages | grep Version | awk '{print $2}'

安裝 Kubectl

Kubectl 是 Kubernetes 命令行工具。 它允許您在 Kubernetes 集群中運行命令。 您可以使用 kubectl 來部署應用程序、管理集群資源和查看日誌。

通過以下命令安裝 kubectl v1.18.0-00:

$ sudo apt install -y kubectl=1.18.0-00 --allow-unauthenticated

安裝 CRI-O

CRI-O 是符合 OCI 的容器運行時接口 (CRI)。 最常用的運行時是 Docker。 從 Kubernetes 1.20 版本開始,Docker 的容器運行時接口 (CRI) shim 已被棄用。 Docker 生成的鏡像不是 OCI(開放容器計劃)鏡像。

我們應該使用符合 OCI 的容器運行時來拉取和運行 OCI 鏡像,尤其是當您使用 GKE、EKS 或 AKS 等 Kubernetes 服務時。

您仍然可以使用 docker,然後使用安裝 sudo apt-get install docker.io

在這裡我將使用 創造它 這是一個兼容的運行時。 保持 cri-o 版本與 Kubernetes 版本匹配。

確保您安裝 支持的版本.

首先,使用 modprobe 命令加載 覆蓋br_netfilter 主節點和工作節點上的模塊:

$ sudo modprobe overlay
$ sudo modprobe br_netfilter

然後,通過插入以下行來創建一個 sysctl 配置文件以在重新啟動期間啟用 IP 轉發和 netfilter 設置 /etc/sysctl.d/99-kubernetes-cri.conf 主節點和工作節點上的文件:

net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1

通過運行應用配置文件:

$ sudo sysctl --system

現在,我們指定 Ubuntu 操作系統和 cri-o 版本如下:

$ sudo -i
# export OS=xUbuntu_20.04
# export VERSION=1.18

然後運行以下命令 root 用戶:

# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list

# curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
# curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -

# apt update
# apt install cri-o cri-o-runc

一旦安裝完成, 常見的 (Container Monitoring) 實用程序已安裝。 找到常見的路徑:

$ which conmon

/usr/bin/conmon

編輯 /etc/crio/crio.conf 文件如下:

...
# Path to the conmon binary, used for monitoring the OCI runtime.
conmon = "/usr/bin/conmon" #<-- Edit this line. Around line 108

...

registries = [ #<-- Edit and add registries. Around line 351
"docker.io",
"quay.io",
]
....

啟用 cri-o 並確保它正在運行:

$ sudo systemctl daemon-reload
$ sudo systemctl enable crio
$ sudo systemctl start crio
$ sudo systemctl status crio

輸出:

● crio.service - Container Runtime Interface for OCI (CRI-O)
Loaded: loaded (/usr/lib/systemd/system/crio.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-12-10 15:46:37 UTC; 3 days ago
Docs: https://github.com/cri-o/cri-o
...

安裝 Kubelet

Kubelet 是在每個節點上運行的代理,負責與主節點上的 API 服務器通信並驅動容器運行時啟動工作負載。

配置 kubelet 通過插入以下行來了解如何與 cri-o 交互 /etc/default/kubelet 文件:

KUBELET_EXTRA_ARGS=--feature-gates="AllAlpha=false,RunAsGroup=true" --container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint="unix:///var/run/crio/crio.sock" --runtime-request-timeout=5m

在 Master 和 Worker 節點上,運行以下命令進行安裝 kubelet

$ sudo apt install -y kubelet=1.18.0-00 --allow-unauthenticated

安裝 Kubernetes-cni

要在集群中啟用容器網絡,我們必須安裝 kubernetes-cni.

運行以下命令:

$ sudo apt-get install -y kubernetes-cni --allow-unauthenticated

部署 Kubernetes 集群

部署 Kubernetes 集群包括 2 個步驟。 第一步是初始化主節點,第二步是將工作節點加入集群。

初始化主節點

初始化 Kubernetes 主節點, 類型:

$ sudo kubeadm init --apiserver-advertise-address=192.168.1.11 --pod-network-cidr=10.244.0.0/16

kubeadm 初始化

需要幾分鐘才能完成。 初始化完成後,終端將顯示如下輸出:

初始化成功初始化成功

記下上面標記的加入集群的行,下一步將使用它來將工作節點加入集群。

現在,運行以下命令在主節點上創建 Kubernetes 配置目錄:

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

接下來,將 pod 網絡部署到集群:

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

驗證所有控制平面組件是否已成功安裝:

$ kubectl get pod --all-namespaces

獲取 pod –all-namespaces獲取 pod –all-namespaces

將工作節點加入集群

現在登錄工作節點並將工作節點加入集群。

在工作節點機器上,運行以下命令:

$ sudo kubeadm join 192.168.1.11:6443 --token 9ii02d.nsmrmu1asascv2yg
--discovery-token-ca-cert-hash sha256:1104bf70b03a2d030ffc0a462f9dbcbcdd9975393e9a9ac2a1f18500f1b6b74e

加入過程完成後,回到Master節點,運行:

$ kubectl get node
NAME STATUS ROLES AGE VERSION
node-1 Ready master 2m37s v1.18.0
node-2 Ready none 22s v1.18.0

要獲取有關節點的更多信息,請鍵入:

$ kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-1 Ready master 9h v1.18.0 10.2.0.4 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4
node-2 Ready none 9h v1.18.0 10.2.0.5 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4

輸出顯示詳細信息主節點和已加入集群的節點。

另請閱讀:如何使用 Vagrant/Minikube 在本地安裝 Kubernetes

結論

隨著容器化越來越流行,管理容器化工作負載和服務的需求使 Kubernetes 如此受歡迎。 所有大多數主要的雲提供商都開始支持託管 Kubernetes,這讓生活更輕鬆。

Kubernetes 是完全免費的,可以隨時從其存儲庫下載。 希望您喜歡在 Ubuntu 上安裝 Kubernetes。 您可以嘗試在 K8 集群上部署 MySQL 或 WordPress 等應用程序。

感謝您的閱讀,請在下面的評論部分留下您的建議。