我想使用docker-docker设置与父Docker容器中的子docker容器建立联系.
假设我正在尝试连接到一个简单的Apache httpd服务器.当我在主机上运行httpd容器时,一切正常:
asnyder:~$ docker run -d -p 8080:80 httpd:alpine
asnyder:~$ curl localhost:8080
<html><body><h1>It works!</h1></body></html>
Run Code Online (Sandbox Code Playgroud)
但是当我从Docker-in-docker设置中执行相同操作时,我收到Connection refused错误:
asnyder:~$ docker run -d --name mydind --privileged docker:dind
asnyder:~$ docker run -it --link mydind:docker docker:latest sh
/ # docker run -d -p 8080:80 httpd:alpine
/ # curl localhost:8080
curl: (7) Failed to connect to localhost port 8080: Connection refused
Run Code Online (Sandbox Code Playgroud)
我没有运气就尝试过几次改装.指定0.0.0.0界面:
asnyder:~$ docker run -d --name mydind --privileged docker:dind
asnyder:~$ docker run -it --link mydind:docker docker:latest sh
/ # docker …Run Code Online (Sandbox Code Playgroud) 我正在为 VerticalScaler CRD 编写一个 Kubernetes 控制器,它可以垂直扩展集群中的 Deployment。我的规范引用了集群中现有的 Deployment 对象。如果引用的部署被修改或删除,我想将 VerticalScaler 的协调请求排入队列。
// VerticalScalerSpec defines the desired state of VerticalScaler.
type VerticalScalerSpec struct {
// Name of the Deployment object which will be auto-scaled.
DeploymentName string `json:"deploymentName"`
}
Run Code Online (Sandbox Code Playgroud)
当资源不属于控制器并且该资源不持有对其资源由控制器管理的对象的引用时,是否有一种好方法来监视该资源?
我认为这应该在控制器的 Kubebuilder 标准SetupWithManager函数中进行配置,尽管手表可能可以在其他地方设置。
// SetupWithManager sets up the controller with the Manager.
func (r *VerticalScalerReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&v1beta1.VerticalScaler{}).
Complete(r)
}
Run Code Online (Sandbox Code Playgroud)
我一直在controller-runtime/pkg/builder和 Kubebuilder 文档中寻找一种好的方法。我发现的最接近的例子是关于手表的 kubebuilder-v1 文档中的“观看任意资源”部分:
控制器可以监视任意资源并将它们映射到控制器管理的资源的键。控制器甚至可以将一个事件映射到多个键,从而触发每个键的协调。
示例:为了响应集群扩展事件(例如节点的删除或添加),控制器将监视节点并将监视事件映射到控制器管理的对象的键。
我的挑战是如何将部署映射到依赖的 VerticalScaler,因为部署上不存在此信息。我可以在 VerticalScaler …