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