Kubernetes 集群中节点的 INTERNAL-IP 问题

用自己 Kubernetes 学习笔记(一) - 初上手 一文中的方法用 Vagrant 虚拟机安装的 Kubernetes 集群,部署应用什么的都没问题,然而却在用

$ kubectl exec -it <pod-name> -- sh

试图登陆 docker 容器时出问题了,总是报错说

error: unable to upgrade connection: pod does not exist

kubectl 登陆不了 docker 容器,而且  kubectl logs 也会报一样的错,必须到具体的工作节点上用 docker exec 或 docker logs 才能访问到该节点上的容器信息。

这就不太对头,网上找了下原因,结果是因为节点间通信时选错了 IP 地址。

比如三个 Vagrant 虚拟机分别是

  1. k8s-master (172.28.128.14)
  2. k8s-node1 (172.28.128.10)
  3. k8s-node2 (172.28.128.11)

在 k8s-master 中初始集群时用的命令也是指定的 172.28.128.14 IP 地址 阅读全文 >>

Java 普通线程池与 ForkJoinPool 的效果对比

Java 多线程编程常用的一个接口是 ExecutorService, 其实就一个线程池的接口,一般由两种方式创建线程池,一为 Executors 的工厂方法,二则创建 ForkJoinPool 实例,当然也有直接使用 ThreadPoolExecutor 的。

关于什么时候用 ForkJoinPool 或普通的线程池(如 Executors.newFixedThreadPool(2) 或 new ThreadPoolExecutor(...)) 不过多的述说。如果要运用到 ForkJoinTask 的话就要用 ForkJoinPool, 它是 Java7 新引入的线程池类型。

关于 Java7 的 fork-join 框架可参考很多年前的一篇 Java 的 fork-join 框架实例备忘。ForkJoinPool 的一个典型特征是能够进行 Work stealing。它也是 Akka actor 效率高效的一个有力保证。

本文只能某一种情形下在选择普通线程池与 ForkJoinPool 的区别,直接说吧,普通线程更容易造成死锁,而 ForkJoinPool 却能应对相同的状况。 阅读全文 >>