本篇博客记录了在使用 Kubernetes 的过程中常见的问题及解决方法。
1、使用 kubectl 命令时,要求输入用户名和密码
解决:删除 ~/.kube 目录下的 config 文件。
2、kubernetes 禁用 Swap 的原因
当前的 QOS 策略都是假定主机不启用内存 Swap。如果主机启用了 Swap,那么 QOS 策略可能会失效。
例如,两个 Pod 都刚好达到了内存限制上限,由于内存 Swap 机制,它们还可以继续申请使用更多内存,如果 Swap 空间不足,那么最终这两个 Pod 中的进程可能会被杀掉。
目前 Kubernetes 和 Docker 尚不支持内存 Swap 空间的隔离机制。
3、在 node
节点上使用 kubectl
命令时,报错如下:
|
|
由提示可知,kubectl找不到master节点,所以,需要设置参数,让它找到master。
解决:
1)在node节点的/etc/profile文件中加入如下环境变量:
|
|
然后执行 source /etc/profile
或 . /etc/profile
命令使配置生效。
192.168.91.128为kubernetes集群master节点的IP地址。
2)在执行kubectl命令时,在命令中指定master的IP地址,如下所示:
|
|
3)在 ~/.kube/config 中配置 kubectl 访问 API server 的地址
|
|
4)在 /etc/kubernetes/admin.conf 中配置 kubectl 访问 API server 的地址
4、删除 pod 后,pod 一直处于 Terminating 状态,可以使用如下方法删除
1)强制删除该 pod
|
|
2)删除该 pod 所在的 namespace
|
|
5、删除 namespace 后,提示删除成功,但是却一直处于 Terminating 状态, 强制删除该 namespace 下的所有 pod,然后该 namespace 将会被系统自动删除。
6、应用部署完毕后,状态全部正常,但是访问却 504,
注意,不要使虚拟机的 IP 地址和 calico 的子网 IP 地址一样。如果有冲突,需要进行修改 calico.yaml 中环境变量 CALICO_IPV4POOL_CIDR 的值,修改为新的子网地址,然后删除原有的 calico,ingress 和 kube-dns,依次重新创建 calico,ingress,kube-dns
7、应用开发完毕后,本地启动没有问题,可以正常运行,但部署到 kubernetes 上后,web 服务总是启动不起来,进入 pod 中使用 netstat 查看后,发现有个需要连接的 IP 地址的状态为:syn_wait
解决:当下游服务连接不通时,往往会导致 web 服务器启动不起来。经过运维同事打开安全组,服务终于正常运行了。