我正在按照本教程进行服务发现http://jasonwilder.com/blog/2014/07/15/docker-service-discovery
简述:
我创建了一个运行在xyzd:4001的etcd主机
docker run -d --name etcd -p 4001:4001 -p 7001:7001 coreos/etcd
Run Code Online (Sandbox Code Playgroud)
在backend_serverip:8000和docker-register创建了一个运行容器的后端服务器
$ docker run -d -p 8000:8000 --name whoami -t jwilder/whoami
$ docker run --name docker-register -d -e HOST_IP=$(hostname --all-ip-addresses | awk '{print $1}') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register
Run Code Online (Sandbox Code Playgroud)
在backend2_serverip:8000和docker-register创建了另一个运行容器的后端服务器
$ docker run -d -p 8000:8000 --name whoami -t jwilder/whoami
$ docker run --name docker-register -d -e HOST_IP=$(hostname --all-ip-addresses | awk '{print $1}') -e ETCD_HOST=x.y.z.d:4001 -v /var/run/docker.sock:/var/run/docker.sock -t jwilder/docker-register
Run Code Online (Sandbox Code Playgroud)
创建了一个运行docker-discover和ubuntu映像的客户端
$ docker run -d --net …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用http://severalnines.com/blog/installing-kubernetes-cluster-minions-centos7-manage-pods-services上的指南在2个节点(centos 7.1)上设置kubernetes集群.但是,当我尝试像这样开始使用minion上的服务时:
for SERVICES in kube-proxy kubelet docker flanneld; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
-- Logs begin at Wed 2015-12-23 13:00:41 UTC, end at Wed 2015-12-23 16:03:54 UTC. --
Dec 23 16:03:47 sc-test2 systemd[1]: docker-storage-setup.service: main process exited, code=exited, status=1/FAILURE
Dec 23 16:03:47 sc-test2 systemd[1]: Failed to start Docker Storage Setup.
-- Subject: Unit docker-storage-setup.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker-storage-setup.service has failed.
--
-- …Run Code Online (Sandbox Code Playgroud) 我在我的ubuntu 16.04机器上安装了minikube并启动了一个集群,并附带一条消息
"Kubernetes is available at https://192.168.99.100:443"
接下来,我使用以下命令部署了nginx服务
> kubectl.sh run my-nginx --image=nginx --replicas=2 --port=80 --expose
> kubectl.sh get pods -o wide
NAME READY STATUS RESTARTS AGE NODE
my-nginx-2494149703-8jnh4 1/1 Running 0 13m 127.0.0.1
my-nginx-2494149703-q09be 1/1 Running 0 13m 127.0.0.1
> kubectl.sh get services -o wide
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes 10.0.0.1 <none> 443/TCP 14m <none>
my-nginx 10.0.0.83 <none> 80/TCP 13m run=my-nginx
> kubectl.sh get nodes -o wide
NAME STATUS AGE
127.0.0.1 Ready 16m
Run Code Online (Sandbox Code Playgroud)
问题:
1)节点127.0.0.1是我的本地开发机器吗?这让我最困惑.
2)以下理解是否正确:集群(节点,kubernetes API服务器)具有10.0.0.x中的内部IP地址,其对应的外部IP地址为192.168.99.x. …
尝试coreos/jetcd用于etcd从Java代码更新haproxy设置.
我想要实现的是:
我想通过前缀删除所有键,并将实际数据作为原子操作放入etcd中.
这就是我尝试使用etcd交易的原因.我的代码是:
Op.DeleteOp deleteOp = Op.delete(
fromString(prefix),
DeleteOption.newBuilder().withPrefix(fromString(prefix)).build()
);
Txn tx = kvClient.txn().Else(deleteOp);
newKvs.forEach((k,v) -> {
tx.Else(Op.put(fromString(k), fromString(v), DEFAULT));
});
try {
tx.commit().get();
} catch (InterruptedException | ExecutionException e) {
log.error("ETCD transaction failed", e);
throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)
使用ETCD v3 API(etcd v3.2.9).KVstore最初是空的,我想添加3条记录.
prefix价值是:
/proxy-service/hosts/example.com
Run Code Online (Sandbox Code Playgroud)
并且kvs是一张地图:
"/proxy-service/hosts/example.com/FTP/0" -> "localhost:10021"
"/proxy-service/hosts/example.com/HTTPS/0" -> "localhost:10443"
"/proxy-service/hosts/example.com/HTTP/0" -> "localhost:10080"
Run Code Online (Sandbox Code Playgroud)
异常发生在commit().get()以下根本原因:
Caused by: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: etcdserver: duplicate key given in txn request
at …Run Code Online (Sandbox Code Playgroud) 如何从etcd获取Kubernetes相关密钥?试图列出etcd中的键,但无法看到相关的键.还在哪里安装了etcdctl?
$ etcdctl
bash: etcdctl: command not found..
$ sudo netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 386/etcd
tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 386/etcd
$ curl -s http://localhost:2379/v2/keys | python -m json.tool
{
"action": "get",
"node": {
"dir": true
}
}
Run Code Online (Sandbox Code Playgroud)
通过使用kubeadm在CentOS 7上创建群集来安装Kubernetes 1.8.5 .当我查看etcd入门时,v2/keys看起来是终点.
我使用 kubectl 创建了 ConfigMap,我也可以使用以下命令查看它:
kubectl get cm
Run Code Online (Sandbox Code Playgroud)
我只是好奇 kubernetes 在集群中存储这些数据/信息的位置?它是否存储在等中?如果它存储在 etcd 中,我如何查看它?
它是否存储在任何文件/文件夹位置或其他任何地方?
我的意思是 kubernetes 在内部存储它的位置?
我正在处理 CRD 并创建自定义资源。我需要在自定义资源中保留有关我的应用程序的大量信息。根据官方文档,etcd 最多可处理 1.5MB 的请求。我遇到了类似的错误
“错误”:“请求实体太大:限制为 3145728”
我相信错误中指定的限制是 3MB。对此有何想法?这个问题有什么出路吗?
我正在浏览 Redis 和 Etcd 的基准文档页面。从基准数据来看,Etcd 与 Redis 一样高效。
https://redis.io/topics/benchmarks
https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/performance.md#benchmarks
示例 - 通过 100 个并行客户端设置 100k 个密钥,有效负载 - 256 字节
- on redis : 70K QPS
- on Etcd : 50k QPS
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么 Etcd 和 Redis 一样高效,还是我的理解有问题?
Etcd 的原因应该是比 Redis 慢很多:
这是来自Kubernetes 文档:
一致且高度可用的键值存储用作 Kubernetes 所有集群数据的后备存储。
Kubernetes 内部是否有单独的机制来使 ETCD 更可用?或者 ETCD 是否使用 Raft 的修改版本来实现这种超能力?
我正在学习 Kubernetes 教程,但无法运行第一个命令 ( minikube start --vm-driver=hyperkit)。我在 macOs Monterey 上使用 MacBook Pro Intel。由于 TLS 错误,我无法使其工作。
$ minikube start --vm-driver=hyperkit\n minikube v1.25.2 on Darwin 12.2.1\n Kubernetes 1.23.3 is now available. If you would like to upgrade, specify: --kubernetes-version=v1.23.3\n\xe2\x9c\xa8 Using the hyperkit driver based on existing profile\n Starting control plane node minikube in cluster minikube\n Restarting existing hyperkit VM for "minikube" ...\n Preparing Kubernetes v1.20.2 on Docker 20.10.3 ...\n\xe2\x9d\x8c Problems detected in etcd [592b8a58065e]:\n 2022-03-19 22:12:03.193985 I | embed: rejected …Run Code Online (Sandbox Code Playgroud)