全新一台node节点加入到集群中

目录

  • 前言
  • 对新节点做解析
    • 方法一 hosts 文件解析
    • 方法二 bind 解析
    • 测试
  • 分发密钥对
  • 推送 CA 证书
  • flanneld 部署
    • 推送flanneld二进制命令
    • 推送flanneld秘钥
    • 推送flanneld启动文件
    • 启动flanneld
    • 查看etcd中网络数据
  • docker 安装配置
    • 安装
    • 创建配置文件
    • 修改Docker启动参数
    • 启动查看
  • kubelet 安装
    • 推送 kubelet 二进制文件
    • 创建 kubelet bootstrap kubeconfig 文件
    • 分发 bootstrap kubeconfig 文件到所有 worker 节点
    • 查看kubeadm为新节点创建的token
    • 查看 token 关联的 Secret
    • 创建和分发kubelet参数配置
    • 创建和分发kubelet启动文件
    • 启动 kubelet 服务
    • 手动approve server cert csr
  • 查看新节点
  • kube-proxy 安装
    • 推送 kube-proxy 二进制启动文件
    • 分发 kubeconfig 文件
    • 分发和创建kube-proxy配置文件
    • 分发 kube-proxy systemd unit 文件
    • 启动 kube-proxy 服务
    • 检查启动结果
    • 查看ipvs路由规则
  • 查看当前集群 nodes

前言

基于前面的所有文章完成后,这里介绍一下如何添加一个全新的节点;

对新节点做解析

方法一 hosts 文件解析

如果使用的是 hosts 文件解析,则需要在所有节点的 hsots 文件添加下面内容:

10.0.20.15 node05 node05.k8s.com

方法二 bind 解析

如果使用的时候内部bind 做DNS解析,则只需要添加一条A记录即可

node05  IN  A   10.0.20.15

重载bind配置文件

rndc reload

测试

在 node01 机器上测试

[[email protected] work]# ping -c 1 node05
PING node05.k8s.com (10.0.20.15) 56(84) bytes of data.
64 bytes from 10.0.20.15 (10.0.20.15): icmp_seq=1 ttl=64 time=0.122 ms

--- node05.k8s.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.122/0.122/0.122/0.000 ms
[[email protected] work]# ping -c 1 node05.k8s.com
PING node05.k8s.com (10.0.20.15) 56(84) bytes of data.
64 bytes from 10.0.20.15 (10.0.20.15): icmp_seq=1 ttl=64 time=0.121 ms

--- node05.k8s.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.121/0.121/0.121/0.000 ms

分发密钥对

为了方便推送文件,这一步可做可不做

ssh-copy-id -i ~/.ssh/id_rsa.pub node05

推送 CA 证书

ssh node05 "mkdir -p /etc/kubernetes/cert"
scp ca*.pem ca-config.json node05:/etc/kubernetes/cert

flanneld 部署

下面所有步骤都在 node01 上执行

推送flanneld二进制命令

scp flannel/{flanneld,mk-docker-opts.sh} node05:/opt/k8s/bin/

推送flanneld秘钥

ssh node05 "mkdir -p /etc/flanneld/cert"
scp flanneld*.pem node05:/etc/flanneld/cert

推送flanneld启动文件

scp flanneld.service node05:/etc/systemd/system/

启动flanneld

ssh node05 "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"
ssh node05 "systemctl status flanneld|grep Active"

查看flanneld网络

ssh node05 "/usr/sbin/ip addr show flannel.1|grep -w inet"

查看etcd中网络数据

查看一下etcd中CIDR分配的数量是否添加

source /opt/k8s/bin/environment.sh
etcdctl   --endpoints=${ETCD_ENDPOINTS}   --ca-file=/etc/kubernetes/cert/ca.pem   --cert-file=/etc/flanneld/cert/flanneld.pem   --key-file=/etc/flanneld/cert/flanneld-key.pem   get ${FLANNEL_ETCD_PREFIX}/subnets/172.30.80.0-21

查看输出结果:

[[email protected] work]# etcdctl >   --endpoints=${ETCD_ENDPOINTS} >   --ca-file=/etc/kubernetes/cert/ca.pem >   --cert-file=/etc/flanneld/cert/flanneld.pem >   --key-file=/etc/flanneld/cert/flanneld-key.pem >   ls ${FLANNEL_ETCD_PREFIX}/subnets
/kubernetes/network/subnets/172.30.80.0-21
/kubernetes/network/subnets/172.30.48.0-21
/kubernetes/network/subnets/172.30.216.0-21
/kubernetes/network/subnets/172.30.224.0-21
/kubernetes/network/subnets/172.30.160.0-21

从上面输出看出,新节点的flanneld已经正常

docker 安装配置

这里直接在 node05 节点上操作

安装

yum install docker-ce-18.09.6 -y

创建配置文件

mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://hjvrgh7a.mirror.aliyuncs.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

修改Docker启动参数

vim /usr/lib/systemd/system/docker.service
EnvironmentFile=-/run/flannel/docker
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock

启动查看

[[email protected] ~]# vim /usr/lib/systemd/system/docker.service
[[email protected] ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[[email protected] ~]# systemctl start docker

查看docker0网桥是否是 flanneld 网络的网关

[[email protected] ~]# ip addr show flannel.1 && /usr/sbin/ip addr show docker0
5: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
    link/ether fe:64:95:d1:b5:7c brd ff:ff:ff:ff:ff:ff
    inet 172.30.216.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:79:3b:10:f3 brd ff:ff:ff:ff:ff:ff
    inet 172.30.216.1/21 brd 172.30.223.255 scope global docker0
       valid_lft forever preferred_lft forever

kubelet 安装

这里在 node01 上操作

推送 kubelet 二进制文件

scp kubernetes/server/bin/kubelet node05:/opt/k8s/bin/

创建 kubelet bootstrap kubeconfig 文件

export BOOTSTRAP_TOKEN=$(kubeadm token create   --description kubelet-bootstrap-token   --groups system:bootstrappers:node05   --kubeconfig ~/.kube/config)
# 设置集群参数
kubectl config set-cluster kubernetes   --certificate-authority=/etc/kubernetes/cert/ca.pem   --embed-certs=true   --server=https://vip.k8s.com:8443   --kubeconfig=kubelet-bootstrap-node05.kubeconfig
# 设置客户端认证参数
kubectl config set-credentials kubelet-bootstrap   --token=${BOOTSTRAP_TOKEN}   --kubeconfig=kubelet-bootstrap-node05.kubeconfig
# 设置上下文参数
kubectl config set-context default   --cluster=kubernetes   --user=kubelet-bootstrap   --kubeconfig=kubelet-bootstrap-node05.kubeconfig
# 设置默认上下文
kubectl config use-context default --kubeconfig=kubelet-bootstrap-node05.kubeconfig

分发 bootstrap kubeconfig 文件到所有 worker 节点

scp kubelet-bootstrap-node05.kubeconfig [email protected]:/etc/kubernetes/kubelet-bootstrap.kubeconfig

查看kubeadm为新节点创建的token

[[email protected] work]# kubeadm token list --kubeconfig ~/.kube/config
TOKEN                     TTL       EXPIRES                     USAGES                   DESCRIPTION               EXTRA GROUPS
cu4q2e.ogvim78s3p252ysg   7h        2019-12-06T17:44:24+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node03
nrypmb.35fyygbwr9failr5   7h        2019-12-06T17:44:23+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node01
r5luwb.6x6c5lnit5utyotz   7h        2019-12-06T17:44:23+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node02
# 下面多了一条node05
ss66d3.yse8ia5bt1s06jmg   23h       2019-12-07T10:01:58+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node05
sx8n4m.vlltkkv8m23ogxg9   7h        2019-12-06T17:44:24+08:00   authentication,signing   kubelet-bootstrap-token   system:bootstrappers:node04

查看 token 关联的 Secret

[[email protected] work]# kubectl get secrets  -n kube-system|grep bootstrap-token
bootstrap-token-cu4q2e                           bootstrap.kubernetes.io/token         7      16h
bootstrap-token-nrypmb                           bootstrap.kubernetes.io/token         7      16h
bootstrap-token-r5luwb                           bootstrap.kubernetes.io/token         7      16h
# 根据上面查看的token,下面这条是新添加的
bootstrap-token-ss66d3                           bootstrap.kubernetes.io/token         7      99s
bootstrap-token-sx8n4m                           bootstrap.kubernetes.io/token         7      16h

创建和分发kubelet参数配置

cd /opt/k8s/work
sed -e "s/##NODE_IP##/10.0.20.15/" kubelet-config.yaml.template > kubelet-config-10.0.20.15.yaml.template
scp kubelet-config-10.0.20.15.yaml.template [email protected]:/etc/kubernetes/kubelet-config.yaml

创建和分发kubelet启动文件

cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
sed -e "s/##NODE_NAME##/node05/" kubelet.service.template > kubelet-node05.service
scp kubelet-node05.service [email protected]:/etc/systemd/system/kubelet.service

启动 kubelet 服务

cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
ssh [email protected] "mkdir -p ${K8S_DIR}/kubelet/kubelet-plugins/volume/exec/"
ssh [email protected] "/usr/sbin/swapoff -a"
ssh [email protected] "systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet"

手动approve server cert csr

稍等片刻后,需要手动通过证书请求
基于安全考虑,CSR approving controllers不会自动approve kubelet server证书签名请求,需要手动approve

kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve

查看新节点

此时再次使用 查看节点的命令时,发现已经添加成功

[[email protected] work]# kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
node01   Ready    <none>   16h   v1.15.6
node02   Ready    <none>   16h   v1.15.6
node03   Ready    <none>   16h   v1.15.6
node04   Ready    <none>   16h   v1.15.6
node05   Ready    <none>   74s   v1.15.6   # 这里显示正常

kube-proxy 安装

此处均在 node01 上执行

推送 kube-proxy 二进制启动文件

cd /opt/k8s/work/
scp kubernetes/server/bin/kube-proxy node05:/opt/k8s/bin/

分发 kubeconfig 文件

cd /opt/k8s/work/
scp kube-proxy.kubeconfig [email protected]:/etc/kubernetes/

分发和创建kube-proxy配置文件

cd /opt/k8s/work/
sed -e "s/##NODE_NAME##/node05/" -e "s/##NODE_IP##/10.0.20.15/" kube-proxy-config.yaml.template > kube-proxy-config-node05.yaml.template
scp kube-proxy-config-node05.yaml.template [email protected]:/etc/kubernetes/kube-proxy-config.yaml

分发 kube-proxy systemd unit 文件

scp kube-proxy.service [email protected]:/etc/systemd/system/

启动 kube-proxy 服务

cd /opt/k8s/work
source /opt/k8s/bin/environment.sh
ssh [email protected] "mkdir -p ${K8S_DIR}/kube-proxy"
ssh [email protected] "modprobe ip_vs_rr"
ssh [email protected] "systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy"

检查启动结果

ssh [email protected] "systemctl status kube-proxy|grep Active"
ssh [email protected] "netstat -lnpt|grep kube-prox"

查看ipvs路由规则

ssh [email protected] "/usr/sbin/ipvsadm -ln"

输出:

[[email protected] work]# ssh [email protected] "/usr/sbin/ipvsadm -ln"
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.254.0.1:443 rr
  -> 10.0.20.11:6443              Masq    1      0          0
  -> 10.0.20.12:6443              Masq    1      0          0
  -> 10.0.20.13:6443              Masq    1      0          0
TCP  10.254.0.2:53 rr
  -> 172.30.48.2:53               Masq    1      0          0
  -> 172.30.160.2:53              Masq    1      0          0
TCP  10.254.0.2:9153 rr
  -> 172.30.48.2:9153             Masq    1      0          0
  -> 172.30.160.2:9153            Masq    1      0          0
UDP  10.254.0.2:53 rr
  -> 172.30.48.2:53               Masq    1      0          0
  -> 172.30.160.2:53              Masq    1      0          0 

至此,全新的node节点加入集群操作完成。

查看当前集群 nodes

[[email protected] work]# kubectl get nodes -o wide
NAME     STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIME
node01   Ready    <none>   16h   v1.15.6   10.0.20.11    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6
node02   Ready    <none>   16h   v1.15.6   10.0.20.12    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6
node03   Ready    <none>   16h   v1.15.6   10.0.20.13    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6
node04   Ready    <none>   16h   v1.15.6   10.0.20.14    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6
node05   Ready    <none>   12m   v1.15.6   10.0.20.15    <none>        CentOS Linux 7 (Core)   5.4.1-1.el7.elrepo.x86_64   docker://18.9.6

原文地址:https://www.cnblogs.com/winstom/p/11993893.html

时间: 2024-10-11 16:59:35

全新一台node节点加入到集群中的相关文章

集群中节点(Node)与单机数据库的区别

集群中节点(Node)与单机数据库的区别: 区别项 集群中节点(Node) 单机数据库 只能使用0号数据库 是 都可以使用 原文地址:https://www.cnblogs.com/cag2050/p/10469433.html

MySql集群FAQ----mysql主从配置与集群区别、集群中需要多少台计算机呢?为什么? 等

抽取一部分显示在这里,如下, What's the difference in using Clustervs using replication? 在复制系统中,一个MySQL主服务器会更新一个或多个从服务器.事务是顺序地提交的,因此一个慢事务就可能导致从服务器比主服务器落后一段时间.这也意 味着,如果主服务器出错失败了,那么从服务器可能会缺少记录最后的那一小部分事务日志.如果使用的是事务安全存储引擎的话,例如InnoDB, 那么事务日志则会完全记录到从服务器上去或者完全不记录,但是复制不能保

heartbeat 配置两台web服务器高可用集群案例

通过heartbeat 配置两台web服务器高可用集群案例: 拓扑: web1:192.168.0.101 hostname: web1.example.com web2:192.168.0.102 hostname:web2.example.com vip:192.168.0.254 nfs服务器:192.168.0.100(存放web页面) 注意: 1主机名要与uname -n 保持一致 2.web1与web2主机的date时间保持同步 3.web1与web2,ssh双机互信通信 4.关闭i

Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与下架一个Hadoop节点. 一.实验环境结构 本次试验,我们构建的集群是一个主节点,三个从节点的结构,其中三个从节点的性能配置各不相同,这里我们主要在虚拟机中的内存设置这三个从节点分别为:512MB.512MB与256MB.首先,我们暂时只设置两个从节点,另外一个作为动态添加节点的时候使用.主节点与

将 master 节点服务器从 k8s 集群中移除并重新加入

背景 1 台 master 加入集群后发现忘了修改主机名,而在 k8s 集群中修改节点主机名非常麻烦,不如将 master 退出集群改名并重新加入集群(前提是用的是高可用集群). 操作步骤 ssh 登录另外一台 master 节点将要改名的 master 节点移出集群. kubectl drain blog-k8s-n0 kubectl delete node blog-k8s-n0 登录已退出集群的 master 服务器重置 kubelet 配置并重新加入集群. kubeadm reset k

运维之我的docker-swarm集群中删除节点和服务

删除swam节点 如果有的确实想要从swarm集群中删除,你应该先把这个节点容器排空,然后再把节点从集群中去掉. 排空节点(其实就是把这个节点上的容器先从其它节点启动,再停掉排空节点上的容器,保证你定义服务的预先状态不受影响) docker node update --availability drain g36lvv23ypjd8v7ovlst2n3yt 删除指定节点 docker node rm  node9 docker node rm --force node9 删除服务 删除服务以后容

Oracle 学习之RAC(八) 向集群中添加节点

我们前面安装了两个节点的RAC. 我们现在将第三个节点11grac3,添加到我们集群中.第三个节点一定要按照集群环境准备一文描述,准备环境.请参考 http://lqding.blog.51cto.com/9123978/1684159 安装前检查 11grac1-> pwd /u01/app/11.2.0/grid/bin 11grac1-> ./cluvfy stage -pre nodeadd -n 11grac3 -fixup -verbose 检查结果 Performing pre-

近千节点的Redis集群运维经验总结

分享一篇好文章 redis越来越实用了 服务器宕机并恢复后,需要重启Redis实例,因为集群采用主从结构并且宕机时间比较长,此时宕机上的节点对应的节点都是主节点,宕掉的节点重启后都应该是从节点.启动Redis实例,我们通过日志发现节点一直从不断的进行主从同步.我们称这种现象为主从重同步. 主从同步机制 为了分析以上问题,我们首先应该搞清楚Redis的主从同步机制.以下是从节点正常的主从同步流程日志: 17:22:49.763 * MASTER <-> SLAVE sync started17:

使用概要管理工具创建定制概要文件,并在此节点上 创建集群以及在集群服务器中部署应用

使用概要管理工具创建定制概要文件,并在此节点上 创建集群以及在集群服务器中部署应用 上篇介绍了在Lnux上安装WebsphereV8.5,以及使用概要管理工具创建了Dmgr管理概要文件. Dmgr服务器不能运行应用程序,应用程序需要运行在特定的JavaEE服务器上,Dmgr管理服务器只负责管 理与它联合的节点.可以在新建的profile对应的节点上创建Websphere实例或者集群实例.并把此节点与 Dmgr服务器联合,交由Dmgr管理.此篇介绍使用概要管理工具创建定制概要文件,并在此节点上创建