在Ubuntu 20.04上安装和部署Kubernetes集群

欢迎来到我们的教程,了解如何在Ubuntu 20.04上安装和部署Kubernetes Cluster。 Kubernetes,据 kubernetes.io 是开源的生产级容器编排平台。它促进了容器化应用程序的自动部署,扩展和管理。

在Ubuntu 20.04上安装和部署Kubernetes

在本教程中,我们将部署两个节点的Kubernetes集群。以下是我们的节点详细信息。

节点主机名IP地址虚拟CPU记忆体(GB)操作系统
master.kifarunix-demo.com192.168.56.10122Ubuntu 20.04 LTS
工人1wk01.kifarunix-demo.com192.168.57.622Ubuntu 20.04 LTS
工人2wk02.kifarunix-demo.com192.168.58.622Ubuntu 20.04 LTS

运行系统更新

首先,请确保您的系统软件包是最新的。

apt update
apt upgrade

禁用掉期

运行Kubernetes要求您禁用交换。

检查是否启用了交换。

swapon --show
NAME      TYPE SIZE USED PRIO
/swap.img file   2G   0B   -2

如果没有输出,则不启用交换。如果如上面的输出所示启用了该功能,请运行以下命令将其禁用。

swapoff -v /swap.img

或者简单地

swapoff -a

要永久禁用交换,请注释掉或删除/ etc / fstab文件上的交换行。

vim /etc/fstab
...
# 
# / was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/f3d575c6-e940-4472-b406-30da6b66965a / ext4 defaults 0 0
#/swap.img      none    swap    sw      0       0

或只需将其删除;

sed "-i.bak" '/swap.img/d' /etc/fstab

在Ubuntu 20.04上安装Docker容器运行时

Kubernetes使用容器运行时在Pod中运行容器。它支持多种容器运行时,包括 码头工人装箱的CRI-O。在此演示中,我们将使用Docker CE。因此,在所有节点(主节点和工作节点)上,都需要安装Docker。

请点击以下链接,了解如何在Ubuntu 20.04上安装Docker CE。

在Ubuntu 20.04上安装Docker CE

您可以验证Docker安装;

docker --version
Docker version 19.03.11, build 42e35e61f3

在Ubuntu 20,04上安装Kubernetes

提供Kubernetes运行时环境需要许多节点组件,这些组件需要安装在每个节点上。这些包括:

  • kubelet:作为代理在每个节点上运行,并确保容器在Pod中运行。
  • kubeadm:Bootstraps Kubernetes集群
  • kubectl:用于对Kubernetes集群运行命令。

这些组件在默认的Ubuntu 20.04存储库中可用。因此,您需要安装Kubernetes仓库才能安装它们。

安装Kubernetes存储库GPG签名密钥

运行以下命令以安装Kubernetes回购GPG密钥。

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

在Ubuntu 20.04上安装Kubernetes存储库

接下来安装Kubernetes存储库;

echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kurbenetes.list

安装Kubernetes组件

apt update
apt install kubelet kubeadm kubectl

初始化Kubernetes控制平面

在安装了容器运行时以及Kubernetes组件之后,就该初始化Kubernetes主节点了。 Kubernetes主服务器负责维护集群的所需状态。

在主节点上运行以下命令以引导Kubernetes控制平面节点。

kubeadm init --apiserver-advertise-address=192.168.56.101 --pod-network-cidr=172.16.0.0/16

注意;

  • --apiserver-advertise-address:定义API服务器将公布其监听内容的IP地址。如果未设置,将使用默认网络接口。
  • --pod-network-cidr:指定Pod网络的IP地址范围。如果设置,控制平面将自动为每个节点分配CIDR。 如果您的网络插件的首选Pod网络与某些主机网络之间发生冲突,则可以使用它来定义首选的网络范围

初始化完成后,您应该可以看到类似于以下输出的输出;

...
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.56.101:6443 --token v573ma.gf8iyl3a8mtd35rb 
    --discovery-token-ca-cert-hash sha256:a110e087527d1eeb48389f1e9ac8540ee52e237f940a6813ca9c033fe0fafa71

如上述输出所建议,您可以在 主节点 开始使用您的集群。

确保使用sudo权限以普通用户身份运行命令。

su - koromicha

接下来,创建一个Kubernetes集群目录。

mkdir -p $HOME/.kube

将Kubernetes管理员配置文件复制到上面创建的集群目录中。

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

为群集配置文件设置适当的所有权。

sudo chown $(id -u):$(id -g) $HOME/.kube/config

验证Kubernetes集群的状态;

kubectl get nodes
NAME                        STATUS     ROLES    AGE   VERSION
master.kifarunix-demo.com   NotReady   master   17m   v1.18.3

如您所见,集群尚未就绪。

部署Kubernetes集群Pod网络

Pod是Kubernetes集群中一组一个或多个相关容器。它们共享相同的生命周期,存储/网络。为了使Pods彼此通信,您必须部署一个 容器网络接口 (CNI)的Pod网络附加组件。

要部署CNI Pod网络,请在主节点上运行以下命令;

kubectl apply -f [podnetwork].yaml

哪里 [podnetwork].yaml 是您首选的CNI的路径。在此演示中,我们正在使用 绒布Flannel 是将IP地址附加到容器的虚拟网络。

通过运行以下命令来部署Flannel网络。 同样,以在其主目录上创建Kubernetes集群的用户身份执行命令

[email protected]:~$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

在下面解释了不同类型的CNI Kubernetes插件页面

命令完成后,您可以通过运行以下命令在名称空间中列出Pod。

kubectl get pods --all-namespaces
NAMESPACE     NAME                                                READY   STATUS    RESTARTS   AGE
kube-system   coredns-66bff467f8-9j4q5                            1/1     Running   0          17m
kube-system   coredns-66bff467f8-blggv                            1/1     Running   0          17m
kube-system   etcd-master.kifarunix-demo.com                      1/1     Running   0          17m
kube-system   kube-apiserver-master.kifarunix-demo.com            1/1     Running   0          17m
kube-system   kube-controller-manager-master.kifarunix-demo.com   1/1     Running   0          17m
kube-system   kube-flannel-ds-amd64-nw2rw                         1/1     Running   0          7m6s
kube-system   kube-proxy-srmgx                                    1/1     Running   0          17m
kube-system   kube-scheduler-master.kifarunix-demo.com            1/1     Running   0          17m

检查节点状态;

kubectl get nodes
NAME                        STATUS   ROLES    AGE   VERSION
master.kifarunix-demo.com   Ready    master   23m   v1.18.3

将其他节点添加到Kubernetes集群

您现在可以使用以下命令将其他节点添加到Kubernetes集群中 kubeadm join 命令如下。

登录到工作节点,并在每个工作节点上执行以下命令,以将其添加到集群中。

请注意,该命令在初始化上方控制平面后显示,并且应以root用户身份执行。

sudo kubeadm join 192.168.56.101:6443 --token an2ocw.6zx0pc0dgw3wj3jl 
--discovery-token-ca-cert-hash sha256:5fb8fc688dd88f3c7d450a5461705e6dc0014631050313f7b9ce199b538658a6

如果您没有保存Kubernetes Cluster Join命令,则可以在任何给定时间使用以下命令进行打印;

kubeadm token create --print-join-command

一旦命令运行,您将获得类似于以下的输出;

...
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

在Kubernetes控制平面(主)上,运行以下命令以验证节点已加入集群。

kubectl get nodes
NAME                        STATUS   ROLES    AGE     VERSION
master.kifarunix-demo.com   Ready    master   40m     v1.18.3
wk01.kifarunix-demo.com     Ready       4m11s   v1.18.3
wk02.kifarunix-demo.com     Ready       3m51s   v1.18.3

如您所见,我们现在有了一个集群。运行以下命令以获取集群信息。

kubectl cluster-info
Kubernetes master is running at https://192.168.56.101:6443
KubeDNS is running at https://192.168.56.101:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

现在您可以在Kubernetes集群上部署应用程序了。

这标志着我们关于如何在Ubuntu 20.04上安装和部署Kubernetes Cluster的指南的结尾。在下一个教程中,我们将学习如何在Kubernetes集群上部署应用程序。

进一步阅读

Kubernetes入门

其他教程

您也可以查看我们的其他教程

在Ubuntu 20.04上使用Keepalived配置高可用性HAProxy

在Ubuntu 20.04上安装和设置HAProxy

在CentOS 8上安装和配置Filebeat

在Ubuntu 20.04上安装和配置NXLog CE

Sidebar