技术标签: Kubernetes
由于前一篇 Rancher HA 高可用安装步骤 内容过长,后续相关内容在这里补充。
下面问题标记
[前]
的需要在安装 Rancher HA 前提前考虑。
假设以下服务器使用的 hostname 为
rancher.mybatis.io
在前面写到了最后安装 Rancher 时要设置 hostname,在没有本地 DNS 服务器的情况下,需要修改本地 hosts 来映射域名。
如果只是修改访问 Rancher 的客户端电脑的 hosts 配置,虽然能打开 Rancher 了,但是仍然存在很多问题。
在如下集群界面点击【Launch kubectl】
会弹出如下窗口:
这里可以看到 Closed Code: 1006,在 Devtools 的 Network 可以看到 404 错误:
Request URL: wss://rancher.mybatis.io/v3/clusters/local?shell=true
Request Method: GET
Status Code: 404 Not Found
经过搜索在 https://qiita.com/suzukihi724/items/00b167c6f5f2ddeca718 发现了线索。
直接在集群节点通过 kubectl get pods --all-namespaces
获取 pod 状态:
NAMESPACE NAME READY STATUS RESTARTS AGE
cattle-system cattle-cluster-agent-5d6866db8-69nvc 0/1 CrashLoopBackOff 180 15h
cattle-system cattle-node-agent-4kkm4 0/1 CrashLoopBackOff 180 15h
cattle-system cattle-node-agent-ppwg4 0/1 CrashLoopBackOff 180 15h
cattle-system cattle-node-agent-qxm25 0/1 CrashLoopBackOff 180 15h
可以看到上面的 cattle agent Crash,查看上述有问题的 cluster 日志:
$ kubectl -n cattle-system logs cattle-cluster-agent-5d6866db8-69nvc
INFO: Environment: CATTLE_ADDRESS=10.42.0.6 CATTLE_CA_CHECKSUM=cc83e629bc77fdff27d1f160ab48c40af8e8490e06a291d798039b92a6e5dd2b CATTLE_CLUSTER=true CATTLE_INTERNAL_ADDRESS= CATTLE_K8S_MANAGED=true CATTLE_NODE_NAME=cattle-cluster-agent-5d6866db8-69nvc CATTLE_SERVER=https://rancher.mybatis.io
INFO: Using resolv.conf: nameserver 10.43.0.10 search cattle-system.svc.cluster.local svc.cluster.local cluster.local options ndots:5
ERROR: https://rancher.mybatis.io/ping is not accessible (The requested URL returned error: 404 Not Found)
查看 node 日志:
$ kubectl -n cattle-system logs cattle-node-agent-4kkm4
INFO: Environment: CATTLE_ADDRESS=10.10.1.238 CATTLE_AGENT_CONNECT=true CATTLE_CA_CHECKSUM=cc83e629bc77fdff27d1f160ab48c40af8e8490e06a291d798039b92a6e5dd2b CATTLE_CLUSTER=false CATTLE_INTERNAL_ADDRESS= CATTLE_K8S_MANAGED=true CATTLE_NODE_NAME=10.10.1.238 CATTLE_SERVER=https://rancher.mybatis.io
INFO: Using resolv.conf: nameserver 114.114.114.114 nameserver 8.8.8.8
ERROR: https://rancher.mybatis.io/ping is not accessible (The requested URL returned error: 404 Not Found)
问题很明显,虽然客户端配置了 hosts,但是集群节点并不知道 rancher.mybatis.io
是哪个机器。
/etc/hosts
,先让所有节点都能认识 rancher.mybatis.io
# 配置 cattle-cluster-agent
kubectl -n cattle-system patch deployments cattle-cluster-agent --patch '{
"spec": {
"template": {
"spec": {
"hostAliases": [
{
"hostnames":
[
"rancher.mybatis.io"
],
"ip": "负载均衡IP"
}
]
}
}
}
}'
# 配置 cattle-node-agent
kubectl -n cattle-system patch daemonsets cattle-node-agent --patch '{
"spec": {
"template": {
"spec": {
"hostAliases": [
{
"hostnames":
[
"rancher.mybatis.io"
],
"ip": "负载均衡IP"
}
]
}
}
}
}'
如下图:
有些情况下会看不到这里的版本号,此时就算你点启用,也会100%失败。
主要原因是因为获取不到 rancher 的 system-charts,在【全局】下点击【工具】【商店】,打开下图:
一般情况下是因为访问不了这里的 url 地址导致的(如果你是局域网环境,肯定获取不到,官方文档也有介绍,这里需要修改地址)。
如果是偶然性访问不到,可以在【启用监控】页面多刷新几次,最直接的解决办法就是 clone 官方的仓库,然后配置为自己的地址。
官方仓库地址:https://github.com/rancher/system-charts.git
注意上图【分支】,需要使用 release-v2.2 分支。
改为自己的地址后,可以再试试。
查看 rancher 日志时发现找不到 endpoint cattle-prometheus/prometheus-operated
,此时查看 namespace=cattle-prometheus
的所有资源如下:
endpoints 如下:
经过查找发现有一个节点(局域网)上没有 rancher/coreos-prometheus-operator
镜像,下载该镜像。
然后,禁用监控,再启用监控,然后发现一切都正常了,此时的资源信息如下:
endpoints 如下:
创建集群时,出现下面的错误:
上面错误在内网环境出的,能访问外网的情况下没有出现过
追踪了一串也没解决,连到外网后重新 rke up
就好了。
内网一个两节点的集群,完全启动后发现两个节点内的容器无法互相访问,还有一个无法访问服务配置的 dns,最终也没从网络路由等方面解决的了。
失败半天后,通过配置 rke 的 cluster.yml
配置文件配置网络解决。
配置如下:
nodes:
- address: 10.10.10.226
user: k8s
role: [controlplane,worker,etcd]
- address: 10.10.10.227
user: k8s
role: [worker]
# 这里配置针对内网获取 rancher 相关镜像
private_registries:
- url: 10.10.10.233
user: registry
password: ***
is_default: true
# 这里的配置用于解决网络问题
network:
plugin: flannel
options:
flannel_iface: ens160
flannel_backend_type: vxlan
services:
etcd:
snapshot: true
creation: 6h
retention: 24h
目前仍然不明白原因,但是上面解决问题的地方猜测是 flannel_iface
,由于我自己的机器都是双网卡,因此指定了其中一个。
使用过程中发现文件超过1M就会上传失败(nginx ingress controller 413 request entity too large),经过搜索发现以下解决方案:
https://stackoverflow.com/questions/49918313/413-error-with-kubernetes-and-nginx-ingress-controller
摘抄如下,29
您可以使用注释 nginx.ingress.kubernetes.io/proxy-body-size
在您的 Ingress
对象中设置 max-body-size
选项,而无需更改基础 ConfigMap
。
这是用法示例:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-app
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
在 Rancher 中,在负载均衡找到想要修改的配置项,点击升级进入修改界面,添加如下:
最近一次部署时(20191102),使用的镜像版本:image: rancher/nginx-ingress-controller:nginx-0.25.1-rancher1
。
使用该镜像时,一直无法启动成功,后台报错如下:
I1103 07:13:18.072914 7 status.go:86] new leader elected: nginx-ingress-controller-dqgqh
E1103 07:13:18.114989 7 controller.go:145] Unexpected failure reloading the backend:
-------------------------------------------------------------------------------
Error: exit status 1
nginx: the configuration file /tmp/nginx-cfg716345344 syntax is ok
2019/11/03 07:13:18 [emerg] 46#46: bind() to 0.0.0.0:80 failed (13: Permission denied)
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
nginx: configuration file /tmp/nginx-cfg716345344 test failed
主要就是 80 端口无法绑定,在 linux 中,1024以下端口都需要 root 权限启动才行。
以前用 rancher 都没问题,这次为什么不行了?
按照网上很多接近的问题答案尝试了一些,没有任何作用。
最后把版本切换到了前一个有效的服务版本: rancher/nginx-ingress-controller:0.21.0-rancher3
切换以后就好了!!!
因此原因不确定,但是降低版本能解决。
文章浏览阅读101次。4.class可以有⽆参的构造函数,struct不可以,必须是有参的构造函数,⽽且在有参的构造函数必须初始。2.Struct适⽤于作为经常使⽤的⼀些数据组合成的新类型,表示诸如点、矩形等主要⽤来存储数据的轻量。1.Class⽐较适合⼤的和复杂的数据,表现抽象和多级别的对象层次时。2.class允许继承、被继承,struct不允许,只能继承接⼝。3.Struct有性能优势,Class有⾯向对象的扩展优势。3.class可以初始化变量,struct不可以。1.class是引⽤类型,struct是值类型。
文章浏览阅读586次。想实现的功能是点击顶部按钮之后按关键字进行搜索,已经可以从服务器收到反馈的json信息,但从json信息的解析开始就会闪退,加载listview也不知道行不行public abstract class loadlistview{public ListView plv;public String js;public int listlength;public int listvisit;public..._rton转json为什么会闪退
文章浏览阅读219次。如何使用wordnet词典,得到英文句子的同义句_get_synonyms wordnet
文章浏览阅读521次。系统项目报表导出 导出任务队列表 + 定时扫描 + 多线程_积木报表 多线程
文章浏览阅读1.1k次,点赞9次,收藏9次。使用AJAX技术的好处之一是它能够提供更好的用户体验,因为它允许在不重新加载整个页面的情况下更新网页的某一部分。另外,AJAX还使得开发人员能够创建更复杂、更动态的Web应用程序,因为它们可以在后台与服务器进行通信,而不需要打断用户的浏览体验。在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于在不重新加载整个页面的情况下,从服务器获取数据并更新网页的某一部分。使用AJAX,你可以创建异步请求,从而提供更快的响应和更好的用户体验。_ajax 获取http数据
文章浏览阅读2.8k次。登录退出、修改密码、关机重启_字符终端
文章浏览阅读3.8k次,点赞3次,收藏51次。前段时间看到一位发烧友制作的超声波雷达扫描神器,用到了Arduino和Processing,可惜啊,我不会Processing更看不懂人家的程序,咋办呢?嘿嘿,所以我就换了个思路解决,因为我会一点Python啊,那就动手吧!在做这个案例之前先要搞明白一个问题:怎么将Arduino通过超声波检测到的距离反馈到Python端?这个嘛,我首先想到了串行通信接口。没错!就是串口。只要Arduino将数据发送给COM口,然后Python能从COM口读取到这个数据就可以啦!我先写了一个测试程序试了一下,OK!搞定_超声波扫描建模 python库
文章浏览阅读4.2k次。端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。2.使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。_凯撒加密
文章浏览阅读5.7k次。CIP报文解析常用到的几个字段:普通类型服务类型:[0x00], CIP对象:[0x02 Message Router], ioi segments:[XX]PCCC(带cmd和func)服务类型:[0x00], CIP对象:[0x02 Message Router], cmd:[0x101], fnc:[0x101]..._cip协议embedded_service_error
文章浏览阅读2.4k次,点赞9次,收藏13次。有时候我们在MFC项目开发过程中,需要用到一些微软已经提供的功能,如VC++使用EXCEL功能,这时候我们就能直接通过VS2019到如EXCEL.EXE方式,生成对应的OLE头文件,然后直接使用功能,那么,我们上篇文章中介绍了vs2017及以前的版本如何来添加。但由于微软某些方面考虑,这种方式已被放弃。从上图中可以看出,这一功能,在从vs2017版本15.9开始,后续版本已经删除了此功能。那么我们如果仍需要此功能,我们如何在新版本中添加呢。_vs添加mfc库
文章浏览阅读785次。用ac3编码,执行编码函数时报错入如下:[ac3 @ 0x7fed7800f200] frame_size (1536) was not respected for anon-last frame (avcodec_encode_audio2)用ac3编码时每次送入编码器的音频采样数应该是1536个采样,不然就会报上述错误。这个数字并非刻意固定,而是跟ac3内部的编码算法原理相关。全网找不到,国内音视频之路还有很长的路,音视频人一起加油吧~......_frame_size (1024) was not respected for a non-last frame
文章浏览阅读230次,点赞2次,收藏2次。创建Android应用程序一个项目里面可以有很多模块,而每一个模块就对应了一个应用程序。项目结构介绍_在安卓移动应用开发中要在活动类文件中声迷你一个复选框变量