k8s master查看不到worker节点

  k8s master查看不到worker节点
  
  一、 问题
  
  master节点已经安装好,但是worker加入master显示成功,但是在master节点上使用kubectl get nodes命令查看不到,且master节点时而ready时而NotReady,worker重置kubeadm reset后,master节点恢复正常。
  
  二 、 解决方法
  
  通过设置hosts和hostname解决
  
  2.1 设置hosts
  
  $ cat /etc/hosts
  
  192.168.25.131 master01
  
  192.168.25.132 node01
  
  192.168.25.133 node02
  
  2.2 设置hostname
  
  $ hostnamectl set-hostname master01 | node01 | node02
  
  2.3 可能存在的问题
  
  当master节点已经安装好了之后,修改完host
  
  #查看pods,coredns一直处于ContainerCreating状态
  
  $ kubectl get pod --all-namespaces
  
  corednsxxx ContainerCreating
  
  corednsxxx ContainerCreating
  
  使用其他Blog上的方案
  
  $ rm -rf /var/lib/cni/flannel/* && rm -rf /var/lib/cni/networks/cbr0/* && ip link delete cni0
  
  $ rm -rf /var/lib/cni/networks/cni0/*
  
  $ docker rmi quay.io/coreos/flannel:v0.10.0-amd64
  
  $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.
  
  执行完后查看,coredns一直处于CrashLoopBackOff状态
  
  hide:function(){
  
  for( var node, i=0; node = this.getChild(i); i++ ){
  
  node.hide(www.xinchenptgw.cn);
  
  }
  
  this.element.style.border = ‘none‘;
  
  },
  
  getElement:function(){
  
  return this.element;
  
  function ImageItem(www.shengsyLpt.cn src ){
  
  this.element = document.createElement("img");
  
  this.element.src = src;
  
  this.element.className = "img-item";
  
  ImageItem.prototype = {
  
  constructor:ImageItem,
  
  add:function( child ){
  
  console.log("这是子对象了,没有添加功能");
  
  },
  
  remove:function(www.jintianxuesha.com child ){
  
  console.log("这是子对象了,没有删除功能");
  
  },
  
  getChild:function( i ){
  
  console.log("这是子对象了,没有获取子对象功能");
  
  },
  
  show:function(www.tyyleapp.com){
  
  this.element.style.border = ‘solid 2px black‘;
  
  },
  
  hide:function(){
  
  this.element.style.border = ‘none‘;
  
  },
  
  getElement:function(){
  
  return this.element;
  
  var box = new ImagesStore("box");
  
  var xbox = new ImagesStore("xbox");
  
  var img1 = new ImageItem("https://xingtuylgw.com /img/bd_logo1.png")
  
  var img2 = new ImageItem("https://www.yuntianyul.com /img/bd_logo1.png")
  
  xbox.add(img1)
  
  xbox.add(img2)
  
  box.add(xbox)
  
  // box.remove(img1)
  
  // img1.show()
  
  box.show()
  
  // img1.add()
  
  使用组合模式组织起来的对象具有出色的层次结构,每当对顶层组合对象执行一个操作的时候,实际上是在对整个结构进行深度优先的节点搜索。但是这些优点都是用操作的代价换取的,比如每次顶级执行一次show方法,实际的操作就是整个树形结构的节点都会被遍历一次。但是组合对象的每个对象之间的耦合非常松散,可以简单的操作处理复杂的结果。
  
  简单的说,组合模式是讲一批子对象组织为树形结构,一条顶层的命令会在操作树中所有的对象。提高了代码的模块化程度,对于动态的HTML界面具有很强的适用性
  
  五、观察者模式
  
  1、观察者模式又叫发布订阅者模式:
  
  (1)发布者:主题对象,一般只有一个。
  
  (2)接收者:订阅者,多个,随时添加和删除。
  
  (3)广播通信,一个对象发布信息,多个对象接收信息,并做出对应处理。
  
  2、观察者模式的好处:
  
  (1)支持简单的广播通信,自动通知所有已经订阅过的对象。
  
  (2)页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。
  
  (3)目标对象与观察者之间的抽象耦合关系能够单独扩展以及重用。
  
  观察者模式-案例-看孩子还是打麻将
  
  function child(n){
  
  this.name = n;
  
  this.type = function(){
  
  return Math.random()>0.5? 0 : 1;
  
  function mather(n,c){
  
  this.name = n;
  
  this.child = c;
  
  this.listen = function(t){
  
  if(t==0){
  
  console.log(this.child.name + "哭了,"+this.name+"看孩子")
  
  }else{
  
  console.log(this.child.name + "睡了,"+this.name+"打麻将")
 
  function father(n,c){
  
  this.name = n;
  
  this.child = c;
  
  this.listen = function(t){
  
  if(t==0){
  
  console.log(this.child.name + "哭了,"+this.name+"看孩子")
  
  }else{
  
  console.log(this.child.name + "睡了,"+this.name+"打麻将")
  
  }
  
  }
  
  }
  
  var c = new child("大宝");
  
  var t = c.type();
  
  var m = new mather(‘大宝妈‘,c);
  
  m.listen(t);
  
  var f = new father(‘大宝爸‘,c);
  
  f.listen(t);
  
  六、代理模式
  
  代理模式的应用场景:当我们需要代理一些别人的封装好的功能或封装好的组件,像另外一个封装好的功能或组件发送一些数据的时候,这时候我们没法从这两个功能之间去拿数据,这时候我们就可以写一个中间层或着代理,将这个数据暴露出来,我们就可以再次使用或者多次使用,甚至对这些数据进行修改。
  
  用一句话总结代理模式:为其他对象提供代理,以控制这个对象的访问;
  
  举个简单的例子:
  
  有一个小伙子想要送花给小姑娘,但是不好意思送,于是找到了快递小哥,快递小哥帮忙送花;在这里快递小哥就是代理!我们就像是那个快递小哥,等于到程序猿身上要做的就是截获数据。
  
  function girl(name){
  
  this.name = name;
  
  }
  
  function boy(girl){
  
  this.girl = girl;
  
  this.sendGift = function(gift){
  
  alert("你好,漂亮的"+this.girl.name+",这是我送你的:"+gift);
  
  }
  
  }
  
  function porxyLitterBrother(girl){
  
  this.girl = girl;
  
  this.send = function(gift){
  
  this.g = gift;
  
  gift = "一个拥抱";
  
  var b = new boy(girl);
  
  b.sendGift(gift);
  
  }
  
  this.init = function(){
  
  console.log(this.g)
  
  }
  
  }
  
  var g = new girl("翠花");
  
  var p = new porxyLitterBrother(g);
  
  p.send("钻戒")
  
  p.init()
  
  七、适配器模式
  
  适配器模式就是将原本不具有某些功能的对象,在使用这些功能时,不出问题,并让某些不具有特征的属性,变得特征
  
  demo:
  
  电子工厂:手机,平板
  
  手机:打电话,玩游戏
  
  平板:玩游戏
  
  测试模块只有一个:想能测平板又能测手机,还正确测试,不出问题
  
  // 应用场景
  
  // 让某个不具有明显特征的功能,变得有特征
  
  function phone(){
  
  this.name = "phone";
  
  this.call = function(){
  
  console.log(this.name + "可以打电话");
  
  };
  
  this.game = function(){
  
  console.log(this.name + "可以打游戏");
  
  };
  
  }
  
  function pad(){
  
  this.name = "pad";
  
  this.game = function(){
  
  console.log(this.name + "可以打游戏")
  
  }
  
  }
  
  function text(obj){
  
  if(obj.call){
  
  obj.call();
  
  }else{
  
  console.log(obj.name+"没有打电话的功能");
  
  };
  
  if(obj.game){
  
  obj.game();
  
  }else{
  
  consloe.log(obj.name+"没有打游戏的功能");
  
  }
  
  }
  
  var p1 = new phone();
  
  text(p1);
  
  var p2 = new pad();
  
  text(p2);
  
  //适配器的意义,多数应用在系统接口使用,也就是别人提供了一个功能,但要求传入一个A类型的参数
  
  //而我们手里的数据是B类型的,如果我们想使用这个功能。那么有两种解决办法:
  
  //第一,把自己的原代码进行修改,让B类型改为A类型,这是非常蠢的做法。
  
  //第二,我们把B类型的数据进行一个包装,让它看起来符合类型A,这个包装函数,就是适配器。
  
  八、抽象工厂模式
  
  在工厂模式中,将多个实例的相同属性或方法,再次抽象成一个公共对象,从公共对象上,再次创建出具体的实例。
  
  demo:
  
  造车厂:制造汽车
  
  汽车需要车架子:轮子,引擎。
  
  我们可以将相同的部分放一起,然后通过添加其他不同的零件,生产不行型号的车。
  
  var f = (function (){
  
  //抽象工厂模式主要就是这个公共对象,模具对象
  
  function car(wheel,engine){ //内部配置函数,可以提供配置功能。
  
  this.wheel = wheel;
  
  this.engine = engine;
  
  }
  
  return function(wheel , engine){ // 构造器, 负责创建对象。
  
  return new car(wheel,engine); // 这是对外提供的接口,负责和外部需求连接。
  
  }
  
  })();
  
  var car1 = f("15","V8");
  
  var car2 = f("13","V10");
  
  //每次执行都会有这个公共对象,执行这个公共对象,获得一个新的对象
  
  console.log(car1);//一个新的car对象
  
  console.log(car2);//一个新的car对象
  
  console.log(car1 == car2);//false<br data-filtered="filtered">  //这种模式,就是所谓的抽象工厂模式。
  
  九、策略模式
  
  策略:计划,规划,预制要做的事情,不同的情况定制不同的计划
  
  function fn(n){
  
  if(n < 10 || n.length < 1){
  
  return "0"+n
  
  }else{
  
  return n;
  
  }
  
  }
  
  var num = fn(4);
  
  console.log(num)//04
  
  总结:这就是我们平时常用的九种设计模式,每种设计模式其实都是见名识义,很多种设计模式我们也只会在写一些大型的项目的时候我们才会使用,每一种设计模式我们都需要根据当前的实际需求,来判断我们该使用哪种设计模式,使我们的代码解构更强。

原文地址:https://www.cnblogs.com/qwangxiao/p/11565575.html

时间: 2024-10-09 20:33:50

k8s master查看不到worker节点的相关文章

使用kubeadm部署k8s集群09-配置worker节点

使用kubeadm部署k8s集群09-配置worker节点 2018/1/4 配置 worker 节点 初始化 加入集群 切换 worker 节点连接到 apiserver 的 LB 入口 调整集群中节点角色和调度策略 初始化 /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 k8s worker @envDev 10.10.9.74 tvm-0310.10.9.75 t

如何做k8s worker节点资源预留?

资源预留必要性 以常见的kubeadm安装的k8s集群来说,默认情况下kubelet没有配置kube-reserverd和system-reserverd资源预留.worker node上的pod负载,理论上可以使用该节点服务器上的所有cpu和内存资源.比如某个deployment controller管理的pod存在bug,运行时无法正常释放内存,那么该worker node上的kubelet进程最终会抢占不到足够的内存,无法向kube-apiserver同步心跳状态,该worker node

kubernetes(七)二进制安装-worker节点安装

配置kubelet kubelet 运行在每个 worker 节点上,接收 kube-apiserver 发送的请求,管理 Pod 容器,执行交互式命令,如 exec.run.logs 等. kubelet 启动时自动向 kube-apiserver 注册节点信息,内置的 cadvisor 统计和监控节点的资源使用情况. 为确保安全,部署时关闭了 kubelet 的非安全 http 端口,对请求进行认证和授权,拒绝未授权的访问(如 apiserver.heapster 的请求). 创建 kube

蜗龙徒行-Spark学习笔记【三】Spark集群中worker节点扩展实战经验

一.集群原先配置: 从机名sparkMaster,Ubuntu12.04-32 ,用户名Root , 内存4g    (只用于任务调度和分配,不做计算节点) 从机名sparkSlave1,Ubuntu12.04-32 ,用户名Root , 内存4g    (计算节点) 从机名sparkSlave2,Ubuntu12.04-32 ,用户名Root , 内存1.7g (计算节点) 二.扩展原因:计算数据量增大,原先的两个工作节点已不不能满足实时性的需求,由于实验室计算资源有限,故将原先的调度节点也增

ElasticSearch 中 master、data 和 client 节点

在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题. 默认情况下,elasticsearch 集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务.这些功能是由两个属性控制的. 1. node.master 2. node.data 默认情况下这两个属性的值都是true. node.master:这个属性表示节点是否具有成为主节点的资格 注意:此属性的值为 true,并不意味着这个节点就是主节点.因为真正的主节点,是

k8s master init and add node

k8s tutorial series main reference 1. add google apt-key reference kubernetes添加不了google apt-key k8s repository (中科大源) deb http://us.archive.ubuntu.com/ubuntu/ xenial main restricted deb http://us.archive.ubuntu.com/ubuntu/ xenial-updates main restric

任务中如何确定spark分区数、task数目、core个数、worker节点个数、excutor数量

1.任务中如何确定spark RDD分区数.task数目.core个数.worker节点个数.excutor数量 (1)hdfs 上的文件的存储形式是以 Block 的形式存储的,每个 File 文件都包含了很多块,一个Block默认是128M大小.当 spark 从 hdfs 上读取数据的时候,会根据具体数据格式对应的 InputFormat 进行解析,一般是将若干个Block合并成一个输入分片,称为 InputSplit,其中要注意InputSplit不能跨越文件 File. (2)spar

k8s master 节点和 node 节点 启动分析

Master 节点 coredns 2 个 ,对应的pause 容器 2 个flannel 1 个 ,对应的pause 容器 1 个proxy 1 个 ,对应的pause 容器 1 个scheduler 1 个 ,对应的pause 容器 1 个controller 1 个 ,对应的pause 容器 1 个apiserver 1 个 ,对应的pause 容器 1 个etcd 1 个 ,对应的pause 容器 1 个 master 节点 端口监听情况 kubelet TCP:10248kubelet

手动安装K8s第六节:node节点部署-kubelet

部署kubelet1.准备二进制包[[email protected] ~]# cd /usr/local/src/kubernetes/server/bin/ [[email protected] bin]# scp kubelet kube-proxy k8snode1:/opt/kubernetes/bin/ [[email protected] bin]# scp kubelet kube-proxy k8snode2:/opt/kubernetes/bin/ 2.创建角色绑定[[ema