精华内容
下载资源
问答
  • k8s二进制集群中删除node节点,并重新加入集群一、删除node04节点1.查看当前集群的节点信息2.使用kubectl命令删除node节点3.查看当前集群的节点信息4.在node节点上彻底删除集群信息5.node节点停止kubelet服务二、node...

    原有环境说明

    主机名 系统版本 ip地址 docker version kubelet version kubeadm version kubectl version flannel version 备注
    master centos-release-7-7.1908.0.el7.centos.x86_64 192.168.137.221 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 master节点
    node01 centos-release-7-7.1908.0.el7.centos.x86_64 192.168.137.222 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 node节点
    node02 centos-release-7-7.1908.0.el7.centos.x86_64 192.168.137.223 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 node节点
    node03 centos-release-7-7.1908.0.el7.centos.x86_64 192.168.137.224 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 node节点
    node04 centos-release-7-7.1908.0.el7.centos.x86_64 192.168.137.225 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 node节点

    本次演示从集群中安全地删除一个节点,节点删除之后,该节点上的任务会自动转移到其他节点。
    下面以删除node04节点为例。

    一、删除node04节点

    以下操作如果没有特别说明,则都在master节点上进行

    1.查看当前集群的节点信息

    1.1查看node节点信息

    [root@master ~]# kubectl get node
    

    在这里插入图片描述
    node01节点因为服务器没启动所以是NotReady状态

    1.2查看部署在node04上的资源

    这里有一个名为:nginx-addnode-node04-dep 的容器组,一共有6个资源实例,并且有一个部署在node04上面。
    在这里插入图片描述

    2.使用kubectl命令删除node节点

    [root@master ~]# kubectl delete node node04
    

    在这里插入图片描述
    显示node04已删除。

    3.查看当前集群的节点信息

    3.1查看node信息

    [root@master ~]# kubectl get node
    

    在这里插入图片描述
    显示node04已经不存在,则表明删除成功。

    3.2验证资源是否自动转移

    在这里插入图片描述
    可以看到nginx-addnode-node04-dep的容器组没有一个实例是在node04上面的了,并且在node03上面多了一个节点,同时,该容器组实例的创建时间是最新的。这就验证了被删除节点的资源会自动分布的其他活动的节点上面。

    4.在node节点上彻底删除集群信息

    ** 该部分在node04节点上进行操作 **
    删除kube-controller-manager 为node04节点生成的kubeconfig 文件和公私钥:

    [root@node04 ~]# rm -rf /etc/kubernetes/kubelet.kubeconfig
    [root@node04 ~]# rm -rf /etc/kubernetes/cert/kubelet*
    

    5.node节点停止相关服务

    该部分在node04节点上进行操作

    [root@node04 ~]# systemctl stop kubelet kube-proxy flanneld docker kube-proxy kube-nginx
    [root@node04 ~]# systemctl disable kubelet kube-proxy flanneld docker kube-proxy kube-nginx
    

    此时,node04节点相关服务已经从集群中彻底删除,且设置成开机不自动启动。等待资源被重新分配到其他活动节点即可。

    6.清除kube-proxy 和 docker 创建的 iptables

    这步如果不执行的话,可能会出现使用被删除节点的ip也能访问集群的情况

    [root@node04 ~]# iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
    

    二、node节点重新加入集群

    以下操作如果没有特别说明,则都在master节点上进行

    这里所讲的node节点是指之前按照以上步骤删除的节点,该节点上已经有一些k8s的工具或服务,所以可以直接进行加入集群的操作。

    1.重启k8s集群相关服务

    1.1重启服务

    该部分在node04节点上进行操作

    [root@node04 ~]# systemctl restart kubelet kube-proxy flanneld docker kube-proxy kube-nginx
    [root@node04 ~]# systemctl enable kubelet kube-proxy flanneld docker kube-proxy kube-nginx
    

    1.2查看kubelet状态

    该部分在node04节点上进行操作

    [root@node04 ~]# systemctl status kubelet
    

    如果出现以下错误,则说明之前使用的token已经过期了。我们可以使用kubeadm给node04重新创建一个token。如果没有出现以下错误,请直接查看1.3节。
    在这里插入图片描述

    1.2.1使用kubeadm创建token

    [root@master ~]# kubeadm token create \
     --description kubelet-bootstrap-token \
     --groups system:bootstrappers:node03 \
     --kubeconfig ~/.kube/config
    

    1.2.2查看token

    [root@master ~]# kubeadm token list --kubeconfig ~/.kube/config
    

    在这里插入图片描述

    1.2.3替换已过期的token

    该部分在node04节点上进行操作
    使用vim替换/etc/kubernetes/kubelet-bootstrap.kubeconfig文件中的token为1.22中查询出来的token。

    [root@node04 ~]# vim /etc/kubernetes/kubelet-bootstrap.kubeconfig
    

    在这里插入图片描述

    1.2.4再次查看kubelet的状态

    该部分在node04节点上进行操作

    [root@node04 ~]# systemctl restart kubelet
    [root@node04 ~]# systemctl status kubelet
    

    此时发现之前的错误已经不见了。

    1.2.5查看node集群状态

    [root@master ~]# kubectl get node
    

    在这里插入图片描述
    可以看到node04已经是Ready状态了。

    1.3timed out waiting for the condition

    如果在查看kubelet的时候出现了如下错误。则需要去master节点上主动approve server cert csr。
    在这里插入图片描述

    1.3.1查看csr

    [root@master ~]# kubectl get csr
    

    在这里插入图片描述

    1.3.2手动approve

    把node04节点的pending状态的csr都approve掉,正常情况下应该只有一条信息需要approve,我这里是做了多次试验所以才有多个。

    [root@master ~]# kubectl certificate approve csr-5rh7g csr-blptz csr-cgz7f csr-h899h csr-kks55
    

    再次去node04上面查看状态,发现错误已经消失了。

    至此,k8s集群删除节点并重新加入集群就记录完毕了。

    展开全文
  • k8s二进制集群中添加/新增node节点

    千次阅读 2019-10-17 09:35:50
    @[TOC](k8s实践(三) 二进制集群中添加node节点) 原有环境说明 主机名 系统版本 ip地址 docker version kubelet version kubeadm version kubectl version flannel version 备注 master centos-release-7-7....

    k8s二进制集群中添加/新增node节点

    原有环境说明

    主机名 系统版本 ip地址 docker version kubelet version kubeadm version kubectl version flannel version 备注
    master centos-release-7-7.1908.0.el7.centos.x86_64 192.168.137.221 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 master节点
    node01 centos-release-7-7.1908.0.el7.centos.x86_64 192.168.137.222 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 node节点
    node02 centos-release-7-7.1908.0.el7.centos.x86_64 192.168.137.223 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 node节点

    新增node03环境说明

    主机名 系统版本 ip地址 docker version kubelet version kubeadm version kubectl version flannel version 备注
    node03 centos-release-7-7.1908.0.el7.centos.x86_64 192.168.137.221 Docker 18.09.6 V1.14.2 V1.14.2 V1.14.2 V0.11.0 node节点

    之前搭建的k8s集群环境是参考https://k8s-install.opsnull.com这篇文档进行搭建的,这次的节点新增也是基于这个环境之上。
    参考文档:https://k8s-install.opsnull.com

    一、系统基础优化

    1.工具安装

    [root@centos7 ~]# yum install -y epel-release
    [root@centos7 ~]# yum install -y vim conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget
    

    2.修改主机名

    [root@centos7 ~]# hostnamectl set-hostname node03
    [root@centos7 ~]# cat /etc/hostname 
    node03
    

    重启服务器

    3.修改ip地址(静态)

    [root@node03 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
    
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static   ##改成static 静态
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=2d7cb38b-cd33-4a42-b309-13f4fbe13650
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.137.224 ##ip地址
    NETMASK=255.255.255.0
    GATEWAY=192.168.137.2
    DNS1=192.168.137.2
    ZONE=public
    

    重启服务器

    4.关闭防火墙

    [root@node03 ~]# systemctl stop firewalld   ##停止firewalld服务
    [root@node03 ~]# systemctl disable firewalld  ##设置开机禁用防火墙
    [root@node03 ~]# iptables -F && iptables -F -t nat  ##清除所有规则
    [root@node03 ~]# iptables -X && iptables -X -t nat  ##清除用户自定义规则
    [root@node03 ~]# iptables -P FORWARD ACCEPT  ##刷新Forward跟accept规则
    

    5.swap 分区

    如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为 false 来忽略 swap on),故需要在每台机器上关闭 swap 分区。同时注释 /etc/fstab 中相应的条目,防止开机自动挂载 swap 分区:

    [root@node03 ~]# swapoff -a  ##禁用 /proc/swaps 中的所有交换区
    [root@node03 ~]# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab  ##注释掉/etc/fstab中所有 swap 的行
    

    6.关闭 SELinux

    关闭 SELinux,否则后续 K8S 挂载目录时可能报错 Permission denied:

    [root@node03 ~]# setenforce 0  ##临时关闭
    [root@node03 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config  ##修改SELINUX=disabled 永久关闭
    

    7.加载内核模块

    [root@node03 ~]# modprobe ip_vs_rr
    [root@node03 ~]# modprobe br_netfilter
    

    8.优化内核参数

    1.创建参数文件

    [root@node03 ~]# mkdir -p /opt/k8s/work/ ##建一个文件夹用来存放k8s相关的文件
    [root@node03 ~]# cat > /opt/k8s/work/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    net.ipv4.tcp_tw_recycle=0  ##必须关闭 tcp_tw_recycle,否则和 NAT 冲突,会导致服务不通;
    vm.swappiness=0  ##禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
    vm.overcommit_memory=1  ##不检查物理内存是否够用
    vm.panic_on_oom=0  ##开启 OOM
    fs.inotify.max_user_instances=8192
    fs.inotify.max_user_watches=1048576
    fs.file-max=52706963
    fs.nr_open=52706963
    net.ipv6.conf.all.disable_ipv6=1  ##关闭 IPV6,防止触发 docker BUG;
    net.netfilter.nf_conntrack_max=2310720
    EOF
    

    2.移动参数文件

    [root@node03 ~]# cp /opt/k8s/work/kubernetes.conf  /etc/sysctl.d/kubernetes.conf
    

    3.读取配置文件,使参数生效

    [root@node03 ~]# sysctl -p /etc/sysctl.d/kubernetes.conf
    

    9.设置系统时区

    [root@node03 ~]# timedatectl set-timezone Asia/Shanghai  ##调整系统 TimeZone
    [root@node03 ~]# timedatectl set-local-rtc 0  ##将当前的 UTC 时间写入硬件时钟
    [root@node03 ~]# systemctl restart rsyslog && systemctl restart crond  ##重启依赖于系统时间的服务
    

    10.关闭无关的服务

    [root@node03 ~]# systemctl stop postfix && systemctl disable postfix
    

    11.设置 rsyslogd 和 systemd journald

    systemd 的 journald 是 Centos 7 默认的日志记录工具,它记录了所有系统、内核、Service Unit 的日志。
    相比 systemd,journald 记录的日志有如下优势:

    1. 可以记录到内存或文件系统;(默认记录到内存,对应的位置为 /run/log/jounal);
    2. 可以限制占用的磁盘空间、保证磁盘剩余空间;
    3. 可以限制日志文件大小、保存的时间;
      journald 默认将日志转发给 rsyslog,这会导致日志写了多份,/var/log/messages 中包含了太多无关日志,不方便后续查看,同时也影响系统性能。
    [root@node03 ~]# mkdir /var/log/journal  ##持久化保存日志的目录
    [root@node03 ~]# mkdir /etc/systemd/journald.conf.d
    [root@node03 ~]# cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
    [Journal]
    # 持久化保存到磁盘
    Storage=persistent
    
    # 压缩历史日志
    Compress=yes
    
    SyncIntervalSec=5m
    RateLimitInterval=30s
    RateLimitBurst=1000
    
    # 最大占用空间 10G
    SystemMaxUse=10G
    
    # 单日志文件最大 200M
    SystemMaxFileSize=200M
    
    # 日志保存时间 2 周
    MaxRetentionSec=2week
    
    # 不将日志转发到 syslog
    ForwardToSyslog=no
    EOF
    [root@node03 ~]# systemctl restart systemd-journald  ##重启服务
    

    12.创建相关目录

    [root@node03 ~]# mkdir -p  /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert
    

    13.升级内核

    CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,例如:

    1. 高版本的 docker(1.13 以后) 启用了 3.10 kernel 实验支持的 kernel memory account 功能(无法关闭),当节点压力大如频繁启动和停止容器时会导致 cgroup memory leak;
    2. 网络设备引用计数泄漏,会导致类似于报错:“kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1”;
      升级内核到 4.4.X 以上解决以上问题:
    [root@node03 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm  ##安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
    [root@node03 ~]# yum --enablerepo=elrepo-kernel install -y kernel-lt
    [root@node03 ~]# grub2-set-default 0  ##设置开机从新内核启动
    

    重启服务器并查看内核版本

    [root@node03 ~]# uname -a   ##第三列显示的是内核版本。如果是4.4.X就说明升级成功
    Linux node03 4.4.196-1.el7.elrepo.x86_64 #1 SMP Mon Oct 7 16:17:40 EDT 2019 x86_64 x86_64 x86_64 GNU/Linux
    

    14.关闭 NUMA

    [root@node03 ~]# vim /etc/default/grub ##在 GRUB_CMDLINE_LINUX 一行添加 `numa=off` 参数,如下所示:
    

    在这里插入图片描述
    重新生成 grub2 配置文件:

    [root@node03 ~]# cp /boot/grub2/grub.cfg{,.bak}
    [root@node03 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    

    输出:
    在这里插入图片描述

    15.修改hosts文件

    需要在所有k8s节点中修改

    [root@node03 ~]# vim /etc/hosts
    

    在这里插入图片描述

    16.无密码 ssh 登录其它节点

    这个一般只需要在集群的 master节点上执行就可以了,并且由于之前master上已经生成了证书,所以可以直接执行下面的命令,过程中需要输入node03节点的root账号密码

    [root@master ~]# ssh-copy-id root@node03
    

    在这里插入图片描述

    17.创建docker账号

    [root@node03 ~]# useradd -m docker
    

    18.更新 PATH 变量

    [root@node03 ~]# echo 'PATH=/opt/k8s/bin:$PATH' >>/root/.bashrc
    [root@node03 ~]# source /root/.bashrc
    

    二、master节点分发相关文件

    以下操作如果没有特殊说明,则都在master节点上进行

    1. 分发ca证书文件

    [root@master ~]# scp /etc/kubernetes/cert/ca*.pem /etc/kubernetes/cert/ca-config.json root@node03:/etc/kubernetes/cert
    

    2. 分发kubectl二进制文件

    [root@master ~]# scp /opt/k8s/bin/kubectl root@node03:/opt/k8s/bin/
    [root@master ~]# ssh root@node03 "chmod +x /opt/k8s/bin/*"
    

    3. 分发 kubeconfig 文件

    [root@master ~]# ssh root@node03 "mkdir -p ~/.kube"
    [root@master ~]# scp ~/.kube/config root@node03:~/.kube/config
    

    4. 分发 flanneld 二进制文件

    [root@master ~]# scp /opt/k8s/bin/{flanneld,mk-docker-opts.sh} root@node03:/opt/k8s/bin/ 
    [root@master ~]# ssh root@node03 "chmod +x /opt/k8s/bin/*"
    

    5.分发flanneld证书跟私钥

    [root@master ~]# ssh root@node03 "mkdir -p /etc/flanneld/cert"
    [root@master ~]# scp /etc/flanneld/cert/flanneld*.pem root@node03:/etc/flanneld/cert
    

    6. 分发 flanneld systemd unit 文件

    直接从master节点进行分发即可,不用修改任何东西

    [root@master ~]# scp /etc/systemd/system/flanneld.service root@node03:/etc/systemd/system/
    

    7. 启动 flanneld 服务

    [root@master ~]# ssh root@node03 "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"
    

    如果启动成功,则到node03节点上检查启动结果。

    [root@node03 ~]# ssh root@node03 "systemctl status flanneld"
    

    一开始我的flanneld服务是显示 active的,但是仔细看会发现报错了。而且ping其他集群节点的ip也ping不通

    在这里插入图片描述
    node03节点进行ping集群ip 无法ping通
    在这里插入图片描述
    然后我将node03机器重启,重启后再查看状态就ok了。也可以ping通其他机子。
    在这里插入图片描述

    8.检查分配给各 flanneld 的 Pod 网段信息

    [root@master ~]# etcdctl \
      --endpoints=https://192.168.137.221:2379,https://192.168.137.222:2379,https://192.168.137.223:2379 \
      --ca-file=/etc/kubernetes/cert/ca.pem \
      --cert-file=/etc/flanneld/cert/flanneld.pem \
      --key-file=/etc/flanneld/cert/flanneld-key.pem \
      ls /kubernetes/network/subnets
    

    在这里插入图片描述
    如果可以看到刚刚从node03节点上看到的 172.30.48.0网段的信息。并且各个节点之间能够互相ping通就是成功的。

    三、node03节点安装docker

    以下操作如果没有特殊说明,则都在master节点上进行

    1.分发master节点的docker相关文件

    [root@master ~]# scp /opt/k8s/work/docker/* root@node03:/opt/k8s/bin/
    [root@master ~]# scp /etc/systemd/system/docker.service root@node03:/etc/systemd/system/
    [root@master ~]# ssh root@node03 "mkdir -p  /etc/docker/ /data/k8s/docker/{data,exec}"
    [root@master ~]# scp /etc/docker/daemon.json root@node03:/etc/docker/daemon.json
    

    2.启动 docker 服务

    [root@master ~]# ssh root@node03 "systemctl daemon-reload && systemctl enable docker && systemctl restart docker"
    

    3.检查服务运行状态

    直接到node03节点上进行检查

    [root@node03 ~]# systemctl status docker
    

    Active: active (running) 并且日志中没有错误则启动成功

    可以在node03节点上查看docker信息

    [root@node03 ~]# docker info
    

    在这里插入图片描述

    四、kube-apiserver 高可用之 nginx 代理

    以下操作如果没有特殊说明,则都在master节点上进行

    1.拷贝二进制程序:

    [root@master ~]# ssh root@node03 "mkdir -p /opt/k8s/kube-nginx/{conf,logs,sbin}"
    [root@master ~]# scp /opt/k8s/work/nginx-1.15.3/nginx-prefix/sbin/nginx  root@node03:/opt/k8s/kube-nginx/sbin/kube-nginx
    [root@master ~]# ssh root@node03 "chmod a+x /opt/k8s/kube-nginx/sbin/*"
    

    2.拷贝 nginx配置文件:

    [root@master ~]# scp /opt/k8s/kube-nginx/conf/kube-nginx.conf root@node03:/opt/k8s/kube-nginx/conf/kube-nginx.conf
    

    3.拷贝nginx systemd unit 文件:

    [root@master ~]# scp /etc/systemd/system/kube-nginx.service root@node03:/etc/systemd/system/
    

    4.启动 kube-nginx 服务:

    [root@master ~]# ssh root@node03 "systemctl daemon-reload && systemctl enable kube-nginx && systemctl restart kube-nginx"
    

    5.检查 kube-nginx 服务运行状态

    [root@master ~]# ssh root@node03 "systemctl status kube-nginx"
    

    五、node03节点部署 kubelet 组件

    以下操作如果没有特殊说明,则都在master节点上进行

    1.拷贝二进制文件到node03节点

    [root@master ~]# scp /opt/k8s/bin/{kube-proxy,kubectl,kubelet} root@node03:/opt/k8s/bin/
    

    2.创建 kubelet bootstrap kubeconfig 文件

    # 创建 token
    [root@master ~]# export BOOTSTRAP_TOKEN=$(kubeadm token create \
     --description kubelet-bootstrap-token \
     --groups system:bootstrappers:node03 \
     --kubeconfig ~/.kube/config)
    
    # 设置集群参数
    [root@master ~]# kubectl config set-cluster kubernetes \
     --certificate-authority=/etc/kubernetes/cert/ca.pem \
     --embed-certs=true \
     --server=https://127.0.0.1:8443 \
     --kubeconfig=kubelet-bootstrap-node03.kubeconfig
    
    # 设置客户端认证参数,注意--token的值是第一步中定义的BOOTSTRAP_TOKEN的值。
    [root@master ~]# kubectl config set-credentials kubelet-bootstrap \
     --token=${BOOTSTRAP_TOKEN} \
     --kubeconfig=kubelet-bootstrap-node03.kubeconfig
    
    # 设置上下文参数
    [root@master ~]# kubectl config set-context default \
     --cluster=kubernetes \
     --user=kubelet-bootstrap \
     --kubeconfig=kubelet-bootstrap-node03.kubeconfig
    
    # 设置默认上下文
    [root@master ~]# kubectl config use-context default --kubeconfig=kubelet-bootstrap-node03.kubeconfig
    

    在当前目录下会生成一个kubelet-bootstrap-node03.kubeconfig文件,如下。等下需要分发到node03节点
    在这里插入图片描述

    3.查看 kubeadm 为node03节点创建的 token

    [root@master ~]# kubeadm token list --kubeconfig ~/.kube/config
    

    在这里插入图片描述

    1. token 有效期为 1 天,超期后将不能再被用来 boostrap kubelet,且会被 kube-controller-manager 的 tokencleaner 清理;
    2. kube-apiserver 接收 kubelet 的 bootstrap token 后,将请求的 user 设置为 system:bootstrap:,group 设置为 system:bootstrappers,后续将为这个 group 设置 ClusterRoleBinding;

    4.确认token

    vim kubelet-bootstrap-node03.kubeconfig
    

    查看文件中token的值是否跟刚刚kubeadm token list --kubeconfig ~/.kube/config查询出来的token一致(我这里不一致的原因是因为两张截图不是同一天截的,第一天的token过期了)
    在这里插入图片描述

    5.查看 token 关联的 Secret

    [root@master ~]# kubectl get secrets  -n kube-system|grep bootstrap-token
    

    在这里插入图片描述

    6.分发 bootstrap-kubeconfig 文件到node03节点

    在kubelet-bootstrap-node03.kubeconfig文件所在目录下执行。

    [root@master ~]# scp kubelet-bootstrap-node03.kubeconfig root@node03:/etc/kubernetes/kubelet-bootstrap.kubeconfig
    

    7.分发 kubelet 参数配置文件

    复制一份kubelet-config.yaml到/opt/k8s/work/下,命名为kubelet-config-node03.yaml,待会儿需要修改几个字段

    [root@master ~]# cp /etc/kubernetes/kubelet-config.yaml /opt/k8s/work/kubelet-config-node03.yaml
    

    vim /opt/k8s/work/kubelet-config.yaml.cp文件进行修改,一共需要改两个地方。改成对应的node03的ip地址即可。

    [root@master ~]# vim /opt/k8s/work/kubelet-config-node03.yaml
    

    需要修改的地方如下:
    在这里插入图片描述
    复制/opt/k8s/work/kubelet-config-node03.yaml 到node03节点并重命名为kubelet-config.yaml

    [root@master ~]# scp /opt/k8s/work/kubelet-config-node03.yaml root@node03:/etc/kubernetes/kubelet-config.yaml
    

    8.分发 kubelet systemd unit 文件

    复制一份kubelet.service到/opt/k8s/work/下,命名为kubelet-node03.service,待会儿需要修改几个字段

    [root@master ~]# cp /etc/systemd/system/kubelet.service /opt/k8s/work/kubelet-node03.service
    

    vim /opt/k8s/work/kubelet-node03.service 进行修改,只需要改一个地方,改成node03节点的hostname即可
    在这里插入图片描述
    复制/opt/k8s/work/kubelet-node03.service 到node03节点并重命名为kubelet.service

    [root@master ~]# scp /opt/k8s/work/kubelet-node03.service root@node03:/etc/systemd/system/kubelet.service
    

    9.启动 kubelet 服务

    该步骤到node03节点下执行

    [root@node03 ~]# mkdir -p /data/k8s/k8s/kubelet/kubelet-plugins/volume/exec/
    [root@node03 ~]# /usr/sbin/swapoff -a
    [root@node03 ~]# systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet
    

    启动服务之前需要创建工作目录,并且一定要关闭swap(虽然前面已经设置过)。

    10.查看 kubelet 状态

    该步骤到node03节点下执行

    [root@node03 ~]# systemctl status kubelet
    

    在这里插入图片描述
    发现是启动成功了的,并且已经开始在下载各种镜像了。这里应该就说明node03节点加入集群成功了。

    11.查看节点状态

    master节点输入kubectl get node查看,确认node03节点已经加入成功,并且状态是Ready的。
    在这里插入图片描述

    12.手动 approve server cert csr

    基于安全性考虑,CSR approving controllers 不会自动 approve kubelet server 证书签名请求,需要手动 approve:
    如果不approve会出现如下错误:

    10月 18 14:51:43 node04 kubelet[24450]: E1018 14:51:43.571211   24450 certificate_manager.go:396] Certificate request was not signed: timed out waiting for the condition
    

    在这里插入图片描述
    先查看csr

    [root@master ~]# kubectl get csr
    

    在这里插入图片描述
    手动approve所有Pending的 csr

    [root@master ~]# kubectl certificate approve csr-hhwp2 csr-x58zw
    

    六、node03节点部署 kube-proxy 组件

    以下操作如果没有特殊说明,则都在master节点上进行

    kube-proxy 二进制文件已经在上一环节全部分发完成了,所以这里不再拷贝。

    1.分发 kubeconfig 文件

    [root@master ~]# scp /etc/kubernetes/kube-proxy.kubeconfig root@node03:/etc/kubernetes/
    

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

    拷贝kube-proxy-config.yaml并修改相关参数,一共要修改四个地方,见下图。

    [root@master ~]# cp /etc/kubernetes/kube-proxy-config.yaml /opt/k8s/work/kube-proxy-config-node03.yaml.template
    [root@master ~]# vim /opt/k8s/work/kube-proxy-config-node03.yaml.template
    

    在这里插入图片描述
    分发kube-proxy配置文件:

    [root@master ~]# scp /opt/k8s/work/kube-proxy-config-node03.yaml.template root@node03:/etc/kubernetes/kube-proxy-config.yaml
    

    3.分发 kube-proxy systemd unit 文件

    [root@master ~]# scp /etc/systemd/system/kube-proxy.service root@node03:/etc/systemd/system/
    

    4.启动 kube-proxy 服务

    [root@master ~]# ssh root@node03 "mkdir -p /data/k8s/k8s/kube-proxy"
    [root@master ~]# ssh root@node03 "modprobe ip_vs_rr"
    [root@master ~]# ssh root@node03 "systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy"
    

    5.检查启动结果

    [root@master ~]# ssh root@node03 "systemctl status kube-proxy"
    

    查看日志中是否有错误信息,没有的话说明启动成功。

    至此,k8s二进制集群中添加node节点就完成了。鼓掌,鸣炮!

    参考文档:https://k8s-install.opsnull.com

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,069
精华内容 3,627
关键字:

k8s二进制集群安装