升级到Kubernetes1.8.4的配置细节差异以及k8s几个不常见的坑
来源:互联网 发布:百鸟朝凤 知乎 编辑:程序博客网 时间:2024/06/14 19:23
kubernetes已经发布了1.8,今天需要在一个新机房部署k8s环境,于是决定尝试最新版本1.8,部署过程中故意和以前的部署步骤有些不同,故而出现了一些问题,并且发现k8s这有个新版本本身几个差异地方记录如下:
1.首先遇到的问题便是get-kub-binaries.sh执行之后,无法正常下载到新版的程序压缩包了,在1.7以前都不需要科学上网就可以下载的。我只好在设置好代理的服务器上执行它下载好,然后传到服务器上把client按照以前旧版本的路径规划解压到platform目录下,把server直接解压到server目录。
2.kubelet的启动参数中,--require-kubeconfig已经不用了,如果配置了会在日志中看到警告。并且,--experimental-bootstrap-kubeconfig已经去掉了experimental-这个单词。
3.新版本的kubelet启动时会严格判断swap是否开启,如果开启会报错,使用sfdisk -l查看一下哪个区分是swap分区,使用swapoff /dev/xvda2这样的命令把它关闭,或者直接swapoff -a关闭所有的swap分区,并且把/etc/fstab文件中指定swap那一行删除,使用swapoff 命令报错提示无法分配到内存。那是因为内存已经使用了太多,超过了物理内存,使用了swap,所以必需释放一些内存以便操作系统将swap中已经使用的转移到物理内存中,如果是docker启动了太多容器,systemctl restart docker就可以了。另外一种方式是在配置文件中指定--fail-swap-on为false,但是这样会影响k8s的调度决策算法。
4.在1.8.4增加了Node Authorization机制,需要在kubelet中的配置文件中--authorization-mode=增加一个Node
值,并在--admission-control=...,增加一个NodeRestriction,..
不然会报错。并删除 system:node
cluster role binding
5.dashboard从1.7.1升级到1.8.0时,移除了kubernetes-dashboard-init-amd64这个镜像,仅使用kubernetes-dashboard-amd64镜像就可以了,但是配置tls的密钥的路径却由绝对路径改为了相对路径,原来的- --tls-key-file=/certs/tls.key和 - --tls-cert-file=/certs/tls.crt要改为- --tls-key-file=tls.key和 - --tls-cert-file=tls.crt,否则会报一个错误open /certs//certs/tls.crt: no such file or directory,然后就失败了。
顺便记录一下我遇到的几个不常见的坑。
1.网络上的示例都是使用自签名的证书,我尝试了采用CA签名的证书,因为是通配符2级域名的,所以尝试了好多次都失败了,甚至ETCD集群本身使用这种CA机构签名的证书都不能建立起集群。由于对证收的检验机制还算不上完全掌握,所以暂时放弃。
2.如果在启动kubelet时,日志中提示No api server defined - no node status update will be sent.这很有可能是kubelet的配置文件或启动参数中忘记指定api-server或者参数写错了。
3.如果一个node已经发送了certificate请求,并且在master上已经approve了,但是查看csr的状态却发现只有approved,没有issued,这很可能是kube-manager-controller没有启动或者是无意停掉了。我因为这个事情就浪费了一上午的时间去排查,最后才发现这个原因。
4.在pod中使用nfs时,如果提示一个错误
09/volumes/kubernetes.io~nfs/nfs-data-storage
Output: Running scope as unit run-30478.scope.
mount: wrong fs type, bad option, bad superblock on 10.0.0.150:/data,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so.
那是因为pod所在的node没有安装nfs-utils,最好在每个node上都安装好nfs-utils
5.如果启动kubelet时报错failed to run Kubelet: cannot create certificate signing request: certificatesigningrequests.certificates.k8s.io is forbidden: User "kubelet-bootstrap" cannot create certificatesigningrequests,是由于在master上忘记创建
7.nginx-ingress代理k8s的dashboard的问题,如果我们有权限机构发放的证书,肯定希望访问k8s的dashboard时也使用这个证书,浏览器的地址栏是绿色的多酷啊。但是k8s的dashboard的官方示例中,证书是叫做dashboard.crt和dashboard.key,它的yaml文件中也是指定这两个文件名。如果ingress也使用通过这两个文件创建的那个secret,dashboard启动没有问题,ingress-controller会报错,error obtaining PEM from secret kube-system/kubernetes-dashboard-certs: no keypair or CA cert could be found in kube-system/kubernetes-dashboard-certs,其实并不是真的证书有问题,而是它默认寻找的是叫tls.crt和tls.key的证书,所以这个dashboard.crt它不能正确的识别。
8.当启用了nginx-ingress-controller的basic认证时,日志中出现错误 [crit] 1438#1438: *11994 crypt_r() failed (22: Invalid argument)。原来是由于在创建密码文件时使用了htpasswd命令中的-B选项(
9. traefik-ingress-controller它不支持ingress.kubernetes.io/ssl-passthrough这个annotation,写了也不起作用的。
持续更新....
- 升级到Kubernetes1.8.4的配置细节差异以及k8s几个不常见的坑
- PB7升级到PB12,不常见的不同点
- 几个不常见的关键字
- 小心!Ubuntu14.04 升级到16.04 的几个坑
- 升级到cocos2d-x 2.0.2后的API差异
- C++几个不常见的关键字
- 升级到Kubernetes1.6需要准备事项
- Apache2.2和2.4配置的几个差异
- 关于文件系统以前不知道的几个细节
- Python] Python函数参数中的*,** 以及不带*的差异!
- cuda+opencv的配置以及细节问题
- 建表时的几个细节
- JEECMS的几个细节
- olap的几个细节
- 多线程的几个细节
- servlet的几个细节
- 配置STRUTS2的几个常见错误1
- Tensorflow的CUDA升级,以及相关配置
- 如何用ChemDraw Prime 绘制任意弧线箭头
- Francisco Partners收购Comodo CA业务
- 高阶函数与与匿名函数
- 触发器调用Java接口程序(一)
- 微服务之Swagger
- 升级到Kubernetes1.8.4的配置细节差异以及k8s几个不常见的坑
- ubuntu14安装nVidia驱动和CUDA Toolkit的安装和调试
- WebService
- 关于ajax为什么要return true/false
- 顺序表实现之C语言(附加各种顺序表排序问题)
- 两个程序的爱情故事
- 游戏开发中常见的几种碰撞检测
- 51例程---led点阵
- 遇到的问题---MongoDB的java驱动的坑---启用副本集后id的update无效