容器是捆綁和運行我們自己的應用程序的好選擇。 當容器數量快速增加,需要方便的管理時。 這就是 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
需要幾分鐘才能完成。 初始化完成後,終端將顯示如下輸出:

記下上面標記的加入集群的行,下一步將使用它來將工作節點加入集群。
現在,運行以下命令在主節點上創建 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

將工作節點加入集群
現在登錄工作節點並將工作節點加入集群。
在工作節點機器上,運行以下命令:
$ 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 等應用程序。
感謝您的閱讀,請在下面的評論部分留下您的建議。