前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >7. 复制k8s Node节点 并重新初始化k8s-nodes2节点 (k8s连载)

7. 复制k8s Node节点 并重新初始化k8s-nodes2节点 (k8s连载)

作者头像
用户7798898
发布2020-09-27 16:47:26
1.7K0
发布2020-09-27 16:47:26
举报

为什么会有这样一个操作呢? (备注: 避免采坑的有效方法)

  1. 我本人不是运维, 本身不精通运维知识. 在安装k8s集群的过程中,非常痛苦, 出现各种问题, 也花费了大量的时间. 结果, 突然系统崩溃了
  2. 我也快崩溃了
  3. 所以,后来我聪明了, 在某个阶段, 安装好以后, 我就进行备份, 这样出了问题就可以还原了, 避免每次从头开始

比如:


今天要记录的是如何复制node节点

现在有1个node了, 我需要在增加一个node

增加node, 要求hostname不能相同. ip不能相同

方案一:

1. 选中1. 和k8s-master......然后点击复制, 复制成功后, 如下图:

2. 启动服务, 修改hostname

查看主机名

代码语言:javascript
复制
hostname

修改主机名

代码语言:javascript
复制
vi /etc/hostname

然后重启服务

3. 修改固定ip地址

查询当前ip

代码语言:javascript
复制
ip a

发现当前ip和k8s-nodes节点一样, 因为设置了固定ip

修改固定ip

代码语言:javascript
复制
vi /etc/network/interface

修改静态ip为105

如果没有设置过静态ip, 可以参考我总结的这篇文章: https://cloud.tencent.com/developer/article/1706819

重启网卡:

代码语言:javascript
复制
sudo service networking restart

4. 重新配置ssh免密登录

ssh登录, 报错

解决方法参考: https://blog.csdn.net/wd2014610/article/details/79945424

删除knows_hosts文件中带有192.168.1.105的秘钥

远程登录, 查看hostanme和ip, 都是对的了

  • 解决方法,看错误日志中有一句

  Add correct host key in /Users/***/.ssh/known_hosts to get rid of this message.

  • 以编辑器的方式进入这个文件

  vi /Users/wangdong/.ssh/known_hosts

  • 将红线框部分删除掉

5. 添加k8s节点

在master节点上查看节点状态

代码语言:javascript
复制
kubectl get node 

只有两个节点, 刚刚copy的节点没有添加上.

在k8s-nodes2上执行kubeadm reset 可以断开node, 然后重新join

代码语言:javascript
复制
kubeadm reset 

然后重新join, join的内容放在https://www.cnblogs.com/ITPower/p/12791615.html里面了

代码语言:javascript
复制
kubeadm join 192.168.1.106:6443 --token vezzap.0w213k8ms11a0v51 \
    --discovery-token-ca-cert-hash sha256:4fcac7c487209d7c354351ba6f93110253df4d0440fc68cb23fc4ac0baed4e0c

ERROR1: 初始化报错

没有关闭虚拟内存

代码语言:javascript
复制
关闭虚拟内存, 并永久关闭
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

ERROR2: 还是有错误

解决方案参考: https://www.jianshu.com/p/f53650a85131

看这个告警WARNING IsDockerSystemdCheck

修改或创建/etc/docker/daemon.json,加入下述内容:

代码语言:javascript
复制
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

我的文件修改完以后

代码语言:javascript
复制
{
  "registry-mirrors": ["https://w52p8twk.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

重启docker

代码语言:javascript
复制
systemctl restart docker

查看修改后的状态

代码语言:javascript
复制
docker info | grep Cgroup

ERROR3: token过期

上面三个是warning, 最后一个是error. 什么意思呢? 应该是master生成的节点过期了. 我们需要重新生成

参考文章: https://www.cnblogs.com/tchua/p/10897980.html

1)关于token失效

  master集群初始化后,token24小时后就会失效,如果到了token失效时间,node再加入集群,需要重新生产token:

代码语言:javascript
复制
## 查看token状态
### TTL值 就是token生于时间
[root@k8s-master ~]# kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
5ti5kd.o32bm9lofv6zej94 21h 2019-05-22T11:16:31+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token


## 重新生产token
[root@k8s-master ~]# kubeadm token create
  W0511 05:25:48.747429 31569 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
  lb2hib.5kf3zjrzkp8e632w

详情请参考我的另一篇文章: https://cloud.tencent.com/developer/article/1706826

ERROR4 :

代码语言:javascript
复制
error execution phase preflight: couldn't validate the identity of the API Server: 
Get https://10.10.0.10:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s: net/http: 
request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

注意三个地方:

  1. join的ip地址对不对
  2. token设置的对不对
  3. hash值设置的对不对.

都对了, 就不会出现这个问题了

初始化成功的信息

六. 查看k8s节点

1. 接下来,在master上查看

代码语言:javascript
复制
kubectl get nodes

从时间上可以看出, 最后一个是刚刚添加的.

状态都NotReady

2. 查看pod的状态

代码语言:javascript
复制
kubectl get pods -n kube-system  
或
kubectl get pod --all-namespaces -o wide

其中有两个是非Running状态

3. 查看pod的状态

代码语言:javascript
复制
kubectl describe pod kube-flannel-ds-amd64-zfkgl -n kube-system

少了pause:3.2镜像

4. 下载pause:3.2镜像

代码语言:javascript
复制
docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2

5. 修改下载下来的镜像的tag为k8s.gcr.io的

代码语言:javascript
复制
docker tag  registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2 k8s.gcr.io/pause:3.2

6. 删除对应的阿里云镜像

代码语言:javascript
复制
docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2

docker images可以查看镜像

7. 删除pod节点

代码语言:javascript
复制
kubectl delete pod kube-flannel-ds-amd64-zfkgl -n kube-system

这里的pod节点删除后, 会自动重新加载.

8. 其他节点也有问题, 参考上面7点, 直到所有节点都Running

pod都是running, 但是有一个节点是NotReady, 我们查看日志

代码语言:javascript
复制
journalctl -f -u kubelet.service

查看有问题的节点的pod状态

代码语言:javascript
复制
kubectl get pods -n kube-system -owide | grep ubuntu-nodes

都是running, 但为什么nodes节点是notReady呢? 我将node关机了, 再重启, 就好了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么会有这样一个操作呢? (备注: 避免采坑的有效方法)
  • 今天要记录的是如何复制node节点
  • 方案一:
    • 1. 选中1. 和k8s-master......然后点击复制, 复制成功后, 如下图:
      • 2. 启动服务, 修改hostname
        • 3. 修改固定ip地址
          • 4. 重新配置ssh免密登录
            • 5. 添加k8s节点
              • ERROR1: 初始化报错
                • ERROR2: 还是有错误
                  • ERROR3: token过期
                    • ERROR4 :
                      • 1. 接下来,在master上查看
                      • 2. 查看pod的状态
                      • 3. 查看pod的状态
                      • 4. 下载pause:3.2镜像
                      • 5. 修改下载下来的镜像的tag为k8s.gcr.io的
                      • 6. 删除对应的阿里云镜像
                      • 7. 删除pod节点
                      • 8. 其他节点也有问题, 参考上面7点, 直到所有节点都Running
                  • 六. 查看k8s节点
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档