如何在Ubuntu 18上安装Kubernetes?

了解如何在Ubuntu上安装Kubernetes.


Kubernetes是Google开发的一种开源容器编排工具。在本文中,您将学习如何使用主节点和工作节点设置Kubernetes。确保在主节点和辅助节点上都安装了Docker.

环境详细信息和设置

在演示中,我有2个Ubuntu系统,一个是主节点,另一个是工作节点。两者的服务器配置如下.

  • 2个CPU
  • 主站– 4 GB RAM /工作者– 2 GB RAM
  • 10 GB硬盘

使用hostnamectl命令在两个系统上设置主机名.

在主节点上:

[受电子邮件保护]:〜$ sudo hostnamectl set-hostname kubernetes-master

在工作节点上:

[受电子邮件保护]:〜$ sudo hostnamectl set-hostname kubernetes-worker

因此,以下是两个节点的详细信息.

主节点

  • 主机名:kubernetes-master
  • IP地址:192.168.0.107

工作节点

  • 主机名:kubernetes-worker
  • IP地址:192.168.0.108

在两个系统上编辑主机文件.

[受电子邮件保护]:〜$ sudo gedit / etc / hosts

192.168.0.107 kubernetes-master
192.168.0.109 kubernetes-worker

在开始安装Kubernetes之前,请在主节点和工作节点上运行以下命令以检查Docker是否已启动并正在运行.

[受电子邮件保护]:〜$ sudo服务docker状态
geekflare的[sudo]密码:
●docker.service-Docker应用容器引擎
已加载:已加载(/lib/systemd/system/docker.service;已启用;供应商预设:已启用)
活动:自星期六2019-11-23 15:39:00起活动(运行); 3周0天前
文件:https://docs.docker.com
主PID:8840(dockerd)
任务:17
记忆体:42.3M
CGroup:/system.slice/docker.service
88─8840/ usr / bin / dockerd -H fd:// –containerd = / run / containerd / containerd.sock

11月23日15:39:35 geekflare dockerd [8840]:time ="2019-11-23T15:39:35.091941184-05:00" 级别=警告消息="您的内核不支持cgrou
11月23日15:39:35 geekflare dockerd [8840]:time ="2019-11-23T15:39:35.093149218-05:00" 级别=信息味精="装载容器:开始."
11月23日15:39:35 geekflare dockerd [8840]:time ="2019-11-23T15:39:35.957842188-05:00" 级别=信息味精="默认桥(docker0)已分配
11月23日15:39:36 geekflare dockerd [8840]:time ="2019-11-23T15:39:36.078753190-05:00" 级别=信息味精="装载容器:完成."
11月23日15:39:36 geekflare dockerd [8840]:time ="2019-11-23T15:39:36.664727326-05:00" 级别=信息味精="Docker守护程序" commit = 481bc77 graphdr
11月23日15:39:36 geekflare dockerd [8840]:time ="2019-11-23T15:39:36.817929464-05:00" 级别=错误消息="群集退出并出现错误:错误whi
11月23日15:39:36 geekflare dockerd [8840]:time ="2019-11-23T15:39:36.820439024-05:00" 级别=错误消息="群组件无法启动
11月23日15:39:36 geekflare dockerd [8840]:time ="2019-11-23T15:39:36.820821712-05:00" 级别=信息味精="守护程序已完成初始化"
Nov 23 15:39:36 geekflare systemd [1]:启动了Docker应用容器引擎.
11月23日15:39:36 geekflare dockerd [8840]:time ="2019-11-23T15:39:36.883382952-05:00" 级别=信息味精="API在/home/geekflare/docker.sock上侦听
1-20 / 20行(END)

安装Kubernetes

在主节点和辅助节点上运行本节中提到的所有命令.

首先,添加Kubernetes软件包存储库密钥.

[受电子邮件保护]:〜$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt键添加
geekflare的[sudo]密码:

运行以下命令以配置Kubernetes软件包存储库.

[受电子邮件保护]:〜$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial主"
点击数:1 https://download.docker.com/linux/ubuntu Bionic InRelease
点击数:2 http://ppa.launchpad.net/ansible/ansible/ubuntu cosmic InRelease
获取:3 http://apt.puppetlabs.com仿生InRelease [85.3 kB]
点击数:5 http://security.ubuntu.com/ubuntu cosmic-security InRelease
点击数:6 http://us.archive.ubuntu.com/ubuntu cosmic InRelease
Ign:7 http://pkg.jenkins.io/debian-stable binary / InRelease
点击数:8 http://us.archive.ubuntu.com/ubuntu cosmic-updates InRelease
点击数:9 http://pkg.jenkins.io/debian-stable binary /发布
点击数:10 http://us.archive.ubuntu.com/ubuntu cosmic-backports InRelease
获取:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease [8,993 B]
Get:11 http://apt.puppetlabs.com bionic / puppet6 amd64封装[36.1 kB]
获取:13个https://packages.cloud.google.com/apt kubernetes-xenial / main amd64软件包[32.2 kB]
在3s内获得163 kB(49.1 kB / s)
正在阅读包装清单…完成

在继续之前,请在两个节点上禁用交换.

[受电子邮件保护]:〜$ sudo swapoff -a

安装Kubeadm

现在您需要安装kubeadm.

库贝姆 是Kubernetes中的一个工具,用于在Kubernetes集群中添加节点.

[受电子邮件保护]:〜$ sudo apt-get install kubeadm -y
正在阅读包装清单…完成
建立依赖树
正在读取状态信息…完成
将安装以下附加软件包:
conntrack cri-tools ebtables ethtool kubectl kubelet kubernetes-cni socat
将安装以下新软件包:
conntrack cri-tools ebtables ethtool kubeadm kubectl kubelet kubernetes-cni socat
0升级,9新安装,0删除和235未升级.
需要获取51.8 MB档案.
执行此操作后,将使用273 MB的额外磁盘空间.
Get:3 http://us.archive.ubuntu.com/ubuntu cosmic / main amd64 conntrack amd64 1:1.4.5-1 [30.2 kB]
获取:1 https://packages.cloud.google.com/apt kubernetes-xenial / main amd64 cri-tools amd64 1.13.0-00 [8,776 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu cosmic / main amd64 ebtables amd64 2.0.10.4-3.5ubuntu5 [79.8 kB]
Get:8 http://us.archive.ubuntu.com/ubuntu cosmic / main amd64 ethtool amd64 1:4.16-1 [115 kB]
Get:9 http://us.archive.ubuntu.com/ubuntu cosmic / main amd64 socat amd64 1.7.3.2-2ubuntu2 [342 kB]
获取:2 https://packages.cloud.google.com/apt kubernetes-xenial / main amd64 kubernetes-cni amd64 0.7.5-00 [6,473 kB]
Get:4 https://packages.cloud.google.com/apt kubernetes-xenial / main amd64 kubelet amd64 1.17.0-00 [19.2 MB]
获取:5 https://packages.cloud.google.com/apt kubernetes-xenial / main amd64 kubectl amd64 1.17.0-00 [8,742 kB]
获取:7 https://packages.cloud.google.com/apt kubernetes-xenial / main amd64 kubeadm amd64 1.17.0-00 [8,059 kB]
8s时获得51.8 MB(6,419 kB / s)
选择以前未选择的包conntrack.
(正在读取数据库… 318151当前安装的文件和目录。)
正在准备解压… / 0-conntrack_1%3a1.4.5-1_amd64.deb …
开箱conntrack(1:1.4.5-1) …
选择以前未选择的软件包cri-tools.
准备解压… / 1-cri-tools_1.13.0-00_amd64.deb …
拆封cri-tools(1.13.0-00) …
选择以前未选择的软件包.
正在准备解压… / 2-ebtables_2.0.10.4-3.5ubuntu5_amd64.deb …
开箱ebtables(2.0.10.4-3.5ubuntu5) …
选择以前未选择的软件包ethtool.
正在准备解压… / 3-ethtool_1%3a4.16-1_amd64.deb …
拆包ethtool(1:4.16-1) …
选择先前未选择的软件包kubernetes-cni.
正在准备解压… / 4-kubernetes-cni_0.7.5-00_amd64.deb …
开箱kubernetes-cni(0.7.5-00) …
选择以前未选择的软件包.
正在准备解压… / 5-socat_1.7.3.2-2ubuntu2_amd64.deb …
开箱socat(1.7.3.2-2ubuntu2) …
选择以前未选择的包kubelet.
正在准备解压… / 6-kubelet_1.17.0-00_amd64.deb …
开箱Kubelet(1.17.0-00) …
选择以前未选择的包kubectl.
正在准备解压… / 7-kubectl_1.17.0-00_amd64.deb …
开箱Kubectl(1.17.0-00) …
选择以前未选择的软件包kubeadm.
准备解压缩… / 8-kubeadm_1.17.0-00_amd64.deb …
开箱kubeadm(1.17.0-00) …
设置conntrack(1:1.4.5-1) …
设置kubernetes-cni(0.7.5-00) …
设置cri工具(1.13.0-00) …
设置socat(1.7.3.2-2ubuntu2) …
处理systemd的触发器(239-7ubuntu10.12) …
设置ebtables(2.0.10.4-3.5ubuntu5) …
创建了符号链接/etc/systemd/system/multi-user.target.wants/ebtables.service→/lib/systemd/system/ebtables.service.
update-rc.d:警告:不再支持启动和停止操作;退回默认值
设置kubectl(1.17.0-00) …
处理man-db的触发器(2.8.4-2) …
设置ethtool(1:4.16-1) …
设置kubelet(1.17.0-00) …
创建的符号链接/etc/systemd/system/multi-user.target.wants/kubelet.service→/lib/systemd/system/kubelet.service.
设置kubeadm(1.17.0-00) …
处理systemd的触发器(239-7ubuntu10.12) …

检查kubeadm版本以验证其是否正确安装.

[受电子邮件保护]:〜$ kubeadm版本
kubeadm版本: &version.Info {主要:"1个", 次要:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"清洁", 建立日期:"2019-12-07T21:17:50Z", GoVersion:"go1.13.4", 编译器:"GC", 平台:"linux / amd64"}

初始化Kubernetes集群

现在,运行init命令仅在服务器上初始化Kubernetes集群。 主节点. 使用–apiserver-advertise-address告知工作节点主服务器的IP地址.

[受电子邮件保护]:〜$ sudo kubeadm init –apiserver-advertise-address = 192.168.0.107 –pod-network-cidr = 10.244.0.0 / 16
W1217 11:05:15.474854 10193 validate.go:28]无法验证kube-proxy配置-没有可用的验证器
W1217 11:05:15.474935 10193 validate.go:28]无法验证kubelet配置-没有可用的验证器
[init]使用Kubernetes版本:v1.17.0
[飞行前]运行飞行前检查
[警告IsDockerSystemdCheck]:检测到 "cgroupfs" 作为Docker cgroup驱动程序。推荐的驱动程序是 "系统的". 请按照https://kubernetes.io/docs/setup/cri/上的指南进行操作
[预检]拉出设置Kubernetes集群所需的图像
[预检]这可能需要一两分钟,具体取决于您的互联网连接速度
[预检]您也可以预先使用“ kubeadm config images pull”执行此操作
[kubelet-start]将带有标志的kubelet环境文件写入文件 "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start]将kubelet配置写入文件 "/var/lib/kubelet/config.yaml"
[kubelet-start]启动kubelet
[证书]使用certificateDir文件夹 "/ etc / kubernetes / pki"
[证书]生成 "钙" 证书和密钥
[证书]生成 "api服务器" 证书和密钥
[证书] apiserver服务证书用于DNS名称[kubernetes-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local]和IP [10.96.0.1 192.168.0.107]
[证书]生成 "apiserver-kubelet-client" 证书和密钥
[证书]生成 "前代理ca" 证书和密钥
[证书]生成 "前代理客户" 证书和密钥
[证书]生成 "etcd / ca" 证书和密钥
[证书]生成 "etcd /服务器" 证书和密钥
[证书] etcd /服务器服务证书已针对DNS名称[kubernetes-master localhost]和IP [192.168.0.107 127.0.0.1 :: 1]进行了签名
[证书]生成 "等/对等" 证书和密钥
[certs]为DNS名称[kubernetes-master localhost]和IP [192.168.0.107 127.0.0.1 :: 1]签名了etcd / peer服务证书。
[证书]生成 "etcd / healthcheck-client" 证书和密钥
[证书]生成 "apiserver-etcd-client" 证书和密钥
[证书]生成 "SA" 密钥和公钥
[kubeconfig]使用kubeconfig文件夹 "/ etc / kubernetes"
[kubeconfig]写作 "管理员" kubeconfig文件
[kubeconfig]写作 "kubelet.conf" kubeconfig文件
[kubeconfig]写作 "controller-manager.conf" kubeconfig文件
[kubeconfig]写作 "scheduler.conf" kubeconfig文件
[控制面板]使用清单文件夹 "/ etc / kubernetes /清单"
[控制平面]为创建静态Pod清单 "kube-apiserver"
[控制平面]为创建静态Pod清单 "kube-controller-manager"
W1217 11:05:25.584769 10193 manifests.go:214]默认的kube-apiserver授权模式为 "节点,RBAC";使用 "节点,RBAC"
[控制平面]为创建静态Pod清单 "库伯调度器"
W1217 11:05:25.587128 10193 manifests.go:214]默认的kube-apiserver授权模式为 "节点,RBAC";使用 "节点,RBAC"
[etcd]在以下位置为本地etcd创建静态Pod清单 "/ etc / kubernetes /清单"
[wait-control-plane]等待kubelet作为静态Pod从目录启动控制平面 "/ etc / kubernetes /清单". 最多可能需要4毫秒
[apiclient] 35.010368秒后,所有控制平面组件均正常
[upload-config]存储ConfigMap中使用的配置 "kubeadm配置" 在里面 "库伯系统" 命名空间
[kubelet]创建一个ConfigMap "kubelet-config-1.17" 在名称空间kube-system中,具有集群中kubelet的配置
[上传证书]跳过阶段。请参阅–upload-certs
[mark-control-plane]通过添加标签将节点kubernetes-master标记为控制平面 "node-role.kubernetes.io/master=”"
[mark-control-plane]通过添加污点将节点kubernetes-master标记为控制平面[node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token]使用令牌:dmamk9.0nmo62mhom8961qw
[bootstrap-token]配置引导程序令牌,群集信息ConfigMap,RBAC角色
[bootstrap-token]配置了RBAC规则,以允许节点Bootstrap令牌发布CSR,以便节点获得长期证书凭证
[bootstrap-token]配置的RBAC规则允许csrapprover控制器自动从节点Bootstrap令牌批准CSR
[bootstrap-token]配置的RBAC规则允许集群中所有节点客户端证书的证书轮换
[bootstrap-token]创建 "集群信息" ConfigMap中的 "库伯公共" 命名空间
[kubelet-finalize]更新 "/etc/kubernetes/kubelet.conf" 指向可旋转的kubelet客户端证书和密钥
[附加组件]已应用的基本附加组件:CoreDNS
[附加组件]已应用的基本附加组件:kube-proxy

您的Kubernetes控制面板已成功初始化!

要开始使用群集,您需要以普通用户身份运行以下命令:

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

接下来,您需要在集群上部署Pod网络.

使用https://kubernetes.io/docs/concepts/cluster-administration/addons/中列出的选项之一运行kubectl apply -f [podnetwork] .yaml

然后,您可以通过在每个根上运行以下命令来加入任意数量的工作节点:

kubeadm join 192.168.0.107:6443 –token dmamk9.0nmo62mhom8961qw –discovery-token-ca-cert-hash sha256:2de92f42e84d2020d8b19b1778785df5f8196e5eedaa5664ad911e8c23f58963

如上面的输出所述,创建.kube目录并将admin.conf文件复制到.kube目录中的配置文件.

[受电子邮件保护]:〜$ mkdir -p $ HOME / .kube
[受电子邮件保护]:〜$ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config
[受电子邮件保护]:〜$ sudo chown $ {id -u):$ {id -g)$ HOME / .kube / config

这时,当您运行kubectl get nodes命令时,您将看到主节点的状态为NotReady.

[受电子邮件保护]:〜$ sudo kubectl获取节点
名称状态角色年龄版本
kubernetes-master NotReady主2m34s v1.17.0

部署Pod网络-法兰绒

接下来,您需要在主节点上部署Pod网络。我正在使用Flannel pod网络。它用于在Kubernetes集群中的节点之间进行通信.

[受电子邮件保护]:〜$ sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy / psp.flannel.unprivileged已创建
已创建clusterrole.rbac.authorization.k8s.io/flannel
已创建clusterrolebinding.rbac.authorization.k8s.io/flannel
已创建服务帐户/法兰绒
configmap / kube-flannel-cfg已创建
daemonset.apps / kube-flannel-ds-amd64已创建
daemonset.apps / kube-flannel-ds-arm64已创建
daemonset.apps / kube-flannel-ds-arm已创建
daemonset.apps / kube-flannel-ds-ppc64le已创建
daemonset.apps / kube-flannel-ds-s390x已创建

检查主节点的状态,它必须处于就绪状态.

[受电子邮件保护]:〜$ sudo kubectl获取节点
名称状态角色年龄版本
kubernetes-master Ready master 4m41s v1.17.0

几秒钟后,检查所有Pod是否已启动并运行.

[受电子邮件保护]:〜$ kubectl获取容器–all-namespaces
名称空间名称就绪状态重启年龄
kube-system coredns-6955765f44-rzw9d 1/1运行0 4m17s
kube-system coredns-6955765f44-xvgdp 1/1运行0 4m17s
kube-system etcd-kubernetes-master 1/1运行0 4m27s
kube-system kube-apiserver-kubernetes-master 1/1运行0 4m27s
kube-system kube-controller-manager-kubernetes-master 1/1运行0 4m27s
kube-system kube-flannel-ds-amd64-c2rf5 1/1运行中0 81s
kube-system kube-proxy-mvdd7 1/1正在运行0 4m17s
kube-system kube-scheduler-kubernetes-master 1/1运行0 4m27s

将工作节点添加到集群

现在您的主节点已正确配置并正在运行,是时候添加工作节点了。在这里,您需要在初始化kubeadm之后获得的worker节点上运行join命令。.

在工作节点上运行以下命令以加入主节点.

[受电子邮件保护]:〜$ sudo kubeadm join 192.168.0.107:6443 –token dmamk9.0nmo62mhom8961qw –discovery-token-ca-cert-hash sha256:2de92f42e84d2020d8b19b1778785df5f8196e5eedaa5664ad911e8c23f58963
geekflare的[sudo]密码:
W1217 11:08:01.066191 28968 join.go:346] [预检]警告:未设置控制平面标志时,JoinControlPane.controlPlane设置将被忽略.
[飞行前]运行飞行前检查
[警告IsDockerSystemdCheck]:检测到 "cgroupfs" 作为Docker cgroup驱动程序。推荐的驱动程序是 "系统的". 请按照https://kubernetes.io/docs/setup/cri/上的指南进行操作
[预检]从集群读取配置…
仅供参考:您可以使用’kubectl -n kube-system get cm kubeadm-config -oyaml’查看此配置文件
[kubelet-start]从以下位置下载kubelet的配置 "kubelet-config-1.17" kube系统名称空间中的ConfigMap
[kubelet-start]将kubelet配置写入文件 "/var/lib/kubelet/config.yaml"
[kubelet-start]将带有标志的kubelet环境文件写入文件 "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start]启动kubelet
[kubelet-start]等待kubelet执行TLS引导程序…

该节点已加入集群:
*证书签名请求已发送到apiserver并收到了响应.
* Kubelet被告知新的安全连接详细信息.

在控制平面上运行“ kubectl获取节点”以查看该节点是否已加入集群.

在主节点上:

在工作程序节点加入集群之后,您将看到更多的Pod正在运行.

[受电子邮件保护]:〜$ kubectl获取容器–all-namespaces
名称空间名称就绪状态重启年龄
kube-system coredns-6955765f44-9c7jc 1/1运行0 5m3s
kube-system coredns-6955765f44-c9s9r 1/1运行0 5m3s
kube-system etcd-kubernetes-master 1/1运行0 5m12s
kube-system kube-apiserver-kubernetes-master 1/1运行0 5m12s
kube-system kube-controller-manager-kubernetes-master 1/1运行0 5m13s
kube-system kube-flannel-ds-amd64-lgr62 1/1运行0 3m35s
kube-system kube-flannel-ds-amd64-n6vwm 1/1运行中0 27s
kube-system kube-proxy-9mqp6 1/1运行中0 27s
kube-system kube-proxy-kwkz2 1/1运行0 5m3s
kube-system kube-scheduler-kubernetes-master 1/1运行0 5m13s

现在,在主节点上再次运行kubectl命令,以检查工作节点是否已加入集群并且它是否以“就绪”状态运行。.

[受电子邮件保护]:〜$ kubectl获取节点
名称状态角色年龄版本
kubernetes-master Ready master 5m27s v1.17.0
kubernetes-worker就绪31s v1.17.0

结论

现在已经准备好Kubernetes设置,您可以开始在Kubernetes集群上编排容器。如果Kubernetes的事情使您兴奋,那么您可能想通过学习这个来学习 乌迪米课程.

标记:

  • 码头工人

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map