概述

在Node上需要部署Dockerkubeletkube-proxy,在成功加入Kubernetes集群后,还需要部署CNI网络插件、DNS插件等管理组件。

本节以将192.168.3.138和192.168.3.139两台主机部署为Node为例进行说明。

在部署之前,先确保如下几件事情:

(1) 已经在Node主机上安装了Docker环境,注意k8s与Docker版本的对应关系。

(2) 将Master主机上的ca.crt、client.key、client.crt都拷贝到Node主机的/etc/kubernetes/pki目录下。

(3) 将Master主机上的kubeconfig配置文件拷贝到Node主机的/etc/kubernetes目录下。

(4) 将kubelet程序拷贝到Node主机的/usr/bin目录下。

(5) 将kube-proxy程序拷贝到Node主机的/usr/bin目录下。

对K8S Node节点服务的部署主要包含3部分内容:

  1. 部署kubelet服务
  2. 部署kube-proxy服务
  3. 在Master上通过kubectl验证Node信息

部署kubelet服务

(1)为kubelet服务创建systemd服务配置文件/usr/lib/systemd/system/kubelet.service,内容如下:

[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/kubernetes/kubernetes
After=docker.target [Service]
EnvironmentFile=/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet $KUBELET_ARGS
Restart=always [Install]
WantedBy=multi-user.target

(2)配置文件/etc/kubernetes/kubelet的内容为通过环境变量KUBELET_ARGS设置的kubelet的全部启动参数,示例如下:

KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --config=/etc/kubernetes/kubelet.config \
--hostname-override=192.168.3.138 \
--network-plugin=cni \
--logtostderr=false --log-dir=/var/log/kubernetes --v=0"

对主要参数说明如下。

  • --kubeconfig:设置与API Server连接的相关配置,可以与kube-controller-manager使用的kubeconfig文件相同。需要将相关客户端证书文件从Master主机复制到Node主机的/etc/kubernetes/pki目录下,例如ca.crt、client.key、client.crt文件。
  • --config:kubelet配置文件,从Kubernetes 1.10版本开始引入,设置可以让多个Node共享的配置参数,例如address、port、cgroupDriver、clusterDNS、clusterDomain等。
  • --hostname-override:设置本Node在集群中的名称,默认值为主机名,应将各Node设置为本机IP或域名。
  • --network-plugin:网络插件类型,建议使用CNI网络插件。

配置文件kubelet.config的内容示例如下(需要拷贝到/etc/kubernetes目录下):

kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: 0.0.0.0
port: 10250
cgroupDriver: cgroupfs
clusterDNS: ["169.169.0.100"]
clusterDomain: cluster.local
authentication:
anonymous:
enabled: true

在本例中设置的kubelet参数如下。

  • address:服务监听IP地址。
  • port:服务监听端口号,默认值为10250。
  • cgroupDriver:设置为cgroupDriver驱动,默认值为cgroupfs,可选项包括systemd。
  • clusterDNS:集群DNS服务的IP地址,例如169.169.0.100。
  • clusterDomain:服务DNS域名后缀,例如cluster.local。
  • authentication:设置是否允许匿名访问或者是否使用webhook进行鉴权。

(3)在配置文件准备完毕后,在各Node主机上启动kubelet服务并设置为开机自启动:

# 启动kubelet服务并设置为开机启动
systemctl start kubelet && systemctl enable kubelet
# 查看kubelet服务运行状态
systemctl status kubelet

如果启动失败,查看kubelet日志:journalctl -xefu kubelet

部署kube-proxy服务

(1)为kube-proxy服务创建systemd服务配置文件/usr/lib/systemd/system/kube-proxy.service,内容如下:

[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/kubernetes/kubernetes
After=network.target [Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=always [Install]
WantedBy=multi-user.target

(2)配置文件/etc/kubernetes/proxy的内容为通过环境变量KUBE_PROXY_ARGS设置的kube-proxy的全部启动参数,示例如下:

KUBE_PROXY_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig \
--hostname-override=192.168.3.138 \
--proxy-mode=iptables \
--logtostderr=false --log-dir=/var/log/kubernetes --v=0"

对主要参数说明如下。

  • --kubeconfig:设置与API Server连接的相关配置,可以与kubelet使用的kubeconfig文件相同。相关客户端CA证书使用部署kubelet服务时从Master主机复制到Node主机的/etc/kubernetes/pki目录下的文件,包括ca.crt、client.key和client.crt。
  • --hostname-override:设置本Node在集群中的名称,默认值为主机名,各Node应被设置为本机IP或域名。
  • --proxy-mode:代理模式,包括iptables、ipvs、kernelspace(Windows节点使用)等。

上述配置文件需要在所有Node节点进行。

(3)在配置文件准备完毕后,在各Node主机上启动kube-proxy服务,并设置为开机自启动:

# 启动kube-proxy服务并设置开机启动
systemctl start kube-proxy && systemctl enable kube-proxy
# 查看kube-proxy服务运行状态
systemctl status kube-proxy

如果启动服务失败,查看kube-proxy日志:journalctl -xefu kube-proxy

在Master上通过kubectl验证Node信息

在各个Node的kubeletkube-proxy服务正常启动之后,会将本Node自动注册到Master上,然后就可以到Master主机上通过kubectl查询自动注册到Kubernetes集群的Node的信息了。

由于Master开启了HTTPS认证,所以kubectl也需要使用客户端CA证书连接Master,可以直接使用kube-controller-managerkubeconfig文件,命令如下:

[root@m1 ~]# kubectl --kubeconfig=/etc/kubernetes/kubeconfig get nodes
NAME STATUS ROLES AGE VERSION
192.168.3.138 NotReady <none> 3m29s v1.19.0
192.168.3.139 NotReady <none> 2m55s v1.19.0

可以看到各Node的状态为“NotReady”,这是因为还没有部署CNI网络插件,无法设置容器网络。

类似于通过kubeadm创建Kubernetes集群,例如选择Calico CNI插件运行下面的命令一键完成CNI网络插件的部署:

在Master节点上执行如下安装:

kubectl apply -f "https://docs.projectcalico.org/manifests/calico.yaml"

如果是网络原因无法正常访问https://docs.projectcalico.org/manifests/calico.yaml,可以先手动下载到本地再执行。

比如保存到本地文件名为:calico.yaml,则可以执行如下命令:

kubectl apply -f ./calico.yaml

遇到报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?

解决:由于启用了CA认证,所以在使用kubectl命令时也必须指定kubeconfig配置文件。

kubectl --kubeconfig=/etc/kubernetes/kubeconfig apply -f ./calico.yaml

报错:error: unable to recognize "./calico.yaml": no matches for kind "PodDisruptionBudget" in version "policy/v1"

原因:下载的calico.yaml版本为:v3.26.1,即:https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

由于安装的k8s版本为:v1.19.0版本,根据calico与k8s的版本对应关系,重新下载v3.19版本的calio.yaml,并命名为:calico_v319.yaml

再次执行:

kubectl --kubeconfig=/etc/kubernetes/kubeconfig apply -f ./calico_v319.yaml

安装成功。

在CNI网络插件成功运行之后,Node的状态会更新为“Ready”:

[root@m1 ~]# kubectl --kubeconfig=/etc/kubernetes/kubeconfig get nodes
NAME STATUS ROLES AGE VERSION
192.168.3.138 Ready <none> 17h v1.19.0
192.168.3.139 Ready <none> 17h v1.19.0
[root@m1 ~]#

执行如下命令查看Node节点详细信息:

kubectl --kubeconfig=/etc/kubernetes/kubeconfig describe nodes

卸载cni:如果CNI插件版本不对需要卸载,执行如下命令:

kubectl --kubeconfig=/etc/kubernetes/kubeconfig delete -f ./calico_v319.yaml

以二进制文件安装K8S之部署Node服务的更多相关文章

  1. 9、二进制安装K8s之增加node

    二进制安装K8s之增加node 1.复制文件,要部署几台就直接复制即可 #二进制文件 scp /data/k8s/bin/{kubelet,kube-proxy} root@192.168.100.1 ...

  2. 6、二进制安装K8s之部署kubectl

    二进制安装K8s之部署kubectl 我们把k8s-master 也设置成node,所以先master上面部署node,在其他机器上部署node也适用,更换名称即可. 1.在所有worker node ...

  3. 3、二进制安装K8s之部署kube-apiserver

    二进制安装K8s之部署kube-apiserver 一.生成 kube-apiserver 证书 1.自签证书颁发机构(CA) cat > ca-config.json <<EOF ...

  4. Docker & k8s 系列三:在k8s中部署单个服务实例

    本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...

  5. 8、二进制安装K8s之部署CIN网络

    二进制安装K8s之部署CIN网络 部署CIN网络可以使用flannel或者calico,这里介绍使用calico ecd 方式部署. 1.下载calico二进制安装包 创建所需目录 mkdir -p ...

  6. 2、二进制安装K8s 之 部署ETCD集群

    二进制安装K8s 之 部署ETCD集群 一.下载安装cfssl,用于k8s证书签名 二进制包地址:https://pkg.cfssl.org/ 所需软件包: cfssl 1.6.0 cfssljson ...

  7. windows下安装Redis并部署成服务

    windows下安装Redis并部署成服务 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 一:下载 下载地址: windows版本: http ...

  8. 10、二进制安装K8s之部署CoreDNS 和Dashboard

    二进制安装K8s之部署CoreDNS 和Dashboard CoreDNS 和Dashboard 的yaml文件在 k8s源代码压缩包里面可以找到对应的配置文件,很多人从网上直接下载使用别人的,会导致 ...

  9. 7、二进制安装K8s之部署kube-proxy

    二进制安装K8s之部署kube-proxy 1.创建配置文件 cat > /data/k8s/config/kube-proxy.conf << EOF KUBE_PROXY_OPT ...

  10. 4、二进制安装K8s 之 部署kube-controller-manager

    二进制安装K8s 之 部署kube-controller-manager 1.创建配置文件 cat > /data/k8s/config/kube-controller-manager.conf ...

随机推荐

  1. [转帖]Redhat 8 磁盘调度策略变化:NOOP改为NONE

    说明 在 redhat 4/5/6/7版本中的NOOP调度策略,从8开始修改为NONE,官方解释: none Implements a first-in first-out (FIFO) schedu ...

  2. [转帖]rsar - Extract data from plain-text sar files

    sar -A -t -f /tmp/sa11 >/tmp/sar11 https://github.com/ryran/rsar When dealing with sysstat sar da ...

  3. [转帖]spec2017 安装和使用

    https://zhuanlan.zhihu.com/p/534205632 SPEC成立于1988年,SPEC基准广泛用于评估计算机系统的性能.SPEC CPU套件通过测量几个程序(例如编译器GCC ...

  4. SQLSERVER 标准版与企业版的版本标识区别

    1.  windows 标准版  sqlserver 标准版 2. Windows 数据中心版 sqlserver 企业版 3. Win10 之后 服务器版本缩减的很厉害 只有两个版本了 如图示 4. ...

  5. VScode中下载了插件但是无法找到SSH Target连接服务器的解决方法(CANNOT find SSH Target in remote explorer)

    VSCode版本vscode version:(version 1.82) 已下载扩展installed extensions: Remote - SSH v0.106.4 Remote - SSH: ...

  6. Skia 编译及踩坑实践

    本文要点 •了解并入门 Skia.OpenGL 和 Vulkan •了解 Skia 在后端渲染上的坑点 前言 Skia 是什么 Skia 是一个开源 2D 图形库,提供可跨各种硬件和软件平台工作的通用 ...

  7. vue中v-show你不知道的用法 created computed mounted的执行顺序

    我们都知道,v-show的值是一个布尔类型的. 我通过这个值进行显示或者隐藏. 但是有些时候,这个值是true还是false,我们需要去进行计算 此时我们就可以使用v-show="XXX() ...

  8. 【解决了一个小问题】macbook m2 下交叉编译 musl-gcc 支持的 gozstd 库

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我的 golang 项目中使用了 gozstd, 在 ma ...

  9. 【解决了一个小问题】在某个linux基础镜像中安装python特定的版本

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 在某个基础镜像中,安装了python3.6.但是一个测试需 ...

  10. 自动部署(apb docker cicd gitlab)

    1.安装gitlab-runner docker pull gitlab/gitlab-runner:latest 2.运行镜像 docker run -d --name gitlab-runner ...