on it road .com

在 Ubuntu服务器 18.04 LTS 上安装 Kubeadm

在两个节点上使用 apt 命令安装 Kubeadm。

jackli@kubernetes-01:~$ sudo apt install kubeadm -y
Reading package lists... Done
Building dependency tree
。。。
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

检查 kubeadm 版本以验证它是否安装正确。

jackli@kubernetes-01:~$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.3", GitCommit:"06ad960bfd03b39c8310aaf92d1e7c12ce618213", GitTreeState:"clean", BuildDate:"2020-02-11T18:12:12Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"linux/amd64"}

拉取在两个节点上配置 Kubernetes 所需的镜像。

jackli@kubernetes-01:~$ sudo kubeadm config images pull
W0216 12:49:45.337272    6150 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0216 12:49:45.337364    6150 validation.go:28] Cannot validate kubelet config - no validator is available
[config/images] Pulled k8s.gcr.io/kube-apiserver:v1.17.3
[config/images] Pulled k8s.gcr.io/kube-controller-manager:v1.17.3
[config/images] Pulled k8s.gcr.io/coredns:1.6.5

仅在 kubernetes-01.recipes.com(主节点)上初始化 Kubernetes。

jackli@kubernetes-01:~$ sudo kubeadm init --apiserver-advertise-address=192.168.1.218
W0216 12:56:11.961533    7491 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0216 12:56:11.961618    7491 validation.go:28] Cannot validate kubelet config - no validator is available
[init] Using Kubernetes version: v1.17.3
。。。
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.1.218:6443 --token uivhq9.ecs1vzjiz5tal24j \
    --discovery-token-ca-cert-hash sha256:95ec6de9f2b260c807b021a1166abf45c55257b182ac94855f0ce60406c392d5

根据上面输出的要求,我们需要在使用 Kubernetes 之前配置用户环境。
因此,仅在 kubernetes-01.recipes.com(主节点)上执行以下命令。

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

在 Kubernetes 集群中加入一个工作节点

使用 ssh 命令连接 kubernetes-02.recipes.com(工作节点)。

使用以下命令将 kubernetes-02.recipes.com 加入我们的 Kubernetes 集群作为工作节点。

jackli@kubernetes-02:~$ sudo kubeadm join 192.168.1.218:6443 --token uivhq9.ecs1vzjiz5tal24j --discovery-token-ca-cert-hash sha256:95ec6de9f2b260c807b021a1166abf45c55257b182ac94855f0ce60406c392d5
W0216 13:42:44.750776    4598 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from 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-01.recipes.com(master 节点),获取节点列表,确认 kubernetes-02.recipes.com(worker 节点)已经加入 Kubernetes 集群。

jackli@kubernetes-01:~$ sudo kubectl get nodes
NAME                        STATUS     ROLES    AGE     VERSION
kubernetes-01.recipes.com   NotReady   master   54m     v1.17.3
kubernetes-02.recipes.com   NotReady   <none>   8m27s   v1.17.3

我们需要安装一个 pod 网络,以便我们的节点可以相互通信。

为此,我们在 Kubernetes 集群上安装 Flannel pod 网络。

jackli@kubernetes-01:~$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
...
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created

再次检查节点的状态。

jackli@kubernetes-01:~$ sudo kubectl get nodes
NAME                        STATUS     ROLES    AGE     VERSION
kubernetes-01.recipes.com   Ready   master   58m     v1.17.3
kubernetes-02.recipes.com   Ready   <none>   12m27s   v1.17.3

我们已经在 Ubuntu服务器 18.04 LTS 上成功安装并配置了一个两节点的 Kubernetes 集群。

Kubernetes 预安装配置

我们需要在 Ubuntu 节点之间配置名称解析。
为此,我们可以使用权威 DNS 服务器或者使用本地 DNS 解析器。

使用 ssh 工具连接 kubernetes-01.recipes.com(主节点)。

为此,我们正在配置本地 DNS 解析器。

jackli@kubernetes-01:~$ sudo vi /etc/hosts

在此文件中添加以下几行。

192.168.1.218 kubernetes-01 kubernetes-01.recipes.com
192.168.1.219 kubernetes-02 kubernetes-02.recipes.com

在 kubernetes-02.recipes.com (worker node) 上重复上述步骤。

检查已安装的 Docker 版本。

jackli@kubernetes-01:~$ docker --version
Docker version 18.09.7, build 2d0083d

验证 Docker 服务是否在两个节点上运行。

jackli@kubernetes-01:~$ systemctl status docker
-> docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: e
   Active: active (running) since Sun 2020-02-16 11:17:17 UTC; 28min ago
     Docs: https://docs.docker.com
 Main PID: 1314 (dockerd)
    Tasks: 10
   CGroup: /system.slice/docker.service
           ->->1314 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/contain
Nov 16 11:17:17 docker-01.recipes.com dockerd[1314]: time="2020-02-16T11:17:17.5
Nov 16 11:17:17 docker-01.recipes.com dockerd[1314]: time="2020-02-16T11:17:17.5
Nov 16 11:17:17 docker-01.recipes.com dockerd[1314]: time="2020-02-16T11:17:17.6
Nov 16 11:17:17 docker-01.recipes.com systemd[1]: Started Docker Application Con

在两个 Kubernetes 节点上关闭交换。

jackli@kubernetes-01:~$ sudo sed -e '/swap/s/^/#/g' -i /etc/fstab
jackli@kubernetes-01:~$ sudo swapoff -a

在两个节点上的 apt 中添加 Kubernetes Xenial 存储库的公钥。

jackli@kubernetes-01:~$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
OK

在两个节点上添加 Kubernetes Xenial 存储库。

jackli@kubernetes-01:~$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Hit:2 http://pk.archive.ubuntu.com/ubuntu bionic InRelease
Get:3 http://pk.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:4 http://pk.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:5 http://pk.archive.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:1 https://packages.cloud.google.com/apt kubernetes-xenial InRelease [8,993 B]
Get:6 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 Packages [33.9 kB]
Fetched 286 kB in 2s (118 kB/s)
Reading package lists... Done

我们在 Ubuntu服务器 上添加了 Kubernetes Xenial 存储库。
我们现在可以使用 apt 命令安装 Kubenetes 包。

安装环境

我们正在使用具有以下配置的两台 KVM 虚拟机。

主节点:

  • CPU - 3.4 Ghz(2 核)
  • 内存 - 2 GB
  • 存储 - 20 GB
  • 操作系统 - Ubuntu服务器 18.04 LTS
  • 主机名 - kubernetes-01.recipes.com
  • IP 地址 - 192.168.1.218 /24

工作节点:

  • CPU - 3.4 Ghz(2 核)
  • 内存 - 2 GB
  • 存储 - 20 GB
  • 操作系统 - Ubuntu服务器 18.04 LTS
  • 主机名 - kubernetes-02.recipes.com
  • IP 地址 - 192.168.1.219 /24

我们已经在两个节点上安装了 Docker。
我们可以按照我们之前的帖子在 Ubuntu服务器 18 LTS 上安装 Docker 来执行相同的操作。

在 Ubuntu服务器 18.04 LTS 上安装 Kubernetes 集群

Kubernetes(通常称为 k8s)是一个开源容器编排系统,用于自动化应用程序部署、扩展和管理。

它最初由 Google 设计,现在由 Cloud Native Computing Foundation 维护。
它旨在提供一个“跨主机集群自动部署、扩展和操作应用程序容器的平台”。

在本文中,我们将学习如何在 Ubuntu服务器 18.04 LTS 上安装 Kubernetes 集群。
我们正在配置两个 Ubuntu服务器 18.04 LTS 节点(一个主节点和一个工作节点),但是如果我们计划配置更多节点,可以使用相同的步骤。

日期:2020-09-17 00:16:29 来源:oir作者:oir