概述

在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. 银河麒麟不同架构获取rpm包的方法

    银河麒麟不同架构获取rpm包的方法 背景 随着信创和网络安全越来越重要 现阶段国产化的软硬件部署越来越多. 很多时候现场有很多国产化的设备.不同架构.不同版本. 还不能上网, 无法获取对应的安装介质. ...

  2. [转帖]拜托!面试请不要再问我Spring Cloud底层原理

    https://www.cnblogs.com/jajian/p/9973555.html 概述# 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大 ...

  3. linux 53端口占用的原因

    解析 Linux 下 53 端口占用的现象 在 Linux 系统中,端口 53 往往是与域名解析服务(DNS)相关的.本文将详细介绍一个与端口 53 相关的情景,以及如何使用命令行工具来解析和理解这一 ...

  4. 我在京东做研发 | 揭秘支撑京东万人规模技术人员协作的行云DevOps平台

    随着业务变化的速度越来越快各类IT系统的建设也越来越复杂大规模研发团队的管理问题日益突出如何提升研发效能成为时下各类技术团队面临的重要挑战 京东云DevOps专家将带您深入研发一线揭秘支撑京东集团万人 ...

  5. flex 布局子元素被挤压的问题

    Flex 意为 "弹性布局",是一种在开发静态页面过程中常用的布局模式. 开发购物车使用flex布局的时候遇到的一种场景:子元素被挤压 具体如图所示, 当商品名称超出两行文字时显示 ...

  6. vue render函数的简单使用(1)

    1.render函数的介绍 在vue中我们经常使用HTML模板语法来组建页面. 除此之外,使用还可以使用render函数来创建页面. 因为vue是虚拟DOM,拿到template模板时也要转译成VNo ...

  7. js解析上传APK文件的详细信息

    前端解析APK版本信息 需要安装这个包,可以使用cnpm或者npm npm 安装 app-info-parser ( 命令:npm install app-info-parser) APKInfo为i ...

  8. elementui出现展开后子菜单宽度多出1px问题

    添加 就可以解决了 .el-menu { border-right-width: 0; } <template> <div class="compen-left-men&q ...

  9. 洛谷P3101 题解

    输入格式 第 \(1\) 行,三个整数 \(m,n,t\). 第 \(2\) 到 \(m+1\) 行,\(m\) 个整数,表示海拔高度. 第 \(2+m\) 到 \(2m+1\) 行,\(m\) 个整 ...

  10. 靠谱:开源IM项目OpenIM压测程序介绍-自己动手测试性能和稳定性

    压测前准备 (一)服务端配置调整 config/config.yaml 以8核16G为例 (1)openImMessagePort: [ 10130, 10131, 10132, 10133, 101 ...